import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, signal } from '@angular/core'; import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router'; import { Bell, BookOpen, Braces, CalendarDays, ChartNoAxesCombined, ChartBarBig, ChevronLeft, ChevronRight, ClipboardCheck, ClipboardList, Files, GalleryHorizontalEnd, GraduationCap, Headphones, Languages, LayoutDashboard, ListChecks, ListTodo, LogOut, LucideAngularModule, Menu, Megaphone, MessageSquareText, Route, Search, Shapes, TableProperties, Tags, Users, } from 'lucide-angular'; import { ADMIN_NAVIGATION } from '../admin.constants'; import { AdminSessionService } from '../admin-session.service'; @Component({ selector: 'app-admin-shell', standalone: true, imports: [CommonModule, RouterLink, RouterLinkActive, RouterOutlet, LucideAngularModule], templateUrl: './admin-shell.component.html', styleUrl: './admin-shell.component.scss', changeDetection: ChangeDetectionStrategy.OnPush, }) export class AdminShellComponent { readonly navigation = ADMIN_NAVIGATION; readonly collapsed = signal(false); readonly mobileOpen = signal(false); readonly icons = { Bell, BookOpen, Braces, CalendarDays, ChartBarBig, ChartNoAxesCombined, ChevronLeft, ChevronRight, ClipboardCheck, ClipboardList, Files, GalleryHorizontalEnd, GraduationCap, Headphones, Languages, LayoutDashboard, ListChecks, ListTodo, LogOut, Megaphone, Menu, MessageSquareText, Route, Search, Shapes, TableProperties, Tags, Users, }; constructor(readonly sessions: AdminSessionService) {} iconFor(name: string) { const key = Object.keys(this.icons).find((value) => value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`).replace(/^-/, '') === name); return this.icons[key as keyof typeof this.icons] ?? this.icons.Files; } }