diff --git a/components/PwaManager.tsx b/components/PwaManager.tsx index 0d9bcfa..03e474a 100644 --- a/components/PwaManager.tsx +++ b/components/PwaManager.tsx @@ -7,13 +7,19 @@ import ProtectedRoute from './protectedRoute'; import { UserRole } from '@prisma/client'; function PwaManager() { + const isSupported = () => + 'Notification' in window && + 'serviceWorker' in navigator && + 'PushManager' in window + + const [inProgress, setInProgress] = useState(false) const [deferredPrompt, setDeferredPrompt] = useState(null); const [isPWAInstalled, setIsPWAInstalled] = useState(false); const [isStandAlone, setIsStandAlone] = useState(false); const [isSubscribed, setIsSubscribed] = useState(false); const [subscription, setSubscription] = useState(null); const [registration, setRegistration] = useState(null); - const [notificationPermission, setNotificationPermission] = useState(Notification.permission); + const [notificationPermission, setNotificationPermission] = useState(isSupported() && Notification.permission); const [subs, setSubs] = useState("") const { data: session } = useSession(); @@ -23,10 +29,12 @@ function PwaManager() { isAdmin = session.user.role === UserRole.ADMIN; } + // Handle PWA installation useEffect(() => { - - setNotificationPermission(Notification.permission); + if (isSupported()) { + setNotificationPermission(Notification.permission); + } // Handle Push Notification Subscription if ('serviceWorker' in navigator && 'PushManager' in window) { @@ -190,14 +198,19 @@ function PwaManager() { // Function to request push notification permission const requestNotificationPermission = async (e) => { e.preventDefault(); - const permission = await Notification.requestPermission(); - setNotificationPermission(permission); - if (permission === "granted") { - // User granted permission - subscribeToNotifications(null); // Pass the required argument here - } else { - // User denied or dismissed permission - console.log("Push notifications permission denied."); + if (isSupported()) { + const permission = await Notification.requestPermission(); + setNotificationPermission(permission); + if (permission === "granted") { + // User granted permission + subscribeToNotifications(null); // Pass the required argument here + } else { + // User denied or dismissed permission + console.log("Push notifications permission denied."); + } + } + else { + console.error('Web push not supported'); } }; @@ -308,6 +321,7 @@ function PwaManager() { )} {isPWAInstalled &&

Инсталирано!

} + {!isSupported() &&

Това устройство не поддържа нотификации

} {/* {isStandAlone &&

PWA App

} */}