SystemsListPage.razor 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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. {
  45. return string.IsNullOrWhiteSpace(s) ? null : s.Trim();
  46. }
  47. private async Task UpdateSystem(SystemEditModel edit)
  48. {
  49. await UpdateSystemUseCase.ExecuteAsync(
  50. edit.Name,
  51. edit.Type,
  52. edit.Os,
  53. edit.Cores,
  54. edit.Ram,
  55. edit.RunsOn,
  56. edit.Notes
  57. );
  58. await Reload();
  59. }
  60. private Task NavigateToNewResource(string name)
  61. {
  62. Nav.NavigateTo($"resources/systems/{name}");
  63. return Task.CompletedTask;
  64. }
  65. }