diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue index 215b46923..6ab2b34d4 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationPreferences.vue @@ -75,10 +75,34 @@ export default { onRegistrationSuccess() { this.hasEnabledPushPermissions = true; }, - onRequestPermissions() { - requestPushPermissions({ - onSuccess: this.onRegistrationSuccess, - }); + onRequestPermissions(value) { + if (value) { + // Enable / re-enable push notifications + requestPushPermissions({ + onSuccess: this.onRegistrationSuccess, + }); + } else { + // Disable push notifications + this.disablePushPermissions(); + } + }, + disablePushPermissions() { + verifyServiceWorkerExistence(registration => + registration.pushManager + .getSubscription() + .then(subscription => { + if (subscription) { + return subscription.unsubscribe(); + } + return null; + }) + .finally(() => { + this.hasEnabledPushPermissions = false; + }) + .catch(() => { + // error + }) + ); }, getPushSubscription() { verifyServiceWorkerExistence(registration =>