SystemsListComponent.razor 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. @using RackPeek.Domain.Resources.SystemResources
  2. @using RackPeek.Domain.Resources.SystemResources.UseCases
  3. @inject ISystemRepository SystemRepository
  4. @inject UpdateSystemUseCase UpdateSystemUseCase
  5. @inject NavigationManager Nav
  6. <div class="min-h-screen bg-zinc-950 text-zinc-200 font-mono p-6 space-y-6">
  7. <AddSystemComponent OnCreated="NavigateToNewResource"/>
  8. @if (_systems is null)
  9. {
  10. <div class="text-zinc-500">loading systems…</div>
  11. }
  12. else if (_systems.Count == 0)
  13. {
  14. <div class="text-zinc-500">no systems found</div>
  15. }
  16. else
  17. {
  18. <div class="space-y-4">
  19. @foreach (var group in _systems
  20. .OrderBy(s => s.Name)
  21. .GroupBy(s => s.RunsOn)
  22. .OrderByDescending(g => g.Count()))
  23. {
  24. foreach (var systemResource in group)
  25. {
  26. <SystemCardComponent System="systemResource"
  27. OnSave="UpdateSystem"
  28. OnDeleted="Callback"/>
  29. }
  30. }
  31. </div>
  32. }
  33. </div>
  34. @code {
  35. [Parameter] public string? TypeFilter { get; set; }
  36. [Parameter] public string? OsFilter { get; set; }
  37. private IReadOnlyList<SystemResource>? _systems;
  38. protected override async Task OnParametersSetAsync()
  39. {
  40. await Reload();
  41. }
  42. private async Task Reload()
  43. {
  44. var type = Normalize(TypeFilter);
  45. var os = Normalize(OsFilter);
  46. if (string.IsNullOrEmpty(type) && string.IsNullOrEmpty(os))
  47. {
  48. _systems = await SystemRepository.GetAllAsync();
  49. }
  50. else
  51. {
  52. _systems = await SystemRepository.GetFilteredAsync(
  53. type,
  54. os
  55. );
  56. }
  57. }
  58. private static string? Normalize(string? s)
  59. => string.IsNullOrWhiteSpace(s) ? null : s.Trim();
  60. async Task UpdateSystem(SystemEditModel edit)
  61. {
  62. await UpdateSystemUseCase.ExecuteAsync(
  63. edit.Name,
  64. edit.Type,
  65. edit.Os,
  66. edit.Cores,
  67. edit.Ram,
  68. edit.RunsOn,
  69. edit.Notes
  70. );
  71. await Reload();
  72. }
  73. private Task NavigateToNewResource(string serverName)
  74. {
  75. Nav.NavigateTo($"resources/systems/{serverName}");
  76. return Task.CompletedTask;
  77. }
  78. private async Task Callback(string obj)
  79. {
  80. await Reload();
  81. }
  82. }