import {defineMessages, FormattedMessage, intlShape, injectIntl} from 'react-intl'; import PropTypes from 'prop-types'; import React from 'react'; import classNames from 'classnames'; import bindAll from 'lodash.bindall'; import Box from '../box/box.jsx'; import Modal from '../../containers/modal.jsx'; import FancyCheckbox from '../tw-fancy-checkbox/checkbox.jsx'; import Input from '../forms/input.jsx'; import BufferedInputHOC from '../forms/buffered-input-hoc.jsx'; import DocumentationLink from '../tw-documentation-link/documentation-link.jsx'; import styles from './settings-modal.css'; import helpIcon from './help-icon.svg'; import {APP_NAME} from '../../lib/brand.js'; /* eslint-disable react/no-multi-comp */ const BufferedInput = BufferedInputHOC(Input); const messages = defineMessages({ title: { defaultMessage: 'Advanced Settings', description: 'Title of settings modal', id: 'tw.settingsModal.title' }, help: { defaultMessage: 'Click for help', description: 'Hover text of help icon in settings', id: 'tw.settingsModal.help' } }); const LearnMore = props => ( {' '} ); class UnwrappedSetting extends React.Component { constructor (props) { super(props); bindAll(this, [ 'handleClickHelp' ]); this.state = { helpVisible: false }; } componentDidUpdate (prevProps) { if (this.props.active && !prevProps.active) { // eslint-disable-next-line react/no-did-update-set-state this.setState({ helpVisible: true }); } } handleClickHelp () { this.setState(prevState => ({ helpVisible: !prevState.helpVisible })); } render () { return (
{this.props.primary}
{this.state.helpVisible && (
{this.props.help} {this.props.slug && }
)} {this.props.secondary}
); } } UnwrappedSetting.propTypes = { intl: intlShape, active: PropTypes.bool, help: PropTypes.node, primary: PropTypes.node, secondary: PropTypes.node, slug: PropTypes.string }; const Setting = injectIntl(UnwrappedSetting); const BooleanSetting = ({value, onChange, label, ...props}) => ( {label} } /> ); BooleanSetting.propTypes = { onChange: PropTypes.func.isRequired, value: PropTypes.bool.isRequired, label: PropTypes.node.isRequired }; const HighQualityPen = props => ( } help={ } slug="high-quality-pen" /> ); const CustomFPS = props => ( } help={ ) }} /> } slug="custom-fps" /> ); CustomFPS.propTypes = { framerate: PropTypes.number, onChange: PropTypes.func, onCustomizeFramerate: PropTypes.func }; const Interpolation = props => ( } help={ } slug="interpolation" /> ); const InfiniteClones = props => ( } help={ } slug="infinite-clones" /> ); const RemoveFencing = props => ( } help={ } slug="remove-fencing" /> ); const RemoveMiscLimits = props => ( } help={ } slug="remove-misc-limits" /> ); const WarpTimer = props => ( } help={ } slug="warp-timer" /> ); const DisableCompiler = props => ( } help={ } slug="disable-compiler" /> ); const CustomStageSize = ({ customStageSizeEnabled, stageWidth, onStageWidthChange, stageHeight, onStageHeightChange }) => ( {'×'} )} secondary={ (stageWidth >= 1000 || stageHeight >= 1000) && (
) } help={( )} slug="custom-stage-size" /> ); CustomStageSize.propTypes = { customStageSizeEnabled: PropTypes.bool, stageWidth: PropTypes.number, onStageWidthChange: PropTypes.func, stageHeight: PropTypes.number, onStageHeightChange: PropTypes.func }; const StoreProjectOptions = ({onStoreProjectOptions}) => (

); StoreProjectOptions.propTypes = { onStoreProjectOptions: PropTypes.func }; const Header = props => (
{props.children}
); Header.propTypes = { children: PropTypes.node }; const SettingsModalComponent = props => (
{!props.isEmbedded && ( )} {!props.isEmbedded && ( )}
); SettingsModalComponent.propTypes = { intl: intlShape, onClose: PropTypes.func, isEmbedded: PropTypes.bool, framerate: PropTypes.number, onFramerateChange: PropTypes.func, onCustomizeFramerate: PropTypes.func, highQualityPen: PropTypes.bool, onHighQualityPenChange: PropTypes.func, interpolation: PropTypes.bool, onInterpolationChange: PropTypes.func, infiniteClones: PropTypes.bool, onInfiniteClonesChange: PropTypes.func, removeFencing: PropTypes.bool, onRemoveFencingChange: PropTypes.func, removeLimits: PropTypes.bool, onRemoveLimitsChange: PropTypes.func, warpTimer: PropTypes.bool, onWarpTimerChange: PropTypes.func, disableCompiler: PropTypes.bool, onDisableCompilerChange: PropTypes.func }; export default injectIntl(SettingsModalComponent);