| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- @page "/hardware/tree"
- @using RackPeek.Domain.Resources.Hardware
- @inject IHardwareRepository HardwareRepository
- <PageTitle>Hardware Tree</PageTitle>
- <div class="min-h-screen bg-zinc-950 text-zinc-200 font-mono p-6">
- @if (_tree is null)
- {
- <div class="text-zinc-500">loading tree…</div>
- }
- else if (_tree.Count == 0)
- {
- <div class="text-zinc-500">no resources found</div>
- }
- else
- {
- @foreach (var group in _tree
- .OrderBy(h => h.Kind)
- .ThenBy(h => h.HardwareName)
- .GroupBy(h => h.Kind))
- {
- <!-- Hardware Kind Header -->
- <div class="mb-6">
- <div class="text-xs text-zinc-500 uppercase tracking-wider mb-3">
- @group.Key
- </div>
- <ul class="space-y-4">
- @foreach (var hardware in group)
- {
- <li>
- <!-- Hardware -->
- <NavLink href="@($"/resources/hardware/{hardware.HardwareName}")" class="block">
- <div class="text-zinc-100">
- @hardware.HardwareName
- </div>
- </NavLink>
- @if (hardware.Systems.Any())
- {
- <ul class="ml-4 mt-2 border-l border-zinc-800 pl-4 space-y-2">
- @foreach (var system in hardware.Systems.OrderBy(s => s.SystemName))
- {
- <li>
- <!-- System -->
- <NavLink href="@($"/resources/systems/{system.SystemName}")" class="block">
- <div class="text-zinc-300">
- └─ @system.SystemName
- </div>
- </NavLink>
- @if (system.Services.Any())
- {
- <ul class="ml-4 mt-1 space-y-1">
- @foreach (var service in system.Services.OrderBy(s => s))
- {
- <NavLink href="@($"/resources/services/{service}")" class="block">
- <li class="text-zinc-500">
- > @service
- </li>
- </NavLink>
- }
- </ul>
- }
- </li>
- }
- </ul>
- }
- </li>
- }
- </ul>
- </div>
- }
- }
- </div>
- @code {
- private List<HardwareTree>? _tree;
- protected override async Task OnInitializedAsync()
- {
- _tree = await HardwareRepository.GetTreeAsync();
- }
- }
|