|
|
@@ -0,0 +1,84 @@
|
|
|
+@page "/labels/{LabelName}"
|
|
|
+@using RackPeek.Domain.Persistence
|
|
|
+@using RackPeek.Domain.Resources
|
|
|
+@using RackPeek.Domain.Resources.SystemResources
|
|
|
+
|
|
|
+@inject IResourceCollection ResourceRepository
|
|
|
+
|
|
|
+<PageTitle>Label: @LabelName</PageTitle>
|
|
|
+
|
|
|
+<div class="min-h-screen bg-zinc-950 text-zinc-200 font-mono p-6 space-y-6">
|
|
|
+
|
|
|
+ <!-- Header -->
|
|
|
+ <div class="space-y-2">
|
|
|
+ <h1 class="text-lg text-zinc-100">
|
|
|
+ Label: <span class="text-emerald-400">@LabelName</span>
|
|
|
+ </h1>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ @if (_resources is null)
|
|
|
+ {
|
|
|
+ <div class="text-zinc-500">loading resources…</div>
|
|
|
+ }
|
|
|
+ else if (_resources.Count == 0)
|
|
|
+ {
|
|
|
+ <div class="text-zinc-500">no resources found for this label</div>
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ <div class="space-y-3">
|
|
|
+ @foreach (var (resource, value) in _resources.OrderBy(r => r.Item1.Name))
|
|
|
+ {
|
|
|
+ <div class="border border-zinc-800 rounded p-3 bg-zinc-900 hover:border-emerald-700 transition">
|
|
|
+ <NavLink href="@GetResourceUrl(resource)"
|
|
|
+ class="block hover:text-emerald-300">
|
|
|
+
|
|
|
+ <div class="flex justify-between items-center">
|
|
|
+ <div class="text-zinc-100">
|
|
|
+ @resource.Name
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div class="text-xs text-zinc-500 uppercase tracking-wide">
|
|
|
+ @resource.Kind
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <!-- Label value -->
|
|
|
+ <div class="mt-2 text-xs text-emerald-400">
|
|
|
+ Value: @value
|
|
|
+ </div>
|
|
|
+
|
|
|
+ </NavLink>
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+ </div>
|
|
|
+ }
|
|
|
+
|
|
|
+</div>
|
|
|
+
|
|
|
+@code {
|
|
|
+ [Parameter] public string LabelName { get; set; } = string.Empty;
|
|
|
+
|
|
|
+ private IReadOnlyList<(Resource, string)>? _resources;
|
|
|
+
|
|
|
+ protected override async Task OnParametersSetAsync()
|
|
|
+ {
|
|
|
+ var decoded = Uri.UnescapeDataString(LabelName);
|
|
|
+ _resources = await ResourceRepository.GetByLabelAsync(decoded);
|
|
|
+ }
|
|
|
+
|
|
|
+ private string GetResourceUrl(Resource resource)
|
|
|
+ {
|
|
|
+ if (resource.Kind == SystemResource.KindLabel)
|
|
|
+ {
|
|
|
+ return $"resources/systems/{Uri.EscapeDataString(resource.Name)}";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (resource.Kind == Service.KindLabel)
|
|
|
+ {
|
|
|
+ return $"resources/services/{Uri.EscapeDataString(resource.Name)}";
|
|
|
+ }
|
|
|
+
|
|
|
+ return $"resources/hardware/{Uri.EscapeDataString(resource.Name)}";
|
|
|
+ }
|
|
|
+}
|