1
This commit is contained in:
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+1
-1
@@ -28,7 +28,7 @@
|
|||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
<script type="module" crossorigin src="/assets/index-COnmuf9j.js"></script>
|
<script type="module" crossorigin src="/assets/index-BjAuFGyZ.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="/assets/index-eLRg4pQk.css">
|
<link rel="stylesheet" crossorigin href="/assets/index-eLRg4pQk.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -434,15 +434,26 @@ const AppLayout: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
)} */}
|
)} */}
|
||||||
{(() => {
|
{(() => {
|
||||||
const groups = menuItems.filter(m => (m.menu_type ?? m.menuType) === 'group');
|
// Build child map for all menu items
|
||||||
const pages = menuItems.filter(m => (m.menu_type ?? m.menuType) !== 'group');
|
|
||||||
const childMap: Record<string, MenuConfig[]> = {};
|
const childMap: Record<string, MenuConfig[]> = {};
|
||||||
pages.filter(m => m.parent_id ?? m.parentId).forEach(m => {
|
menuItems.forEach(m => {
|
||||||
const pid = (m.parent_id ?? m.parentId) as string;
|
const pid = m.parent_id ?? m.parentId;
|
||||||
if (!childMap[pid]) childMap[pid] = [];
|
if (pid) {
|
||||||
childMap[pid].push(m);
|
if (!childMap[pid]) childMap[pid] = [];
|
||||||
|
childMap[pid].push(m);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
const topLevel = pages.filter(m => !(m.parent_id ?? m.parentId));
|
|
||||||
|
// Get top-level items (parent_id is null/undefined)
|
||||||
|
const topLevelItems = menuItems.filter(m => !(m.parent_id ?? m.parentId));
|
||||||
|
|
||||||
|
// Sort top-level items by sort_order
|
||||||
|
topLevelItems.sort((a, b) => {
|
||||||
|
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
||||||
|
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
||||||
|
return orderA - orderB;
|
||||||
|
});
|
||||||
|
|
||||||
const items: React.ReactNode[] = [];
|
const items: React.ReactNode[] = [];
|
||||||
|
|
||||||
const renderMenuItem = (item: MenuConfig, depth: number = 0) => {
|
const renderMenuItem = (item: MenuConfig, depth: number = 0) => {
|
||||||
@@ -470,37 +481,32 @@ const AppLayout: React.FC = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Render groups with children
|
// Render top-level items and their children in order
|
||||||
groups.sort((a, b) => {
|
topLevelItems.forEach(item => {
|
||||||
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
const menuType = item.menu_type ?? item.menuType;
|
||||||
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
|
||||||
return orderA - orderB;
|
if (menuType === 'group') {
|
||||||
}).forEach(g => {
|
// Render group with its children
|
||||||
const children = (childMap[g.id] || []).sort((a, b) => {
|
const children = (childMap[item.id] || []).sort((a, b) => {
|
||||||
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
||||||
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
||||||
return orderA - orderB;
|
return orderA - orderB;
|
||||||
});
|
});
|
||||||
items.push(
|
items.push(
|
||||||
<div key={g.id}>
|
<div key={item.id}>
|
||||||
<div style={{
|
<div style={{
|
||||||
color: '#94a3b8', fontSize: 12, fontWeight: 600,
|
color: '#94a3b8', fontSize: 12, fontWeight: 600,
|
||||||
padding: '12px 16px 6px', letterSpacing: 0.5, textTransform: 'uppercase',
|
padding: '12px 16px 6px', letterSpacing: 0.5, textTransform: 'uppercase',
|
||||||
}}>
|
}}>
|
||||||
{g.label}
|
{item.label}
|
||||||
|
</div>
|
||||||
|
{children.map(c => renderMenuItem(c, 1))}
|
||||||
</div>
|
</div>
|
||||||
{children.map(c => renderMenuItem(c, 1))}
|
);
|
||||||
</div>
|
} else {
|
||||||
);
|
// Render standalone page
|
||||||
});
|
items.push(renderMenuItem(item));
|
||||||
|
}
|
||||||
// Render top-level pages
|
|
||||||
topLevel.sort((a, b) => {
|
|
||||||
const orderA = typeof a.sortOrder === 'number' ? a.sortOrder : Infinity;
|
|
||||||
const orderB = typeof b.sortOrder === 'number' ? b.sortOrder : Infinity;
|
|
||||||
return orderA - orderB;
|
|
||||||
}).forEach(m => {
|
|
||||||
items.push(renderMenuItem(m));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return items;
|
return items;
|
||||||
|
|||||||
Reference in New Issue
Block a user