julong-lib/utils/filterMenuByPermission.ts

48 lines
1.5 KiB
TypeScript

import get from "lodash.get";
export const filterMenuByPermission = (menuConfig: any[], permision: any[]) => {
const userPermissions = permision?.length
? permision.map((e) => get(e, "name"))
: [];
return menuConfig
.map((menu) => {
// Filter children berdasarkan permission user
const filteredChildren = menu.children?.filter((child: any) =>
child.permision.some((perm: any) => userPermissions.includes(perm))
);
// Periksa apakah menu utama atau salah satu child memiliki permission yang sesuai
const hasPermission =
menu.permision.some((perm: any) => userPermissions.includes(perm)) ||
(filteredChildren && filteredChildren.length > 0);
// Jika cocok, kembalikan menu dengan children yang sudah difilter
if (hasPermission) {
return {
...menu,
children: filteredChildren,
};
}
return null; // Tidak menyertakan menu yang tidak memiliki permission
})
.filter((menu) => menu !== null); // Hapus menu yang null
};
export const getFirstMenuWithUrl = (menuConfig: any[]): any | null => {
for (const menu of menuConfig) {
// Jika menu memiliki href langsung, kembalikan menu tersebut
if (menu.href) {
return menu?.href;
}
// Jika menu memiliki children, cari secara rekursif
if (menu.children) {
const childWithUrl = getFirstMenuWithUrl(menu.children);
if (childWithUrl) {
return childWithUrl;
}
}
}
// Jika tidak ada menu dengan URL, kembalikan null
return null;
};