HardwareDependencyTreeComponent.razor 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. var browsable = service.BrowsableUrl();
  54. <NavLink href="@($"resources/services/{Uri.EscapeDataString(service.Name)}")"
  55. class="block">
  56. <div
  57. class="border border-zinc-800 rounded bg-zinc-900 p-2 hover:border-zinc-700">
  58. <div class="text-zinc-200 text-sm">
  59. @service.Name
  60. </div>
  61. <div class="text-xs text-zinc-500 mt-1">
  62. Service
  63. @if (!string.IsNullOrWhiteSpace(endpoint))
  64. {
  65. <span> - </span>
  66. @if (!string.IsNullOrWhiteSpace(browsable))
  67. {
  68. <a href="@browsable"
  69. target="_blank"
  70. rel="noopener noreferrer"
  71. class="underline hover:text-emerald-400"
  72. @onclick:stopPropagation>
  73. @endpoint
  74. </a>
  75. }
  76. else
  77. {
  78. <span>@endpoint</span>
  79. }
  80. }
  81. </div>
  82. </div>
  83. </NavLink>
  84. break;
  85. }
  86. }
  87. </div>
  88. }
  89. else
  90. {
  91. <div class="ml-4 text-xs text-zinc-600 italic">
  92. No child resources
  93. </div>
  94. }
  95. </div>
  96. }
  97. </div>
  98. </div>
  99. }
  100. @code {
  101. [Parameter] [EditorRequired] public HardwareDependencyTree? Tree { get; set; }
  102. private static string? BuildServiceSubtitle(Service service)
  103. {
  104. var endpoint = service.NetworkString();
  105. return string.IsNullOrWhiteSpace(endpoint) ? null : endpoint;
  106. }
  107. }