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 => (
);
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);