ServicesListComponent.razor 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. @using RackPeek.Domain.Resources.Services
  2. @using RackPeek.Domain.Resources.Services.UseCases
  3. @inject IServiceRepository ServiceRepository
  4. @inject UpdateServiceUseCase UpdateServiceUseCase
  5. @inject NavigationManager Nav
  6. <PageTitle>Services</PageTitle>
  7. <div class="min-h-screen bg-zinc-950 text-zinc-200 font-mono p-6 space-y-6">
  8. <AddServiceComponent OnCreated="NavigateToNewResource"/>
  9. @if (_services is null)
  10. {
  11. <div class="text-zinc-500">loading services…</div>
  12. }
  13. else if (_services.Count == 0)
  14. {
  15. <div class="text-zinc-500">no services found</div>
  16. }
  17. else
  18. {
  19. <div class="space-y-4">
  20. @foreach (var group in _services.OrderBy(s => s.Name).GroupBy(s => s.RunsOn).OrderByDescending(g => g.Count()))
  21. {
  22. foreach (var svc in group)
  23. {
  24. <ServiceCardComponent Service="svc" OnSave="UpdateService" OnDeleted="Callback"/>
  25. }
  26. }
  27. </div>
  28. }
  29. </div>
  30. @code {
  31. private IReadOnlyList<Service>? _services;
  32. protected override async Task OnInitializedAsync()
  33. {
  34. _services = await ServiceRepository.GetAllAsync();
  35. }
  36. async Task UpdateService(ServiceEditModel edit)
  37. {
  38. await UpdateServiceUseCase.ExecuteAsync(
  39. edit.Name,
  40. edit.Ip,
  41. edit.Port,
  42. edit.Protocol,
  43. edit.Url,
  44. edit.RunsOn,
  45. edit.Notes
  46. );
  47. }
  48. private Task NavigateToNewResource(string serverName)
  49. {
  50. Nav.NavigateTo($"resources/services/{serverName}");
  51. return Task.CompletedTask;
  52. }
  53. private async Task Callback(string obj)
  54. {
  55. _services = await ServiceRepository.GetAllAsync();
  56. }
  57. }