Merge branch dev with rel-10.4#25479
Merged
Merged
Conversation
Saas tenant create modal (and other mud CRUD pages) duplicated rows when the user double-clicked Save: the second click hit AppService.CreateAsync before the first response had returned. Add IsCreating / IsUpdating gates to AbpMudCrudPageBase so concurrent calls return immediately. Wrap the body in try/finally and trigger StateHasChanged so any UI bindings to these flags reflect the busy state.
Top-level "Select All in All Tabs" already used `Indeterminate` to show a partial-grant state. The per-tab "Select All in This Tab" checkbox was a plain two-state binding to `Permissions.All(x => x.IsGranted)`, so a tab with some (but not all) permissions granted rendered as unchecked - reading as "no permissions granted" to QA. Bind `Indeterminate` to "any granted but not all granted" to match the top-level behavior.
…d to avoid empty card flicker
- Directory.Packages.props bumps MudBlazor 8.0.0 to 9.4.0 - AbpMudCrudPageBase: ShowMessageBox to ShowMessageBoxAsync, OnDataGridReadAsync adds CancellationToken - AbpMudExtensibleDataGrid: ServerData adds CancellationToken, SortFunc becomes Func<TItem, object?> - basic-theme LoginDisplay (Server + WASM): name MudMenu ActivatorContent context to avoid AuthorizeView clash - permission-management and feature-management modals: ShowMessageBox to ShowMessageBoxAsync
- MudMenu: switch ActivatorContent to MenuContext.ToggleAsync pattern (v9 breaking) - MudForm: rename Validate to ValidateAsync (v9.1 obsoletion) - MudInput: replace AutoGrow with Sizing for textarea - DataGrid: add white-space:nowrap on header to prevent CJK characters stacking vertically - BlockUI: shrink loading spinner inside mud-dialog - Search field: switch Label to Placeholder so the text shows next to the magnifier icon
Long label text (e.g. Turkish translations) on MudDatePicker / MudTimePicker overflowed the input and visually overlapped the calendar toggle icon on the right. Reserve 40px on the right for the end-adornment icon so the label clips with ellipsis.
The custom Style="max-height: 600px; overflow-y: auto;" on MudTabs produced an inner scrollbar in addition to mud-dialog's own scrollbar, resulting in a double scrolling experience inside the permissions modal. Let mud-dialog handle overflow natively.
MudBlazor 9 defaults .mud-input-label-inputcontrol to line-height: 1.15rem, which is smaller than a typical 16px character with descenders. Letters like g, p, q, y in the floated label visually clipped under the input baseline. Bump to 1.4rem so descenders have room without enlarging the overall control.
MudBlazor 9 renders mud-tabs-vertical with the tabbar flush against the panels container, making the active tab indicator visually touch the panel content. Add 16px padding-inline-start on the panels area (and -end for the reverse layout) so the tabbar and panels have breathing room.
…with modal focus behavior and namespace usage
Fix various issues in MudBlazor.
voloagent
approved these changes
May 26, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
This automated merge brings dev changes into rel-10.4, primarily updating ABP’s MudBlazor integration to align with MudBlazor v9 APIs and improving MudBlazor UI behavior (dialogs, tabs, progress, styling).
Changes:
- Upgraded MudBlazor from
8.0.0to9.4.0and updated affected UI usages (e.g.,ValidateAsync,ShowMessageBoxAsync, dialog focus handling). - Improved modal/tab UX (default focus behavior,
KeepPanelsAlive, tri-state “select all” behavior in permission management). - Added MudBlazor-specific UI patches (CSS fixes + popover JS patch) and wired the patch into MudBlazor script bundles.
Reviewed changes
Copilot reviewed 37 out of 37 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
| modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor.cs | Updates MudForm validation to ValidateAsync() for MudBlazor v9 compatibility. |
| modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/Pages/TenantManagement/TenantManagement.razor | Sets dialog DefaultFocus to improve initial focus behavior. |
| modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor.MudBlazor/_Imports.razor | Adds MudBlazor Layout namespace import for shared layout components (e.g., PageHeader). |
| modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/SettingManagement.razor | Adds loading spinner/height styling and conditional rendering around group selection. |
| modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor.cs | Updates MudForm validation to ValidateAsync(). |
| modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/Pages/SettingManagement/EmailSettingGroup/EmailSettingGroupViewComponent.razor | Sets dialog DefaultFocus for better focus behavior. |
| modules/setting-management/src/Volo.Abp.SettingManagement.Blazor.MudBlazor/_Imports.razor | Adds MudBlazor Layout namespace import. |
| modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor.cs | Updates validation + migrates message box call to ShowMessageBoxAsync(). |
| modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/ResourcePermissionManagementModal.razor | Sets dialog DefaultFocus on multiple dialogs. |
| modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor.cs | Migrates warning confirmation dialog to ShowMessageBoxAsync(). |
| modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/Components/PermissionManagementModal.razor | Dialog focus changes, search field UX changes, tri-state “select all”, and KeepPanelsAlive for tabs. |
| modules/permission-management/src/Volo.Abp.PermissionManagement.Blazor.MudBlazor/_Imports.razor | Adds MudBlazor Layout namespace import. |
| modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/UserManagement.razor | Search field UX changes; dialog focus changes; enables KeepPanelsAlive and AutoFocus for tabbed dialogs. |
| modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/Pages/Identity/RoleManagement.razor | Sets dialog DefaultFocus for create/edit dialogs. |
| modules/identity/src/Volo.Abp.Identity.Blazor.MudBlazor/_Imports.razor | Adds MudBlazor Layout namespace import. |
| modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor.cs | Migrates reset confirmation dialog to ShowMessageBoxAsync(). |
| modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/Components/FeatureManagementModal.razor | Sets dialog focus and keeps tab panels alive. |
| modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor.MudBlazor/_Imports.razor | Adds MudBlazor Layout namespace import. |
| modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor | Updates MudMenu activator to use Context + ToggleAsync() behavior. |
| modules/basic-theme/src/Volo.Abp.AspNetCore.Components.WebAssembly.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor | Updates MudMenu activator to use Context + ToggleAsync() behavior. |
| modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LoginDisplay.razor | Updates MudMenu activator to use Context + ToggleAsync() behavior. |
| modules/basic-theme/src/Volo.Abp.AspNetCore.Components.Server.MudBlazorBasicTheme/Themes/Basic/LanguageSwitch.razor | Updates MudMenu activator to use Context + ToggleAsync() behavior. |
| modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/Pages/Account/AccountManage.razor.cs | Updates MudForm validation to ValidateAsync(). |
| modules/account/src/Volo.Abp.Account.Blazor.MudBlazor/_Imports.razor | Adds MudBlazor Layout namespace import. |
| framework/src/Volo.Abp.MudBlazorUI/wwwroot/volo.abp.mudblazorui.css | Adds MudBlazor v9-specific styling fixes (dialogs, DataGrid headers, pickers, labels, vertical tabs). |
| framework/src/Volo.Abp.MudBlazorUI/wwwroot/abp-mud-popover-patch.js | Adds runtime patch to guard MudBlazor popover observer creation. |
| framework/src/Volo.Abp.MudBlazorUI/MudBlazorUiPageProgressService.cs | Reworks page progress behavior with delayed hide + nested activity tracking. |
| framework/src/Volo.Abp.MudBlazorUI/Components/ObjectExtending/MudTextAreaExtensionProperty.razor | Updates textarea autosize behavior to MudBlazor v9 parameter (Sizing). |
| framework/src/Volo.Abp.MudBlazorUI/Components/AbpMudExtensibleDataGrid.razor.cs | Updates DataGrid server data signature to include CancellationToken; adjusts sort delegate nullability. |
| framework/src/Volo.Abp.MudBlazorUI/AbpMudCrudPageBase.cs | Updates grid server read signature, form validation calls, dialog confirmation API, and adds create/update reentrancy guards. |
| framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming.MudBlazor.Bundling/BlazorWebAssemblyMudBlazorScriptContributor.cs | Ensures popover patch JS is included in WASM MudBlazor bundles. |
| framework/src/Volo.Abp.AspNetCore.Components.Server.Theming.MudBlazor/Bundling/BlazorServerMudBlazorScriptContributor.cs | Ensures popover patch JS is included in Server MudBlazor bundles. |
| framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Theming.MudBlazor.Bundling/MauiBlazorMudBlazorScriptContributor.cs | Ensures popover patch JS is included in MAUI MudBlazor bundles. |
| docs/en/package-version-changes.md | Documents MudBlazor package upgrade for 10.4.1. |
| docs/en/framework/ui/blazor/page-header.md | Updates PageHeader docs to distinguish required namespaces for Blazorise vs MudBlazor. |
| docs/en/framework/ui/blazor/forms-validation.md | Adds MudBlazor modal focus guidance for tabbed dialogs. |
| Directory.Packages.props | Bumps MudBlazor dependency to 9.4.0. |
|
|
||
| public MudBlazorUiPageProgressService() | ||
| { | ||
| _hideTimer = new Timer(_ => ProgressChanged?.Invoke(this, new UiPageProgressEventArgs(-1, _lastOptions))); |
Comment on lines
+34
to
+38
| if (percentage == -1 && Interlocked.Decrement(ref _activeCount) <= 0) | ||
| { | ||
| Interlocked.Exchange(ref _activeCount, 0); | ||
| _hideTimer.Change(HideDelayMs, Timeout.Infinite); | ||
| } |
Comment on lines
25
to
29
| <MudTextField Margin="Margin.Dense" @bind-Value="GetListInput.Filter" | ||
| Label="@L["Search"]" | ||
| Placeholder="@L["Search"]" | ||
| Adornment="Adornment.Start" | ||
| AdornmentIcon="@Icons.Material.Filled.Search" | ||
| Immediate="true" |
| <MudTextField Margin="Margin.Dense" Value="@_permissionGroupSearchText" | ||
| ValueChanged="@(async ([CanBeNull] string b) => await OnPermissionGroupSearchTextChangedAsync(b))" | ||
| Label="@L["Search"]" | ||
| Placeholder="@L["Search"]" |
Comment on lines
+18
to
+22
| @if (string.IsNullOrEmpty(SelectedGroup)) | ||
| { | ||
| <div class="d-flex justify-center align-center" style="min-height: 360px;"> | ||
| <MudProgressCircular Indeterminate="true" Color="Color.Primary" /> | ||
| </div> |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## dev #25479 +/- ##
==========================================
- Coverage 49.44% 49.42% -0.03%
==========================================
Files 3670 3670
Lines 123599 123599
Branches 9453 9453
==========================================
- Hits 61111 61083 -28
- Misses 60654 60682 +28
Partials 1834 1834 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR generated automatically to merge dev with rel-10.4. Please review the changed files before merging to prevent any errors that may occur.