4
0

HardwareDependencyTreeComponent.razor 5.0 KB

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