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) {
|
selectMenu(menu) {
|
||||||
this.menuService.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() {
|
loadMenus() {
|
||||||
const allMenus = this.menuService.getAll();
|
const allMenus = this.menuService.getAll();
|
||||||
const clonedMenus = structuredClone(allMenus);
|
const clonedMenus = structuredClone(allMenus);
|
||||||
|
|
||||||
|
// أنشئ خرائط بناءً على xmlid و name أيضًا
|
||||||
const menuMap = new Map(clonedMenus.map(menu => [menu.id, menu]));
|
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 = [];
|
let finalMenuTree = [];
|
||||||
|
|
||||||
for (const menu of clonedMenus) {
|
for (const menu of clonedMenus) {
|
||||||
if (menu.children) {
|
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 {
|
} else {
|
||||||
menu.children = [];
|
menu.children = [];
|
||||||
}
|
}
|
||||||
|
|
@ -94,6 +101,32 @@ export class SidebarMenu extends Component {
|
||||||
finalMenuTree = rootMenu.children;
|
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);
|
this.state.menus.splice(0, this.state.menus.length, ...finalMenuTree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue