admin-shell.component.ts 1.9 KB

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