aboutsummaryrefslogtreecommitdiff
path: root/src/main.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.js')
-rw-r--r--src/main.js25
1 files changed, 11 insertions, 14 deletions
diff --git a/src/main.js b/src/main.js
index bf92e78e..c22a762e 100644
--- a/src/main.js
+++ b/src/main.js
@@ -54,24 +54,21 @@ const persistedStateOptions = {
const registerPushNotifications = store => {
store.subscribe((mutation, state) => {
const vapidPublicKey = state.instance.vapidPublicKey
+ const webPushNotification = state.config.webPushNotifications
const permission = state.interface.notificationPermission === 'granted'
- const isUserMutation = mutation.type === 'setCurrentUser'
-
- if (isUserMutation && vapidPublicKey && permission) {
- return store.dispatch('registerPushNotifications')
- }
-
const user = state.users.currentUser
- const isVapidMutation = mutation.type === 'setInstanceOption' && mutation.payload.name === 'vapidPublicKey'
-
- if (isVapidMutation && user && permission) {
- return store.dispatch('registerPushNotifications')
- }
+ const isUserMutation = mutation.type === 'setCurrentUser'
+ const isVapidMutation = mutation.type === 'setInstanceOption' && mutation.payload.name === 'vapidPublicKey'
const isPermMutation = mutation.type === 'setNotificationPermission' && mutation.payload === 'granted'
-
- if (isPermMutation && user && vapidPublicKey) {
- return store.dispatch('registerPushNotifications')
+ const isUserConfigMutation = mutation.type === 'setOption' && mutation.payload.name === 'webPushNotifications'
+
+ if (isUserMutation || isVapidMutation || isPermMutation || isUserConfigMutation) {
+ if (user && vapidPublicKey && permission && webPushNotification) {
+ return store.dispatch('registerPushNotifications')
+ } else if (isUserConfigMutation && !webPushNotification) {
+ return store.dispatch('unregisterPushNotifications')
+ }
}
})
}