aboutsummaryrefslogtreecommitdiff
path: root/modern/src/components/BottomMenu.js
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2021-09-03 21:26:35 -0700
committerAnton Tananaev <anton.tananaev@gmail.com>2021-09-03 21:26:35 -0700
commit26ba6836d09627e769c6be44fa7c77b65feb4274 (patch)
treeafc4816c666a62f71870915473e638a7e1fe9072 /modern/src/components/BottomMenu.js
parent7b338688fb6f2bcca5236348495e4b7398f8de00 (diff)
downloadtrackermap-web-26ba6836d09627e769c6be44fa7c77b65feb4274.tar.gz
trackermap-web-26ba6836d09627e769c6be44fa7c77b65feb4274.tar.bz2
trackermap-web-26ba6836d09627e769c6be44fa7c77b65feb4274.zip
Reimplement bottom navigation
Diffstat (limited to 'modern/src/components/BottomMenu.js')
-rw-r--r--modern/src/components/BottomMenu.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/modern/src/components/BottomMenu.js b/modern/src/components/BottomMenu.js
new file mode 100644
index 00000000..610944fc
--- /dev/null
+++ b/modern/src/components/BottomMenu.js
@@ -0,0 +1,72 @@
+import React from 'react';
+import { useDispatch } from 'react-redux';
+import { useHistory } from 'react-router-dom';
+import {
+ makeStyles, Paper, BottomNavigation, BottomNavigationAction,
+} from '@material-ui/core';
+
+import DescriptionIcon from '@material-ui/icons/Description';
+import ShuffleIcon from '@material-ui/icons/Shuffle';
+import MapIcon from '@material-ui/icons/Map';
+import LogoutIcon from '@material-ui/icons/ExitToApp';
+
+import { sessionActions } from '../store';
+import { useTranslation } from '../LocalizationProvider';
+
+const useStyles = makeStyles((theme) => ({
+ container: {
+ bottom: theme.spacing(0),
+ left: '0px',
+ width: '100%',
+ position: 'fixed',
+ zIndex: 1301,
+ [theme.breakpoints.up('lg')]: {
+ left: theme.spacing(1.5),
+ bottom: theme.spacing(1.5),
+ width: theme.dimensions.drawerWidthDesktop,
+ },
+ },
+}));
+
+const BottomMenu = () => {
+ const classes = useStyles();
+ const history = useHistory();
+ const t = useTranslation();
+
+ const dispatch = useDispatch();
+
+ const handleSelection = async (_, value) => {
+ switch (value) {
+ case 1:
+ history.push('/reports/route');
+ break;
+ case 2:
+ history.push('/settings/notifications');
+ break;
+ case 3:
+ const response = await fetch('/api/session', { method: 'DELETE' });
+ if (response.ok) {
+ dispatch(sessionActions.updateUser(null));
+ history.push('/login');
+ }
+ break;
+ }
+ };
+
+ return (
+ <Paper square elevation={3} className={classes.container}>
+ <BottomNavigation
+ value={0}
+ onChange={handleSelection}
+ showLabels
+ >
+ <BottomNavigationAction label={t('mapTitle')} icon={<MapIcon />} />
+ <BottomNavigationAction label={t('reportTitle')} icon={<DescriptionIcon />} />
+ <BottomNavigationAction label={t('settingsTitle')} icon={<ShuffleIcon />} />
+ <BottomNavigationAction label={t('loginLogout')} icon={<LogoutIcon />} />
+ </BottomNavigation>
+ </Paper>
+ );
+};
+
+export default BottomMenu;