push_notifications_plugin.js (1214B)
- export default (store) => {
- store.subscribe((mutation, state) => {
- const vapidPublicKey = state.instance.vapidPublicKey
- const webPushNotification = state.config.webPushNotifications
- const permission = state.interface.notificationPermission === 'granted'
- const user = state.users.currentUser
- const isUserMutation = mutation.type === 'setCurrentUser'
- const isVapidMutation = mutation.type === 'setInstanceOption' && mutation.payload.name === 'vapidPublicKey'
- const isPermMutation = mutation.type === 'setNotificationPermission' && mutation.payload === 'granted'
- const isUserConfigMutation = mutation.type === 'setOption' && mutation.payload.name === 'webPushNotifications'
- const isVisibilityMutation = mutation.type === 'setOption' && mutation.payload.name === 'notificationVisibility'
- if (isUserMutation || isVapidMutation || isPermMutation || isUserConfigMutation || isVisibilityMutation) {
- if (user && vapidPublicKey && permission && webPushNotification) {
- return store.dispatch('registerPushNotifications')
- } else if (isUserConfigMutation && !webPushNotification) {
- return store.dispatch('unregisterPushNotifications')
- }
- }
- })
- }