HardwareDependencyTreeComponent.razor 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. @using RackPeek.Domain.Resources.Hardware
  2. @using RackPeek.Domain.Resources.Hardware
  3. @using RackPeek.Domain.Resources.SystemResources
  4. @if (Tree is null)
  5. {
  6. <div class="text-zinc-500 text-sm">
  7. No data.
  8. </div>
  9. }
  10. else
  11. {
  12. <div class="space-y-4">
  13. <div class="ml-4 space-y-4 border-l border-zinc-800 pl-4">
  14. @foreach (var systemTree in Tree.Systems)
  15. {
  16. <div class="space-y-2">
  17. <!-- Root System -->
  18. <NavLink href="@($"resources/systems/{Uri.EscapeDataString(systemTree.System.Name)}")"
  19. class="block">
  20. <div class="border border-zinc-800 rounded bg-zinc-900 p-3">
  21. <div class="text-zinc-100">
  22. @systemTree.System.Name
  23. </div>
  24. <div class="text-xs text-zinc-500 mt-1">
  25. System
  26. </div>
  27. </div>
  28. </NavLink>
  29. <!-- Children -->
  30. @if (systemTree.ChildResources?.Any() == true)
  31. {
  32. <div class="ml-4 space-y-2 border-l border-zinc-800 pl-4">
  33. @foreach (var child in systemTree.ChildResources)
  34. {
  35. switch (child)
  36. {
  37. case SystemResource nestedSystem:
  38. <NavLink href="@($"resources/systems/{Uri.EscapeDataString(nestedSystem.Name)}")"
  39. class="block">
  40. <div class="border border-zinc-800 rounded bg-zinc-900 p-2 hover:border-zinc-700">
  41. <div class="text-zinc-200 text-sm">
  42. @nestedSystem.Name
  43. </div>
  44. <div class="text-xs text-zinc-500 mt-1">
  45. System
  46. </div>
  47. </div>
  48. </NavLink>
  49. break;
  50. case Service service:
  51. var endpoint = service.NetworkString();
  52. <NavLink href="@($"resources/services/{Uri.EscapeDataString(service.Name)}")"
  53. class="block">
  54. <div class="border border-zinc-800 rounded bg-zinc-900 p-2 hover:border-zinc-700">
  55. <div class="text-zinc-200 text-sm">
  56. @service.Name
  57. </div>
  58. <div class="text-xs text-zinc-500 mt-1">
  59. Service
  60. @if (!string.IsNullOrWhiteSpace(endpoint))
  61. {
  62. <span> - </span>
  63. <a href="@endpoint"
  64. target="_blank"
  65. rel="noopener noreferrer"
  66. class="underline hover:text-emerald-400"
  67. @onclick:stopPropagation>
  68. @endpoint
  69. </a>
  70. }
  71. </div>
  72. </div>
  73. </NavLink>
  74. break;
  75. }
  76. }
  77. </div>
  78. }
  79. else
  80. {
  81. <div class="ml-4 text-xs text-zinc-600 italic">
  82. No child resources
  83. </div>
  84. }
  85. </div>
  86. }
  87. </div>
  88. </div>
  89. }
  90. @code {
  91. [Parameter] [EditorRequired] public HardwareDependencyTree? Tree { get; set; }
  92. private static string? BuildServiceSubtitle(Service service)
  93. {
  94. var endpoint = service.NetworkString();
  95. if (string.IsNullOrWhiteSpace(endpoint))
  96. return null;
  97. return endpoint;
  98. }
  99. }