feat(menu): refactor menu handling to use labels directly and remove unused functions

This commit is contained in:
2026-07-24 10:12:11 -03:00
parent 974f947fc6
commit 752c5fceea
17 changed files with 130 additions and 71 deletions

View File

@@ -1,10 +1,10 @@
<div class="sidebar-container">
<h2 class="sidebar-title">MI CUENTA</h2>
<h2 class="sidebar-title">{{ menu()?.label }}</h2>
<div class="divider"></div>
<nav class="sidebar-nav" aria-label="Secciones de mi cuenta">
@for (menu of submenues(); track menu.code) {
<a [routerLink]="menu.route" routerLinkActive="active" class="nav-link">
{{ menuLabel(menu) }}
{{ menu.label }}
</a>
}
</nav>

View File

@@ -7,6 +7,7 @@
font-weight: bold;
color: #1a1a1a;
margin-bottom: 12px;
text-transform: uppercase;
}
.divider {
height: 1px;

View File

@@ -26,13 +26,15 @@ describe('AccountSidebar', () => {
{
id: 1,
code: 'account',
label: 'Mi cuenta',
parent_menu_code: null,
content_type: 'dynamic',
route: '/mi-cuenta',
submenues: [
{
id: 2,
code: 'profile',
code: 'account.profile',
label: 'Datos personales',
parent_menu_code: 'account',
content_type: 'dynamic',
route: '/mi-cuenta/datos-personales',
@@ -40,7 +42,8 @@ describe('AccountSidebar', () => {
},
{
id: 3,
code: 'purchases',
code: 'account.purchases',
label: 'Mis compras',
parent_menu_code: 'account',
content_type: 'dynamic',
route: '/mi-cuenta/compras',
@@ -68,6 +71,7 @@ describe('AccountSidebar', () => {
const element = fixture.nativeElement as HTMLElement;
const links = Array.from(element.querySelectorAll<HTMLAnchorElement>('.nav-link'));
expect(element.querySelector('.sidebar-title')?.textContent?.trim()).toBe('Mi cuenta');
expect(links.map((link) => link.textContent?.trim())).toEqual([
'Datos personales',
'Mis compras',

View File

@@ -1,8 +1,7 @@
import { Component, computed, inject } from '@angular/core';
import { RouterLink, RouterLinkActive } from '@angular/router';
import { findMenu, getMenuLabel } from '../../../../../../core/services/menu.utils';
import { Menu } from '../../../../../../core/services/tenant.interface';
import { findMenu } from '../../../../../../core/services/menu.utils';
import { TenantService } from '../../../../../../core/services/tenant.service';
@Component({
@@ -15,11 +14,8 @@ import { TenantService } from '../../../../../../core/services/tenant.service';
export class AccountSidebar {
private readonly tenantService = inject(TenantService);
protected readonly submenues = computed(
() => findMenu(this.tenantService.tenant()?.menues ?? [], 'account')?.submenues ?? [],
protected readonly menu = computed(() =>
findMenu(this.tenantService.tenant()?.menues ?? [], 'account'),
);
protected menuLabel(menu: Menu): string {
return getMenuLabel(menu);
}
protected readonly submenues = computed(() => this.menu()?.submenues ?? []);
}