aboutsummaryrefslogtreecommitdiff
path: root/modern/src/settings/OptionsLayout
diff options
context:
space:
mode:
authorAnton Tananaev <anton@traccar.org>2022-04-17 13:33:27 -0700
committerAnton Tananaev <anton@traccar.org>2022-04-17 13:33:27 -0700
commit6505a13e0037d5de5737e940907cc62c4a9107bc (patch)
treec4b4ceeb0a8b4bd7b688ca4c6f1fd59834cc9f6f /modern/src/settings/OptionsLayout
parente470eeb4fcc923bc54968a6561f66c75dab288b9 (diff)
downloadtrackermap-web-6505a13e0037d5de5737e940907cc62c4a9107bc.tar.gz
trackermap-web-6505a13e0037d5de5737e940907cc62c4a9107bc.tar.bz2
trackermap-web-6505a13e0037d5de5737e940907cc62c4a9107bc.zip
Refactor settings layout
Diffstat (limited to 'modern/src/settings/OptionsLayout')
-rw-r--r--modern/src/settings/OptionsLayout/index.js109
-rw-r--r--modern/src/settings/OptionsLayout/useRoutes.js95
2 files changed, 0 insertions, 204 deletions
diff --git a/modern/src/settings/OptionsLayout/index.js b/modern/src/settings/OptionsLayout/index.js
deleted file mode 100644
index fea03722..00000000
--- a/modern/src/settings/OptionsLayout/index.js
+++ /dev/null
@@ -1,109 +0,0 @@
-import React, { useState, useEffect } from 'react';
-import { useHistory, useLocation } from 'react-router-dom';
-import {
- Typography,
- Divider,
- Drawer,
- makeStyles,
- IconButton,
- Hidden,
-} from '@material-ui/core';
-
-import ArrowBackIcon from '@material-ui/icons/ArrowBack';
-
-import SideNav from '../../components/SideNav';
-import NavBar from '../../components/NavBar';
-import useRoutes from './useRoutes';
-import { useTranslation } from '../../LocalizationProvider';
-
-const useStyles = makeStyles((theme) => ({
- root: {
- display: 'flex',
- height: '100%',
- },
- drawerContainer: {
- width: theme.dimensions.drawerWidthDesktop,
- },
- drawer: {
- width: theme.dimensions.drawerWidthDesktop,
- [theme.breakpoints.down('md')]: {
- width: theme.dimensions.drawerWidthTablet,
- },
- },
- content: {
- flex: 1,
- padding: theme.spacing(5, 3, 3, 3),
- [theme.breakpoints.down('md')]: {
- paddingTop: theme.spacing(10),
- },
- },
- drawerHeader: {
- ...theme.mixins.toolbar,
- display: 'flex',
- alignItems: 'center',
- padding: theme.spacing(0, 1),
- },
- toolbar: {
- [theme.breakpoints.down('md')]: {
- ...theme.mixins.toolbar,
- },
- },
-}));
-
-const OptionsLayout = ({ children }) => {
- const classes = useStyles();
- const location = useLocation();
- const history = useHistory();
- const routes = useRoutes();
- const t = useTranslation();
-
- const [openDrawer, setOpenDrawer] = useState(false);
- const [optionTitle, setOptionTitle] = useState();
-
- useEffect(() => {
- const activeRoute = routes.find(
- (route) => route.href && location.pathname.match(route.match || route.href),
- );
- setOptionTitle(activeRoute?.name);
- }, [location, routes]);
-
- const title = `${t('settingsTitle')} / ${optionTitle}`;
-
- return (
- <div className={classes.root}>
- <Hidden lgUp>
- <NavBar setOpenDrawer={setOpenDrawer} title={title} />
- <Drawer
- variant="temporary"
- open={openDrawer}
- onClose={() => setOpenDrawer(!openDrawer)}
- classes={{ paper: classes.drawer }}
- >
- <SideNav routes={routes} />
- </Drawer>
- </Hidden>
-
- <Hidden mdDown>
- <Drawer
- variant="permanent"
- classes={{ root: classes.drawerContainer, paper: classes.drawer }}
- >
- <div className={classes.drawerHeader}>
- <IconButton onClick={() => history.push('/')}>
- <ArrowBackIcon />
- </IconButton>
- <Typography variant="h6" color="inherit" noWrap>
- {t('settingsTitle')}
- </Typography>
- </div>
- <Divider />
- <SideNav routes={routes} />
- </Drawer>
- </Hidden>
-
- <div className={classes.content}>{children}</div>
- </div>
- );
-};
-
-export default OptionsLayout;
diff --git a/modern/src/settings/OptionsLayout/useRoutes.js b/modern/src/settings/OptionsLayout/useRoutes.js
deleted file mode 100644
index 70662e4d..00000000
--- a/modern/src/settings/OptionsLayout/useRoutes.js
+++ /dev/null
@@ -1,95 +0,0 @@
-import React, { useMemo } from 'react';
-import { useSelector } from 'react-redux';
-import CreateIcon from '@material-ui/icons/Create';
-import NotificationsIcon from '@material-ui/icons/Notifications';
-import FolderIcon from '@material-ui/icons/Folder';
-import PersonIcon from '@material-ui/icons/Person';
-import StorageIcon from '@material-ui/icons/Storage';
-import BuildIcon from '@material-ui/icons/Build';
-import PeopleIcon from '@material-ui/icons/People';
-import BarChartIcon from '@material-ui/icons/BarChart';
-import TodayIcon from '@material-ui/icons/Today';
-import { useTranslation } from '../../LocalizationProvider';
-
-const useAdminRoutes = (t) => useMemo(() => [
- { subheader: t('userAdmin') },
- {
- name: t('settingsServer'),
- href: '/admin/server',
- icon: <StorageIcon />,
- },
- {
- name: t('settingsUsers'),
- href: '/admin/users',
- icon: <PeopleIcon />,
- },
- {
- name: t('statisticsTitle'),
- href: '/admin/statistics',
- icon: <BarChartIcon />,
- },
-], [t]);
-
-const useMainRoutes = (t, userId) => useMemo(() => [
- {
- name: t('settingsUser'),
- href: `/user/${userId}`,
- icon: <PersonIcon />,
- },
- {
- match: 'geofence',
- name: t('sharedGeofences'),
- href: '/geofences',
- icon: <CreateIcon />,
- },
- {
- match: 'notification',
- name: t('sharedNotifications'),
- href: '/settings/notifications',
- icon: <NotificationsIcon />,
- },
- {
- match: 'group',
- name: t('settingsGroups'),
- href: '/settings/groups',
- icon: <FolderIcon />,
- },
- {
- match: 'driver',
- name: t('sharedDrivers'),
- href: '/settings/drivers',
- icon: <PersonIcon />,
- },
- {
- match: 'calendar',
- name: t('sharedCalendars'),
- href: '/settings/calendars',
- icon: <TodayIcon />,
- },
- {
- match: 'attribute',
- name: t('sharedComputedAttributes'),
- href: '/settings/attributes',
- icon: <StorageIcon />,
- },
- {
- match: 'maintenance',
- name: t('sharedMaintenance'),
- href: '/settings/maintenances',
- icon: <BuildIcon />,
- },
-], [t, userId]);
-
-export default () => {
- const t = useTranslation();
-
- const isAdmin = useSelector((state) => state.session.user?.administrator);
- const userId = useSelector((state) => state.session.user?.id);
-
- const mainRoutes = useMainRoutes(t, userId);
- const adminRoutes = useAdminRoutes(t);
-
- return useMemo(() => [...mainRoutes, ...(isAdmin ? adminRoutes : [])], [
- mainRoutes, isAdmin, adminRoutes,
- ]);
-};