TagPage.razor 2.3 KB

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