From 262df29f8cdca6cf92544c77661f7c3376c0a199 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 25 Mar 2024 10:26:30 +0300 Subject: [PATCH] Persist component state for WebApp Styles --- .../Bundling/AbpStyles.razor | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor index 488caba797..053e0efd01 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/Bundling/AbpStyles.razor @@ -1,11 +1,13 @@ @using Volo.Abp +@implements IDisposable @inject IComponentBundleManager BundleManager +@inject PersistentComponentState PersistentComponentState @if (StyleFiles != null) { foreach (var file in StyleFiles) { - + } } @@ -18,16 +20,37 @@ private List? StyleFiles { get; set; } + private PersistingComponentStateSubscription persistingSubscription; + protected override async Task OnInitializedAsync() { if (BundleName == null) { throw new AbpException("The BundleName parameter of the AbpStyles component can not be null!"); } - StyleFiles = (await BundleManager.GetStyleBundleFilesAsync(BundleName!)).ToList(); + + persistingSubscription = PersistentComponentState.RegisterOnPersisting(PersistStyleFiles); + + if (PersistentComponentState.TryTakeFromJson>(nameof(StyleFiles), out var restoredStyleFiles)) + { + StyleFiles = restoredStyleFiles; + } + else + { + StyleFiles = (await BundleManager.GetStyleBundleFilesAsync(BundleName!)).ToList(); + } + if (OperatingSystem.IsBrowser() && WebAssemblyStyleFiles != null) { - StyleFiles.AddRange(WebAssemblyStyleFiles); + StyleFiles!.AddRange(WebAssemblyStyleFiles); } } + + private Task PersistStyleFiles() + { + PersistentComponentState.PersistAsJson(nameof(StyleFiles), StyleFiles); + return Task.CompletedTask; + } + + public void Dispose() => persistingSubscription.Dispose(); }