Newer
Older
import {
AppBar,
Button,
CssBaseline,
Divider,
List,
ListItem,
ListItemIcon,
ListItemText,
Toolbar,
} from '@material-ui/core'
import { createStyles, makeStyles, Theme } from '@material-ui/core/styles'
import DashboardIcon from '@material-ui/icons/Dashboard'
import ExitToAppIcon from '@material-ui/icons/ExitToApp'
import LocationCityIcon from '@material-ui/icons/LocationCity'
import PeopleIcon from '@material-ui/icons/People'
import SettingsOverscanIcon from '@material-ui/icons/SettingsOverscan'
import React, { useEffect } from 'react'
import { Link, Route, Switch, useRouteMatch } from 'react-router-dom'
import { getCities } from '../../actions/cities'
import { getRoles } from '../../actions/roles'
import { logoutUser } from '../../actions/user'
import { useAppDispatch, useAppSelector } from '../../hooks'
import CompetitionManager from './competitions/CompetitionManager'
import { LeftDrawer } from './styled'
const useStyles = makeStyles((theme: Theme) =>
createStyles({
root: {
},
// necessary for content to be below app bar
toolbar: theme.mixins.toolbar,
content: {
flexGrow: 1,
backgroundColor: theme.palette.background.default,
paddingTop: theme.spacing(2),
paddingLeft: theme.spacing(35),
paddingRight: theme.spacing(5),
const AdminView: React.FC = () => {
const classes = useStyles()
const [openIndex, setOpenIndex] = React.useState(0)
const { path, url } = useRouteMatch()
const dispatch = useAppDispatch()
const currentUser = useAppSelector((state) => state.user.userInfo)
const isAdmin = () => currentUser && currentUser.role.name === 'Admin'
const menuAdminItems = [
{ text: 'Startsida', icon: DashboardIcon },
{ text: 'Regioner', icon: LocationCityIcon },
{ text: 'Användare', icon: PeopleIcon },
{ text: 'Tävlingshanterare', icon: SettingsOverscanIcon },
]
const menuEditorItems = [
{ text: 'Startsida', icon: DashboardIcon },
{ text: 'Tävlingshanterare', icon: SettingsOverscanIcon },
]
const renderItems = () => {
const menuItems = isAdmin() ? menuAdminItems : menuEditorItems
return menuItems.map((value, index) => (
<ListItem
button
component={Link}
key={value.text}
to={`${url}/${value.text.toLowerCase()}`}
selected={index === openIndex}
onClick={() => setOpenIndex(index)}
>
<ListItemIcon>{React.createElement(value.icon)}</ListItemIcon>
<ListItemText primary={value.text} />
</ListItem>
))
}
useEffect(() => {
dispatch(getCities())
dispatch(getRoles())
}, [])
return (
<div className={classes.root}>
<CssBaseline />
<AppBar position="fixed" className={classes.appBar}>
<Toolbar>
<Typography variant="h5" noWrap>
{isAdmin() ? menuAdminItems[openIndex].text : menuEditorItems[openIndex].text}
<LeftDrawer
width={drawerWidth}
<div className={classes.toolbar} />
<Divider />
<Button
onClick={handleLogout}
type="submit"
fullWidth
variant="contained"
color="primary"
endIcon={<ExitToAppIcon></ExitToAppIcon>}
>
Logga ut
</Button>
</ListItem>
</List>
</div>
<main className={classes.content}>
<div className={classes.toolbar} />
<Switch>
<Route exact path={[path, `${path}/startsida`]}>
</Route>
<Route path={`${path}/regioner`}>
</Route>
<Route path={`${path}/användare`}>
</Route>
<Route path={`${path}/tävlingshanterare`}>
<CompetitionManager />
</Route>
</Switch>
</main>
</div>
)
}