feat(tickets): include tickets in immersive account dropdown and adjust visibility logic
This commit is contained in:
@@ -49,14 +49,17 @@
|
||||
</form>
|
||||
}
|
||||
|
||||
@if (ticketsMenu(); as menu) {
|
||||
<app-button
|
||||
variant="secondary"
|
||||
hostClass="immersive-header__tickets"
|
||||
(click)="ticketsClick.emit()"
|
||||
>
|
||||
{{ menu.label }}
|
||||
</app-button>
|
||||
@if (!showHero()) {
|
||||
@if (ticketsMenu(); as menu) {
|
||||
<app-button
|
||||
variant="secondary"
|
||||
hostClass="immersive-header__tickets"
|
||||
data-testid="store-header-tickets"
|
||||
(click)="ticketsClick.emit()"
|
||||
>
|
||||
{{ menu.label }}
|
||||
</app-button>
|
||||
}
|
||||
}
|
||||
|
||||
@if (displayCart()) {
|
||||
|
||||
@@ -305,6 +305,33 @@ describe('StoreLayoutComponent', () => {
|
||||
expect(element.querySelector('app-cart-icon')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('keeps tickets in the immersive account dropdown while hiding its root action', () => {
|
||||
const authService = TestBed.inject(AuthService);
|
||||
(authService.isAuthenticated as any).set(true);
|
||||
(authService.user as any).set({
|
||||
id: 1,
|
||||
nombre_apellido: 'Ada Lovelace',
|
||||
email: 'ada@example.com',
|
||||
});
|
||||
tenantState.set({ ...tenant, header_type: 'immersive' });
|
||||
|
||||
const fixture = TestBed.createComponent(StoreLayoutComponent);
|
||||
fixture.detectChanges();
|
||||
|
||||
const element = fixture.nativeElement as HTMLElement;
|
||||
expect(element.querySelector('[data-testid="store-header-tickets"]')).toBeNull();
|
||||
|
||||
element.querySelector<HTMLButtonElement>('app-icon-button[variant="user"] button')?.click();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('[data-testid="user-dropdown-account.tickets"]')).not.toBeNull();
|
||||
|
||||
(fixture.componentInstance as any).isHomeRoute.set(false);
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(element.querySelector('[data-testid="store-header-tickets"]')).not.toBeNull();
|
||||
});
|
||||
|
||||
it('shows immersive categories below the header and navigates on selection', () => {
|
||||
tenantState.set({
|
||||
...tenant,
|
||||
@@ -708,7 +735,7 @@ describe('StoreLayoutComponent', () => {
|
||||
expect(
|
||||
compiled.querySelector('[data-testid="user-dropdown-account.purchases"]'),
|
||||
).not.toBeNull();
|
||||
expect(compiled.querySelector('[data-testid="user-dropdown-account.tickets"]')).toBeNull();
|
||||
expect(compiled.querySelector('[data-testid="user-dropdown-account.tickets"]')).not.toBeNull();
|
||||
expect(router.navigate).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
@@ -783,7 +810,7 @@ describe('StoreLayoutComponent', () => {
|
||||
|
||||
expect(profileLink?.getAttribute('href')).toBe('/mi-cuenta/datos-personales');
|
||||
expect(purchasesLink?.getAttribute('href')).toBe('/mi-cuenta/compras');
|
||||
expect(ticketsLink).toBeUndefined();
|
||||
expect(ticketsLink?.getAttribute('href')).toBe('/mi-cuenta/tickets');
|
||||
expect(logoutButton).toBeDefined();
|
||||
|
||||
logoutButton!.click();
|
||||
|
||||
@@ -211,10 +211,12 @@ export class StoreLayoutComponent implements OnInit {
|
||||
|
||||
const profile = accountMenu.submenues.find((menu) => menu.code === 'account.profile');
|
||||
const purchases = accountMenu.submenues.find((menu) => menu.code === 'account.purchases');
|
||||
const tickets = accountMenu.submenues.find((menu) => menu.code === 'account.tickets');
|
||||
|
||||
return [
|
||||
...(profile ? [{ ...accountMenu, route: profile.route }] : []),
|
||||
...(purchases ? [purchases] : []),
|
||||
...(tickets ? [tickets] : []),
|
||||
];
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user