87 lines
2.6 KiB
React
87 lines
2.6 KiB
React
![]() |
import { Capacitor } from '@capacitor/core';
|
||
|
import { Button, Snackbar, Stack, Typography } from '@mui/joy'
|
||
|
import { Preferences } from '@capacitor/preferences';
|
||
|
import { LocalNotifications } from '@capacitor/local-notifications';
|
||
|
|
||
|
import {React, useEffect, useState} from 'react';
|
||
|
|
||
|
const NotificationAccessSnackbar = () => {
|
||
|
|
||
|
|
||
|
|
||
|
const [open, setOpen] = useState(false);
|
||
|
|
||
|
if (!Capacitor.isNativePlatform()) {
|
||
|
return null;
|
||
|
}
|
||
|
const getNotificationPreferences = async () => {
|
||
|
const ret = await Preferences.get({ key: 'notificationPreferences' });
|
||
|
return JSON.parse(ret.value);
|
||
|
};
|
||
|
|
||
|
useEffect(() => {
|
||
|
getNotificationPreferences().then((data) => {
|
||
|
// if optOut is true then don't show the snackbar
|
||
|
if(data?.optOut === true || data?.granted === true) {
|
||
|
return;
|
||
|
}
|
||
|
setOpen(true);
|
||
|
});
|
||
|
}
|
||
|
, []);
|
||
|
|
||
|
|
||
|
|
||
|
return (
|
||
|
|
||
|
<Snackbar
|
||
|
// autoHideDuration={5000}
|
||
|
variant="solid"
|
||
|
color="primary"
|
||
|
size="lg"
|
||
|
invertedColors
|
||
|
open={open}
|
||
|
onClose={() => setOpen(false)}
|
||
|
anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
|
||
|
sx={(theme) => ({
|
||
|
background: `linear-gradient(45deg, ${theme.palette.primary[600]} 30%, ${theme.palette.primary[500]} 90%})`,
|
||
|
maxWidth: 360,
|
||
|
})}
|
||
|
>
|
||
|
<div>
|
||
|
<Typography level="title-lg">Need Notification?</Typography>
|
||
|
<Typography sx={{ mt: 1, mb: 2 }}>
|
||
|
You need to enable permission to receive notifications, do you want to enable it?
|
||
|
</Typography>
|
||
|
<Stack direction="row" spacing={1}>
|
||
|
<Button variant="solid" color="primary" onClick={() => {
|
||
|
const notificationPreferences = { optOut: false };
|
||
|
LocalNotifications.requestPermissions().then((resp) => {
|
||
|
if (resp.display === 'granted') {
|
||
|
notificationPreferences['granted'] = true;
|
||
|
}
|
||
|
})
|
||
|
Preferences.set({ key: 'notificationPreferences', value: JSON.stringify(notificationPreferences) });
|
||
|
setOpen(false);
|
||
|
}}>
|
||
|
Yes
|
||
|
</Button>
|
||
|
<Button
|
||
|
variant="outlined"
|
||
|
color="primary"
|
||
|
onClick={() => {
|
||
|
const notificationPreferences = { optOut: true };
|
||
|
Preferences.set({ key: 'notificationPreferences', value: JSON.stringify(notificationPreferences) });
|
||
|
setOpen(false);
|
||
|
}}
|
||
|
>
|
||
|
No, Keep it Disabled
|
||
|
</Button>
|
||
|
</Stack>
|
||
|
</div>
|
||
|
</Snackbar>
|
||
|
|
||
|
)
|
||
|
}
|
||
|
|
||
|
export default NotificationAccessSnackbar;
|