67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
import type { SidebarItem } from "~/types/menuAkses/sidebar";
|
|
import type { PageAccess } from "~/types/menuAkses/access";
|
|
interface SidebarItemWithPermissions extends SidebarItem {
|
|
permissions: string[];
|
|
}
|
|
|
|
export function mergeSidebar(
|
|
menuItems: SidebarItem[],
|
|
allowedPages: PageAccess[]
|
|
): SidebarItem[] {
|
|
const result: SidebarItem[] = [];
|
|
|
|
for (const item of menuItems) {
|
|
// Jika punya anak (children)
|
|
//console.log('item', item);
|
|
//console.log('allowedPages', allowedPages);
|
|
if (Array.isArray(item.children)) {
|
|
const filteredChildren = mergeSidebar(item.children, allowedPages);
|
|
// console.log('ada array item', item);
|
|
|
|
//console.log('filteredChildren', filteredChildren);
|
|
if (filteredChildren.length > 0) {
|
|
result.push({
|
|
...item,
|
|
children: filteredChildren,
|
|
});
|
|
}
|
|
//console.log('result', result);
|
|
}
|
|
|
|
// Jika punya path, cocokkan dengan json dummy / backend
|
|
else if (item.to) {
|
|
const matchPage = allowedPages.find(
|
|
(page) =>
|
|
page.title?.toLowerCase() === item.title?.toLowerCase() &&
|
|
page.path?.toLowerCase() === item.to?.toLowerCase()
|
|
); //cocokkan title dan path link path halaman
|
|
|
|
//console.log('match', matchPage,matchPage?.permissions);
|
|
if (matchPage && matchPage.permissions?.includes("view")) {
|
|
result.push({
|
|
...item,
|
|
permissions: matchPage?.permissions,
|
|
} as SidebarItemWithPermissions);
|
|
}
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
export function mergeSidebarIcon(staticIcon: any[], IconAccess: any[]) {
|
|
const result: any[] = [];
|
|
|
|
for (const item of staticIcon) {
|
|
const matchIcon = IconAccess.find((icon) => icon.id === item.id);
|
|
//console.log('matchIcon', matchIcon);
|
|
if (matchIcon) {
|
|
result.push({
|
|
...item,
|
|
});
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|