| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- @using RackPeek.Domain.Resources.SystemResources
- @using RackPeek.Domain.Resources.SystemResources.UseCases
- @inject ISystemRepository SystemRepository
- @inject UpdateSystemUseCase UpdateSystemUseCase
- @inject NavigationManager Nav
- <div class="min-h-screen bg-zinc-950 text-zinc-200 font-mono p-6 space-y-6">
- <AddSystemComponent OnCreated="NavigateToNewResource"/>
- @if (_systems is null)
- {
- <div class="text-zinc-500">loading systems…</div>
- }
- else if (_systems.Count == 0)
- {
- <div class="text-zinc-500">no systems found</div>
- }
- else
- {
- <div class="space-y-4">
- @foreach (var group in _systems
- .OrderBy(s => s.Name)
- .GroupBy(s => s.RunsOn)
- .OrderByDescending(g => g.Count()))
- {
- foreach (var systemResource in group)
- {
- <SystemCardComponent System="systemResource"
- OnSave="UpdateSystem"
- OnDeleted="Callback"/>
- }
- }
- </div>
- }
- </div>
- @code {
- [Parameter] public string? TypeFilter { get; set; }
- [Parameter] public string? OsFilter { get; set; }
- private IReadOnlyList<SystemResource>? _systems;
- protected override async Task OnParametersSetAsync()
- {
- await Reload();
- }
- private async Task Reload()
- {
- var type = Normalize(TypeFilter);
- var os = Normalize(OsFilter);
- if (string.IsNullOrEmpty(type) && string.IsNullOrEmpty(os))
- {
- _systems = await SystemRepository.GetAllAsync();
- }
- else
- {
- _systems = await SystemRepository.GetFilteredAsync(
- type,
- os
- );
- }
- }
- private static string? Normalize(string? s)
- => string.IsNullOrWhiteSpace(s) ? null : s.Trim();
- async Task UpdateSystem(SystemEditModel edit)
- {
- await UpdateSystemUseCase.ExecuteAsync(
- edit.Name,
- edit.Type,
- edit.Os,
- edit.Cores,
- edit.Ram,
- edit.RunsOn,
- edit.Notes
- );
- await Reload();
- }
- private Task NavigateToNewResource(string serverName)
- {
- Nav.NavigateTo($"resources/systems/{serverName}");
- return Task.CompletedTask;
- }
- private async Task Callback(string obj)
- {
- await Reload();
- }
- }
|