admin-shell.component.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { CommonModule } from '@angular/common';
  2. import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
  3. import { RouterLink, RouterLinkActive, RouterOutlet } from '@angular/router';
  4. import {
  5. Bell,
  6. BookOpen,
  7. Braces,
  8. CalendarDays,
  9. ChartNoAxesCombined,
  10. ChartBarBig,
  11. ChevronLeft,
  12. ChevronRight,
  13. ClipboardCheck,
  14. ClipboardList,
  15. Files,
  16. GalleryHorizontalEnd,
  17. GraduationCap,
  18. Languages,
  19. LayoutDashboard,
  20. ListChecks,
  21. ListTodo,
  22. LogOut,
  23. LucideAngularModule,
  24. Menu,
  25. Megaphone,
  26. Route,
  27. Search,
  28. Shapes,
  29. TableProperties,
  30. Tags,
  31. Users,
  32. } from 'lucide-angular';
  33. import { ADMIN_NAVIGATION } from '../admin.constants';
  34. import { AdminSessionService } from '../admin-session.service';
  35. @Component({
  36. selector: 'app-admin-shell',
  37. standalone: true,
  38. imports: [CommonModule, RouterLink, RouterLinkActive, RouterOutlet, LucideAngularModule],
  39. templateUrl: './admin-shell.component.html',
  40. styleUrl: './admin-shell.component.scss',
  41. changeDetection: ChangeDetectionStrategy.OnPush,
  42. })
  43. export class AdminShellComponent {
  44. readonly navigation = ADMIN_NAVIGATION;
  45. readonly collapsed = signal(false);
  46. readonly mobileOpen = signal(false);
  47. readonly icons = {
  48. Bell, BookOpen, Braces, CalendarDays, ChartBarBig, ChartNoAxesCombined, ChevronLeft, ChevronRight,
  49. ClipboardCheck, ClipboardList, Files, GalleryHorizontalEnd, GraduationCap, Languages, LayoutDashboard, ListChecks, ListTodo,
  50. LogOut, Megaphone, Menu, Route, Search, Shapes, TableProperties, Tags, Users,
  51. };
  52. constructor(readonly sessions: AdminSessionService) {}
  53. iconFor(name: string) {
  54. const key = Object.keys(this.icons).find((value) => value.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`).replace(/^-/, '') === name);
  55. return this.icons[key as keyof typeof this.icons] ?? this.icons.Files;
  56. }
  57. }