66 lines
1.8 KiB
TypeScript
66 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 === item.title && page.path === item.to) //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
|
|
}
|
|
|