From e2ebf15231fc605ad0c47fa31d727cb95cd9f5c7 Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 12 Oct 2025 15:09:46 +0800 Subject: [PATCH 1/4] Remove `JSRuntime` from `MauiBlazorCachedApplicationConfigurationClient`. Resolves #23933 --- ...zorCachedApplicationConfigurationClient.cs | 28 ++----------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs index e4a2f8a3cc..7d615dc185 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCachedApplicationConfigurationClient.cs @@ -1,14 +1,11 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.AspNetCore.Components.Authorization; -using Microsoft.JSInterop; using Volo.Abp.AspNetCore.Components.Web.Security; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClientProxies; using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.DependencyInjection; using Volo.Abp.MultiTenancy; -using Volo.Abp.Timing; namespace Volo.Abp.AspNetCore.Components.MauiBlazor { @@ -22,33 +19,21 @@ namespace Volo.Abp.AspNetCore.Components.MauiBlazor protected ICurrentTenantAccessor CurrentTenantAccessor { get; } - protected ICurrentTimezoneProvider CurrentTimezoneProvider { get; } - protected ApplicationConfigurationChangedService ApplicationConfigurationChangedService { get; } - protected IJSRuntime JSRuntime { get; } - - protected IClock Clock { get; } - public MauiBlazorCachedApplicationConfigurationClient( AbpApplicationConfigurationClientProxy applicationConfigurationClientProxy, ApplicationConfigurationCache cache, ICurrentTenantAccessor currentTenantAccessor, - ICurrentTimezoneProvider currentTimezoneProvider, AuthenticationStateProvider authenticationStateProvider, AbpApplicationLocalizationClientProxy applicationLocalizationClientProxy, - ApplicationConfigurationChangedService applicationConfigurationChangedService, - IJSRuntime jsRuntime, - IClock clock) + ApplicationConfigurationChangedService applicationConfigurationChangedService) { ApplicationConfigurationClientProxy = applicationConfigurationClientProxy; Cache = cache; CurrentTenantAccessor = currentTenantAccessor; - CurrentTimezoneProvider = currentTimezoneProvider; ApplicationLocalizationClientProxy = applicationLocalizationClientProxy; ApplicationConfigurationChangedService = applicationConfigurationChangedService; - JSRuntime = jsRuntime; - Clock = clock; authenticationStateProvider.AuthenticationStateChanged += async _ => { await InitializeAsync(); }; } @@ -78,15 +63,6 @@ namespace Volo.Abp.AspNetCore.Components.MauiBlazor configurationDto.CurrentTenant.Id, configurationDto.CurrentTenant.Name); - if (Clock.SupportsMultipleTimezone) - { - CurrentTimezoneProvider.TimeZone = !configurationDto.Timing.TimeZone.Iana.TimeZoneName.IsNullOrWhiteSpace() - ? configurationDto.Timing.TimeZone.Iana.TimeZoneName - : await JSRuntime.InvokeAsync("abp.clock.getBrowserTimeZone"); - - await JSRuntime.InvokeAsync("abp.clock.setBrowserTimeZoneToCookie"); - } - ApplicationConfigurationChangedService.NotifyChanged(); } From 8257dc11464cec7671a9e96ebec8da2bf2c51bec Mon Sep 17 00:00:00 2001 From: maliming Date: Sun, 12 Oct 2025 15:42:48 +0800 Subject: [PATCH 2/4] Add MauiBlazorCurrentTimezoneService implementation --- .../MauiBlazorCurrentTimezoneService.cs | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCurrentTimezoneService.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCurrentTimezoneService.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCurrentTimezoneService.cs new file mode 100644 index 0000000000..fadbe57eb9 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor/Volo/Abp/AspNetCore/Components/MauiBlazor/MauiBlazorCurrentTimezoneService.cs @@ -0,0 +1,41 @@ +using System; +using System.Threading.Tasks; +using Microsoft.JSInterop; +using Volo.Abp.AspNetCore.Mvc.Client; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Timing; + +namespace Volo.Abp.AspNetCore.Components.MauiBlazor; + +public class MauiBlazorCurrentTimezoneService : ITransientDependency +{ + protected IClock Clock { get; } + protected ICachedApplicationConfigurationClient ApplicationConfigurationClient { get; } + protected IJSRuntime JsRuntime { get; } + protected ICurrentTimezoneProvider CurrentTimezoneProvider { get; } + + public MauiBlazorCurrentTimezoneService( + IClock clock, + ICachedApplicationConfigurationClient applicationConfigurationClient, + IJSRuntime jsRuntime, + ICurrentTimezoneProvider currentTimezoneProvider) + { + Clock = clock; + ApplicationConfigurationClient = applicationConfigurationClient; + JsRuntime = jsRuntime; + CurrentTimezoneProvider = currentTimezoneProvider; + } + + public virtual async Task InitializeAsync() + { + if (Clock.SupportsMultipleTimezone) + { + var configurationDto = await ApplicationConfigurationClient.GetAsync(); + CurrentTimezoneProvider.TimeZone = !configurationDto.Timing.TimeZone.Iana.TimeZoneName.IsNullOrEmpty() + ? configurationDto.Timing.TimeZone.Iana.TimeZoneName + : await JsRuntime.InvokeAsync("abp.clock.getBrowserTimeZone"); + + await JsRuntime.InvokeAsync("abp.clock.setBrowserTimeZoneToCookie"); + } + } +} From f9c93a1f6d89a1710b1073bd65b343fe4c04c264 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 13 Oct 2025 10:26:04 +0800 Subject: [PATCH 3/4] Initialize timezone service in AbpBlazorWebView --- .../MauiBlazor/Bundling/AbpBlazorWebView.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs index bbb5829162..5c8daf7dfa 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs @@ -1,13 +1,22 @@ using Microsoft.AspNetCore.Components.WebView.Maui; using Microsoft.Extensions.FileProviders; using Microsoft.Maui; +using Volo.Abp.Threading; namespace Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling; public class AbpBlazorWebView : BlazorWebView { + public AbpBlazorWebView() + { + BlazorWebViewInitialized += (s, e) => + { + AsyncHelper.RunSync(() => Handler!.GetRequiredService().InitializeAsync()); + }; + } + public override IFileProvider CreateFileProvider(string contentRootDir) { return new CompositeFileProvider(Handler!.GetRequiredService(), base.CreateFileProvider(contentRootDir)); } -} \ No newline at end of file +} From 4006d0e00c335a8270cac6cb8f058289f13f9867 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 13 Oct 2025 14:40:24 +0800 Subject: [PATCH 4/4] Revert "Initialize timezone service in AbpBlazorWebView" This reverts commit f9c93a1f6d89a1710b1073bd65b343fe4c04c264. --- .../MauiBlazor/Bundling/AbpBlazorWebView.cs | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs index 5c8daf7dfa..bbb5829162 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling/Volo/Abp/AspNetCore/Components/MauiBlazor/Bundling/AbpBlazorWebView.cs @@ -1,22 +1,13 @@ using Microsoft.AspNetCore.Components.WebView.Maui; using Microsoft.Extensions.FileProviders; using Microsoft.Maui; -using Volo.Abp.Threading; namespace Volo.Abp.AspNetCore.Components.MauiBlazor.Bundling; public class AbpBlazorWebView : BlazorWebView { - public AbpBlazorWebView() - { - BlazorWebViewInitialized += (s, e) => - { - AsyncHelper.RunSync(() => Handler!.GetRequiredService().InitializeAsync()); - }; - } - public override IFileProvider CreateFileProvider(string contentRootDir) { return new CompositeFileProvider(Handler!.GetRequiredService(), base.CreateFileProvider(contentRootDir)); } -} +} \ No newline at end of file