Files
mtdb_movie/common/resources/client/menus/use-custom-menu.ts
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

43 lines
1.3 KiB
TypeScript
Executable File

import {MenuConfig} from '../core/settings/settings';
import {useAuth} from '../auth/use-auth';
import {useSettings} from '../core/settings/use-settings';
import dot from 'dot-object';
import {useMemo} from 'react';
export function useCustomMenu(menuOrPosition?: string | MenuConfig) {
const settings = useSettings();
const {user, hasPermission} = useAuth();
return useMemo(() => {
if (!menuOrPosition) {
return null;
}
const menu =
typeof menuOrPosition === 'string'
? settings.menus?.find(s => s.positions?.includes(menuOrPosition))
: menuOrPosition;
if (menu) {
menu.items = menu.items.filter(item => {
const hasRoles = (item.roles || []).every(
a => user?.roles.find(b => b.id === a),
);
const hasPermissions = (item.permissions || []).every(a =>
hasPermission(a),
);
const hasSettings =
!item.settings ||
Object.entries(item.settings).every(([key, value]) => {
return dot.pick(key, settings) == value;
});
// make sure item has action, otherwise router link will error out
return item.action && hasRoles && hasPermissions && hasSettings;
});
}
return menu;
}, [hasPermission, settings, menuOrPosition, user]);
}