ResourceBreadCrumbComponent.razor 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. @using RackPeek.Domain.Persistence
  2. @inject IResourceCollection Repo
  3. <div class="text-sm text-zinc-300 flex gap-1 items-center">
  4. @foreach (var crumb in Breadcrumbs)
  5. {
  6. <span class="text-zinc-500">/</span>
  7. <a class="hover:text-white transition-colors"
  8. href="@crumb.Href">
  9. @crumb.Label
  10. </a>
  11. }
  12. </div>
  13. @code {
  14. [Parameter] [EditorRequired] public ResourceType ResourceType { get; set; }
  15. [Parameter] [EditorRequired] public string ResourceName { get; set; } = default!;
  16. private List<Breadcrumb> Breadcrumbs { get; } = new();
  17. protected override async Task OnParametersSetAsync()
  18. {
  19. Breadcrumbs.Clear();
  20. switch (ResourceType)
  21. {
  22. case ResourceType.Hardware:
  23. await BuildHardwarePath(ResourceName);
  24. break;
  25. case ResourceType.System:
  26. await BuildSystemPath(ResourceName);
  27. break;
  28. case ResourceType.Service:
  29. await BuildServicePath(ResourceName);
  30. break;
  31. }
  32. }
  33. private async Task BuildHardwarePath(string hardwareName)
  34. {
  35. Breadcrumbs.Add(new Breadcrumb(hardwareName, $"resources/hardware/{hardwareName}"));
  36. }
  37. private async Task BuildSystemPath(string systemName)
  38. {
  39. var system = await Repo.GetByNameAsync(systemName);
  40. if (system?.RunsOn?.Count > 0)
  41. {
  42. foreach(string parent in system.RunsOn)
  43. {
  44. Breadcrumbs.Add(new Breadcrumb(
  45. parent,
  46. $"resources/hardware/{parent}"
  47. ));
  48. }
  49. }
  50. Breadcrumbs.Add(new Breadcrumb(
  51. systemName,
  52. $"resources/systems/{systemName}"
  53. ));
  54. }
  55. private async Task BuildServicePath(string serviceName)
  56. {
  57. var service = await Repo.GetByNameAsync(serviceName);
  58. if (service?.RunsOn?.Count > 0)
  59. {
  60. foreach (var sys in service.RunsOn)
  61. {
  62. var system = await Repo.GetByNameAsync(sys);
  63. if (system?.RunsOn?.Count > 0)
  64. {
  65. foreach(string parent in system.RunsOn)
  66. {
  67. Breadcrumbs.Add(new Breadcrumb(
  68. parent,
  69. $"resources/hardware/{parent}"
  70. ));
  71. }
  72. }
  73. Breadcrumbs.Add(new Breadcrumb(
  74. sys,
  75. $"resources/systems/{sys}"
  76. ));
  77. }
  78. }
  79. Breadcrumbs.Add(new Breadcrumb(
  80. serviceName,
  81. $"resources/services/{serviceName}"
  82. ));
  83. }
  84. private record Breadcrumb(string Label, string Href);
  85. }