HardwareTreePage.razor 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. <div class="text-zinc-300">
  44. └─ @system.SystemName
  45. </div>
  46. @if (system.Services.Any())
  47. {
  48. <ul class="ml-4 mt-1 space-y-1">
  49. @foreach (var service in system.Services.OrderBy(s => s))
  50. {
  51. <li class="text-zinc-500">
  52. > @service
  53. </li>
  54. }
  55. </ul>
  56. }
  57. </li>
  58. }
  59. </ul>
  60. }
  61. </li>
  62. }
  63. </ul>
  64. </div>
  65. }
  66. }
  67. </div>
  68. @code {
  69. private List<HardwareTree>? _tree;
  70. protected override async Task OnInitializedAsync()
  71. {
  72. _tree = await HardwareRepository.GetTreeAsync();
  73. }
  74. }