import { Component, OnInit } from '@angular/core'; import { AsyncPipe } from '@angular/common'; import { Router } from '@angular/router'; import { LucideAngularModule, Search, Download, Settings, ArrowLeft, Dices } from 'lucide-angular'; import { LayoutService } from '../services/layout.service'; import { GlobalSearchService } from '../services/global-search.service'; import { ConfigService } from '../services/config.service'; import { UpdatesService } from '../services/updates.service'; // Single source of truth pour la version affichée dans le footer : // on lit directement package.json à la compilation (resolveJsonModule). import packageJson from '../../../package.json'; @Component({ selector: 'app-sidebar', imports: [AsyncPipe, LucideAngularModule], templateUrl: './sidebar.component.html', styleUrls: ['./sidebar.component.scss'] }) export class SidebarComponent implements OnInit { currentRoute = ''; readonly Search = Search; readonly Download = Download; readonly Settings = Settings; readonly ArrowLeft = ArrowLeft; readonly Dices = Dices; readonly layoutConfig$ = this.layoutService.secondarySidebar$; readonly appVersion = packageJson.version; readonly updateAvailable$ = this.updates.updateAvailable$; constructor( private router: Router, private layoutService: LayoutService, private globalSearch: GlobalSearchService, public config: ConfigService, private updates: UpdatesService ) { this.router.events.subscribe(() => { this.currentRoute = this.router.url; }); } ngOnInit(): void { // Premier check au boot uniquement si la feature est activee + mode non-demo. // L'erreur 401 (admin non auth) est silencieusement ignoree par le service — // le badge ne s'affichera que si l'utilisateur est passe par /settings et a // saisi ses credentials HTTP Basic. Comportement attendu mono-utilisateur. if (this.config.updateCheckEnabled && !this.config.demoMode) { this.updates.checkNow().subscribe(); } } navigateTo(route: string): void { this.router.navigate([route]); } isActive(itemRoute: string): boolean { return this.currentRoute === itemRoute; } openSearch(): void { this.globalSearch.open(); } }