TagPage.razor 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. @page "/tags/{TagName}"
  2. @using RackPeek.Domain.Resources
  3. @using RackPeek.Domain.Resources.SystemResources
  4. @inject IResourceRepository ResourceRepository
  5. @inject NavigationManager Nav
  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]
  46. public string TagName { get; set; } = string.Empty;
  47. private IReadOnlyList<Resource>? _resources;
  48. protected override async Task OnParametersSetAsync()
  49. {
  50. var decoded = Uri.UnescapeDataString(TagName);
  51. _resources = await ResourceRepository.GetByTagAsync(decoded);
  52. }
  53. private string GetResourceUrl(Resource resource)
  54. {
  55. if (resource.Kind == SystemResource.KindLabel)
  56. {
  57. return $"resources/systems/{resource.Name}";
  58. }else if (resource.Kind == Service.KindLabel)
  59. {
  60. return $"resources/services/{resource.Name}";
  61. }
  62. else
  63. {
  64. return $"resources/hardware/{resource.Name}";
  65. }
  66. }
  67. }