@page "/Users" @attribute [Authorize] @using salesbook.Shared.Components.Layout @using salesbook.Shared.Core.Entity @using salesbook.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(); } 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 || string.IsNullOrWhiteSpace(TextToFilter)) { TextToFilter = null; FilteredGroupedUserList = GroupedUserList; return; } var filter = TextToFilter.Trim(); var result = new List(); foreach (var item in GroupedUserList) { var user = item.User; if ( (!string.IsNullOrEmpty(user.RagSoc) && user.RagSoc.Contains(filter, StringComparison.OrdinalIgnoreCase)) || (!string.IsNullOrEmpty(user.Indirizzo) && user.Indirizzo.Contains(filter, StringComparison.OrdinalIgnoreCase)) || (!string.IsNullOrEmpty(user.Telefono) && user.Telefono.Contains(filter, StringComparison.OrdinalIgnoreCase)) || (!string.IsNullOrEmpty(user.EMail) && user.EMail.Contains(filter, StringComparison.OrdinalIgnoreCase)) || (!string.IsNullOrEmpty(user.PartIva) && user.PartIva.Contains(filter, StringComparison.OrdinalIgnoreCase)) ) { result.Add(item); } } FilteredGroupedUserList = result; } }