diff --git a/src/app/(withAuth)/dashboard/inquiry_privacy/fencing/page.js b/src/app/(withAuth)/dashboard/inquiry_privacy/fencing/page.js new file mode 100644 index 0000000..0a1b9ec --- /dev/null +++ b/src/app/(withAuth)/dashboard/inquiry_privacy/fencing/page.js @@ -0,0 +1,10 @@ +import InquiryPrivacyFencingPage from "@/components/dashboard/inquiryPrivacyFencing"; + +const Page = () => { + + return ( + + ); +}; + +export default Page; \ No newline at end of file diff --git a/src/app/(withAuth)/dashboard/template.js b/src/app/(withAuth)/dashboard/layout.js similarity index 77% rename from src/app/(withAuth)/dashboard/template.js rename to src/app/(withAuth)/dashboard/layout.js index 28b4ea0..cb48375 100644 --- a/src/app/(withAuth)/dashboard/template.js +++ b/src/app/(withAuth)/dashboard/layout.js @@ -1,9 +1,8 @@ -import { Box, Stack } from "@mui/material"; import HeaderWithLogo from "@/components/layouts/dashboard/headerWithLogo"; import HeaderWithSidebar from "@/components/layouts/dashboard/headerWithSidebar"; -import "react-toastify/dist/ReactToastify.css"; +import { Box, Stack } from "@mui/material"; -const Template = ({ children }) => { +const Layout = ({ children }) => { return ( @@ -12,6 +11,5 @@ const Template = ({ children }) => { ); -}; - -export default Template; +} +export default Layout; \ No newline at end of file diff --git a/src/app/(withAuth)/dashboard/page.js b/src/app/(withAuth)/dashboard/page.js index a7efa2a..c43c1ae 100644 --- a/src/app/(withAuth)/dashboard/page.js +++ b/src/app/(withAuth)/dashboard/page.js @@ -1,5 +1,3 @@ -"use client"; - const Page = () => { return ( diff --git a/src/components/dashboard/inquiryPrivacyFencing/index.jsx b/src/components/dashboard/inquiryPrivacyFencing/index.jsx new file mode 100644 index 0000000..539885d --- /dev/null +++ b/src/components/dashboard/inquiryPrivacyFencing/index.jsx @@ -0,0 +1,4 @@ +const InquiryPrivacyFencingPage = () => { + return <> +} +export default InquiryPrivacyFencingPage \ No newline at end of file diff --git a/src/core/components/SidebarMenu.jsx b/src/core/components/SidebarMenu.jsx index 326dd11..30a9297 100644 --- a/src/core/components/SidebarMenu.jsx +++ b/src/core/components/SidebarMenu.jsx @@ -7,11 +7,29 @@ import { useEffect, useReducer, useState } from "react"; import { filterMenuItems } from "../utils/filterMenuItems"; import { pageMenu } from "../utils/pageMenu"; +function selectPage(item, route) { + if (item.type === "page") { + return { + ...item, + selected: item.route === route, + showSubitems: item.route === route, + }; + } else if (item.Subitems && Array.isArray(item.Subitems)) { + const updatedSubitems = item.Subitems.map(subitem => selectPage(subitem, route)); + return { + ...item, + Subitems: updatedSubitems, + showSubitems: updatedSubitems.some(subitem => subitem.showSubitems || subitem.route === route), + }; + } + return item; +} + function reducer(state, action) { switch (action.type) { case "UPDATE_MENU": const _permissions = action.permissions || [] - const filteredPageMenu = filterMenuItems(pageMenu, ['all', ..._permissions]) + const filteredPageMenu = filterMenuItems(state, ['all', ..._permissions]) return filteredPageMenu case "COLLAPSE_MENU": return state.map((item) => @@ -62,40 +80,7 @@ function reducer(state, action) { : item; }); case "SELECTED": - return state.map((item) => { - return item.type === "page" - ? { - ...item, - selected: action.route === item.route, - showSubitems: item.route === action.route, - } - : item.Subitems && Array.isArray(item.Subitems) - ? { - ...item, - Subitems: item.Subitems.map((subitem) => { - return subitem.type === "page" - ? { - ...subitem, - selected: action.route === subitem.route, - showSubitems: subitem.route === action.route, - } - : subitem.Subitems && Array.isArray(subitem.Subitems) - ? { - ...subitem, - Subitems: subitem.Subitems.map((secondSubItem) => ({ - ...secondSubItem, - selected: secondSubItem.route === action.route, - })), - showSubitems: subitem.Subitems.some( - (secondSubItem) => secondSubItem.route === action.route - ), - } - : subitem; - }), - showSubitems: item.Subitems.some((subitem) => subitem.showSubitems), - } - : item; - }); + return state.map(item => selectPage(item, action.route)); default: throw new Error(); @@ -109,13 +94,15 @@ const SidebarMenu = () => { const [selectedKey, setSelectedKey] = useState(null); useEffect(() => { + dispatch({ type: "SELECTED", route: pathname }); + setSelectedKey(pathname); + }, [userPermissions, pathname]); + + useEffect(() => { + if (!userPermissions) return dispatch({ type: 'UPDATE_MENU', permissions: userPermissions }); }, [userPermissions]) - useEffect(() => { - dispatch({ type: "SELECTED", route: pathname }); - setSelectedKey(pathname); - }, [pathname]); useEffect(() => { selectedKey && @@ -126,11 +113,13 @@ const SidebarMenu = () => { }, [selectedKey]); return ( - - {menuItems.map((menuItem) => { - return ; - })} - + userPermissions && ( + + {menuItems.map((menuItem) => { + return ; + })} + + ) ); }; export default SidebarMenu; diff --git a/src/core/utils/pageMenu.js b/src/core/utils/pageMenu.js index 524468f..0129a78 100644 --- a/src/core/utils/pageMenu.js +++ b/src/core/utils/pageMenu.js @@ -195,6 +195,36 @@ export const pageMenu = [ }, ], }, + { + id: "inquiryPrivacyManagment", + label: "استعلام حریم راه", + type: "menu", + icon: , + hasSubitems: true, + Subitems: [ + { + id: "inquiryPrivacyManagmentFencing", + label: "احداث و بهره برداری دیوارکشی و مستحدثات", + type: "page", + route: prefix + "/dashboard/inquiry_privacy/fencing", + permissions: ['all'] + }, + { + id: "inquiryPrivacyManagmentRoad", + label: "احداث راه دسترسی اختصاصی", + type: "page", + route: prefix + "/dashboard/inquiry_privacy/road", + permissions: ['all'] + }, + { + id: "inquiryPrivacyManagmentInfrastructure", + label: "احداث و بهره برداری تاسیسات زیربنایی", + type: "page", + route: prefix + "/dashboard/inquiry_privacy/infrastructure", + permissions: ['all'] + }, + ] + }, { id: "safetyAndPrivacyManagment", label: "نگهداری حریم راه",