diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs index 84f9743a1e..310e9cc8a8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/AbpBlazorClientHttpMessageHandler.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Configuration; using Microsoft.JSInterop; +using Volo.Abp.AspNetCore.Components.Progression; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.WebAssembly @@ -18,6 +19,8 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly private readonly NavigationManager _navigationManager; + private readonly IUiPageProgressService _uiPageProgressService; + private const string AntiForgeryCookieName = "XSRF-TOKEN"; private const string AntiForgeryHeaderName = "RequestVerificationToken"; @@ -25,19 +28,37 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly public AbpBlazorClientHttpMessageHandler( IJSRuntime jsRuntime, ICookieService cookieService, - NavigationManager navigationManager) + NavigationManager navigationManager, + IUiPageProgressService uiPageProgressService) { _jsRuntime = jsRuntime; _cookieService = cookieService; _navigationManager = navigationManager; + _uiPageProgressService = uiPageProgressService; } protected async override Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { - await SetLanguageAsync(request, cancellationToken); - await SetAntiForgeryTokenAsync(request); + try + { + await _uiPageProgressService.Go(null, options => + { + options.Type = UiPageProgressType.Info; + }); - return await base.SendAsync(request, cancellationToken); + await SetLanguageAsync(request, cancellationToken); + await SetAntiForgeryTokenAsync(request); + + return await base.SendAsync(request, cancellationToken); + } + catch (Exception) + { + throw; + } + finally + { + await _uiPageProgressService.Go(-1); + } } private async Task SetLanguageAsync(HttpRequestMessage request, CancellationToken cancellationToken) diff --git a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/IUiPageProgressService.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/IUiPageProgressService.cs index c3855e9c7f..fa9781e2d9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/IUiPageProgressService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/IUiPageProgressService.cs @@ -5,6 +5,17 @@ namespace Volo.Abp.AspNetCore.Components.Progression { public interface IUiPageProgressService { + /// + /// An event raised after the notification is received. + /// + public event EventHandler ProgressChanged; + + /// + /// Sets the progress percentage. + /// + /// Value of the progress from 0 to 100, or null for indeterminate progress. + /// Additional options. + /// Awaitable task. Task Go(int? percentage, Action options = null); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/NullUiPageProgressService.cs b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/NullUiPageProgressService.cs index 887599ce99..5c375e2b40 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/NullUiPageProgressService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/Progression/NullUiPageProgressService.cs @@ -4,8 +4,10 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.Progression { - public class NullUiPageProgressService : IUiPageProgressService, ITransientDependency + public class NullUiPageProgressService : IUiPageProgressService, ISingletonDependency { + public event EventHandler ProgressChanged; + public Task Go(int? percentage, Action options = null) { return Task.CompletedTask; diff --git a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs index 4f4d923fd7..2ec9e8a090 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/AbpCrudPageBase.cs @@ -173,7 +173,6 @@ namespace Volo.Abp.BlazoriseUI { [Inject] protected TAppService AppService { get; set; } [Inject] protected IStringLocalizer UiLocalizer { get; set; } - [Inject] protected IUiPageProgressService PageProgressService { get; set; } protected virtual int PageSize { get; } = LimitedResultRequestDto.DefaultMaxResultCount; @@ -360,25 +359,7 @@ namespace Volo.Abp.BlazoriseUI protected virtual async Task RunProcess(Func process) { - try - { - // null means the progress will loop itself - await PageProgressService?.Go(null, options => - { - options.Type = UiPageProgressType.Info; - }); - - await process.Invoke(); - } - catch (Exception) - { - throw; - } - finally - { - // -1 is not valid value so the progress will hide - await PageProgressService?.Go(-1); - } + await process.Invoke(); } protected virtual async Task CreateEntityAsync() diff --git a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiPageProgressService.cs b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiPageProgressService.cs index bb33e42342..92e611df58 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiPageProgressService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/BlazoriseUiPageProgressService.cs @@ -7,7 +7,10 @@ using Volo.Abp.DependencyInjection; namespace Volo.Abp.BlazoriseUI { [Dependency(ReplaceServices = true)] - public class BlazoriseUiPageProgressService : IUiPageProgressService, IScopedDependency + public class BlazoriseUiPageProgressService : IUiPageProgressService, + // WARNING: this is made Singleton because there was an issue with ABP internal DI. + // TODO: make it Scoped once the issue is solved. + ISingletonDependency { /// /// An event raised after the notification is received. diff --git a/framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor.cs b/framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor.cs index bfb95a1536..8a0a8e28d2 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Components/UiPageProgress.razor.cs @@ -15,7 +15,7 @@ namespace Volo.Abp.BlazoriseUI.Components protected Color Color { get; set; } - [Inject] protected BlazoriseUiPageProgressService UiPageProgressService { get; set; } + [Inject] protected IUiPageProgressService UiPageProgressService { get; set; } protected override void OnInitialized() {