Skip to content

Commit b405ba1

Browse files
committed
feat(Service): Add option to mute service
1 parent ae60258 commit b405ba1

File tree

8 files changed

+53
-24
lines changed

8 files changed

+53
-24
lines changed

src/components/services/content/ServiceWebview.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,21 +82,17 @@ export default class ServiceWebview extends Component {
8282
)}
8383
<Webview
8484
ref={(element) => { this.webview = element; }}
85-
8685
autosize
8786
src={service.url}
8887
preload="./webview/plugin.js"
8988
partition={`persist:service-${service.id}`}
90-
9189
onDidAttach={() => setWebviewReference({
9290
serviceId: service.id,
9391
webview: this.webview.view,
9492
})}
95-
9693
onUpdateTargetUrl={this.updateTargetUrl}
97-
9894
useragent={service.userAgent}
99-
95+
muted={service.isMuted}
10096
disablewebsecurity
10197
allowpopups
10298
/>

src/components/settings/services/EditServiceForm.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ const messages = defineMessages({
6161
},
6262
indirectMessageInfo: {
6363
id: 'settings.service.form.indirectMessageInfo',
64-
defaultMessage: '!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...', // eslint-disable-line
64+
defaultMessage: '!!!You will be notified about all new messages in a channel, not just @username, @channel, @here, ...',
65+
},
66+
isMutedInfo: {
67+
id: 'settings.service.form.isMutedInfo',
68+
defaultMessage: '!!!When disabled, all notification sounds and audio playback are muted',
6569
},
6670
});
6771

@@ -231,11 +235,15 @@ export default class EditServiceForm extends Component {
231235
{recipe.hasIndirectMessages && (
232236
<div>
233237
<Toggle field={form.$('isIndirectMessageBadgeEnabled')} />
234-
<p className="settings__indirect-message-help">
238+
<p className="settings__help">
235239
{intl.formatMessage(messages.indirectMessageInfo)}
236240
</p>
237241
</div>
238242
)}
243+
<Toggle field={form.$('isMuted')} />
244+
<p className="settings__help">
245+
{intl.formatMessage(messages.isMutedInfo)}
246+
</p>
239247
<Toggle field={form.$('isEnabled')} />
240248
</div>
241249
{recipe.message && (

src/components/settings/services/ServiceItem.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ const messages = defineMessages({
1616
id: 'settings.services.tooltip.notificationsDisabled',
1717
defaultMessage: '!!!Notifications are disabled',
1818
},
19+
tooltipIsMuted: {
20+
id: 'settings.services.tooltip.isMuted',
21+
defaultMessage: '!!!All sounds are muted',
22+
},
1923
});
2024

2125
@observer
@@ -62,6 +66,17 @@ export default class ServiceItem extends Component {
6266
>
6367
{service.name !== '' ? service.name : service.recipe.name}
6468
</td>
69+
<td
70+
className="service-table__column-info"
71+
onClick={goToServiceForm}
72+
>
73+
{service.isMuted && (
74+
<span
75+
className="mdi mdi-bell-off"
76+
data-tip={intl.formatMessage(messages.tooltipIsMuted)}
77+
/>
78+
)}
79+
</td>
6580
<td
6681
className="service-table__column-info"
6782
onClick={goToServiceForm}
@@ -85,13 +100,6 @@ export default class ServiceItem extends Component {
85100
)}
86101
<ReactTooltip place="top" type="dark" effect="solid" />
87102
</td>
88-
{/* <td className="service-table__column-action">
89-
<input
90-
type="checkbox"
91-
onChange={toggleAction}
92-
checked={service.isEnabled}
93-
/>
94-
</td> */}
95103
</tr>
96104
);
97105
}

src/containers/settings/EditServiceScreen.js

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import ServicesStore from '../../stores/ServicesStore';
99
import Form from '../../lib/Form';
1010
import { gaPage } from '../../lib/analytics';
1111

12-
1312
import ServiceError from '../../components/settings/services/ServiceError';
1413
import EditServiceForm from '../../components/settings/services/EditServiceForm';
1514
import { required, url, oneRequired } from '../../helpers/validation-helpers';
@@ -27,6 +26,10 @@ const messages = defineMessages({
2726
id: 'settings.service.form.enableNotification',
2827
defaultMessage: '!!!Enable Notifications',
2928
},
29+
enableAudio: {
30+
id: 'settings.service.form.enableAudio',
31+
defaultMessage: '!!!Enable audio',
32+
},
3033
team: {
3134
id: 'settings.service.form.team',
3235
defaultMessage: '!!!Team',
@@ -51,11 +54,14 @@ export default class EditServiceScreen extends Component {
5154
gaPage('Settings/Service/Edit');
5255
}
5356

54-
onSubmit(serviceData) {
57+
onSubmit(data) {
5558
const { action } = this.props.router.params;
5659
const { recipes, services } = this.props.stores;
5760
const { createService, updateService } = this.props.actions.service;
5861

62+
const serviceData = data;
63+
serviceData.isMuted = !serviceData.isMuted;
64+
5965
if (action === 'edit') {
6066
updateService({ serviceId: services.activeSettings.id, serviceData });
6167
} else {
@@ -82,6 +88,11 @@ export default class EditServiceScreen extends Component {
8288
value: service.isNotificationEnabled,
8389
default: true,
8490
},
91+
isMuted: {
92+
label: intl.formatMessage(messages.enableAudio),
93+
value: !service.isMuted,
94+
default: true,
95+
},
8596
},
8697
};
8798

src/i18n/locales/en-US.json

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,20 @@
106106
"settings.service.form.customUrlPremiumInfo": "To add self hosted services, you need a Franz Premium Supporter Account.",
107107
"settings.service.form.customUrlUpgradeAccount": "Upgrade your account",
108108
"settings.service.form.indirectMessageInfo": "You will be notified about all new messages in a channel, not just @username, @channel, @here, ...",
109+
"settings.service.form.name": "Name",
110+
"settings.service.form.enableService": "Enable service",
111+
"settings.service.form.enableNotification": "Enable notifications",
112+
"settings.service.form.team": "Team",
113+
"settings.service.form.customUrl": "Custom server",
114+
"settings.service.form.indirectMessages": "Show message badge for all new messages",
115+
"settings.service.form.enableAudio": "Enable audio",
116+
"settings.service.form.isMutedInfo": "When disabled, all notification sounds and audio playback are muted",
109117
"settings.service.error.headline": "Error",
110118
"settings.service.error.goBack": "Back to services",
111119
"settings.service.error.message": "Could not load service recipe.",
112120
"settings.services.tooltip.isDisabled": "Service is disabled",
113121
"settings.services.tooltip.notificationsDisabled": "Notifications are disabled",
122+
"settings.services.tooltip.isMuted": "All sounds are muted",
114123
"settings.services.headline": "Your services",
115124
"settings.services.noServicesAdded": "You haven't added any services yet.",
116125
"settings.services.discoverServices": "Discover services",
@@ -133,12 +142,6 @@
133142
"settings.app.form.language": "Language",
134143
"settings.app.form.beta": "Include beta versions",
135144
"settings.app.currentVersion": "Current version:",
136-
"settings.service.form.name": "Name",
137-
"settings.service.form.enableService": "Enable service",
138-
"settings.service.form.enableNotification": "Enable notifications",
139-
"settings.service.form.team": "Team",
140-
"settings.service.form.customUrl": "Custom server",
141-
"settings.service.form.indirectMessages": "Show message badge for all new messages",
142145
"settings.user.form.firstname": "Firstname",
143146
"settings.user.form.lastname": "Lastname",
144147
"settings.user.form.email": "Email",

src/models/Service.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default class Service {
1818

1919
@observable order = 99;
2020
@observable isEnabled = true;
21+
@observable isMuted = false;
2122
@observable team = '';
2223
@observable customUrl = '';
2324
@observable isNotificationEnabled = true;
@@ -54,6 +55,8 @@ export default class Service {
5455
this.isIndirectMessageBadgeEnabled = data.isIndirectMessageBadgeEnabled !== undefined
5556
? data.isIndirectMessageBadgeEnabled : this.isIndirectMessageBadgeEnabled;
5657

58+
this.isMuted = data.isMuted !== undefined ? data.isMuted : this.isMuted;
59+
5760
this.recipe = recipe;
5861
}
5962

src/stores/ServicesStore.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ export default class ServicesStore extends Store {
287287
});
288288
} else if (channel === 'notification') {
289289
const options = args[0].options;
290-
if (service.recipe.hasNotificationSound) {
290+
if (service.recipe.hasNotificationSound || service.isMuted) {
291291
Object.assign(options, {
292292
silent: true,
293293
});

src/styles/settings.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@
169169
}
170170
}
171171

172-
.settings__indirect-message-help {
172+
.settings__help {
173173
margin: -10px 0 20px 55px;;
174174
font-size: 12px;
175175
color: $theme-gray-light;

0 commit comments

Comments
 (0)