ResourceBreadCrumbComponent.razor 2.8 KB

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