using FoodsharingSiegen.Contracts; using FoodsharingSiegen.Contracts.Entity; using FoodsharingSiegen.Contracts.Enums; using FoodsharingSiegen.Contracts.Model; using FoodsharingSiegen.Server.Data.Service; using FoodsharingSiegen.Server.Dialogs; using FoodsharingSiegen.Server.Service; using Microsoft.AspNetCore.Components; namespace FoodsharingSiegen.Server.Pages { /// /// The prospects class (a. beging, 11.04.2022) /// public partial class Prospects { #region Dependencies [Inject] private ProspectService ProspectService { get; set; } = null!; /// /// Gets or sets the value of the user service (ab) /// [Inject] private UserService UserService { get; set; } = null!; #endregion #region Private Properties private ProspectFilter Filter { get; set; } = new(); /// /// Gets or sets the value of the prospect list (ab) /// private List? ProspectList { get; set; } private ProspectSortOption CurrentSort { get; set; } = ProspectSortOption.NameAscending; #endregion #region Override InitializeDataAsync /// protected override async Task InitializeDataAsync() { var filter = await LocalStorageService.GetItem(StorageKeys.ProspectFilter); if (filter != null) Filter = filter; // Load prospects await LoadProspects(); } #endregion #region Private Method CreateProspectAsync /// /// Asynchronously creates a new prospect by displaying the AddProspectModal dialog and refreshing the prospect list. /// /// A task that represents the asynchronous operation. private async Task CreateProspectAsync() { await EditProspectDialog.ShowAsync(ModalService, LoadProspects); } private async Task OpenSortDialogAsync() { await ProspectSortDialog.ShowAsync(ModalService, CurrentSort, async option => { CurrentSort = option; await InvokeAsync(StateHasChanged); }); } private bool HasCustomSort => CurrentSort != ProspectSortOption.NameAscending; private string CurrentSortText => CurrentSort switch { ProspectSortOption.NameDescending => "Sortierung: Name (absteigend)", ProspectSortOption.ModifiedAscending => "Sortierung: Zuletzt geaendert (aufsteigend) ", ProspectSortOption.ModifiedDescending => "Sortierung: Zuletzt geaendert (absteigend) ", _ => string.Empty }; private async Task ResetSortAsync() { CurrentSort = ProspectSortOption.NameAscending; await InvokeAsync(StateHasChanged); } #endregion #region Private Method FilterChangedAsync /// /// Updates the current filter with the specified ProspectFilter object. /// /// The ProspectFilter object containing the updated filter criteria. /// A task that represents the asynchronous operation. private async Task FilterChangedAsync(ProspectFilter arg) { Filter = arg; await LocalStorageService.SetItem(StorageKeys.ProspectFilter, Filter); } private List SortProspects(List prospects) { return CurrentSort switch { ProspectSortOption.NameAscending => prospects.OrderBy(x => x.Name, StringComparer.OrdinalIgnoreCase).ToList(), ProspectSortOption.NameDescending => prospects.OrderByDescending(x => x.Name, StringComparer.OrdinalIgnoreCase).ToList(), ProspectSortOption.ModifiedAscending => prospects.OrderBy(x => x.Modified ?? x.Created).ToList(), ProspectSortOption.ModifiedDescending => prospects.OrderByDescending(x => x.Modified ?? x.Created).ToList(), _ => prospects }; } #endregion #region Private Method LoadProspects /// /// Loads the prospects (a. beging, 11.04.2022) /// private async Task LoadProspects() { var parameter = new GetProspectsParameter { CannotHaveInteractions = [InteractionType.Complete, InteractionType.Verify, InteractionType.ReleasedForVerification] }; var prospectsR = await ProspectService.GetProspectsAsync(parameter); if (prospectsR.Success) ProspectList = prospectsR.Data; await InvokeAsync(StateHasChanged); } #endregion } }