SystemsListComponent.razor 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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.OrderBy(s => s.Name).GroupBy(s => s.RunsOn).OrderByDescending(g => g.Count()))
  20. {
  21. foreach (var systemResource in group)
  22. {
  23. <SystemCardComponent System="systemResource" OnSave="UpdateSystem" OnDeleted="Callback"/>
  24. }
  25. }
  26. </div>
  27. }
  28. </div>
  29. @code {
  30. private IReadOnlyList<SystemResource>? _systems;
  31. protected override async Task OnInitializedAsync()
  32. {
  33. _systems = await SystemRepository.GetAllAsync();
  34. }
  35. async Task UpdateSystem(SystemEditModel edit)
  36. {
  37. await UpdateSystemUseCase.ExecuteAsync(
  38. edit.Name,
  39. edit.Type,
  40. edit.Os,
  41. edit.Cores,
  42. edit.Ram,
  43. edit.RunsOn
  44. );
  45. }
  46. private Task NavigateToNewResource(string serverName)
  47. {
  48. Nav.NavigateTo($"/resources/systems/{serverName}");
  49. return Task.CompletedTask;
  50. }
  51. private async Task Callback(string obj)
  52. {
  53. _systems = await SystemRepository.GetAllAsync();
  54. }
  55. }