HardwareTreePage.razor 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. @page "/hardware/tree"
  2. @using RackPeek.Domain.Resources.Hardware
  3. @inject IHardwareRepository HardwareRepository
  4. <PageTitle>Hardware Tree</PageTitle>
  5. <div class="min-h-screen bg-zinc-950 text-zinc-200 font-mono p-6">
  6. @if (_tree is null)
  7. {
  8. <div class="text-zinc-500">loading tree…</div>
  9. }
  10. else if (_tree.Count == 0)
  11. {
  12. <div class="text-zinc-500">no resources found</div>
  13. }
  14. else
  15. {
  16. @foreach (var group in _tree
  17. .OrderBy(h => h.Kind)
  18. .ThenBy(h => h.HardwareName)
  19. .GroupBy(h => h.Kind))
  20. {
  21. <!-- Hardware Kind Header -->
  22. <div class="mb-6">
  23. <div class="text-xs text-zinc-500 uppercase tracking-wider mb-3">
  24. @group.Key
  25. </div>
  26. <ul class="space-y-4">
  27. @foreach (var hardware in group)
  28. {
  29. <li>
  30. <!-- Hardware -->
  31. <NavLink href="@($"/resources/hardware/{hardware.HardwareName}")" class="block">
  32. <div class="text-zinc-100">
  33. @hardware.HardwareName
  34. </div>
  35. </NavLink>
  36. @if (hardware.Systems.Any())
  37. {
  38. <ul class="ml-4 mt-2 border-l border-zinc-800 pl-4 space-y-2">
  39. @foreach (var system in hardware.Systems.OrderBy(s => s.SystemName))
  40. {
  41. <li>
  42. <!-- System -->
  43. <NavLink href="@($"/resources/systems/{system.SystemName}")" class="block">
  44. <div class="text-zinc-300">
  45. └─ @system.SystemName
  46. </div>
  47. </NavLink>
  48. @if (system.Services.Any())
  49. {
  50. <ul class="ml-4 mt-1 space-y-1">
  51. @foreach (var service in system.Services.OrderBy(s => s))
  52. {
  53. <NavLink href="@($"/resources/services/{service}")" class="block">
  54. <li class="text-zinc-500">
  55. > @service
  56. </li>
  57. </NavLink>
  58. }
  59. </ul>
  60. }
  61. </li>
  62. }
  63. </ul>
  64. }
  65. </li>
  66. }
  67. </ul>
  68. </div>
  69. }
  70. }
  71. </div>
  72. @code {
  73. private List<HardwareTree>? _tree;
  74. protected override async Task OnInitializedAsync()
  75. {
  76. _tree = await HardwareRepository.GetTreeAsync();
  77. }
  78. }