LabelPage.razor 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. @page "/labels/{LabelName}"
  2. @using RackPeek.Domain.Persistence
  3. @using RackPeek.Domain.Resources
  4. @using RackPeek.Domain.Resources.SystemResources
  5. @inject IResourceCollection ResourceRepository
  6. <PageTitle>Label: @LabelName</PageTitle>
  7. <div class="min-h-screen bg-zinc-950 text-zinc-200 font-mono p-6 space-y-6">
  8. <!-- Header -->
  9. <div class="space-y-2">
  10. <h1 class="text-lg text-zinc-100">
  11. Label: <span class="text-emerald-400">@LabelName</span>
  12. </h1>
  13. </div>
  14. @if (_resources is null)
  15. {
  16. <div class="text-zinc-500">loading resources…</div>
  17. }
  18. else if (_resources.Count == 0)
  19. {
  20. <div class="text-zinc-500">no resources found for this label</div>
  21. }
  22. else
  23. {
  24. <div class="space-y-3">
  25. @foreach (var (resource, value) in _resources.OrderBy(r => r.Item1.Name))
  26. {
  27. <div class="border border-zinc-800 rounded p-3 bg-zinc-900 hover:border-emerald-700 transition">
  28. <NavLink href="@GetResourceUrl(resource)"
  29. class="block hover:text-emerald-300">
  30. <div class="flex justify-between items-center">
  31. <div class="text-zinc-100">
  32. @resource.Name
  33. </div>
  34. <div class="text-xs text-zinc-500 uppercase tracking-wide">
  35. @resource.Kind
  36. </div>
  37. </div>
  38. <!-- Label value -->
  39. <div class="mt-2 text-xs text-emerald-400">
  40. Value: @value
  41. </div>
  42. </NavLink>
  43. </div>
  44. }
  45. </div>
  46. }
  47. </div>
  48. @code {
  49. [Parameter] public string LabelName { get; set; } = string.Empty;
  50. private IReadOnlyList<(Resource, string)>? _resources;
  51. protected override async Task OnParametersSetAsync()
  52. {
  53. var decoded = Uri.UnescapeDataString(LabelName);
  54. _resources = await ResourceRepository.GetByLabelAsync(decoded);
  55. }
  56. private string GetResourceUrl(Resource resource)
  57. {
  58. if (resource.Kind == SystemResource.KindLabel)
  59. {
  60. return $"resources/systems/{Uri.EscapeDataString(resource.Name)}";
  61. }
  62. if (resource.Kind == Service.KindLabel)
  63. {
  64. return $"resources/services/{Uri.EscapeDataString(resource.Name)}";
  65. }
  66. return $"resources/hardware/{Uri.EscapeDataString(resource.Name)}";
  67. }
  68. }