import React from 'react'; import { ErrorBoundary } from 'react-error-boundary'; import { FiBell } from 'react-icons/fi'; import { DeviceStatus } from '@app/components/menu/buttons/DeviceStatus'; import { useAppDispatch, useAppSelector } from '@app/hooks/redux'; import { Connection } from '@components/Connection'; import { MobileNavToggle } from '@components/menu/buttons/MobileNavToggle'; import { Notifications } from '@components/menu/buttons/Notifications'; import { ThemeToggle } from '@components/menu/buttons/ThemeToggle'; import { Logo } from '@components/menu/Logo'; import { MobileNav } from '@components/menu/MobileNav'; import { Navigation } from '@components/menu/Navigation'; import { useRoute } from '@core/router'; import { requestNotificationPermission } from '@core/utils/notifications'; import { Messages } from '@pages/Messages'; import { Nodes } from '@pages/Nodes/Index'; import { NotFound } from '@pages/NotFound'; import { Plugins } from '@pages/Plugins/Index'; import { Settings } from '@pages/settings/Index'; import { ErrorFallback } from './components/ErrorFallback'; import { addNotification, removeNotification } from './core/slices/appSlice'; export const App = (): JSX.Element => { const route = useRoute(); const dispatch = useAppDispatch(); const notifications = useAppSelector((state) => state.app.notifications); const darkMode = useAppSelector((state) => state.app.darkMode); React.useEffect(() => { if ( Notification.permission !== 'granted' && notifications.findIndex((n) => n.id === 'notification-permission') === -1 ) { dispatch( addNotification({ id: 'notification-permission', icon: , read: Notification.permission === 'denied', title: 'Enable Push Notifications', action: { message: 'Enable', action: async () => await requestNotificationPermission(), }, }), ); } // Notification.permission === '' requestNotificationPermission().catch((e) => { console.log(e); }); }, [dispatch, notifications]); React.useEffect(() => { if (Notification.permission === 'granted') { dispatch(removeNotification('notification-permission')); } }, [dispatch]); return (
{route.name === 'messages' && } {route.name === 'nodes' && } {route.name === 'plugins' && } {route.name === 'settings' && } {route.name === false && }
); };