change sidebar

This commit is contained in:
AmirHossein Mahmoodi
2023-12-19 12:07:31 +03:30
parent 4cc54bf91d
commit 2d22f12dc4

View File

@@ -8,51 +8,34 @@ import useUser from "@/lib/app/hooks/useUser";
function reducer(state, action) {
switch (action.type) {
case "COLLAPSE_MENU":
return state.map((itemsArr) =>
itemsArr.map((item) =>
action.key === item.key ? {...item, showSubItem: !item.showSubItem} : item
)
);
return state.map((itemsArr) => itemsArr.map((item) => action.key === item.key ? {
...item,
showSubItem: !item.showSubItem
} : item));
case "SELECTED":
return state.map((itemsArr) =>
itemsArr.map((item) => {
return item.type === "page"
? {...item, selected: action.route === item.route, routing: false}
: item.subItem && Array.isArray(item.subItem)
? {
...item,
subItem: item.subItem.map((subitem) => ({
...subitem,
selected: subitem.route === action.route,
routing: false
})),
showSubItem: item.subItem.some(
(subitem) => subitem.selected
),
}
: item;
})
);
return state.map((itemsArr) => itemsArr.map((item) => {
return item.type === "page" ? {
...item,
selected: action.route === item.route,
routing: false
} : item.subItem && Array.isArray(item.subItem) ? {
...item, subItem: item.subItem.map((subitem) => ({
...subitem, selected: subitem.route === action.route, routing: false
})), showSubItem: item.subItem.some((subitem) => subitem.selected),
} : item;
}));
case "SELECTING":
return state.map((itemsArr) =>
itemsArr.map((item) => {
return item.type === "page"
? {...item, selected: action.route === item.route, routing: action.route === item.route}
: item.subItem && Array.isArray(item.subItem)
? {
...item,
subItem: item.subItem.map((subitem) => ({
...subitem,
selected: subitem.route === action.route,
routing: subitem.route === action.route
})),
showSubItem: item.subItem.some(
(subitem) => subitem.selected
),
}
: item;
})
);
return state.map((itemsArr) => itemsArr.map((item) => {
return item.type === "page" ? {
...item,
selected: action.route === item.route,
routing: action.route === item.route
} : item.subItem && Array.isArray(item.subItem) ? {
...item, subItem: item.subItem.map((subitem) => ({
...subitem, selected: subitem.route === action.route, routing: subitem.route === action.route
})), showSubItem: item.subItem.some((subitem) => subitem.selected),
} : item;
}));
default:
throw new Error();
}
@@ -81,28 +64,21 @@ export default function SidebarList({handleDrawerToggle}) {
useEffect(() => {
selectedKey && document.querySelector(`[data-route="${selectedKey}"]`)?.scrollIntoView({
behavior: "smooth",
block: "center"
behavior: "smooth", block: "center"
});
}, [selectedKey]);
return (
<List dense={true} sx={{overflow: "scroll"}}>
{itemMenu.map((itemArr, index) => (
<Fragment key={index}>
{itemArr.map((item) =>
<Fragment key={item.key}>
{(user?.permissions?.includes(item.permission) || item.permission === "all") &&
<SidebarListItem
item={item}
dispatch={dispatch}
handleDrawerToggle={handleDrawerToggle}
/>}
</Fragment>
)}
return (<List dense={true} sx={{overflow: "scroll", p: 0}}>
{itemMenu.map((itemArr, index) => (<Fragment key={index}>
{itemArr.map((item) => <Fragment key={item.key}>
{(user?.permissions?.includes(item.permission) || item.permission === "all") && <SidebarListItem
item={item}
dispatch={dispatch}
handleDrawerToggle={handleDrawerToggle}
/>}
</Fragment>)}
<Divider/>
</Fragment>
))}
</Fragment>))}
</List>
);