Files
ota-admin-portal/src/components/Layouts/SideMenu.jsx
Paul Adamsen 897d1e9869 CEC-3360 - Magna portal viewable by Fisker-QA (#299)
* CEC-3360 - Magna portal viewable by Fisker-QA

* unit test

* more roles for qa

* use role manufacture

* fix test

* fix env vars

* further changes

* new token

* testing improvements, etc

* Remove RebuildPermissions

* Manga dashboards

* Fix snapshot

---------

Co-authored-by: jwu-fisker <jwu@fiskerinc.com>
2023-03-23 18:10:02 -04:00

126 lines
3.4 KiB
JavaScript

import { List } from "@material-ui/core";
import AssessmentIcon from "@material-ui/icons/Assessment";
import BugReportIcon from "@material-ui/icons/BugReport";
import BuildIcon from "@material-ui/icons/Build";
import CloudDownloadIcon from "@material-ui/icons/CloudDownload";
import CommuteIcon from "@material-ui/icons/Commute";
import DirectionsCarIcon from "@material-ui/icons/DirectionsCar";
import HomeIcon from "@material-ui/icons/Home";
import SettingsInputCompositeIcon from "@material-ui/icons/SettingsInputComposite";
import { default as React, useEffect, useState } from "react";
import { getStaticDashboardSubmenu } from "../../services/staticDashboards";
import { hasRole, Permissions } from "../../utils/roles";
import { useUserContext } from "../Contexts/UserContext";
import SupersetDashboardList from "../SupersetDashboardList/SupersetDashboardList";
import { ExpandableSideMenuItem, MenuItem } from "./MenuItem";
const menuData = [
{
label: "Home",
to: "/home",
icon: <HomeIcon />,
roles: [],
},
{
label: "Deployments",
to: "/packages",
icon: <CloudDownloadIcon />,
rolesPerProvider: Permissions.FiskerMagnaRead,
},
{
label: "Vehicles",
to: "/vehicles",
icon: <DirectionsCarIcon />,
rolesPerProvider: Permissions.FiskerMagnaRead,
},
{
label: "Issues",
to: "/issues",
icon: <BugReportIcon />,
rolesPerProvider: Permissions.FiskerRead,
},
{
label: "Fleets",
to: "/fleets",
icon: <CommuteIcon />,
rolesPerProvider: Permissions.FiskerRead,
},
{
label: "Datascope",
to: null,
icon: <AssessmentIcon />,
rolesPerProvider: Permissions.FiskerMagnaRead,
component: SupersetDashboardList,
submenus: getStaticDashboardSubmenu(Permissions.FiskerMagnaRead),
},
{
label: "Suppliers",
to: "/suppliers",
icon: <SettingsInputCompositeIcon />,
rolesPerProvider: Permissions.FiskerSupplierAdmin,
},
{
label: "Tools",
to: "/tools/certificates/add",
icon: <BuildIcon />,
rolesPerProvider: Permissions.FiskerTools,
submenus: [
{
label: "Certificate",
to: "/tools/certificates/add",
rolesPerProvider: Permissions.FiskerCertificate,
},
{
label: "Security.dll",
to: "/tools/security-dll",
rolesPerProvider: Permissions.Magna,
},
{
label: "SMS",
to: "/tools/sms/send",
rolesPerProvider: Permissions.FiskerCreate,
},
],
},
];
const SideMenu = () => {
const { groups, providers } = useUserContext();
const [menu, setMenu] = useState(menuData);
useEffect(() => {
filterMenu(groups, providers, setMenu);
}, [groups, providers]);
return (
<List>
{menu.map((item, index) => {
const key = `menu-${index}`;
if (item.submenus)
return <ExpandableSideMenuItem key={key} item={item} />;
return <MenuItem key={key} item={item} />;
})}
</List>
);
};
const reduceMenu = (data, groups, providers) => {
return data.reduce((result, item) => {
if (hasRole(groups, item.rolesPerProvider, providers)) {
if (item.submenus) {
item.submenus = reduceMenu(item.submenus, groups, providers);
}
result.push(item);
}
return result;
}, []);
}
const filterMenu = (groups, providers, setMenu) => {
const filteredMenu = reduceMenu(menuData, groups, providers);
setMenu(filteredMenu);
};
export default SideMenu;