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"); + } + } +}