SystemDependencyTreeComponent.razor 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. @using RackPeek.Domain.Resources.Hardware
  2. @if (Tree is null)
  3. {
  4. <div class="text-zinc-500 text-sm">
  5. No data.
  6. </div>
  7. }
  8. else
  9. {
  10. <div class="ml-4 border-l border-zinc-800 pl-4 space-y-2">
  11. @if (Tree.Services.Any())
  12. {
  13. @foreach (var service in Tree.Services)
  14. {
  15. var url = service.NetworkString();
  16. <NavLink href="@($"resources/services/{Uri.EscapeDataString(service.Name)}")" class="block">
  17. <div class="border border-zinc-800 rounded bg-zinc-900 p-2 hover:border-zinc-700">
  18. <div class="text-zinc-200 text-sm">
  19. @service.Name
  20. </div>
  21. @{
  22. var srv = BuildServiceSubtitle(service);
  23. }
  24. <div class="text-xs text-zinc-500 mt-1">
  25. Service -
  26. @if (!string.IsNullOrEmpty(srv))
  27. {
  28. <a href="@url"
  29. target="_blank"
  30. rel="noopener noreferrer"
  31. class="underline hover:text-emerald-400"
  32. @onclick:stopPropagation>
  33. @srv
  34. </a>
  35. }
  36. </div>
  37. </div>
  38. </NavLink>
  39. }
  40. }
  41. else
  42. {
  43. <div class="text-xs text-zinc-600 italic">
  44. No services
  45. </div>
  46. }
  47. </div>
  48. }
  49. @code {
  50. [Parameter] [EditorRequired] public SystemDependencyTree? Tree { get; set; }
  51. private static string? BuildServiceSubtitle(Service service)
  52. {
  53. var endpoint = service.NetworkString();
  54. if (string.IsNullOrWhiteSpace(endpoint))
  55. return null;
  56. return endpoint;
  57. }
  58. }