Files
listify/listify-client/src/app/app.ts
Bastian Wagner b5d5378fc9 pwa
2026-06-15 11:05:16 +02:00

64 lines
2.1 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 { AssistantChatComponent } from './assistant/assistant-chat.component';
import { OfflineSyncService } from './offline/offline-sync.service';
import { OnlineStatusService } from './offline/online-status.service';
import { OnboardingOverlayComponent } from './onboarding/onboarding-overlay.component';
@Component({
selector: 'app-root',
imports: [
RouterOutlet,
RouterLink,
RouterLinkActive,
MatButtonModule,
MatIconModule,
MatListModule,
MatSidenavModule,
MatToolbarModule,
AssistantChatComponent,
OnboardingOverlayComponent,
],
templateUrl: './app.html',
styleUrl: './app.scss'
})
export class App implements OnInit {
protected readonly auth = inject(AuthService);
private readonly breakpointObserver = inject(BreakpointObserver);
protected readonly offlineSync = inject(OfflineSyncService);
protected readonly onlineStatus = inject(OnlineStatusService);
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 });
}
void this.offlineSync.syncNow();
}
protected toggleSidebar(): void {
this.sidebarOpened.update((opened) => !opened);
}
protected closeSidebarOnCompact(): void {
if (this.isCompact()) {
this.sidebarOpened.set(false);
}
}
}