feat(menu-guard): enhance menu guard logic to support nested menus
This commit is contained in:
@@ -1,6 +1,13 @@
|
||||
import { inject } from '@angular/core';
|
||||
import { CanActivateFn, Router } from '@angular/router';
|
||||
import { TenantService } from '../services/tenant.service';
|
||||
import { Menu } from '../services/tenant.interface';
|
||||
|
||||
function containsMenu(menues: Menu[], menuCode: string): boolean {
|
||||
return menues.some(
|
||||
menu => menu.code === menuCode || containsMenu(menu.submenues ?? [], menuCode)
|
||||
);
|
||||
}
|
||||
|
||||
export const hasMenuGuard = (menuCode: string): CanActivateFn => {
|
||||
return () => {
|
||||
@@ -13,7 +20,7 @@ export const hasMenuGuard = (menuCode: string): CanActivateFn => {
|
||||
return router.createUrlTree(['/']);
|
||||
}
|
||||
|
||||
const hasMenu = tenant.menues?.some(menu => menu.code === menuCode) ?? false;
|
||||
const hasMenu = containsMenu(tenant.menues ?? [], menuCode);
|
||||
|
||||
if (hasMenu) {
|
||||
return true;
|
||||
|
||||
@@ -26,7 +26,11 @@ export interface EventConfig {
|
||||
export interface Menu {
|
||||
id: number;
|
||||
code: string;
|
||||
parent_menu_code: string | null;
|
||||
content_type: 'static' | 'dynamic';
|
||||
route: string;
|
||||
static_content?: unknown;
|
||||
submenues: Menu[];
|
||||
}
|
||||
|
||||
export interface SocialMedia {
|
||||
|
||||
Reference in New Issue
Block a user