SystemDependencyTreeComponent.razor 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  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="ml-4 border-l border-zinc-800 pl-4 space-y-2">
  12. @if (Tree.ChildResources?.Any() == true)
  13. {
  14. @foreach (var child in Tree.ChildResources)
  15. {
  16. switch (child)
  17. {
  18. case Service service:
  19. var endpoint = service.NetworkString();
  20. var browsable = service.BrowsableUrl();
  21. <NavLink href="@($"resources/services/{Uri.EscapeDataString(service.Name)}")"
  22. class="block">
  23. <div class="border border-zinc-800 rounded bg-zinc-900 p-2 hover:border-zinc-700">
  24. <div class="text-zinc-200 text-sm">
  25. @service.Name
  26. </div>
  27. <div class="text-xs text-zinc-500 mt-1">
  28. Service
  29. @if (!string.IsNullOrWhiteSpace(endpoint))
  30. {
  31. <span> - </span>
  32. @if (!string.IsNullOrWhiteSpace(browsable))
  33. {
  34. <a href="@browsable"
  35. target="_blank"
  36. rel="noopener noreferrer"
  37. class="underline hover:text-emerald-400"
  38. @onclick:stopPropagation>
  39. @endpoint
  40. </a>
  41. }
  42. else
  43. {
  44. <span>@endpoint</span>
  45. }
  46. }
  47. </div>
  48. </div>
  49. </NavLink>
  50. break;
  51. case SystemResource system:
  52. <NavLink href="@($"resources/systems/{Uri.EscapeDataString(system.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. @system.Name
  57. </div>
  58. <div class="text-xs text-zinc-500 mt-1">
  59. System
  60. </div>
  61. </div>
  62. </NavLink>
  63. break;
  64. }
  65. }
  66. }
  67. else
  68. {
  69. <div class="text-xs text-zinc-600 italic">
  70. No child resources
  71. </div>
  72. }
  73. </div>
  74. }
  75. @code {
  76. [Parameter] [EditorRequired] public SystemDependencyTree? Tree { get; set; }
  77. private static string? BuildServiceSubtitle(Service service)
  78. {
  79. var endpoint = service.NetworkString();
  80. return string.IsNullOrWhiteSpace(endpoint) ? null : endpoint;
  81. }
  82. }