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'; import { UserRole } from '@prisma/client';
function PwaManager() { function PwaManager() {
const isSupported = () =>
'Notification' in window &&
'serviceWorker' in navigator &&
'PushManager' in window
const [inProgress, setInProgress] = useState(false)
const [deferredPrompt, setDeferredPrompt] = useState(null); const [deferredPrompt, setDeferredPrompt] = useState(null);
const [isPWAInstalled, setIsPWAInstalled] = useState(false); const [isPWAInstalled, setIsPWAInstalled] = useState(false);
const [isStandAlone, setIsStandAlone] = useState(false); const [isStandAlone, setIsStandAlone] = useState(false);
const [isSubscribed, setIsSubscribed] = useState(false); const [isSubscribed, setIsSubscribed] = useState(false);
const [subscription, setSubscription] = useState(null); const [subscription, setSubscription] = useState(null);
const [registration, setRegistration] = 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 [subs, setSubs] = useState("")
const { data: session } = useSession(); const { data: session } = useSession();
@ -23,10 +29,12 @@ function PwaManager() {
isAdmin = session.user.role === UserRole.ADMIN; isAdmin = session.user.role === UserRole.ADMIN;
} }
// Handle PWA installation // Handle PWA installation
useEffect(() => { useEffect(() => {
if (isSupported()) {
setNotificationPermission(Notification.permission); setNotificationPermission(Notification.permission);
}
// Handle Push Notification Subscription // Handle Push Notification Subscription
if ('serviceWorker' in navigator && 'PushManager' in window) { if ('serviceWorker' in navigator && 'PushManager' in window) {
@ -190,14 +198,19 @@ function PwaManager() {
// Function to request push notification permission // Function to request push notification permission
const requestNotificationPermission = async (e) => { const requestNotificationPermission = async (e) => {
e.preventDefault(); e.preventDefault();
const permission = await Notification.requestPermission(); if (isSupported()) {
setNotificationPermission(permission); const permission = await Notification.requestPermission();
if (permission === "granted") { setNotificationPermission(permission);
// User granted permission if (permission === "granted") {
subscribeToNotifications(null); // Pass the required argument here // User granted permission
} else { subscribeToNotifications(null); // Pass the required argument here
// User denied or dismissed permission } else {
console.log("Push notifications permission denied."); // User denied or dismissed permission
console.log("Push notifications permission denied.");
}
}
else {
console.error('Web push not supported');
} }
}; };
@ -308,6 +321,7 @@ function PwaManager() {
</button> </button>
)} )}
{isPWAInstalled && <p>Инсталирано!</p>} {isPWAInstalled && <p>Инсталирано!</p>}
{!isSupported() && <p>Това устройство не поддържа нотификации</p>}
{/* {isStandAlone && <p>PWA App</p>} */} {/* {isStandAlone && <p>PWA App</p>} */}
<button <button
onClick={isSubscribed ? unsubscribeFromNotifications : subscribeToNotifications} onClick={isSubscribed ? unsubscribeFromNotifications : subscribeToNotifications}