This commit is contained in:
@@ -59,6 +59,7 @@ import { getUserChatSettingsDocument } from '@/api/userChatSettings'
|
||||
import type { UserChatSettingsDocument } from '@hereconnect/types'
|
||||
import { isNotFoundError } from '@/api/PouchDB'
|
||||
import { saveUserChatSettings } from '@/api/userChatSettings'
|
||||
import { getQrCodeDocument } from '@/api/qrCode'
|
||||
|
||||
// Проверки iOS и запуска из главного экрана
|
||||
const isIOS = computed(
|
||||
@@ -95,18 +96,16 @@ async function requestNotificationPermission() {
|
||||
}
|
||||
|
||||
const registration = await navigator.serviceWorker.ready
|
||||
let subscription: PushSubscription | null = null
|
||||
|
||||
try {
|
||||
subscription = await registration.pushManager.subscribe(await subscribeOptionsPromise)
|
||||
} catch (error) {
|
||||
subscription = await registration.pushManager.getSubscription()
|
||||
if (!subscription) {
|
||||
throw error
|
||||
}
|
||||
await subscription.unsubscribe()
|
||||
subscription = await registration.pushManager.subscribe(await subscribeOptionsPromise)
|
||||
}
|
||||
const subscription = await registration.pushManager
|
||||
.subscribe(await subscribeOptionsPromise)
|
||||
.catch(async (error) => {
|
||||
const oldSubscription = await registration.pushManager.getSubscription()
|
||||
if (!oldSubscription) {
|
||||
throw error
|
||||
}
|
||||
await oldSubscription.unsubscribe()
|
||||
return registration.pushManager.subscribe(await subscribeOptionsPromise)
|
||||
})
|
||||
|
||||
return saveWebPushSubscription(subscription)
|
||||
}
|
||||
@@ -161,7 +160,12 @@ const { isPending, isError, error, mutate } = useMutation({
|
||||
}).catch((error) => {
|
||||
if (!isNotFoundError(error)) throw error
|
||||
})
|
||||
if (chatSettingsDocument && chatSettingsDocument.is_push_notification_enabled) {
|
||||
if (
|
||||
(chatSettingsDocument && chatSettingsDocument.is_push_notification_enabled) ||
|
||||
(!chatSettingsDocument &&
|
||||
user_chat_role === 'owner' &&
|
||||
(await getQrCodeDocument(qr_code_uri)).messageDeliveryMethod === 'webPush')
|
||||
) {
|
||||
const [subscription, subscriptionDocument] = await Promise.all([
|
||||
getPushSubscription(),
|
||||
getWebPushSubscriptionDocument().catch((error) => {
|
||||
|
||||
@@ -78,7 +78,10 @@ async function requestNotificationPermission() {
|
||||
}
|
||||
|
||||
try {
|
||||
const applicationServerKeyPromise = getVapidPublicKey()
|
||||
const subscribeOptionsPromise = getVapidPublicKey().then((applicationServerKey) => ({
|
||||
userVisibleOnly: true,
|
||||
applicationServerKey,
|
||||
}))
|
||||
|
||||
const permission = await Notification.requestPermission()
|
||||
if (permission !== 'granted') {
|
||||
@@ -87,10 +90,16 @@ async function requestNotificationPermission() {
|
||||
|
||||
const registration = await navigator.serviceWorker.ready
|
||||
|
||||
const subscription = await registration.pushManager.subscribe({
|
||||
userVisibleOnly: true,
|
||||
applicationServerKey: await applicationServerKeyPromise,
|
||||
})
|
||||
const subscription = await registration.pushManager
|
||||
.subscribe(await subscribeOptionsPromise)
|
||||
.catch(async (error) => {
|
||||
const oldSubscription = await registration.pushManager.getSubscription()
|
||||
if (!oldSubscription) {
|
||||
throw error
|
||||
}
|
||||
await oldSubscription.unsubscribe()
|
||||
return registration.pushManager.subscribe(await subscribeOptionsPromise)
|
||||
})
|
||||
|
||||
const webPushSubscriptionDoc = await saveWebPushSubscription(subscription)
|
||||
emit('change')
|
||||
|
||||
Reference in New Issue
Block a user