pwa support check
This commit is contained in:
@ -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}
|
||||||
|
Reference in New Issue
Block a user