Home.js 23.2 KB
Newer Older
d.arizona's avatar
d.arizona committed
1
import React from 'react';
d.arizona's avatar
d.arizona committed
2 3 4 5 6 7 8 9 10 11
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';
d.arizona's avatar
d.arizona committed
12 13
import ExpandMore from '@material-ui/icons/ExpandMore'
import ExpandLess from '@material-ui/icons/ExpandLess'
d.arizona's avatar
d.arizona committed
14 15 16
import ChevronLeftIcon from '@material-ui/icons/ChevronLeft';
import ListItem from '@material-ui/core/ListItem';
import ListItemIcon from '@material-ui/core/ListItemIcon';
d.arizona's avatar
d.arizona committed
17
import Collapse from '@material-ui/core/Collapse';
d.arizona's avatar
d.arizona committed
18
import DateFnsUtils from '@date-io/date-fns';
d.arizona's avatar
d.arizona committed
19
import { MuiPickersUtilsProvider } from "@material-ui/pickers";
Deni Rinaldi's avatar
Deni Rinaldi committed
20
import localeID from 'date-fns/locale/en-US';
Deni Rinaldi's avatar
Deni Rinaldi committed
21
import ReactTooltip from 'react-tooltip';
d.arizona's avatar
d.arizona committed
22

d.arizona's avatar
d.arizona committed
23
import {
Deni Rinaldi's avatar
Deni Rinaldi committed
24 25 26 27 28
  BrowserRouter as Router,
  Switch,
  Route,
  Link,
  useParams,
d.arizona's avatar
d.arizona committed
29
  useRouteMatch, useLocation
Deni Rinaldi's avatar
Deni Rinaldi committed
30 31
} from "react-router-dom";
import Images from '../assets/Images';
Deni Rinaldi's avatar
Deni Rinaldi committed
32
import { FadeMenu, Footer, UseWindowDimensions } from '../Utils/Index';
Deni Rinaldi's avatar
Deni Rinaldi committed
33
import Beranda from './Beranda';
d.arizona's avatar
d.arizona committed
34 35
import { Avatar } from '@material-ui/core';
import HomeRoutes from '../router/homeRoutes'
d.arizona's avatar
d.arizona committed
36
import ArraySide from '../library/Array'
d.arizona's avatar
d.arizona committed
37
import Constant from '../library/Constant';
d.arizona's avatar
d.arizona committed
38
import api from '../api';
d.arizona's avatar
d.arizona committed
39

Deni Rinaldi's avatar
Deni Rinaldi committed
40
const drawerWidth = 307;
d.arizona's avatar
d.arizona committed
41

Deni Rinaldi's avatar
Deni Rinaldi committed
42

d.arizona's avatar
d.arizona committed
43
const useStyles = makeStyles((theme) => ({
d.arizona's avatar
d.arizona committed
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
  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',
  },
d.arizona's avatar
d.arizona committed
73 74 75 76 77 78 79
  topleftOpen: {
    width: drawerWidth,
    borderRight: 0,
    transition: theme.transitions.create('width', {
      easing: theme.transitions.easing.sharp,
      duration: theme.transitions.duration.enteringScreen,
    }),
Deni Rinaldi's avatar
Deni Rinaldi committed
80
    backgroundColor: '#273b80'
d.arizona's avatar
d.arizona committed
81 82 83 84 85 86 87 88 89 90 91 92 93
  },
  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,
    },
Deni Rinaldi's avatar
Deni Rinaldi committed
94 95
    padding: 20,
    display: 'flex',
Deni Rinaldi's avatar
Deni Rinaldi committed
96
    backgroundColor: '#273b80'
d.arizona's avatar
d.arizona committed
97
  },
d.arizona's avatar
d.arizona committed
98 99
  drawerOpen: {
    width: drawerWidth,
Deni Rinaldi's avatar
Deni Rinaldi committed
100
    borderRight: 0,
d.arizona's avatar
d.arizona committed
101 102 103 104
    transition: theme.transitions.create('width', {
      easing: theme.transitions.easing.sharp,
      duration: theme.transitions.duration.enteringScreen,
    }),
d.arizona's avatar
d.arizona committed
105
    backgroundColor: '#f6f7f9',
d.arizona's avatar
d.arizona committed
106 107
  },
  drawerClose: {
Deni Rinaldi's avatar
Deni Rinaldi committed
108
    borderRight: 0,
d.arizona's avatar
d.arizona committed
109 110 111 112 113
    transition: theme.transitions.create('width', {
      easing: theme.transitions.easing.sharp,
      duration: theme.transitions.duration.leavingScreen,
    }),
    overflowX: 'hidden',
Deni Rinaldi's avatar
Deni Rinaldi committed
114
    width: theme.spacing(3) + 2,
d.arizona's avatar
d.arizona committed
115
    [theme.breakpoints.up('sm')]: {
Deni Rinaldi's avatar
Deni Rinaldi committed
116
      width: theme.spacing(7) + 1,
d.arizona's avatar
d.arizona committed
117
    },
d.arizona's avatar
d.arizona committed
118
    backgroundColor: '#f6f7f9',
d.arizona's avatar
d.arizona committed
119 120 121 122 123 124 125 126 127
  },
  toolbar: {
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'flex-end',
    padding: theme.spacing(0, 1),
    // necessary for content to be below app bar
    ...theme.mixins.toolbar,
  },
Deni Rinaldi's avatar
Deni Rinaldi committed
128 129 130 131 132 133 134
  toolbarDrawer: {
    alignItems: 'center',
    justifyContent: 'flex-end',
    padding: theme.spacing(0, 1),
    // necessary for content to be below app bar
    // ...theme.mixins.toolbar
  },
d.arizona's avatar
d.arizona committed
135 136 137 138
  content: {
    flexGrow: 1,
    padding: theme.spacing(3),
  },
Deni Rinaldi's avatar
Deni Rinaldi committed
139 140 141 142 143
  orangeAvatar: {
    margin: 10,
    color: '#fff',
    backgroundColor: 'black',
  },
d.arizona's avatar
d.arizona committed
144 145
}));

d.arizona's avatar
d.arizona committed
146
export default function MiniDrawer() {
d.arizona's avatar
d.arizona committed
147
  let location = useLocation();
d.arizona's avatar
d.arizona committed
148 149 150
  const classes = useStyles();
  const theme = useTheme();
  const [open, setOpen] = React.useState(false);
d.arizona's avatar
d.arizona committed
151
  const [selectedIndex, setSelectedIndex] = React.useState([]);
Deni Rinaldi's avatar
Deni Rinaldi committed
152 153
  const [selectedIndexs, setSelectedIndexs] = React.useState([]);
  const [selectedSubIndex, setSelectSub] = React.useState([]);
d.arizona's avatar
d.arizona committed
154 155
  const [userFullname, setUserFullname] = React.useState("")
  const [userEmail, setUserEmail] = React.useState("")
156
  const [userPhoto, setUserPhoto] = React.useState("")
157 158
  const [application, setApplication] = React.useState([])
  const [setting, setSetting] = React.useState([])
d.arizona's avatar
d.arizona committed
159 160 161
  const [data, setData] = React.useState({
    array: [
      {
162 163 164 165 166
        img: Images.Home,
        label: 'Home',
        path: 'beranda',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
167 168
      },
      {
169 170 171 172 173
        img: Images.budgetTahunan,
        label: 'Master Budget & CAT',
        path: 'budget-tahunan',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
174 175
      },
      {
176 177 178 179 180
        img: Images.laporanBulanan,
        label: 'Monthly Report',
        path: 'beranda',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
181 182
      },
      {
183 184 185 186 187
        img: Images.rolling,
        label: 'Rolling Outlook & CAT Revision',
        path: 'beranda',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
188 189
      },
      {
190 191 192 193 194
        img: Images.outlookperformance,
        label: 'Outlook Performance Appraisal',
        path: 'beranda',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
195 196
      },
      {
197 198 199 200 201
        img: Images.operatingindicator,
        label: 'Operating Indicator',
        path: 'beranda',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
202 203
      },
      {
204 205 206 207 208
        img: Images.manajemenDokumen,
        label: 'Document Management',
        path: 'beranda',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
209 210
      },
      {
211 212 213 214 215 216 217 218 219
        img: Images.laporan,
        label: 'Reports',
        path: '',
        subItem: [
          {
            img: 'beranda',
            label: 'CAT Dashboard',
            path: 'dashboard-cat',
          },
d.arizona's avatar
d.arizona committed
220 221 222 223 224
          {
            img: 'beranda',
            label: 'Financial Dashboard',
            path: 'dashboard-financial',
          },
225 226 227 228 229 230 231 232 233 234 235 236
          {
            img: 'beranda',
            label: 'Summary of Triputra Group',
            path: 'beranda',
          },
          {
            img: '',
            label: 'Sub Holding',
            path: 'beranda',
          }
        ],
        collapse: false,
d.arizona's avatar
d.arizona committed
237 238
      },
      {
239 240 241 242 243
        img: '',
        label: 'Settings',
        path: 'beranda',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
244 245
      },
      {
246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271
        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,
d.arizona's avatar
d.arizona committed
272 273
      },
      {
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289
        img: Images.otorisasi,
        label: 'Authorization',
        path: '',
        subItem: [
          {
            img: '',
            label: 'User Role',
            path: 'userrole',
          },
          {
            img: '',
            label: 'User',
            path: 'user',
          }
        ],
        collapse: false,
d.arizona's avatar
d.arizona committed
290 291
      },
      {
292 293 294 295 296
        img: Images.approvalmatrix,
        label: 'Approval Matrix',
        path: 'approval-matrix',
        subItem: null,
        collapse: false,
d.arizona's avatar
d.arizona committed
297 298
      },
      {
299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314
        img: Images.otorisasi,
        label: 'User Management',
        path: '',
        subItem: [
          {
            img: '',
            label: 'Profile',
            path: 'profile',
          },
          {
            img: '',
            label: 'Logout',
            path: '',
          },
        ],
        collapse: false,
d.arizona's avatar
d.arizona committed
315
      }
316
    ]
d.arizona's avatar
d.arizona committed
317
  })
318

d.arizona's avatar
d.arizona committed
319
  React.useEffect(() => {
Deni Rinaldi's avatar
Deni Rinaldi committed
320
    if (userFullname === "" && userEmail === "") {
d.arizona's avatar
d.arizona committed
321
      getUserData()
d.arizona's avatar
d.arizona committed
322
      getMenuHierarki()
323
    }
d.arizona's avatar
d.arizona committed
324
  })
d.arizona's avatar
d.arizona committed
325

326 327
  const parseChildren = (val) => {
    let data = Object.assign([], val)
328
    data = data.sort((a, b) => a.menu_id - b.menu_id).map((i) => {
329 330 331 332 333 334 335 336 337 338 339
      return {
        img: i.icon === '#' ? "" : i.icon,
        label: i.menu_name,
        path: i.url,
        subItem: parseChildren(i.sub_menu),
        collapse: false
      }
    })
    return data
  }

d.arizona's avatar
d.arizona committed
340 341
  const getMenuHierarki = () => {
    api.create().getMenuByRole().then((response) => {
342
      console.log(response)
343 344 345 346 347 348 349 350 351 352 353 354 355 356 357
      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)
Deni Rinaldi's avatar
Deni Rinaldi committed
358
          console.log(set);
359 360 361 362
        } else {
          localStorage.removeItem(Constant.TOKEN)
          window.location.reload();
        }
363 364 365 366
      } else {
        localStorage.removeItem(Constant.TOKEN)
        window.location.reload();
      }
d.arizona's avatar
d.arizona committed
367 368 369
    })
  }

d.arizona's avatar
d.arizona committed
370 371 372
  const getUserData = () => {
    let userId = localStorage.getItem(Constant.USER)
    api.create().getDetailUser(userId).then((response) => {
373
      if (response.data) {
Deni Rinaldi's avatar
Deni Rinaldi committed
374
        if (response.data.status === 'success') {
375 376 377 378
          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)
        }
d.arizona's avatar
d.arizona committed
379 380 381
      }
    })
  }
d.arizona's avatar
d.arizona committed
382

383
  const logout = () => {
d.arizona's avatar
d.arizona committed
384 385 386 387
    localStorage.removeItem(Constant.TOKEN)
    window.location.reload();
  }

d.arizona's avatar
d.arizona committed
388 389
  const handleDrawerOpen = () => {
    setOpen(true);
d.arizona's avatar
d.arizona committed
390 391
  };

d.arizona's avatar
d.arizona committed
392 393
  const handleDrawerClose = () => {
    setOpen(false);
d.arizona's avatar
d.arizona committed
394 395
  };

Deni Rinaldi's avatar
Deni Rinaldi committed
396 397 398 399 400 401
  const resetIndex = () => {
    setSelectedIndex("")
    setSelectedIndexs("")
  }

  const selectSub = (e) => {
d.arizona's avatar
d.arizona committed
402
    setOpen(true)
Deni Rinaldi's avatar
Deni Rinaldi committed
403 404 405 406 407 408 409
    setSelectSub(e)
    setSelectedIndex("")
  }

  const selectIndex = (e) => {
    setSelectSub("")
    setSelectedIndex(e)
d.arizona's avatar
d.arizona committed
410
    // alert(e)
Deni Rinaldi's avatar
Deni Rinaldi committed
411
    // if (open === false) {
Deni Rinaldi's avatar
Deni Rinaldi committed
412
    // setOpen(true)
d.arizona's avatar
d.arizona committed
413
    // }
Deni Rinaldi's avatar
Deni Rinaldi committed
414 415
  }

d.arizona's avatar
d.arizona committed
416
  let { path, url } = useRouteMatch();
d.arizona's avatar
d.arizona committed
417

Deni Rinaldi's avatar
Deni Rinaldi committed
418 419
  const { height, width } = UseWindowDimensions();

420
  function handleCollapse(item) {
d.arizona's avatar
d.arizona committed
421
    setOpen(true);
422 423 424 425 426 427 428
    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) {
d.arizona's avatar
d.arizona committed
429
    setOpen(true);
430
    let arr = setting
d.arizona's avatar
d.arizona committed
431 432
    let index = arr.findIndex((val) => val.label === item.label)
    arr[index].collapse = !arr[index].collapse
433
    setData({ ...setting, setting: arr })
d.arizona's avatar
d.arizona committed
434 435
  }

d.arizona's avatar
d.arizona committed
436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458
  return (
    <div className={classes.root}>
      <CssBaseline />
      <AppBar
        position="fixed"
        className={clsx(classes.appBar, {
          [classes.appBarShift]: open,
        })}
      >
      </AppBar>
      <Drawer
        variant="permanent"
        className={clsx(classes.drawer, {
          [classes.drawerOpen]: open,
          [classes.drawerClose]: !open,
        })}
        classes={{
          paper: clsx({
            [classes.drawerOpen]: open,
            [classes.drawerClose]: !open,
          }),
        }}
      >
d.arizona's avatar
d.arizona committed
459 460 461 462
        <div className={clsx(classes.drawer, {
          [classes.topleftOpen]: open,
          [classes.topleftClose]: !open,
        })}
463 464 465 466 467 468
          classes={{
            paper: clsx({
              [classes.topleftOpen]: open,
              [classes.topleftClose]: !open,
            }),
          }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
469 470 471
          {open === true ?

            <div style={{ display: 'flex', justifyContent: 'space-between', flex: 1, padding: 10 }}>
d.arizona's avatar
d.arizona committed
472
              <img src={Images.triputra} alt="React Logo" style={{ height: 31, width: 151, alignSelf: 'center', marginLeft: 5 }} />
473
              <IconButton onClick={handleDrawerClose} style={{ outline: 'none' }}>
d.arizona's avatar
d.arizona committed
474
                <MenuIcon style={{ fill: 'white' }} />
Deni Rinaldi's avatar
Deni Rinaldi committed
475 476 477 478 479
              </IconButton>
            </div> :
            <IconButton
              color="inherit"
              aria-label="open drawer"
480
              style={{ outline: 'none' }}
Deni Rinaldi's avatar
Deni Rinaldi committed
481 482 483 484 485 486
              onClick={handleDrawerOpen}
              edge="start"
              className={clsx(classes.menuButton, {
                [classes.hide]: open,
              })}
            >
Deni Rinaldi's avatar
Deni Rinaldi committed
487 488 489 490 491

              <a data-tip={"Main Menu"} data-for={"main-menu"}>
                <MenuIcon style={{ fill: 'white', alignSelf: 'center' }} />
              </a>
              <ReactTooltip border={true} id={"main-menu"} place="bottom" type="light" effect="solid" />
Deni Rinaldi's avatar
Deni Rinaldi committed
492
            </IconButton>}
d.arizona's avatar
d.arizona committed
493
          {open &&
d.arizona's avatar
d.arizona committed
494
            <div style={{ width: '100%', marginTop: 15, marginBottom: 60 }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
495 496 497 498 499 500
              <Link to={"profile"}>
                <Typography style={{ fontSize: 14, color: '#fff', textAlign: 'center', fontWeight: 'bold' }}>{userFullname}</Typography>
              </Link>
              <Link to={"profile"}>
                <Typography style={{ fontSize: 14, color: '#fff', textAlign: 'center', marginTop: 10 }}>{userEmail}</Typography>
              </Link>
Deni Rinaldi's avatar
Deni Rinaldi committed
501
            </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
502
          }
d.arizona's avatar
d.arizona committed
503 504 505
        </div>
        <Divider />
        {open &&
506
          <div style={{ width: '100%', textAlign: '-webkit-center', marginTop: -45, display: 'flex', justifyContent: 'center' }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
507 508 509
            <Link to={"profile"}>
              <div className={"sub-color"} style={{ width: 90, height: 90, borderRadius: 50, display: 'flex', justifyContent: 'center' }}>
                <div style={{ width: 72, height: 72, backgroundColor: '#838383', borderRadius: 50, alignSelf: 'center' }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
510
                  {userPhoto === "" ? null : <img src={userPhoto} style={{ width: 72, height: 72, borderRadius: 50 }} />}
Deni Rinaldi's avatar
Deni Rinaldi committed
511
                </div>
d.arizona's avatar
d.arizona committed
512
              </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
513
            </Link>
d.arizona's avatar
d.arizona committed
514 515
          </div>
        }
Deni Rinaldi's avatar
Deni Rinaldi committed
516
        {open && application.length > 0 &&
Deni Rinaldi's avatar
Deni Rinaldi committed
517
          <div style={{ marginLeft: 20, marginTop: 10 }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
518
            <Typography style={{ color: '#525355', fontSize: 14, fontFamily: 'Nunito Sans, sans-serif' }}>Application</Typography>
d.arizona's avatar
d.arizona committed
519 520
          </div>
        }
d.arizona's avatar
d.arizona committed
521
        <List>
522 523 524
          {application.map((item, index) => (
            <div style={{ marginTop: index === 0 ? null : 5 }} >
              {item.subItem.length !== 0 ?
Deni Rinaldi's avatar
Deni Rinaldi committed
525 526 527 528 529 530 531 532 533 534
                <a data-tip={item.label} data-for={item.label}>
                  <div style={{ justifyContent: 'space-between', flexDirection: 'row', display: 'flex', paddingLeft: 5, paddingRight: 10, cursor: 'pointer' }} onClick={() => { handleCollapse(item) }}>
                    <ListItem key={item.label}>
                      <ListItemIcon style={{ minWidth: open ? 40 : 56 }}><img src={item.img} /></ListItemIcon>
                      <Typography style={{ fontFamily: 'Nunito Sans, sans-serif', color: '#525355', fontSize: 14 }}>{item.label}</Typography>
                    </ListItem>
                    {item.subItem.length !== 0 ? (item.collapse ? <ExpandLess style={{ color: "#525355", marginLeft: 50, alignSelf: 'center' }} /> : <ExpandMore style={{ color: "#525355", marginLeft: 50, alignSelf: 'center' }} />) : null}
                    {!open && (<ReactTooltip border={true} id={item.label} place="bottom" type="light" effect="solid" />)}
                  </div>
                </a>
535 536 537
                :
                <Link to={`${url}/${item.path}`}>
                  <div style={{ paddingLeft: 5 }} className={selectedIndex === item.label ? "active" : ""}>
Deni Rinaldi's avatar
Deni Rinaldi committed
538 539 540 541 542 543 544
                    <a data-tip={item.label} data-for={item.label}>
                      <ListItem button key={item.label} onClick={() => selectIndex(item.label)}>
                        <ListItemIcon style={{ minWidth: open ? 40 : 56 }}><img src={item.img} style={{ fill: '#525355' }} /></ListItemIcon>
                        <Typography style={{ fontFamily: 'Nunito Sans, sans-serif', color: '#525355', fontSize: 14 }}>{item.label}</Typography>
                      </ListItem>
                    </a>
                    {!open && (<ReactTooltip border={true} id={item.label} place="bottom" type="light" effect="solid" />)}
545 546 547 548 549 550 551 552 553 554
                  </div>
                </Link>
              }
              {item.subItem.length !== 0 &&
                <div>
                  <Collapse in={item.collapse} timeout="auto" unmountOnExit>
                    <List component="div" disablePadding>
                      {item.subItem.map((sub, indexs) => {
                        return (
                          <Link to={sub.label === "Logout" ? `/` : `${url}/${sub.path}`}>
Deni Rinaldi's avatar
Deni Rinaldi committed
555 556 557 558 559 560 561 562
                            <a data-tip={sub.label} data-for={sub.label}>
                              <div style={{ paddingLeft: 5, }} className={selectedSubIndex === sub.label ? "active" : ""} onClick={() => sub.label === "Logout" ? logout() : selectSub(sub.label)}>
                                <ListItem button style={{ paddingLeft: 57 }}>
                                  <Typography style={{ fontFamily: 'Nunito Sans, sans-serif', color: '#525355', fontSize: 14 }}>{sub.label}</Typography>
                                </ListItem>
                              </div>
                            </a>
                            {!open && (<ReactTooltip border={true} id={sub.label} place="bottom" type="light" effect="solid" />)}
563 564 565 566 567 568 569 570 571 572
                          </Link>
                        )
                      })}
                    </List>
                  </Collapse>
                </div>
              }
            </div>
          ))}
        </List>
Deni Rinaldi's avatar
Deni Rinaldi committed
573
        {open && setting.length > 0 &&
574
          <div style={{ marginLeft: 20 }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
575
            <Typography style={{ color: '#525355', fontSize: 14, fontFamily: 'Nunito Sans, sans-serif' }}>Setting</Typography>
576 577 578 579
          </div>
        }
        <List style={{ marginTop: !open ? -10 : null, marginLeft: !open ? -2 : null }}>
          {setting.map((item, index) => (
Deni Rinaldi's avatar
Deni Rinaldi committed
580
            <div style={{ marginTop: index === 0 ? null : 5 }} >
581
              {item.subItem.length !== 0 ?
Deni Rinaldi's avatar
Deni Rinaldi committed
582 583 584 585 586 587 588 589 590 591
                <a data-tip={item.label} data-for={item.label}>
                  <div style={{ justifyContent: 'space-between', flexDirection: 'row', display: 'flex', paddingLeft: 5, paddingRight: 10, cursor: 'pointer' }} onClick={() => { handleCollapseSetting(item) }}>
                    <ListItem key={item.label}>
                      <ListItemIcon style={{ minWidth: open ? 40 : 56 }}><img src={item.img} /></ListItemIcon>
                      <Typography style={{ fontFamily: 'Nunito Sans, sans-serif', color: '#525355', fontSize: 14 }}>{item.label}</Typography>
                    </ListItem>
                    {item.subItem.length !== 0 ? (item.collapse ? <ExpandLess style={{ color: "#525355", marginLeft: 50, alignSelf: 'center' }} /> : <ExpandMore style={{ color: "#525355", marginLeft: 50, alignSelf: 'center' }} />) : null}
                    {!open && (<ReactTooltip border={true} id={item.label} place="bottom" type="light" effect="solid" />)}
                  </div>
                </a>
d.arizona's avatar
d.arizona committed
592
                :
593 594
                <Link to={`${url}/${item.path}`}>
                  <div style={{ paddingLeft: 5 }} className={selectedIndex === item.label ? "active" : ""}>
Deni Rinaldi's avatar
Deni Rinaldi committed
595 596 597 598 599 600 601
                    <a data-tip={item.label} data-for={item.label}>
                      <ListItem button key={item.label} onClick={() => selectIndex(item.label)}>
                        <ListItemIcon style={{ minWidth: open ? 40 : 56 }}><img src={item.img} style={{ fill: '#525355' }} /></ListItemIcon>
                        <Typography style={{ fontFamily: 'Nunito Sans, sans-serif', color: '#525355', fontSize: 14 }}>{item.label}</Typography>
                      </ListItem>
                    </a>
                    {!open && (<ReactTooltip border={true} id={item.label} place="bottom" type="light" effect="solid" />)}
602 603
                  </div>
                </Link>
Deni Rinaldi's avatar
Deni Rinaldi committed
604
              }
605
              {item.subItem.length !== 0 &&
d.arizona's avatar
d.arizona committed
606
                <div>
d.arizona's avatar
d.arizona committed
607
                  <Collapse in={item.collapse} timeout="auto" unmountOnExit>
d.arizona's avatar
d.arizona committed
608
                    <List component="div" disablePadding>
Deni Rinaldi's avatar
Deni Rinaldi committed
609
                      {item.subItem.map((sub, indexs) => {
d.arizona's avatar
d.arizona committed
610
                        return (
d.arizona's avatar
d.arizona committed
611
                          <Link to={sub.label === "Logout" ? `/` : `${url}/${sub.path}`}>
Deni Rinaldi's avatar
Deni Rinaldi committed
612 613 614 615 616 617 618 619
                            <a data-tip={sub.label} data-for={sub.label}>
                              <div style={{ paddingLeft: 5, }} className={selectedSubIndex === sub.label ? "active" : ""} onClick={() => sub.label === "Logout" ? logout() : selectSub(sub.label)}>
                                <ListItem button style={{ paddingLeft: 57 }}>
                                  <Typography style={{ fontFamily: 'Nunito Sans, sans-serif', color: '#525355', fontSize: 14 }}>{sub.label}</Typography>
                                </ListItem>
                              </div>
                            </a>
                            {!open && (<ReactTooltip border={true} id={sub.label} place="bottom" type="light" effect="solid" />)}
d.arizona's avatar
d.arizona committed
620 621 622 623 624 625
                          </Link>
                        )
                      })}
                    </List>
                  </Collapse>
                </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
626 627
              }
            </div>
d.arizona's avatar
d.arizona committed
628 629
          ))}
        </List>
Deni Rinaldi's avatar
Deni Rinaldi committed
630
        {open &&
Deni Rinaldi's avatar
Deni Rinaldi committed
631
          <div style={{ marginLeft: 20, marginTop: 5, paddingBottom: 20 }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
632 633 634 635 636 637 638 639 640 641 642 643
            <button
              style={{
                outline: 'none',
                backgroundColor: 'transparent',
                cursor: 'pointer',
                borderColor: 'transparent',
              }}
              onClick={() => logout()}>
              <Typography style={{ color: '#525355', fontSize: 14, fontFamily: 'Nunito Sans, sans-serif' }}>Logout</Typography>
            </button>
          </div>
        }
d.arizona's avatar
d.arizona committed
644
      </Drawer>
d.arizona's avatar
d.arizona committed
645
      <div className={classes.content} style={{ justifyContent: 'space-between', padding: 0, backgroundColor: '#f8f8f8' }}>
Deni Rinaldi's avatar
Deni Rinaldi committed
646
        <div>
Deni Rinaldi's avatar
Deni Rinaldi committed
647
          {/* <div className={classes.toolbar} /> */}
d.arizona's avatar
d.arizona committed
648 649 650 651 652 653 654 655 656 657 658 659 660 661
          <MuiPickersUtilsProvider locale={localeID} utils={DateFnsUtils}>
            <Switch>
              {HomeRoutes.map((route, index) => (
                // You can render a <Route> in as many places
                // as you want in your app. It will render along
                // with any other <Route>s that also match the URL.
                // So, a sidebar or breadcrumbs or anything else
                // that requires you to render multiple things
                // in multiple places at the same URL is nothing
                // more than multiple <Route>s.
                <Route
                  key={index}
                  path={route.path}
                  // exact={route.exact}
d.arizona's avatar
d.arizona committed
662 663
                  location={location}
                  children={<route.main height={height} width={width} open={open} location={location} selectIndex={selectIndex.bind(this)}/>}
d.arizona's avatar
d.arizona committed
664 665 666 667
                />
              ))}
            </Switch>
          </MuiPickersUtilsProvider>
Deni Rinaldi's avatar
Deni Rinaldi committed
668
          {/* <Footer>
Deni Rinaldi's avatar
Deni Rinaldi committed
669
            <Typography style={{ fontSize: '12px' }}>© EKSAD Technology. All rights reserved.</Typography>
Deni Rinaldi's avatar
Deni Rinaldi committed
670
          </Footer> */}
d.arizona's avatar
d.arizona committed
671
        </div>
Deni Rinaldi's avatar
Deni Rinaldi committed
672

Deni Rinaldi's avatar
Deni Rinaldi committed
673
      </div>
d.arizona's avatar
d.arizona committed
674 675 676
    </div>
  );
}