aboutsummaryrefslogtreecommitdiff
path: root/modern/src/common/components/BottomMenu.jsx
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2024-04-06 09:22:10 -0700
committerAnton Tananaev <anton@traccar.org>2024-04-06 09:22:10 -0700
commitf418231b6b2f5e030a0d2dcc390c314602b1f740 (patch)
tree10326adf3792bc2697e06bb5f2b8ef2a8f7e55fe /modern/src/common/components/BottomMenu.jsx
parentb392a4af78e01c8e0f50aad5468e9583675b24be (diff)
downloadtrackermap-web-f418231b6b2f5e030a0d2dcc390c314602b1f740.tar.gz
trackermap-web-f418231b6b2f5e030a0d2dcc390c314602b1f740.tar.bz2
trackermap-web-f418231b6b2f5e030a0d2dcc390c314602b1f740.zip
Move modern to the top
Diffstat (limited to 'modern/src/common/components/BottomMenu.jsx')
-rw-r--r--modern/src/common/components/BottomMenu.jsx135
1 files changed, 0 insertions, 135 deletions
diff --git a/modern/src/common/components/BottomMenu.jsx b/modern/src/common/components/BottomMenu.jsx
deleted file mode 100644
index 07fa2e11..00000000
--- a/modern/src/common/components/BottomMenu.jsx
+++ /dev/null
@@ -1,135 +0,0 @@
-import React, { useState } from 'react';
-import { useDispatch, useSelector } from 'react-redux';
-import { useNavigate, useLocation } from 'react-router-dom';
-import {
- Paper, BottomNavigation, BottomNavigationAction, Menu, MenuItem, Typography, Badge,
-} from '@mui/material';
-
-import DescriptionIcon from '@mui/icons-material/Description';
-import SettingsIcon from '@mui/icons-material/Settings';
-import MapIcon from '@mui/icons-material/Map';
-import PersonIcon from '@mui/icons-material/Person';
-import ExitToAppIcon from '@mui/icons-material/ExitToApp';
-
-import { sessionActions } from '../../store';
-import { useTranslation } from './LocalizationProvider';
-import { useRestriction } from '../util/permissions';
-import { nativePostMessage } from './NativeInterface';
-
-const BottomMenu = () => {
- const navigate = useNavigate();
- const location = useLocation();
- const dispatch = useDispatch();
- const t = useTranslation();
-
- const readonly = useRestriction('readonly');
- const disableReports = useRestriction('disableReports');
- const user = useSelector((state) => state.session.user);
- const socket = useSelector((state) => state.session.socket);
-
- const [anchorEl, setAnchorEl] = useState(null);
-
- const currentSelection = () => {
- if (location.pathname === `/settings/user/${user.id}`) {
- return 'account';
- } if (location.pathname.startsWith('/settings')) {
- return 'settings';
- } if (location.pathname.startsWith('/reports')) {
- return 'reports';
- } if (location.pathname === '/') {
- return 'map';
- }
- return null;
- };
-
- const handleAccount = () => {
- setAnchorEl(null);
- navigate(`/settings/user/${user.id}`);
- };
-
- const handleLogout = async () => {
- setAnchorEl(null);
-
- const notificationToken = window.localStorage.getItem('notificationToken');
- if (notificationToken && !user.readonly) {
- window.localStorage.removeItem('notificationToken');
- const tokens = user.attributes.notificationTokens?.split(',') || [];
- if (tokens.includes(notificationToken)) {
- const updatedUser = {
- ...user,
- attributes: {
- ...user.attributes,
- notificationTokens: tokens.length > 1 ? tokens.filter((it) => it !== notificationToken).join(',') : undefined,
- },
- };
- await fetch(`/api/users/${user.id}`, {
- method: 'PUT',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify(updatedUser),
- });
- }
- }
-
- await fetch('/api/session', { method: 'DELETE' });
- nativePostMessage('logout');
- navigate('/login');
- dispatch(sessionActions.updateUser(null));
- };
-
- const handleSelection = (event, value) => {
- switch (value) {
- case 'map':
- navigate('/');
- break;
- case 'reports':
- navigate('/reports/combined');
- break;
- case 'settings':
- navigate('/settings/preferences');
- break;
- case 'account':
- setAnchorEl(event.currentTarget);
- break;
- case 'logout':
- handleLogout();
- break;
- default:
- break;
- }
- };
-
- return (
- <Paper square elevation={3}>
- <BottomNavigation value={currentSelection()} onChange={handleSelection} showLabels>
- <BottomNavigationAction
- label={t('mapTitle')}
- icon={(
- <Badge color="error" variant="dot" overlap="circular" invisible={socket !== false}>
- <MapIcon />
- </Badge>
- )}
- value="map"
- />
- {!disableReports && (
- <BottomNavigationAction label={t('reportTitle')} icon={<DescriptionIcon />} value="reports" />
- )}
- <BottomNavigationAction label={t('settingsTitle')} icon={<SettingsIcon />} value="settings" />
- {readonly ? (
- <BottomNavigationAction label={t('loginLogout')} icon={<ExitToAppIcon />} value="logout" />
- ) : (
- <BottomNavigationAction label={t('settingsUser')} icon={<PersonIcon />} value="account" />
- )}
- </BottomNavigation>
- <Menu anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={() => setAnchorEl(null)}>
- <MenuItem onClick={handleAccount}>
- <Typography color="textPrimary">{t('settingsUser')}</Typography>
- </MenuItem>
- <MenuItem onClick={handleLogout}>
- <Typography color="error">{t('loginLogout')}</Typography>
- </MenuItem>
- </Menu>
- </Paper>
- );
-};
-
-export default BottomMenu;