import React from 'react'; import clsx from 'clsx'; import { makeStyles, useTheme } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import AppBar from '@material-ui/core/AppBar'; import List from '@material-ui/core/List'; import CssBaseline from '@material-ui/core/CssBaseline'; import Typography from '@material-ui/core/Typography'; import Divider from '@material-ui/core/Divider'; import IconButton from '@material-ui/core/IconButton'; import MenuIcon from '@material-ui/icons/Menu'; import ExpandMore from '@material-ui/icons/ExpandMore' import ExpandLess from '@material-ui/icons/ExpandLess' import Announcement from '@material-ui/icons/Announcement'; import ListItem from '@material-ui/core/ListItem'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import Collapse from '@material-ui/core/Collapse'; import DateFnsUtils from '@date-io/date-fns'; import { MuiPickersUtilsProvider } from "@material-ui/pickers"; import localeID from 'date-fns/locale/en-US'; import ReactTooltip from 'react-tooltip'; import { Switch, Route, Link, useRouteMatch, useLocation } from "react-router-dom"; import Images from '../../assets/Images'; import { UseWindowDimensions } from '../../utils/index'; import HomeRoutes from '../../router/homeRoutes' import Constant from '../../library/Constant'; import api from '../../api'; const drawerWidth = 307; const useStyles = makeStyles((theme) => ({ root: { display: 'flex', }, appBar: { zIndex: theme.zIndex.drawer + 1, transition: theme.transitions.create(['width', 'margin'], { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen, }), }, appBarShift: { marginLeft: drawerWidth, width: `calc(100% - ${drawerWidth}px)`, transition: theme.transitions.create(['width', 'margin'], { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.enteringScreen, }), }, menuButton: { marginRight: 36, }, hide: { display: 'none', }, drawer: { width: drawerWidth, flexShrink: 0, whiteSpace: 'nowrap', }, topleftOpen: { width: drawerWidth, borderRight: 0, transition: theme.transitions.create('width', { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.enteringScreen, }), backgroundColor: '#273b80' }, topleftClose: { borderRight: 0, transition: theme.transitions.create('width', { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen, }), overflowX: 'hidden', width: theme.spacing(3) + 2, height: '78px', [theme.breakpoints.up('sm')]: { width: theme.spacing(7) + 1, }, padding: 20, display: 'flex', backgroundColor: '#273b80' }, drawerOpen: { width: drawerWidth, borderRight: 0, transition: theme.transitions.create('width', { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.enteringScreen, }), backgroundColor: '#f6f7f9', }, drawerClose: { borderRight: 0, transition: theme.transitions.create('width', { easing: theme.transitions.easing.sharp, duration: theme.transitions.duration.leavingScreen, }), overflowX: 'hidden', width: theme.spacing(3) + 2, [theme.breakpoints.up('sm')]: { width: theme.spacing(7) + 1, }, backgroundColor: '#f6f7f9', }, toolbar: { display: 'flex', alignItems: 'center', justifyContent: 'flex-end', padding: theme.spacing(0, 1), // necessary for content to be below app bar ...theme.mixins.toolbar, }, toolbarDrawer: { alignItems: 'center', justifyContent: 'flex-end', padding: theme.spacing(0, 1), // necessary for content to be below app bar // ...theme.mixins.toolbar }, content: { flexGrow: 1, padding: theme.spacing(3), }, orangeAvatar: { margin: 10, color: '#fff', backgroundColor: 'black', }, })); export default function MiniDrawer() { let location = useLocation(); const classes = useStyles(); const theme = useTheme(); const [open, setOpen] = React.useState(false); const [selectedIndex, setSelectedIndex] = React.useState([]); const [selectedIndexs, setSelectedIndexs] = React.useState([]); const [selectedSubIndex, setSelectSub] = React.useState([]); const [userFullname, setUserFullname] = React.useState("") const [userEmail, setUserEmail] = React.useState("") const [userPhoto, setUserPhoto] = React.useState("") const [application, setApplication] = React.useState([]) const [setting, setSetting] = React.useState([]) const [isApprover, setIsApprover] = React.useState(false); const [data, setData] = React.useState({ array: [ { img: Images.Home, label: 'Home', path: 'beranda', subItem: null, collapse: false, }, { img: Images.budgetTahunan, label: 'Master Budget & CAT', path: 'budget-tahunan', subItem: null, collapse: false, }, { img: Images.laporanBulanan, label: 'Monthly Report', path: 'beranda', subItem: null, collapse: false, }, { img: Images.rolling, label: 'Rolling Outlook & CAT Revision', path: 'beranda', subItem: null, collapse: false, }, { img: Images.outlookperformance, label: 'Outlook Performance Appraisal', path: 'beranda', subItem: null, collapse: false, }, { img: Images.operatingindicator, label: 'Operating Indicator', path: 'beranda', subItem: null, collapse: false, }, { img: Images.manajemenDokumen, label: 'Document Management', path: 'beranda', subItem: null, collapse: false, }, { img: Images.laporan, label: 'Reports', path: '', subItem: [ { img: '', label: 'Subco', path: 'beranda', }, { img: 'beranda', label: 'Summary of Triputra Group', path: 'beranda', }, { img: 'beranda', label: 'Financial Dashboard', path: 'dashboard-financial', }, { img: 'beranda', label: 'CAT Dashboard', path: 'cat-dashboard', } ], collapse: false, }, { img: '', label: 'Settings', path: 'beranda', subItem: null, collapse: false, }, { img: Images.masterdata, label: 'General Setting', path: '', subItem: [ { img: '', label: 'Maintenance Mode', path: 'maintenance-mode', }, ], collapse: false, }, { img: Images.masterdata, label: 'Master Data', path: '', subItem: [ { img: '', label: 'Business Unit', path: 'unit-bisnis', }, { img: '', label: 'Company', path: 'perusahaan', }, { img: '', label: 'Report Items', path: 'report-items', }, { img: '', label: 'Parameters', path: 'parameter', }, ], collapse: false, }, { img: Images.otorisasi, label: 'Authorization', path: '', subItem: [ { img: '', label: 'User Role', path: 'userrole', }, { img: '', label: 'User', path: 'user', } ], collapse: false, }, { img: Images.approvalmatrix, label: 'Approval Matrix', path: 'approval-matrix', subItem: null, collapse: false, }, { img: Images.otorisasi, label: 'User Management', path: '', subItem: [ { img: '', label: 'Profile', path: 'profile', }, { img: '', label: 'Logout', path: '', }, ], collapse: false, } ] }) React.useEffect(() => { if (userFullname === "" && userEmail === "") { getUserData() getMenuHierarki() getDetailUser() } }) const parseChildren = (val) => { let data = Object.assign([], val) data = data.sort((a, b) => a.menu_id - b.menu_id).map((i) => { return { img: i.icon === '#' ? "" : i.icon, label: i.menu_name, path: i.url, subItem: parseChildren(i.sub_menu), collapse: false } }) return data } const getDetailUser = () => { let userId = localStorage.getItem(Constant.USER) api.create().getDetailUser(userId).then((response) => { if (response.data) { if (response.ok) { if (response.data.status === 'success') { getRole(response.data.data.role_id) } } } }) } const getRole = (id) => { api.create().getDetailRole(id).then((response) => { // console.log(response) if (response.data.status === 'success') { // this.setState({ tempData: response.data.data, privileges: response.data.data.privileges }) // // // console.log(response.data.data) if (String(response.data.data.role_name).toLocaleLowerCase() == 'superadmin') { getIsApprover(true) } else { getIsApprover(false) } } else { getIsApprover(false) } }) } const getIsApprover = (superadmin) => { api.create().getAM().then((response) => { // console.log(response); let actAMActive = response.data.data let userId = localStorage.getItem(Constant.USER) let indexId = actAMActive.findIndex((val) => val.user_id == userId) if (indexId != -1 || superadmin) { setIsApprover(true) } }) } const getMenuHierarki = () => { api.create().getMenuByRole().then((response) => { // console.log(response) if (response.data) { if (response.data.status === "success") { let app = null let set = null response.data.data.map((item) => { if (item.menu_name === "Application") { app = parseChildren(item.sub_menu) return app } else { set = parseChildren(item.sub_menu) return set } }) setApplication(app) setSetting(set) } else { localStorage.removeItem(Constant.TOKEN) window.location.reload(); } } else { localStorage.removeItem(Constant.TOKEN) window.location.reload(); } }) } const getUserData = () => { let userId = localStorage.getItem(Constant.USER) api.create().getDetailUser(userId).then((response) => { if (response.data) { if (response.data.status === 'success') { setUserFullname(response.data.data.fullname === null ? 'Anonym' : response.data.data.fullname) setUserEmail(response.data.data.email === null ? 'Anonym@123.xyz' : response.data.data.email) setUserPhoto(response.data.data.photo === null ? "" : response.data.data.photo) } } }) } const logout = () => { localStorage.removeItem(Constant.TOKEN) window.location.reload(); } const handleDrawerOpen = () => { setOpen(true); }; const handleDrawerClose = () => { setOpen(false); }; const resetIndex = () => { setSelectedIndex("") setSelectedIndexs("") } const selectSub = (e) => { setOpen(true) setSelectSub(e) setSelectedIndex("") } const selectIndex = (e) => { setSelectSub("") setSelectedIndex(e) // alert(e) // if (open === false) { // setOpen(true) // } } let { path, url } = useRouteMatch(); const { height, width } = UseWindowDimensions(); function handleCollapse(item) { setOpen(true); let arr = application let index = arr.findIndex((val) => val.label === item.label) arr[index].collapse = !arr[index].collapse setData({ ...application, application: arr }) } function handleCollapseSetting(item) { setOpen(true); let arr = setting let index = arr.findIndex((val) => val.label === item.label) arr[index].collapse = !arr[index].collapse setData({ ...setting, setting: arr }) } return (