Enhance sidebar menu functionality with localStorage integration for active menu state
This commit is contained in:
parent
fb0594957c
commit
ed605e4de9
|
|
@ -52,5 +52,13 @@ export class MenuItem extends Component {
|
|||
|
||||
selectMenu(menu) {
|
||||
this.menuService.selectMenu(menu);
|
||||
try {
|
||||
// استخدم xmlid إذا كان موجودًا، وإلا استخدم name كمعرّف ثابت
|
||||
const uniqueId = menu.xmlid || menu.name || menu.id;
|
||||
localStorage.setItem('odex_sidebar_active_menu', uniqueId);
|
||||
console.log('Saved menu:', uniqueId, menu.name);
|
||||
} catch (e) {
|
||||
console.error('Storage error:', e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -77,12 +77,19 @@ export class SidebarMenu extends Component {
|
|||
loadMenus() {
|
||||
const allMenus = this.menuService.getAll();
|
||||
const clonedMenus = structuredClone(allMenus);
|
||||
|
||||
// أنشئ خرائط بناءً على xmlid و name أيضًا
|
||||
const menuMap = new Map(clonedMenus.map(menu => [menu.id, menu]));
|
||||
const menuMapByXmlId = new Map(clonedMenus.map(menu => [menu.xmlid || menu.name, menu]));
|
||||
const parentMap = new Map();
|
||||
let finalMenuTree = [];
|
||||
|
||||
for (const menu of clonedMenus) {
|
||||
if (menu.children) {
|
||||
menu.children = menu.children.map(childId => menuMap.get(childId)).filter(Boolean);
|
||||
menu.children = menu.children.map(childId => {
|
||||
parentMap.set(childId, menu.id);
|
||||
return menuMap.get(childId);
|
||||
}).filter(Boolean);
|
||||
} else {
|
||||
menu.children = [];
|
||||
}
|
||||
|
|
@ -94,6 +101,32 @@ export class SidebarMenu extends Component {
|
|||
finalMenuTree = rootMenu.children;
|
||||
}
|
||||
|
||||
try {
|
||||
const activeId = localStorage.getItem('odex_sidebar_active_menu');
|
||||
console.log('Restored menu ID:', activeId);
|
||||
|
||||
// ابحث أولاً بـ xmlid/name، ثم بـ id
|
||||
let targetMenu = menuMapByXmlId.get(activeId) || menuMap.get(activeId);
|
||||
|
||||
if (targetMenu) {
|
||||
let currentId = targetMenu.id;
|
||||
while (parentMap.has(currentId)) {
|
||||
const parentId = parentMap.get(currentId);
|
||||
const parentMenu = menuMap.get(parentId);
|
||||
if (parentMenu) {
|
||||
parentMenu.isOpen = true;
|
||||
currentId = parentId;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.warn('Active menu not found in map:', activeId);
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Storage error:', e);
|
||||
}
|
||||
|
||||
this.state.menus.splice(0, this.state.menus.length, ...finalMenuTree);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue