From d50bd40602afdd9de43b8678ff49c0441748e93e Mon Sep 17 00:00:00 2001 From: ncoronel Date: Thu, 23 Jul 2026 17:10:04 -0300 Subject: [PATCH] feat(menu-guard): enhance menu guard logic to support nested menus --- src/app/core/guards/menu.guard.ts | 9 ++++++++- src/app/core/services/tenant.interface.ts | 4 ++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/app/core/guards/menu.guard.ts b/src/app/core/guards/menu.guard.ts index d7ac8c8..f388316 100644 --- a/src/app/core/guards/menu.guard.ts +++ b/src/app/core/guards/menu.guard.ts @@ -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; diff --git a/src/app/core/services/tenant.interface.ts b/src/app/core/services/tenant.interface.ts index 6c7d3bb..0d8db60 100644 --- a/src/app/core/services/tenant.interface.ts +++ b/src/app/core/services/tenant.interface.ts @@ -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 {