diff --git a/app/soapbox/components/sidebar_menu.js b/app/soapbox/components/sidebar_menu.js index ea9f753d4..f0e407033 100644 --- a/app/soapbox/components/sidebar_menu.js +++ b/app/soapbox/components/sidebar_menu.js @@ -15,7 +15,7 @@ import { shortNumberFormat } from '../utils/numbers'; import { isStaff } from '../utils/accounts'; import { makeGetAccount } from '../selectors'; import { logOut } from 'soapbox/actions/auth'; -import ThemeToggle from '../features/ui/components/theme_toggle'; +import ThemeToggle from '../features/ui/components/theme_toggle_container'; const messages = defineMessages({ followers: { id: 'account.followers', defaultMessage: 'Followers' }, diff --git a/app/soapbox/features/soapbox_config/index.js b/app/soapbox/features/soapbox_config/index.js index 6038f9961..2dd444279 100644 --- a/app/soapbox/features/soapbox_config/index.js +++ b/app/soapbox/features/soapbox_config/index.js @@ -24,6 +24,8 @@ import { isMobile } from 'soapbox/is_mobile'; import detectPassiveEvents from 'detect-passive-events'; import Accordion from '../ui/components/accordion'; import SitePreview from './components/site_preview'; +import ThemeToggle from 'soapbox/features/ui/components/theme_toggle'; +import { defaultSettings } from 'soapbox/actions/settings'; const messages = defineMessages({ heading: { id: 'column.soapbox_config', defaultMessage: 'Soapbox config' }, @@ -186,6 +188,7 @@ class SoapboxConfig extends ImmutablePureComponent { render() { const { intl } = this.props; const soapbox = this.getSoapboxConfig(); + const settings = defaultSettings.mergeDeep(soapbox.get('defaultSettings')); return ( @@ -201,6 +204,10 @@ class SoapboxConfig extends ImmutablePureComponent { value={soapbox.get('brandColor')} onChange={this.handleChange(['brandColor'], (e) => e.hex)} /> + value)} + settings={settings} + />
{ - return { - settings: getSettings(state), - }; -}; - -const mapDispatchToProps = (dispatch) => ({ - toggleTheme(setting) { - dispatch(changeSetting(['themeMode'], setting)); - }, -}); - -export default @connect(mapStateToProps, mapDispatchToProps) -@injectIntl +export default @injectIntl class ThemeToggle extends React.PureComponent { static propTypes = { intl: PropTypes.object.isRequired, settings: ImmutablePropTypes.map.isRequired, - toggleTheme: PropTypes.func, + onToggle: PropTypes.func.isRequired, showLabel: PropTypes.bool, }; handleToggleTheme = () => { - this.props.toggleTheme(this.props.settings.get('themeMode') === 'light' ? 'dark' : 'light'); + this.props.onToggle(this.props.settings.get('themeMode') === 'light' ? 'dark' : 'light'); } render() { diff --git a/app/soapbox/features/ui/components/theme_toggle_container.js b/app/soapbox/features/ui/components/theme_toggle_container.js new file mode 100644 index 000000000..4a2cad1f7 --- /dev/null +++ b/app/soapbox/features/ui/components/theme_toggle_container.js @@ -0,0 +1,17 @@ +import { connect } from 'react-redux'; +import { changeSetting, getSettings } from 'soapbox/actions/settings'; +import ThemeToggle from './theme_toggle'; + +const mapStateToProps = state => { + return { + settings: getSettings(state), + }; +}; + +const mapDispatchToProps = (dispatch) => ({ + onToggle(setting) { + dispatch(changeSetting(['themeMode'], setting)); + }, +}); + +export default connect(mapStateToProps, mapDispatchToProps)(ThemeToggle);