# NavBar.js
import * as React from 'react';
import { styled, useTheme } from '@mui/material/styles';
import Box from '@mui/material/Box';
import Drawer from '@mui/material/Drawer';
import CssBaseline from '@mui/material/CssBaseline';
import MuiAppBar from '@mui/material/AppBar';
import Toolbar from '@mui/material/Toolbar';
import List from '@mui/material/List';
import Typography from '@mui/material/Typography';
import Divider from '@mui/material/Divider';
import IconButton from '@mui/material/IconButton';
import MenuIcon from '@mui/icons-material/Menu';
import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
import ChevronRightIcon from '@mui/icons-material/ChevronRight';
import ListItem from '@mui/material/ListItem';
import ListItemButton from '@mui/material/ListItemButton';
import ListItemIcon from '@mui/material/ListItemIcon';
import ListItemText from '@mui/material/ListItemText';
import InboxIcon from '@mui/icons-material/MoveToInbox';
import MailIcon from '@mui/icons-material/Mail';
import ListSubheader from '@mui/material/ListSubheader';
import ExpandLess from '@mui/icons-material/ExpandLess';
import ExpandMore from '@mui/icons-material/ExpandMore';
import StarBorder from '@mui/icons-material/StarBorder';
import Collapse from '@mui/material/Collapse';
//Icon
import HomeIcon from '@mui/icons-material/Home';
import SettingsIcon from '@mui/icons-material/Settings';
import BuildCircleIcon from '@mui/icons-material/BuildCircle';
import AddCircleIcon from '@mui/icons-material/AddCircle';
import CloudCircleIcon from '@mui/icons-material/CloudCircle';
import RemoveCircleIcon from '@mui/icons-material/RemoveCircle';
//
import AuthService from './authority/services/auth.service';
import App from './App';
import { Button, Label } from 'reactstrap';
import EventBus from "./authority/common/EventBus";
//
import {
Nav,
NavLink,
} from "reactstrap";
//
const drawerWidth = 240;
//
//
const Main = styled('main', { shouldForwardProp: (prop) => prop !== 'open' })(
({ theme, open }) => ({
flexGrow: 1,
padding: theme.spacing(3),
transition: theme.transitions.create('margin', {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen,
}),
marginLeft: `-${drawerWidth}px`,
...(open && {
transition: theme.transitions.create('margin', {
easing: theme.transitions.easing.easeOut,
duration: theme.transitions.duration.enteringScreen,
}),
// marginLeft: "0px",
// marginRight: "0px",
margin: "auto",
}),
}),
);
const AppBar = styled(MuiAppBar, {
shouldForwardProp: (prop) => prop !== 'open',
})(({ theme, open }) => ({
transition: theme.transitions.create(['margin', 'width'], {
easing: theme.transitions.easing.sharp,
duration: theme.transitions.duration.leavingScreen,
}),
...(open && {
width: `calc(100% - ${drawerWidth}px)`,
marginLeft: `${drawerWidth}px`,
// marginRight: "0px",
transition: theme.transitions.create(['margin', 'width'], {
easing: theme.transitions.easing.easeOut,
duration: theme.transitions.duration.enteringScreen,
}),
}),
}));
const DrawerHeader = styled('div')(({ theme }) => ({
display: 'flex',
alignItems: 'center',
padding: theme.spacing(0, 1),
// necessary for content to be below app bar
...theme.mixins.toolbar,
justifyContent: 'flex-end',
}));
export default function PersistentDrawerLeft() {
const theme = useTheme();
const [open, setOpen] = React.useState(false);
const [nestListOpenSys, setNesyListOpenSys] = React.useState(false);
const [nestListOpenCr, setNesyListOpenCr] = React.useState(false);
const [nestListOpenSt, setNesyListOpenSt] = React.useState(false);
const [nestListOpenDb, setNesyListOpenDb] = React.useState(false);
//
const [currentUser, setCurrentUser] = React.useState(undefined);
const user = AuthService.getCurrentUser();
const [showModeratorBoard, setShowModeratorBoard] = React.useState();
const [showAdminBoard, setShowAdminBoard] = React.useState();
const Check = () => {
if (user) {
setCurrentUser(user);
setShowModeratorBoard(user.roles.includes("ROLE_MODERATOR"));
setShowAdminBoard(user.roles.includes("ROLE_ADMIN"));
// showModeratorBoard: user.roles.includes("ROLE_MODERATOR"),
// showAdminBoard: user.roles.includes("ROLE_ADMIN"),
}
}
//
EventBus.remove("logout");
//
const logOut = () => {
AuthService.logout();
setShowModeratorBoard(false);
setShowAdminBoard(false);
setCurrentUser(undefined);
// this.setState({
// showModeratorBoard: false,
// showAdminBoard: false,
// currentUser: undefined,
// });
}
//
const handleDrawerOpen = () => {
setOpen(true);
};
const handleDrawerClose = () => {
setOpen(false);
};
//模組選單
const handleNestListSys = () => {
setNesyListOpenSys(!nestListOpenSys);
}
const handleNestListCr = () => {
setNesyListOpenCr(!nestListOpenCr);
}
const handleNestListSt = () => {
setNesyListOpenSt(!nestListOpenSt);
}
const handleNestListDb = () => {
setNesyListOpenDb(!nestListOpenDb);
}
return (
<Box sx={{ display: 'flex' }}>
<CssBaseline />
<AppBar position="fixed" open={open}>
<Toolbar>
<IconButton
color="inherit"
aria-label="open drawer"
onClick={handleDrawerOpen}
edge="start"
sx={{ mr: 2, ...(open && { display: 'none' }) }}
>
<MenuIcon />
</IconButton>
<Typography variant="h5" noWrap component="div">
{/* <Button> */}
MMIS
{/* </Button> */}
</Typography>
{/* */}
{currentUser ? (
<Nav>
<div className="navbar-nav ml-auto">
<a href="/login" className="nav-link" onClick={logOut}>
LogOut
</a>
</div>
<div className="navbar-nav ml-auto">
<label >{currentUser.roles}</label>
</div>
{/* <NavItem>{currentUser.roles}</NavItem> */}
</Nav>
) : (
<Nav>
<NavLink href="/login">登入</NavLink>
<NavLink href="/register">註冊</NavLink>
</Nav>
)}
{/* */}
</Toolbar>
</AppBar>
<Drawer
sx={{
width: drawerWidth,
flexShrink: 0,
'& .MuiDrawer-paper': {
width: drawerWidth,
boxSizing: 'border-box',
},
}}
variant="persistent"
anchor="left"
open={open}
color={"red"}
>
<DrawerHeader>
<IconButton onClick={handleDrawerClose}>
{theme.direction === 'ltr' ? <ChevronLeftIcon /> : <ChevronRightIcon />}
</IconButton>
</DrawerHeader>
<ListSubheader component="div" id="nested-list-subheader">
主頁
</ListSubheader>
<Divider />
<List>
{/* {['Inbox', 'Starred', 'Send email', 'Drafts'].map((text, index) => (
<ListItem key={text} disablePadding>
<ListItemButton>
<ListItemIcon>
{index % 2 === 0 ? <InboxIcon /> : <MailIcon />}
</ListItemIcon>
<ListItemText primary={text} />
</ListItemButton>
</ListItem>
))} */}
<ListItemButton onClick={() => {
window.location.href = "/";
}}>
<ListItem disablePadding>
<ListItemIcon>
<HomeIcon />
</ListItemIcon>
<ListItemText primary={"主頁"} />
</ListItem >
</ListItemButton>
<ListSubheader component="div" id="nested-list-subheader">
模組
</ListSubheader>
<Divider />
<ListItem disablePadding>
<ListItemButton onClick={handleNestListSys} >
<ListItemIcon>
<SettingsIcon />
</ListItemIcon>
<ListItemText primary={"系統模組"} />
{nestListOpenSys ? <ExpandLess /> : <ExpandMore />}
</ListItemButton>
</ListItem>
<Collapse in={nestListOpenSys}>
<List>
<ListItem>
<ListItemButton onClick={() => {
window.location.href = "/majorRoute";
}}>
<ListItem disablePadding>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"大路線"} />
</ListItem >
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton onClick={() => {
window.location.href = "/middleRoute";
}}>
<ListItem disablePadding>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"中路線"} />
</ListItem >
</ListItemButton>
</ListItem>
<ListItem>
<ListItemButton onClick={() => {
window.location.href = "/smallRoute";
}}>
<ListItem disablePadding>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"小路線"} />
</ListItem >
</ListItemButton>
</ListItem>
</List>
</Collapse>
<ListItem disablePadding>
<ListItemButton onClick={handleNestListCr} >
<ListItemIcon>
<AddCircleIcon />
</ListItemIcon>
<ListItemText primary={"進貨模組"} />
{nestListOpenCr ? <ExpandLess /> : <ExpandMore />}
</ListItemButton>
</ListItem>
<Collapse in={nestListOpenCr}>
<List>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/suppliers";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"供應商"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/supplierType";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"供應商類型"} />
</ListItemButton>
</ListItem>
</List>
</Collapse>
<ListItem disablePadding>
<ListItemButton onClick={handleNestListSt} >
<ListItemIcon>
<CloudCircleIcon />
</ListItemIcon>
<ListItemText primary={"存貨模組"} />
{nestListOpenSt ? <ExpandLess /> : <ExpandMore />}
</ListItemButton>
</ListItem>
<Collapse in={nestListOpenSt}>
<List>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/products";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"商品"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/uoms";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"計量單位"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/categories";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"大分類"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/types";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"中分類"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/subGroups";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"小分類"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/dcSites";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"物流中心"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/dcWhBuildings";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"物流中心建物"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/warehouses";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"物流中心倉庫"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/searchDc";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"物流中心庫區"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/characteristics";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"倉庫屬性"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/stocktakings";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"盤點週期"} />
</ListItemButton>
</ListItem>
</List>
</Collapse>
<ListItem disablePadding>
<ListItemButton onClick={handleNestListDb} >
<ListItemIcon>
<RemoveCircleIcon />
</ListItemIcon>
<ListItemText primary={"出貨模組"} />
{nestListOpenDb ? <ExpandLess /> : <ExpandMore />}
</ListItemButton>
</ListItem>
<Collapse in={nestListOpenDb}>
<List>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/owners";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"貨主"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/customers";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"配送客戶"} />
</ListItemButton>
</ListItem>
<ListItem >
<ListItemButton disablePadding onClick={() => {
window.location.href = "/categories";
}}>
<ListItemIcon>
<BuildCircleIcon />
</ListItemIcon>
<ListItemText primary={"大分類"} />
</ListItemButton>
</ListItem>
</List>
</Collapse>
</List>
</Drawer>
<Main open={open}>
<DrawerHeader />
<App />
</Main>
</Box>
);
}