ResourceBreadCrumbComponent.razor 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 is not null)
  41. {
  42. Breadcrumbs.Add(new Breadcrumb(
  43. system.RunsOn,
  44. $"resources/hardware/{system.RunsOn}"
  45. ));
  46. }
  47. Breadcrumbs.Add(new Breadcrumb(
  48. systemName,
  49. $"resources/systems/{systemName}"
  50. ));
  51. }
  52. private async Task BuildServicePath(string serviceName)
  53. {
  54. var service = await Repo.GetByNameAsync(serviceName);
  55. if (service?.RunsOn is not null)
  56. {
  57. var system = await Repo.GetByNameAsync(service.RunsOn);
  58. if (system?.RunsOn is not null)
  59. {
  60. Breadcrumbs.Add(new Breadcrumb(
  61. system.RunsOn,
  62. $"resources/hardware/{system.RunsOn}"
  63. ));
  64. }
  65. Breadcrumbs.Add(new Breadcrumb(
  66. service.RunsOn,
  67. $"resources/systems/{service.RunsOn}"
  68. ));
  69. }
  70. Breadcrumbs.Add(new Breadcrumb(
  71. serviceName,
  72. $"resources/services/{serviceName}"
  73. ));
  74. }
  75. private record Breadcrumb(string Label, string Href);
  76. }