56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import { Component, OnInit, inject, signal } from '@angular/core';
|
|
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
import { toSignal } from '@angular/core/rxjs-interop';
|
|
import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
|
|
import { MatButtonModule } from '@angular/material/button';
|
|
import { MatIconModule } from '@angular/material/icon';
|
|
import { MatListModule } from '@angular/material/list';
|
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
|
import { map } from 'rxjs';
|
|
import { AuthService } from './auth/auth.service';
|
|
import { OnboardingOverlayComponent } from './onboarding/onboarding-overlay.component';
|
|
|
|
@Component({
|
|
selector: 'app-root',
|
|
imports: [
|
|
RouterOutlet,
|
|
RouterLink,
|
|
RouterLinkActive,
|
|
MatButtonModule,
|
|
MatIconModule,
|
|
MatListModule,
|
|
MatSidenavModule,
|
|
MatToolbarModule,
|
|
OnboardingOverlayComponent,
|
|
],
|
|
templateUrl: './app.html',
|
|
styleUrl: './app.scss'
|
|
})
|
|
export class App implements OnInit {
|
|
protected readonly auth = inject(AuthService);
|
|
private readonly breakpointObserver = inject(BreakpointObserver);
|
|
|
|
protected readonly isCompact = toSignal(
|
|
this.breakpointObserver.observe('(max-width: 800px)').pipe(map((state) => state.matches)),
|
|
{ initialValue: false },
|
|
);
|
|
protected readonly sidebarOpened = signal(false);
|
|
|
|
ngOnInit(): void {
|
|
if (this.auth.isAuthenticated()) {
|
|
this.auth.loadCurrentUser().subscribe({ error: () => undefined });
|
|
}
|
|
}
|
|
|
|
protected toggleSidebar(): void {
|
|
this.sidebarOpened.update((opened) => !opened);
|
|
}
|
|
|
|
protected closeSidebarOnCompact(): void {
|
|
if (this.isCompact()) {
|
|
this.sidebarOpened.set(false);
|
|
}
|
|
}
|
|
}
|