SystemsListPage.razor 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. @page "/systems/list"
  2. @using RackPeek.Domain.Persistence
  3. @using RackPeek.Domain.Resources.SystemResources
  4. @using RackPeek.Domain.Resources.SystemResources.UseCases
  5. @inject NavigationManager Nav
  6. <ResourcesListComponent TResource="SystemResource"
  7. Title="Systems"
  8. TestId="systems"
  9. ShouldGroup="true"
  10. GroupBy="@(s => s.RunsOn)"
  11. OnCreated="NavigateToNewResource">
  12. <ItemTemplate Context="systemResource">
  13. <div data-testid=@($"systems-list-item-{systemResource.Name.Replace(" ", "-")}")>
  14. <SystemCardComponent System="systemResource"
  15. OnSave="UpdateSystem"
  16. OnDeleted="Reload" />
  17. </div>
  18. </ItemTemplate>
  19. </ResourcesListComponent>
  20. @code {
  21. [Inject] IResourceCollection Repo { get; set; } = default!;
  22. [Inject] ISystemRepository SystemRepo { get; set; } = default!;
  23. [Inject] UpdateSystemUseCase UpdateSystemUseCase { get; set; } = default!;
  24. [Parameter]
  25. [SupplyParameterFromQuery(Name = "type")]
  26. public string? Type { get; set; }
  27. [Parameter]
  28. [SupplyParameterFromQuery(Name = "os")]
  29. public string? Os { get; set; }
  30. private async Task Reload(string _ = "")
  31. {
  32. var type = Normalize(Type);
  33. var os = Normalize(Os);
  34. if (string.IsNullOrEmpty(type) && string.IsNullOrEmpty(os))
  35. {
  36. await Repo.GetAllOfTypeAsync<SystemResource>();
  37. }
  38. else
  39. {
  40. await SystemRepo.GetFilteredAsync(type, os);
  41. }
  42. }
  43. private static string? Normalize(string? s)
  44. => string.IsNullOrWhiteSpace(s) ? null : s.Trim();
  45. private async Task UpdateSystem(SystemEditModel edit)
  46. {
  47. await UpdateSystemUseCase.ExecuteAsync(
  48. edit.Name,
  49. edit.Type,
  50. edit.Os,
  51. edit.Cores,
  52. edit.Ram,
  53. edit.RunsOn,
  54. edit.Notes
  55. );
  56. await Reload();
  57. }
  58. private Task NavigateToNewResource(string name)
  59. {
  60. Nav.NavigateTo($"resources/systems/{name}");
  61. return Task.CompletedTask;
  62. }
  63. }