pwa support check

This commit is contained in:
Dobromir Popov
2024-05-07 15:44:43 +03:00
parent c30928547c
commit dca9f540b7

View File

@ -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(() => {
if (isSupported()) {
setNotificationPermission(Notification.permission);
}
// Handle Push Notification Subscription
if ('serviceWorker' in navigator && 'PushManager' in window) {
@ -190,6 +198,7 @@ function PwaManager() {
// Function to request push notification permission
const requestNotificationPermission = async (e) => {
e.preventDefault();
if (isSupported()) {
const permission = await Notification.requestPermission();
setNotificationPermission(permission);
if (permission === "granted") {
@ -199,6 +208,10 @@ function PwaManager() {
// User denied or dismissed permission
console.log("Push notifications permission denied.");
}
}
else {
console.error('Web push not supported');
}
};
// Function to toggle push notifications
@ -308,6 +321,7 @@ function PwaManager() {
</button>
)}
{isPWAInstalled && <p>Инсталирано!</p>}
{!isSupported() && <p>Това устройство не поддържа нотификации</p>}
{/* {isStandAlone && <p>PWA App</p>} */}
<button
onClick={isSubscribed ? unsubscribeFromNotifications : subscribeToNotifications}