diff --git a/app/soapbox/features/notifications/components/setting_toggle.js b/app/soapbox/features/notifications/components/setting_toggle.js
index b9adbedd5..145e2b03a 100644
--- a/app/soapbox/features/notifications/components/setting_toggle.js
+++ b/app/soapbox/features/notifications/components/setting_toggle.js
@@ -9,8 +9,14 @@ export default class SettingToggle extends React.PureComponent {
prefix: PropTypes.string,
settings: ImmutablePropTypes.map.isRequired,
settingPath: PropTypes.array.isRequired,
- label: PropTypes.node.isRequired,
+ label: PropTypes.node,
onChange: PropTypes.func.isRequired,
+ icons: PropTypes.oneOfType([
+ PropTypes.bool,
+ PropTypes.object,
+ ]),
+ condition: PropTypes.string,
+ ariaLabel: PropTypes.string,
}
onChange = ({ target }) => {
@@ -18,13 +24,13 @@ export default class SettingToggle extends React.PureComponent {
}
render() {
- const { prefix, settings, settingPath, label } = this.props;
+ const { prefix, settings, settingPath, label, icons, condition, ariaLabel } = this.props;
const id = ['setting-toggle', prefix, ...settingPath].filter(Boolean).join('-');
return (
-
-
-
+
+
+ {label && ()}
);
}
diff --git a/app/soapbox/features/ui/components/tabs_bar.js b/app/soapbox/features/ui/components/tabs_bar.js
index 0801bb7bd..8442c5cb1 100644
--- a/app/soapbox/features/ui/components/tabs_bar.js
+++ b/app/soapbox/features/ui/components/tabs_bar.js
@@ -13,6 +13,7 @@ import { openModal } from '../../../actions/modal';
import { openSidebar } from '../../../actions/sidebar';
import Icon from '../../../components/icon';
import { changeSetting, getSettings } from 'soapbox/actions/settings';
+import SettingToggle from '../../notifications/components/setting_toggle';
const messages = defineMessages({
post: { id: 'tabs_bar.post', defaultMessage: 'Post' },
@@ -31,7 +32,7 @@ class TabsBar extends React.PureComponent {
toggleTheme: PropTypes.func,
logo: PropTypes.string,
account: ImmutablePropTypes.map,
- themeMode: PropTypes.string,
+ settings: ImmutablePropTypes.map.isRequired,
}
state = {
@@ -83,18 +84,12 @@ class TabsBar extends React.PureComponent {
}));
}
- getNewThemeValue() {
- if (this.props.themeMode === 'light') return 'dark';
-
- return 'light';
- }
-
handleToggleTheme = () => {
- this.props.toggleTheme(this.getNewThemeValue());
+ this.props.toggleTheme(this.props.settings.get('themeMode') === 'light' ? 'dark' : 'light');
}
render() {
- const { account, onOpenCompose, onOpenSidebar, intl, themeMode } = this.props;
+ const { account, onOpenCompose, onOpenSidebar, intl, settings } = this.props;
const { collapsed } = this.state;
const classes = classNames('tabs-bar', {
@@ -113,9 +108,7 @@ class TabsBar extends React.PureComponent {
{ account &&
-
+
, unchecked:
}} ariaLabel={settings.get('themeMode') === 'light' ? intl.formatMessage(messages.switchToDark) : intl.formatMessage(messages.switchToLight)} />
@@ -151,7 +144,7 @@ const mapStateToProps = state => {
return {
account: state.getIn(['accounts', me]),
logo: state.getIn(['soapbox', 'logo']),
- themeMode: settings.get('themeMode'),
+ settings: settings,
};
};
diff --git a/app/styles/components/tabs-bar.scss b/app/styles/components/tabs-bar.scss
index 91a6c678a..d2519f12b 100644
--- a/app/styles/components/tabs-bar.scss
+++ b/app/styles/components/tabs-bar.scss
@@ -149,6 +149,25 @@
display: flex;
}
+ .setting-toggle {
+ margin-top: 5px;
+ margin-left: 10px;
+
+ .react-toggle-track-check,
+ .react-toggle-track-x {
+ height: 15px;
+ color: #fff;
+ }
+
+ .react-toggle--checked {
+ .react-toggle-track {
+ background-color: var(--accent-color);
+ }
+ &:hover:not(.react-toggle--disabled) .react-toggle-track {
+ background-color: var(--accent-color--bright);
+ }
+ }
+ }
}
.tabs-bar__link {