aboutsummaryrefslogtreecommitdiff
path: root/src/lib/push_notifications_plugin.js
diff options
context:
space:
mode:
authorHJ <spam@hjkos.com>2018-12-26 13:58:11 +0000
committerHJ <spam@hjkos.com>2018-12-26 13:58:11 +0000
commit754cb23f354369d57dbe3f36e530709850ae7028 (patch)
tree484896a753c447ec5016990611724c16860dd0a0 /src/lib/push_notifications_plugin.js
parent9ba969d90c6f464c58e4ed0fe48401574c68b8a6 (diff)
parentc5847349e0afb14702d1746fac142b8aeb2020e7 (diff)
Merge branch 'improve_push' into 'develop'
Improve web push notifications Closes #231 See merge request pleroma/pleroma-fe!438
Diffstat (limited to 'src/lib/push_notifications_plugin.js')
-rw-r--r--src/lib/push_notifications_plugin.js22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/lib/push_notifications_plugin.js b/src/lib/push_notifications_plugin.js
new file mode 100644
index 00000000..f75bb823
--- /dev/null
+++ b/src/lib/push_notifications_plugin.js
@@ -0,0 +1,22 @@
+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')
+ }
+ }
+ })
+}