Skip to content

Commit 893a9f6

Browse files
committed
feat(App): Add option to show/hide notification badges for muted services (@maximiliancsuk)
1 parent 3045b47 commit 893a9f6

13 files changed

Lines changed: 103 additions & 18 deletions

File tree

src/components/services/tabs/TabBarSortableList.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ class TabBarSortableList extends Component {
1717
deleteService: PropTypes.func.isRequired,
1818
disableService: PropTypes.func.isRequired,
1919
enableService: PropTypes.func.isRequired,
20+
showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
21+
showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
2022
}
2123

2224
render() {
@@ -30,6 +32,8 @@ class TabBarSortableList extends Component {
3032
disableService,
3133
enableService,
3234
openSettings,
35+
showMessageBadgeWhenMutedSetting,
36+
showMessageBadgesEvenWhenMuted,
3337
} = this.props;
3438

3539
return (
@@ -50,6 +54,8 @@ class TabBarSortableList extends Component {
5054
disableService={() => disableService({ serviceId: service.id })}
5155
enableService={() => enableService({ serviceId: service.id })}
5256
openSettings={openSettings}
57+
showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting}
58+
showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted}
5359
/>
5460
))}
5561
{/* <li>

src/components/services/tabs/TabItem.js

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ class TabItem extends Component {
6363
deleteService: PropTypes.func.isRequired,
6464
disableService: PropTypes.func.isRequired,
6565
enableService: PropTypes.func.isRequired,
66+
showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
67+
showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
6668
};
6769

6870
static contextTypes = {
@@ -81,6 +83,8 @@ class TabItem extends Component {
8183
disableService,
8284
enableService,
8385
openSettings,
86+
showMessageBadgeWhenMutedSetting,
87+
showMessageBadgesEvenWhenMuted,
8488
} = this.props;
8589
const { intl } = this.context;
8690

@@ -121,6 +125,26 @@ class TabItem extends Component {
121125
}];
122126
const menu = Menu.buildFromTemplate(menuTemplate);
123127

128+
let notificationBadge = null;
129+
if ((showMessageBadgeWhenMutedSetting || service.isNotificationEnabled) && showMessageBadgesEvenWhenMuted) {
130+
notificationBadge = (
131+
<span>
132+
{service.unreadDirectMessageCount > 0 && (
133+
<span className="tab-item__message-count">
134+
{service.unreadDirectMessageCount}
135+
</span>
136+
)}
137+
{service.unreadIndirectMessageCount > 0
138+
&& service.unreadDirectMessageCount === 0
139+
&& service.isIndirectMessageBadgeEnabled && (
140+
<span className="tab-item__message-count is-indirect">
141+
142+
</span>
143+
)}
144+
</span>
145+
);
146+
}
147+
124148
return (
125149
<li
126150
className={classnames({
@@ -138,18 +162,7 @@ class TabItem extends Component {
138162
className="tab-item__icon"
139163
alt=""
140164
/>
141-
{service.unreadDirectMessageCount > 0 && (
142-
<span className="tab-item__message-count">
143-
{service.unreadDirectMessageCount}
144-
</span>
145-
)}
146-
{service.unreadIndirectMessageCount > 0
147-
&& service.unreadDirectMessageCount === 0
148-
&& service.isIndirectMessageBadgeEnabled && (
149-
<span className="tab-item__message-count is-indirect">
150-
151-
</span>
152-
)}
165+
{notificationBadge}
153166
</li>
154167
);
155168
}

src/components/services/tabs/Tabbar.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ export default class TabBar extends Component {
1818
toggleAudio: PropTypes.func.isRequired,
1919
deleteService: PropTypes.func.isRequired,
2020
updateService: PropTypes.func.isRequired,
21+
showMessageBadgeWhenMutedSetting: PropTypes.bool.isRequired,
22+
showMessageBadgesEvenWhenMuted: PropTypes.bool.isRequired,
2123
}
2224

2325
onSortEnd = ({ oldIndex, newIndex }) => {
@@ -64,6 +66,8 @@ export default class TabBar extends Component {
6466
toggleNotifications,
6567
toggleAudio,
6668
deleteService,
69+
showMessageBadgeWhenMutedSetting,
70+
showMessageBadgesEvenWhenMuted,
6771
} = this.props;
6872

6973
return (
@@ -85,6 +89,8 @@ export default class TabBar extends Component {
8589
axis="y"
8690
lockAxis="y"
8791
helperClass="is-reordering"
92+
showMessageBadgeWhenMutedSetting={showMessageBadgeWhenMutedSetting}
93+
showMessageBadgesEvenWhenMuted={showMessageBadgesEvenWhenMuted}
8894
/>
8995
</div>
9096
);

src/components/settings/settings/EditSettingsForm.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ export default class EditSettingsForm extends Component {
142142
{/* Appearance */}
143143
<h2 id="apperance">{intl.formatMessage(messages.headlineAppearance)}</h2>
144144
<Toggle field={form.$('showDisabledServices')} />
145+
<Toggle field={form.$('showMessageBadgeWhenMuted')} />
145146

146147
{/* Language */}
147148
<h2 id="language">{intl.formatMessage(messages.headlineLanguage)}</h2>

src/config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ export const DEFAULT_APP_SETTINGS = {
1111
enableSystemTray: true,
1212
minimizeToSystemTray: false,
1313
showDisabledServices: true,
14+
showMessageBadgeWhenMuted: true,
1415
enableSpellchecking: true,
1516
// spellcheckingLanguage: 'auto',
1617
locale: 'en-US',

src/containers/layout/AppLayoutContainer.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ export default class AppLayoutContainer extends Component {
8787
deleteService={deleteService}
8888
updateService={updateService}
8989
toggleMuteApp={toggleMuteApp}
90+
showMessageBadgeWhenMutedSetting={settings.all.showMessageBadgeWhenMuted}
91+
showMessageBadgesEvenWhenMuted={ui.showMessageBadgesEvenWhenMuted}
9092
/>
9193
);
9294

src/containers/settings/EditSettingsScreen.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ const messages = defineMessages({
4343
id: 'settings.app.form.showDisabledServices',
4444
defaultMessage: '!!!Display disabled services tabs',
4545
},
46+
showMessageBadgeWhenMuted: {
47+
id: 'settings.app.form.showMessagesBadgesWhenMuted',
48+
defaultMessage: '!!!Show unread message badge when notifications are disabled',
49+
},
4650
enableSpellchecking: {
4751
id: 'settings.app.form.enableSpellchecking',
4852
defaultMessage: '!!!Enable spell checking',
@@ -85,6 +89,7 @@ export default class EditSettingsScreen extends Component {
8589
enableSystemTray: settingsData.enableSystemTray,
8690
minimizeToSystemTray: settingsData.minimizeToSystemTray,
8791
showDisabledServices: settingsData.showDisabledServices,
92+
showMessageBadgeWhenMuted: settingsData.showMessageBadgeWhenMuted,
8893
enableSpellchecking: settingsData.enableSpellchecking,
8994
// spellcheckingLanguage: settingsData.spellcheckingLanguage,
9095
locale: settingsData.locale,
@@ -154,6 +159,11 @@ export default class EditSettingsScreen extends Component {
154159
value: settings.all.showDisabledServices,
155160
default: DEFAULT_APP_SETTINGS.showDisabledServices,
156161
},
162+
showMessageBadgeWhenMuted: {
163+
label: intl.formatMessage(messages.showMessageBadgeWhenMuted),
164+
value: settings.all.showMessageBadgeWhenMuted,
165+
default: DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted,
166+
},
157167
enableSpellchecking: {
158168
label: intl.formatMessage(messages.enableSpellchecking),
159169
value: settings.all.enableSpellchecking,

src/i18n/locales/en-US.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@
148148
"settings.app.form.language": "Language",
149149
"settings.app.form.enableSpellchecking": "Enable spell checking",
150150
"settings.app.form.showDisabledServices": "Display disabled services tabs",
151+
"settings.app.form.showMessagesBadgesWhenMuted": "Show unread message badge when notifications are disabled",
151152
"settings.app.form.beta": "Include beta versions",
152153
"settings.app.translationHelp": "Help us to translate Franz into your language.",
153154
"settings.app.currentVersion": "Current version:",

src/models/Settings.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export default class Settings {
88
@observable enableSystemTray = DEFAULT_APP_SETTINGS.enableSystemTray;
99
@observable minimizeToSystemTray = DEFAULT_APP_SETTINGS.minimizeToSystemTray;
1010
@observable showDisabledServices = DEFAULT_APP_SETTINGS.showDisabledServices;
11+
@observable showMessageBadgeWhenMuted = DEFAULT_APP_SETTINGS.showMessageBadgeWhenMuted;
1112
@observable enableSpellchecking = DEFAULT_APP_SETTINGS.enableSpellchecking;
1213
@observable locale = DEFAULT_APP_SETTINGS.locale;
1314
@observable beta = DEFAULT_APP_SETTINGS.beta;

src/stores/AppStore.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export default class AppStore extends Store {
6767
this._setLocale.bind(this),
6868
this._handleMiner.bind(this),
6969
this._handleMinerThrottle.bind(this),
70+
this._muteAppHandler.bind(this),
7071
]);
7172
}
7273

@@ -300,6 +301,14 @@ export default class AppStore extends Store {
300301
}
301302
}
302303

304+
_muteAppHandler() {
305+
const showMessageBadgesEvenWhenMuted = this.stores.ui.showMessageBadgesEvenWhenMuted;
306+
307+
if (!showMessageBadgesEvenWhenMuted) {
308+
this.actions.app.setBadge({ unreadDirectMessageCount: 0, unreadIndirectMessageCount: 0 });
309+
}
310+
}
311+
303312
// Helpers
304313
async _appStartsCounter() {
305314
// we need to wait until the settings request is resolved

0 commit comments

Comments
 (0)