| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- @using RackPeek.Domain.Persistence
- @inject IResourceCollection Repo
- <div class="text-sm text-zinc-300 flex gap-1 items-center">
- @foreach (var crumb in Breadcrumbs)
- {
- <span class="text-zinc-500">/</span>
- <a class="hover:text-white transition-colors"
- href="@crumb.Href">
- @crumb.Label
- </a>
- }
- </div>
- @code {
- [Parameter] [EditorRequired] public ResourceType ResourceType { get; set; }
- [Parameter] [EditorRequired] public string ResourceName { get; set; } = default!;
- private List<Breadcrumb> Breadcrumbs { get; } = new();
- protected override async Task OnParametersSetAsync()
- {
- Breadcrumbs.Clear();
- switch (ResourceType)
- {
- case ResourceType.Hardware:
- await BuildHardwarePath(ResourceName);
- break;
- case ResourceType.System:
- await BuildSystemPath(ResourceName);
- break;
- case ResourceType.Service:
- await BuildServicePath(ResourceName);
- break;
- }
- }
- private async Task BuildHardwarePath(string hardwareName)
- {
- Breadcrumbs.Add(new Breadcrumb(hardwareName, $"resources/hardware/{hardwareName}"));
- }
- private async Task BuildSystemPath(string systemName)
- {
- var system = await Repo.GetByNameAsync(systemName);
- if (system?.RunsOn is not null)
- {
- Breadcrumbs.Add(new Breadcrumb(
- system.RunsOn,
- $"resources/hardware/{system.RunsOn}"
- ));
- }
- Breadcrumbs.Add(new Breadcrumb(
- systemName,
- $"resources/systems/{systemName}"
- ));
- }
- private async Task BuildServicePath(string serviceName)
- {
- var service = await Repo.GetByNameAsync(serviceName);
- if (service?.RunsOn is not null)
- {
- var system = await Repo.GetByNameAsync(service.RunsOn);
- if (system?.RunsOn is not null)
- {
- Breadcrumbs.Add(new Breadcrumb(
- system.RunsOn,
- $"resources/hardware/{system.RunsOn}"
- ));
- }
- Breadcrumbs.Add(new Breadcrumb(
- service.RunsOn,
- $"resources/systems/{service.RunsOn}"
- ));
- }
- Breadcrumbs.Add(new Breadcrumb(
- serviceName,
- $"resources/services/{serviceName}"
- ));
- }
- private record Breadcrumb(string Label, string Href);
- }
|