dynamic active sidebar

This commit is contained in:
2025-10-10 15:07:00 +07:00
parent a3666dbf41
commit c312577d50

View File

@@ -1,5 +1,5 @@
import React, { useState } from 'react';
import { Link } from 'react-router-dom';
import React, { useState, useEffect } from 'react';
import { Link, useLocation } from 'react-router-dom';
import { Menu, Typography, Image } from 'antd';
import { getSessionData } from '../components/Global/Formatter';
import {
@@ -145,7 +145,65 @@ const allItems = [
];
const LayoutMenu = () => {
const location = useLocation();
const [stateOpenKeys, setStateOpenKeys] = useState(['home']);
const [selectedKeys, setSelectedKeys] = useState(['home']);
// Function to get menu key from current path
const getMenuKeyFromPath = (pathname) => {
// Remove leading slash and split path
const pathParts = pathname.replace(/^\//, '').split('/');
// Handle different route patterns
if (pathname === '/dashboard/home') return 'home';
if (pathname === '/user') return 'user';
if (pathname === '/role') return 'role';
if (pathname === '/notification') return 'notification';
if (pathname === '/event-alarm') return 'event-alarm';
// Handle master routes
if (pathname.startsWith('/master/')) {
const subPath = pathParts[1];
return `master-${subPath}`;
}
// Handle history routes
if (pathname.startsWith('/history/')) {
const subPath = pathParts[1];
return `history-${subPath}`;
}
// Handle shift management routes
if (pathname.startsWith('/shift-management/')) {
const subPath = pathParts[1];
return `shift-${subPath}`;
}
return 'home'; // default
};
// Function to get parent key from menu key
const getParentKey = (key) => {
if (key.startsWith('master-')) return 'master';
if (key.startsWith('history-')) return 'history';
if (key.startsWith('shift-')) return 'shift-management';
return null;
};
// Update selected and open keys when route changes
useEffect(() => {
const currentKey = getMenuKeyFromPath(location.pathname);
setSelectedKeys([currentKey]);
const parentKey = getParentKey(currentKey);
// If current menu has parent, open it. Otherwise, close all dropdowns
if (parentKey) {
setStateOpenKeys([parentKey]);
} else {
setStateOpenKeys([]);
}
}, [location.pathname]);
const getLevelKeys = (items1) => {
const key = {};
@@ -213,7 +271,7 @@ const LayoutMenu = () => {
<Menu
mode="inline"
items={items}
defaultSelectedKeys={['home']}
selectedKeys={selectedKeys}
openKeys={stateOpenKeys}
onOpenChange={onOpenChange}
style={{