diff --git a/app/javascript/flavours/glitch/features/drawer/header/index.js b/app/javascript/flavours/glitch/features/drawer/header/index.js
index 435538de4..7fefd32c9 100644
--- a/app/javascript/flavours/glitch/features/drawer/header/index.js
+++ b/app/javascript/flavours/glitch/features/drawer/header/index.js
@@ -47,6 +47,7 @@ const messages = defineMessages({
export default function DrawerHeader ({
columns,
unreadNotifications,
+ showNotificationsBadge,
intl,
onSettingsClick,
}) {
@@ -81,7 +82,7 @@ export default function DrawerHeader ({
>
- { unreadNotifications > 0 && }
+ { showNotificationsBadge && unreadNotifications > 0 && }
))}
@@ -119,6 +120,7 @@ export default function DrawerHeader ({
DrawerHeader.propTypes = {
columns: ImmutablePropTypes.list,
unreadNotifications: PropTypes.number,
+ showNotificationsBadge: PropTypes.bool,
intl: PropTypes.object,
onSettingsClick: PropTypes.func,
};
diff --git a/app/javascript/flavours/glitch/features/drawer/index.js b/app/javascript/flavours/glitch/features/drawer/index.js
index e8d9c86cb..72b36fcae 100644
--- a/app/javascript/flavours/glitch/features/drawer/index.js
+++ b/app/javascript/flavours/glitch/features/drawer/index.js
@@ -35,6 +35,7 @@ const mapStateToProps = state => ({
searchValue: state.getIn(['search', 'value']),
submitted: state.getIn(['search', 'submitted']),
unreadNotifications: state.getIn(['notifications', 'unread']),
+ showNotificationsBadge: state.getIn(['local_settings', 'notifications', 'tab_badge']),
});
// Dispatch mapping.
@@ -89,6 +90,7 @@ class Drawer extends React.Component {
submitted,
isSearchPage,
unreadNotifications,
+ showNotificationsBadge,
} = this.props;
const computedClass = classNames('drawer', `mbstobon-${elefriend}`);
@@ -99,6 +101,7 @@ class Drawer extends React.Component {
@@ -143,6 +146,7 @@ Drawer.propTypes = {
searchValue: PropTypes.string,
submitted: PropTypes.bool,
unreadNotifications: PropTypes.number,
+ showNotificationsBadge: PropTypes.bool,
// Dispatch props.
onChange: PropTypes.func,
diff --git a/app/javascript/flavours/glitch/features/local_settings/page/index.js b/app/javascript/flavours/glitch/features/local_settings/page/index.js
index 9f300e7e9..2e14c9dd5 100644
--- a/app/javascript/flavours/glitch/features/local_settings/page/index.js
+++ b/app/javascript/flavours/glitch/features/local_settings/page/index.js
@@ -42,6 +42,25 @@ export default class LocalSettingsPage extends React.PureComponent {
>
+
(
-
({
unreadNotifications: state.getIn(['notifications', 'unread']),
+ showBadge: state.getIn(['local_settings', 'notifications', 'tab_badge']),
});
@connect(mapStateToProps)
class NotificationsIcon extends React.PureComponent {
static propTypes = {
unreadNotifications: PropTypes.number,
+ showBadge: PropTypes.bool,
};
render() {
- const { unreadNotifications } = this.props;
+ const { unreadNotifications, showBadge } = this.props;
return (
- { unreadNotifications > 0 && }
+ { showBadge && unreadNotifications > 0 && }
);
}
diff --git a/app/javascript/flavours/glitch/features/ui/index.js b/app/javascript/flavours/glitch/features/ui/index.js
index 3dd894383..064804b79 100644
--- a/app/javascript/flavours/glitch/features/ui/index.js
+++ b/app/javascript/flavours/glitch/features/ui/index.js
@@ -66,6 +66,7 @@ const mapStateToProps = state => ({
navbarUnder: state.getIn(['local_settings', 'navbar_under']),
dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,
unreadNotifications: state.getIn(['notifications', 'unread']),
+ showFaviconBadge: state.getIn(['local_settings', 'notifications', 'favicon_badge']),
});
const keyMap = {
@@ -118,6 +119,7 @@ export default class UI extends React.Component {
intl: PropTypes.object.isRequired,
dropdownMenuIsOpen: PropTypes.bool,
unreadNotifications: PropTypes.number,
+ showFaviconBadge: PropTypes.bool,
};
state = {
@@ -272,9 +274,10 @@ export default class UI extends React.Component {
if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {
this.columnsAreaNode.handleChildrenContentChange();
}
- if (this.props.unreadNotifications != prevProps.unreadNotifications) {
+ if (this.props.unreadNotifications != prevProps.unreadNotifications ||
+ this.props.showFaviconBadge != prevProps.showFaviconBadge) {
if (this.favicon) {
- this.favicon.badge(this.props.unreadNotifications);
+ this.favicon.badge(this.props.showFaviconBadge ? this.props.unreadNotifications : 0);
}
}
}
diff --git a/app/javascript/flavours/glitch/reducers/local_settings.js b/app/javascript/flavours/glitch/reducers/local_settings.js
index 063ae3943..f5f7220b9 100644
--- a/app/javascript/flavours/glitch/reducers/local_settings.js
+++ b/app/javascript/flavours/glitch/reducers/local_settings.js
@@ -37,6 +37,10 @@ const initialState = ImmutableMap({
letterbox : true,
fullwidth : true,
}),
+ notifications : ImmutableMap({
+ favicon_badge : false,
+ tab_badge : true,
+ }),
});
const hydrate = (state, localSettings) => state.mergeDeep(localSettings);