49 lines
1.4 KiB
JavaScript
49 lines
1.4 KiB
JavaScript
import sidebarMenuList from 'config/sidebarMenu';
|
|
import { isArray, isEmpty } from 'lodash';
|
|
import { useAbilityContext } from 'hooks/utils';
|
|
|
|
export function useGetSidebarMenu() {
|
|
const ability = useAbilityContext();
|
|
|
|
return sidebarMenuList
|
|
.map((item) => {
|
|
const children = isArray(item.children)
|
|
? item.children.filter((childItem) => {
|
|
return isArray(childItem.permission)
|
|
? childItem.permission.some((perm) =>
|
|
ability.can(perm.ability, perm.subject),
|
|
)
|
|
: childItem?.permission?.ability && childItem?.permission?.subject
|
|
? ability.can(
|
|
childItem.permission.ability,
|
|
childItem.permission.subject,
|
|
)
|
|
: true;
|
|
})
|
|
: [];
|
|
|
|
return {
|
|
...item,
|
|
...(isArray(item.children)
|
|
? {
|
|
children,
|
|
}
|
|
: {}),
|
|
};
|
|
})
|
|
.filter((item) => {
|
|
return isArray(item.permission)
|
|
? item.permission.some((per) =>
|
|
ability.can(per.ability, per.subject),
|
|
)
|
|
: item?.permission?.ability && item?.permission?.subject
|
|
? ability.can(item.permission.ability, item.permission.subject)
|
|
: true;
|
|
})
|
|
.filter((item) =>
|
|
isEmpty(item.children) && !item.href && !item.label && !item.divider
|
|
? false
|
|
: true,
|
|
);
|
|
}
|