From 80fdac8f273ae790674aa0c7466b602073c30651 Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 2 Oct 2025 13:43:35 +0800 Subject: [PATCH 1/3] Add indeterminate state to 'Select All' checkbox --- .../Components/PermissionManagementModal.razor | 2 +- .../Components/PermissionManagementModal.razor.cs | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor index bc89353185..634acfa4a6 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor @@ -24,7 +24,7 @@ - + @L["SelectAllInAllTabs"] diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index fcacf10ab3..bab8941dc5 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -36,6 +36,7 @@ public partial class PermissionManagementModal protected string _permissionGroupSearchText; protected bool GrantAll { get; set; } + protected bool GrantAny { get; set; } protected Dictionary _permissionDepths = new Dictionary(); @@ -61,6 +62,7 @@ public partial class PermissionManagementModal NormalizePermissionGroup(); GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _groups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); await InvokeAsync(_modal.Show); } @@ -73,6 +75,7 @@ public partial class PermissionManagementModal protected virtual async Task GrantAllAsync(bool grantAll) { GrantAll = grantAll; + GrantAny = false; if (_allGroups == null) { @@ -194,6 +197,7 @@ public partial class PermissionManagementModal } GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _groups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); await InvokeAsync(StateHasChanged); } @@ -216,6 +220,7 @@ public partial class PermissionManagementModal } GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _groups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); await InvokeAsync(StateHasChanged); } From 6608305fe2e619150f4831be4e229590ab901c4b Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 7 Oct 2025 17:15:24 +0800 Subject: [PATCH 2/3] Update grant status on permission group search --- .../Components/PermissionManagementModal.razor.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index bab8941dc5..8566713ea1 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -322,6 +322,9 @@ public partial class PermissionManagementModal _permissionGroupSearchText = value; _groups = _permissionGroupSearchText.IsNullOrWhiteSpace() ? _allGroups.ToList() : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase))).ToList(); + GrantAll = _groups.SelectMany(x => x.Permissions).All(p => p.IsGranted); + GrantAny = !GrantAll && _groups.SelectMany(x => x.Permissions).Any(p => p.IsGranted); + NormalizePermissionGroup(false); await InvokeAsync(StateHasChanged); From aceb45dc67dae62fa4464e7697fd2a643bf2471b Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 7 Oct 2025 20:45:04 +0800 Subject: [PATCH 3/3] Add ResetSearchTextAsync to clear permission group search --- .../Components/PermissionManagementModal.razor.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs index 8566713ea1..2a618b9d4b 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor/Components/PermissionManagementModal.razor.cs @@ -82,7 +82,7 @@ public partial class PermissionManagementModal return; } - await OnPermissionGroupSearchTextChangedAsync(string.Empty); + await ResetSearchTextAsync(); foreach (var permission in _allGroups.SelectMany(x => x.Permissions)) { @@ -312,6 +312,16 @@ public partial class PermissionManagementModal return permissions.All(x => x.IsGranted) && grantedProviders.Any(p => p.ProviderName != _providerName); } + protected virtual async Task ResetSearchTextAsync() + { + _permissionGroupSearchText = string.Empty; + _groups = _permissionGroupSearchText.IsNullOrWhiteSpace() ? _allGroups.ToList() : _allGroups.Where(x => x.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase) || x.Permissions.Any(permission => permission.DisplayName.Contains(_permissionGroupSearchText, StringComparison.OrdinalIgnoreCase))).ToList(); + + NormalizePermissionGroup(false); + + await InvokeAsync(StateHasChanged); + } + protected virtual async Task OnPermissionGroupSearchTextChangedAsync(string value) { if (value == _permissionGroupSearchText)