File

src/app/shells/app-shell.component.ts

Metadata

selector app-shell
templateUrl app-shell.component.html

Methods

onSignOut
onSignOut()
Returns: void
toggleUserMenu
toggleUserMenu(event: Event)
Returns: void

Properties

Private auth
auth: {}
items
items: WritableSignal<any[]>
Private router
router: {}
TieredMenu
TieredMenu: any
userItems
userItems: WritableSignal<any[]>
userMenu
userMenu: boolean
import { Component, signal, ViewChild, inject } from '@angular/core';
import { Router, RouterOutlet } from '@angular/router';
import { MenuItem } from 'primeng/api';
import { MenubarModule } from 'primeng/menubar';
import { TieredMenu, TieredMenuModule } from 'primeng/tieredmenu';
import { ButtonModule } from 'primeng/button';
import { Auth, signOut } from '@angular/fire/auth';

@Component({
  selector: 'app-shell',
  standalone: true,
  imports: [RouterOutlet, MenubarModule, TieredMenuModule, ButtonModule],
  templateUrl: './app-shell.component.html',
})
export class AppShellComponent {
  @ViewChild('userMenu') userMenu!: TieredMenu;

  // Top-level nav
  readonly items = signal<MenuItem[]>([
    { label: 'Sessions', icon: 'pi pi-clock', routerLink: ['/sessions'] },
    { label: 'Songs',    icon: 'pi pi-music', routerLink: ['/songs'] },
    { label: 'Metrics',  icon: 'pi pi-chart-bar', routerLink: ['/metrics'] },
  ]);

  // User dropdown items
  readonly userItems = signal<MenuItem[]>([
    { label: 'My Profile', icon: 'pi pi-user',   routerLink: ['/profile'] },
    { label: 'Settings',   icon: 'pi pi-cog',    routerLink: ['/settings'] },
    { separator: true },
    { label: 'Sign out',   icon: 'pi pi-sign-out', command: () => this.onSignOut() },
  ]);

  private readonly auth = inject(Auth);
  private readonly router = inject(Router);

  async onSignOut() {
    try {
      await signOut(this.auth);
    } finally {
      this.router.navigate(['/']);
    }
  }

  toggleUserMenu(event: Event) {
    this.userMenu.toggle(event);
  }
}

results matching ""

    No results matching ""