SystemDependencyTreeComponent.razor 2.1 KB

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