Enhance sidebar menu functionality with localStorage integration for active menu state

This commit is contained in:
abuzaid4exp 2025-11-17 10:35:22 +02:00
parent fb0594957c
commit ed605e4de9
2 changed files with 42 additions and 1 deletions

View File

@ -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);
}
}
}

View File

@ -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);
}
}