Skip to content
Snippets Groups Projects
Commit 07844b86 authored by Johanna Szepanski's avatar Johanna Szepanski
Browse files

restructured tab construction and migrated to typescript

parent 7890057a
No related branches found
No related tags found
2 merge requests!612Release 5.0.0,!577CE-3395: Fix infinite loop
import { ReactNode, useEffect, useState } from "react";
import { Grid, IconButton, Stack } from "@mui/material"; import { Grid, IconButton, Stack } from "@mui/material";
import ArrowBackIcon from "@mui/icons-material/ArrowBack"; import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { useContext, useEffect, useState } from "react";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { import {
GlobalAppBarContext, useGlobalAppBarContext,
useIsCurrentUserPermitted, useIsCurrentUserPermitted,
TabPanel TabPanel
} from "@ess-ics/ce-ui-common"; } from "@ess-ics/ce-ui-common";
...@@ -11,45 +11,64 @@ import { IOCLiveStatus } from "../../components/IOC/IOCLiveStatus"; ...@@ -11,45 +11,64 @@ import { IOCLiveStatus } from "../../components/IOC/IOCLiveStatus";
import { IOCManage } from "../../components/IOC/IOCManage"; import { IOCManage } from "../../components/IOC/IOCManage";
import { IOCAdmin } from "../../components/IOC/IOCAdmin"; import { IOCAdmin } from "../../components/IOC/IOCAdmin";
import { applicationTitle } from "../../components/common/Helper"; import { applicationTitle } from "../../components/common/Helper";
import { GlobalAppBarContext } from "../../types/common";
import { IocDetails } from "../../store/deployApi";
export function IOCDetailsView({ ioc }) { interface IOCDetailsViewProps {
ioc: IocDetails;
}
interface Tab {
label: string;
content: ReactNode;
}
const getTabs = (ioc: IocDetails): Tab[] => [
{
label: "Status",
content: <IOCLiveStatus ioc={ioc} />
},
{
label: "Management",
content: <IOCManage ioc={ioc} />
},
{
label: "Admin",
content: <IOCAdmin ioc={ioc} />
}
];
export const IOCDetailsView = ({ ioc }: IOCDetailsViewProps) => {
const [tabIndex, setTabIndex] = useState(0); const [tabIndex, setTabIndex] = useState(0);
const { setTitle } = useContext(GlobalAppBarContext); const [tabs, setTabs] = useState<Tab[] | null>(null);
const { setTitle }: GlobalAppBarContext = useGlobalAppBarContext();
const navigate = useNavigate(); const navigate = useNavigate();
const isPermittedAdmin = useIsCurrentUserPermitted({
allowedRoles: ["DeploymentToolAdmin"]
});
const isPermittedManagement = useIsCurrentUserPermitted({
allowedRoles: ["DeploymentToolAdmin", "DeploymentToolIntegrator"]
});
useEffect(() => { useEffect(() => {
if (ioc) { if (ioc) {
setTitle(applicationTitle(`IOC Details: ${ioc.namingName}`)); setTitle(applicationTitle(`IOC Details: ${ioc.namingName}`));
} }
}, [ioc, setTitle]); }, [ioc, setTitle]);
const tabs = [ useEffect(() => {
{ if (ioc) {
label: "Status", if (isPermittedAdmin) {
content: <IOCLiveStatus ioc={ioc} /> setTabs(getTabs(ioc));
} else if (isPermittedManagement) {
setTabs(getTabs(ioc).filter((tab) => tab.label !== "Admin"));
} else {
setTabs(getTabs(ioc).filter((tab) => tab.label === "Status"));
}
} }
]; }, [ioc, isPermittedAdmin, isPermittedManagement]);
const isPermittedManagement = useIsCurrentUserPermitted({
allowedRoles: ["DeploymentToolAdmin", "DeploymentToolIntegrator"]
});
const isPermittedAdmin = useIsCurrentUserPermitted({
allowedRoles: ["DeploymentToolAdmin"]
});
if (isPermittedManagement) {
tabs.push({
label: "Management",
content: <IOCManage ioc={ioc} />
});
}
if (isPermittedAdmin) {
tabs.push({
label: "Admin",
content: <IOCAdmin ioc={ioc} />
});
}
return ( return (
<Grid <Grid
...@@ -61,28 +80,30 @@ export function IOCDetailsView({ ioc }) { ...@@ -61,28 +80,30 @@ export function IOCDetailsView({ ioc }) {
xs={12} xs={12}
style={{ paddingBottom: 0 }} style={{ paddingBottom: 0 }}
> >
<TabPanel {tabs && (
tabs={tabs} <TabPanel
initialIndex={tabIndex} tabs={tabs}
onTabChange={(index) => setTabIndex(index)} initialIndex={tabIndex}
TabsProps={{ centered: true, sx: { flex: 1 } }} onTabChange={(index: number) => setTabIndex(index)}
renderTabs={(tabs) => ( TabsProps={{ centered: true, sx: { flex: 1 } }}
<Stack renderTabs={(tabs: ReactNode) => (
flexDirection="row" <Stack
justifyContent="space-between" flexDirection="row"
> justifyContent="space-between"
<IconButton
color="inherit"
onClick={() => navigate(-1)}
size="large"
> >
<ArrowBackIcon /> <IconButton
</IconButton> color="inherit"
{tabs} onClick={() => navigate(-1)}
</Stack> size="large"
)} >
/> <ArrowBackIcon />
</IconButton>
{tabs}
</Stack>
)}
/>
)}
</Grid> </Grid>
</Grid> </Grid>
); );
} };
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment