- ng update @angular/core@21 @angular/cli@21 (corrige GHSA-jrmj-c5cx-3cw6, XSS SVG) - Migration automatique des templates vers le control flow natif (@if/@for, 138 fichiers) - Correction des 5 `track` invalides generes par la migration (trackBy a 1 argument -> track $index) + suppression des fonctions trackBy mortes - TypeScript 5.9, zone.js 0.15 ; npm audit : 0 vulnerabilite Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.8 KiB
TypeScript
50 lines
1.8 KiB
TypeScript
import { Component, HostListener } from '@angular/core';
|
|
import { AsyncPipe } from '@angular/common';
|
|
import { RouterOutlet } from '@angular/router';
|
|
import { SidebarComponent } from './sidebar/sidebar.component';
|
|
import { SecondarySidebarComponent } from './shared/secondary-sidebar/secondary-sidebar.component';
|
|
import { GlobalSearchComponent } from './shared/global-search/global-search.component';
|
|
import { UpdateBannerComponent } from './shared/update-banner/update-banner.component';
|
|
import { ConfirmDialogHostComponent } from './shared/confirm-dialog/confirm-dialog-host.component';
|
|
import { LayoutService } from './services/layout.service';
|
|
import { GlobalSearchService } from './services/global-search.service';
|
|
import { VersionCheckerService } from './services/version-checker.service';
|
|
|
|
@Component({
|
|
selector: 'app-root',
|
|
imports: [
|
|
RouterOutlet,
|
|
SidebarComponent,
|
|
SecondarySidebarComponent,
|
|
GlobalSearchComponent,
|
|
UpdateBannerComponent,
|
|
ConfirmDialogHostComponent,
|
|
AsyncPipe
|
|
],
|
|
templateUrl: './app.component.html',
|
|
styleUrls: ['./app.component.scss']
|
|
})
|
|
export class AppComponent {
|
|
readonly sidebarConfig$ = this.layoutService.secondarySidebar$;
|
|
|
|
constructor(
|
|
private layoutService: LayoutService,
|
|
private globalSearch: GlobalSearchService,
|
|
versionChecker: VersionCheckerService,
|
|
) {
|
|
// Demarre la detection de mise a jour en arriere-plan.
|
|
// Si une nouvelle version est deployee pendant la session, l'UpdateBanner
|
|
// s'affichera automatiquement.
|
|
versionChecker.start();
|
|
}
|
|
|
|
@HostListener('document:keydown', ['$event'])
|
|
onKeydown(event: KeyboardEvent): void {
|
|
// Ctrl+K (Windows/Linux) ou Cmd+K (macOS)
|
|
if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === 'k') {
|
|
event.preventDefault();
|
|
this.globalSearch.toggle();
|
|
}
|
|
}
|
|
}
|