@page "/Users" @attribute [Authorize] @using Template.Shared.Components.Layout @using Template.Shared.Core.Entity @using Template.Shared.Core.Interface @inject IManageDataService ManageData
@if (GroupedUserList?.Count > 0) { @if (item.ShowHeader) {
@item.HeaderLetter
}
}
@code { private List GroupedUserList { get; set; } = []; private List FilteredGroupedUserList { get; set; } = []; private string? TextToFilter { get; set; } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await LoadData(); StateHasChanged(); } } private async Task LoadData() { var users = await ManageData.GetTable(x => x.FlagStato.Equals("A")); var sortedUsers = users .Where(u => !string.IsNullOrWhiteSpace(u.RagSoc)) .OrderBy(u => { var firstChar = char.ToUpper(u.RagSoc[0]); return char.IsLetter(firstChar) ? firstChar.ToString() : "ZZZ"; }) .ThenBy(u => u.RagSoc) .ToList(); GroupedUserList = []; string? lastHeader = null; foreach (var user in sortedUsers) { var firstChar = char.ToUpper(user.RagSoc[0]); var currentLetter = char.IsLetter(firstChar) ? firstChar.ToString() : "#"; var showHeader = currentLetter != lastHeader; lastHeader = currentLetter; GroupedUserList.Add(new UserDisplayItem { User = user, ShowHeader = showHeader, HeaderLetter = currentLetter }); } FilterUsers(true); } private class UserDisplayItem { public required AnagClie User { get; set; } public bool ShowHeader { get; set; } public string? HeaderLetter { get; set; } } private void FilterUsers() => FilterUsers(false); private void FilterUsers(bool clearFilter) { if (clearFilter) { TextToFilter = null; FilteredGroupedUserList = GroupedUserList; StateHasChanged(); return; } if (TextToFilter == null) return; FilteredGroupedUserList = GroupedUserList.FindAll(x => x.User.RagSoc.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase) || x.User.Indirizzo.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase) || (x.User.Telefono != null && x.User.Telefono.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase)) || (x.User.EMail != null && x.User.EMail.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase)) || x.User.PartIva.Contains(TextToFilter, StringComparison.OrdinalIgnoreCase) ); StateHasChanged(); } }