From b0d2ee8760cb4a091f798d2625727dd24bb3f9a6 Mon Sep 17 00:00:00 2001 From: sbwalker Date: Mon, 9 Oct 2023 16:59:36 -0400 Subject: [PATCH] add Search capability to Pager and include in management UIs --- Oqtane.Client/Modules/Admin/Files/Index.razor | 23 +++--- Oqtane.Client/Modules/Admin/Jobs/Index.razor | 2 +- .../Modules/Admin/Languages/Index.razor | 2 +- Oqtane.Client/Modules/Admin/Pages/Index.razor | 2 +- .../Modules/Admin/Profiles/Index.razor | 2 +- Oqtane.Client/Modules/Admin/Roles/Index.razor | 2 +- Oqtane.Client/Modules/Admin/Sites/Index.razor | 2 +- .../Modules/Admin/UrlMappings/Index.razor | 2 +- Oqtane.Client/Modules/Admin/Users/Index.razor | 61 ++-------------- Oqtane.Client/Modules/Controls/Pager.razor | 73 ++++++++++++++++++- 10 files changed, 95 insertions(+), 76 deletions(-) diff --git a/Oqtane.Client/Modules/Admin/Files/Index.razor b/Oqtane.Client/Modules/Admin/Files/Index.razor index 11684f3f..abec1dbf 100644 --- a/Oqtane.Client/Modules/Admin/Files/Index.razor +++ b/Oqtane.Client/Modules/Admin/Files/Index.razor @@ -8,27 +8,28 @@ @if (_files != null) { -
-
-
- -
-
+
+
+ +
+
+
+ @Localizer["Folder"]: -
-
  -   -
+
+ +
- + +
    diff --git a/Oqtane.Client/Modules/Admin/Jobs/Index.razor b/Oqtane.Client/Modules/Admin/Jobs/Index.razor index 9b217d07..aac1529d 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Index.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Index.razor @@ -15,7 +15,7 @@ else

- +
    diff --git a/Oqtane.Client/Modules/Admin/Languages/Index.razor b/Oqtane.Client/Modules/Admin/Languages/Index.razor index 19b3be19..6b9d6c34 100644 --- a/Oqtane.Client/Modules/Admin/Languages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Languages/Index.razor @@ -14,7 +14,7 @@ else { - +
  @SharedLocalizer["Name"] diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor index d71dc964..93552c7c 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -9,7 +9,7 @@ { - +
    diff --git a/Oqtane.Client/Modules/Admin/Profiles/Index.razor b/Oqtane.Client/Modules/Admin/Profiles/Index.razor index f554c6c5..6ec8f79a 100644 --- a/Oqtane.Client/Modules/Admin/Profiles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Profiles/Index.razor @@ -12,7 +12,7 @@ else { - +
    diff --git a/Oqtane.Client/Modules/Admin/Roles/Index.razor b/Oqtane.Client/Modules/Admin/Roles/Index.razor index 6677548d..3548b92c 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Index.razor @@ -12,7 +12,7 @@ else { - +
    diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor index 8075d4d6..a39d9933 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -14,7 +14,7 @@ else { - +
    diff --git a/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor b/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor index 28478589..86bc7fa7 100644 --- a/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor +++ b/Oqtane.Client/Modules/Admin/UrlMappings/Index.razor @@ -28,7 +28,7 @@ else

- +
    diff --git a/Oqtane.Client/Modules/Admin/Users/Index.razor b/Oqtane.Client/Modules/Admin/Users/Index.razor index 57f10221..738d0c2e 100644 --- a/Oqtane.Client/Modules/Admin/Users/Index.razor +++ b/Oqtane.Client/Modules/Admin/Users/Index.razor @@ -17,21 +17,10 @@ else { -
-
-
-   - -
-
- -
-
- -
-
-
- +   + + +
    @@ -368,9 +357,7 @@ else } @code { - private List allusers; private List users; - private string _search = ""; private string _allowregistration; private string _allowsitelogin; @@ -423,7 +410,6 @@ else protected override async Task OnInitializedAsync() { - await LoadUserSettingsAsync(); await LoadUsersAsync(true); var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); @@ -478,32 +464,14 @@ else { if (load) { - allusers = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Registered); + users = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Registered); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { var hosts = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId, RoleNames.Host); - allusers.AddRange(hosts); - allusers = allusers.OrderBy(u => u.User.DisplayName).ToList(); + users.AddRange(hosts); + users = users.OrderBy(u => u.User.DisplayName).ToList(); } } - - users = allusers; - if (!string.IsNullOrEmpty(_search)) - { - users = users.Where(item => - ( - item.User.Username.Contains(_search, StringComparison.OrdinalIgnoreCase) || - item.User.Email.Contains(_search, StringComparison.OrdinalIgnoreCase) || - item.User.DisplayName.Contains(_search, StringComparison.OrdinalIgnoreCase) - ) - ).ToList(); - } - } - - private async Task OnSearch() - { - await UpdateUserSettingsAsync(); - await LoadUsersAsync(false); } private async Task DeleteUser(UserRole UserRole) @@ -526,21 +494,6 @@ else } } - private string settingSearch = "AU-search"; - - private async Task LoadUserSettingsAsync() - { - Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); - _search = SettingService.GetSetting(settings, settingSearch, ""); - } - - private async Task UpdateUserSettingsAsync() - { - Dictionary settings = await SettingService.GetUserSettingsAsync(PageState.User.UserId); - settings = SettingService.SetSetting(settings, settingSearch, _search); - await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId); - } - private async Task SaveSiteSettings() { try diff --git a/Oqtane.Client/Modules/Controls/Pager.razor b/Oqtane.Client/Modules/Controls/Pager.razor index bf735801..9ea03216 100644 --- a/Oqtane.Client/Modules/Controls/Pager.razor +++ b/Oqtane.Client/Modules/Controls/Pager.razor @@ -5,6 +5,15 @@ @if (ItemList != null) { + @if (AllowSearch == "True") + { +
+ + + +
+ } + @if ((Toolbar == "Top" || Toolbar == "Both") && _pages > 0 && Items.Count() > _maxItems) {
    @@ -175,6 +184,9 @@ private int _startPage = 0; private int _endPage = 0; private int _columns = 0; + private string _search = ""; + + private IEnumerable AllItems; [Parameter] public string Format { get; set; } // Table or Grid @@ -221,6 +233,12 @@ [Parameter] public Action OnPageChange { get; set; } // a method to be executed in the calling component when the page changes + [Parameter] + public string AllowSearch { get; set; } // allow user to search items + + [Parameter] + public string SearchProperties { get; set; } // comma delimited list of property names to include in search + private IEnumerable ItemList { get; set; } protected override void OnInitialized() @@ -230,6 +248,8 @@ protected override void OnParametersSet() { + AllItems = Items; + if (string.IsNullOrEmpty(Format)) { Format = "Table"; @@ -276,6 +296,11 @@ } } + if (string.IsNullOrEmpty(AllowSearch) || string.IsNullOrEmpty(SearchProperties)) + { + AllowSearch = "False"; + } + if (!string.IsNullOrEmpty(PageSize)) { _maxItems = int.Parse(PageSize); @@ -323,10 +348,10 @@ { _endPage = _pages; } - ItemList = Items.Skip((_page - 1) * _maxItems).Take(_maxItems); - StateHasChanged(); - OnPageChange?.Invoke(_page); - } + ItemList = Items.Skip((_page - 1) * _maxItems).Take(_maxItems); + StateHasChanged(); + OnPageChange?.Invoke(_page); + } public void UpdateList(int page) { @@ -369,4 +394,44 @@ UpdateList(_page); } + + public void Search() + { + if (!string.IsNullOrEmpty(_search)) + { + Items = AllItems.Where(item => + { + var values = SearchProperties.Split(',') + .Select(itemType => GetPropertyValue(item, itemType)) + .Where(value => value != null) + .Select(value => value.ToString().ToLower()); + + return values.Any(value => value.Contains(_search.ToLower())); + }).ToList(); + } + else + { + Items = AllItems; + } + _pages = (int)Math.Ceiling(Items.Count() / (decimal)_maxItems); + UpdateList(1); + } + + private object GetPropertyValue(object obj, string propertyName) + { + var propertyInfo = obj.GetType().GetProperty(propertyName); + if (propertyInfo != null) + { + return propertyInfo.GetValue(obj); + } + return null; + } + + public void Reset() + { + _search = ""; + Items = AllItems; + _pages = (int)Math.Ceiling(Items.Count() / (decimal)_maxItems); + UpdateList(1); + } }