import React from 'react'; import PropTypes from 'prop-types'; import ImmutablePropTypes from 'react-immutable-proptypes'; import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; const messages = defineMessages({ layout_auto: { id: 'layout.auto', defaultMessage: 'Auto' }, layout_desktop: { id: 'layout.desktop', defaultMessage: 'Desktop' }, layout_mobile: { id: 'layout.single', defaultMessage: 'Mobile' }, }); @injectIntl class SettingsItem extends React.PureComponent { static propTypes = { settings: ImmutablePropTypes.map.isRequired, item: PropTypes.array.isRequired, id: PropTypes.string.isRequired, options: PropTypes.arrayOf(PropTypes.shape({ value: PropTypes.string.isRequired, message: PropTypes.object.isRequired, })), dependsOn: PropTypes.array, dependsOnNot: PropTypes.array, children: PropTypes.element.isRequired, onChange: PropTypes.func.isRequired, intl: PropTypes.object.isRequired, }; handleChange = (e) => { const { item, onChange } = this.props; onChange(item, e); } render () { const { settings, item, id, options, children, dependsOn, dependsOnNot, intl } = this.props; let enabled = true; if (dependsOn) { for (let i = 0; i < dependsOn.length; i++) { enabled = enabled && settings.getIn(dependsOn[i]); } } if (dependsOnNot) { for (let i = 0; i < dependsOnNot.length; i++) { enabled = enabled && !settings.getIn(dependsOnNot[i]); } } if (options && options.length > 0) { const currentValue = settings.getIn(item); const optionElems = options && options.length > 0 && options.map((opt) => ( )); return ( ); } else { return ( ); } } } export default class SettingsModal extends React.PureComponent { static propTypes = { settings: ImmutablePropTypes.map.isRequired, toggleSetting: PropTypes.func.isRequired, changeSetting: PropTypes.func.isRequired, onClose: PropTypes.func.isRequired, }; state = { currentIndex: 0, }; General = () => { return (

); } CollapsedStatuses = () => { return (

); } Media = () => { return (

); } navigateTo = (e) => this.setState({ currentIndex: +e.currentTarget.getAttribute('data-mastodon-navigation_index') }); render () { const { General, CollapsedStatuses, Media, navigateTo } = this; const { onClose } = this.props; const { currentIndex } = this.state; return (
{ [ , , , ][currentIndex] || }
); } }