-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathNestedNavs.tsx
93 lines (84 loc) · 2.76 KB
/
NestedNavs.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
"use client";
import { FC, useState, Fragment } from "react";
import List from "@mui/material/List";
import ListItemButton from "@mui/material/ListItemButton";
import ListItemIcon from "@mui/material/ListItemIcon";
import ListItemText from "@mui/material/ListItemText";
import KeyboardArrowRight from "@mui/icons-material/KeyboardArrowRight";
import Collapse from "@mui/material/Collapse";
import { useRouter } from "next/navigation";
import { NavigationOptions } from "src/global/types";
import { NestedNavOptioms } from "./Types";
const DEFUALT_NESTED_LEFT_PADDING: number = 1;
const NestedNavs: FC<NestedNavOptioms> = ({ navigation, nested = 2 }) => {
const { icon: NavIcon } = navigation;
const [open, setOpen] = useState<boolean>(false);
const router = useRouter();
const onNavigationHandle = (href: string, isNested: boolean) => {
if (isNested) {
setOpen((prevState: boolean) => !prevState);
return;
}
router.push(href);
};
return (
<Fragment key={navigation.key}>
<ListItemButton
onClick={() =>
onNavigationHandle(navigation.href, Boolean(navigation.nested))
}
sx={{
pl: nested,
}}
>
<ListItemIcon>
<NavIcon fontSize={nested === 2 ? "medium" : "small"} />
</ListItemIcon>
<ListItemText primary={navigation.name} />
{Boolean(navigation.nested) && (
<KeyboardArrowRight
sx={{
transform: open ? "rotate(90deg)" : "rotate(0deg)",
transition: "0.2s",
}}
/>
)}
</ListItemButton>
{Boolean(navigation.nested) && (
<Collapse in={open}>
<List disablePadding>
{navigation?.nested?.map((nest: NavigationOptions) => {
if (!Boolean(nest.nested)) {
const { icon: NestIcon } = nest;
return (
<ListItemButton
key={nest.key}
onClick={() =>
onNavigationHandle(nest.href, Boolean(nest.nested))
}
sx={{
pl: nested + DEFUALT_NESTED_LEFT_PADDING,
}}
>
<ListItemIcon>
<NestIcon fontSize="small" />
</ListItemIcon>
<ListItemText primary={nest.name} />
</ListItemButton>
);
}
return (
<NestedNavs
key={nest.key}
navigation={nest}
nested={nested + DEFUALT_NESTED_LEFT_PADDING}
/>
);
})}
</List>
</Collapse>
)}
</Fragment>
);
};
export default NestedNavs;