TagPage.razor 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. @page "/tags/{TagName}"
  2. @using RackPeek.Domain.Persistence
  3. @using RackPeek.Domain.Resources
  4. @using RackPeek.Domain.Resources.SystemResources
  5. @inject IResourceCollection ResourceRepository
  6. <PageTitle>Tag: @TagName</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. Tag: <span class="text-emerald-400">@TagName</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 tag</div>
  21. }
  22. else
  23. {
  24. <div class="space-y-3">
  25. @foreach (var resource in _resources.OrderBy(r => r.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. </NavLink>
  39. </div>
  40. }
  41. </div>
  42. }
  43. </div>
  44. @code {
  45. [Parameter] public string TagName { get; set; } = string.Empty;
  46. private IReadOnlyList<Resource>? _resources;
  47. protected override async Task OnParametersSetAsync()
  48. {
  49. var decoded = Uri.UnescapeDataString(TagName);
  50. _resources = await ResourceRepository.GetByTagAsync(decoded);
  51. }
  52. private string GetResourceUrl(Resource resource)
  53. {
  54. if (resource.Kind == SystemResource.KindLabel)
  55. {
  56. return $"resources/systems/{resource.Name}";
  57. }
  58. if (resource.Kind == Service.KindLabel)
  59. {
  60. return $"resources/services/{resource.Name}";
  61. }
  62. return $"resources/hardware/{resource.Name}";
  63. }
  64. }