ResourceBreadCrumbComponent.razor 2.7 KB

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