@implements IDisposable @inject IComponentBundleManager BundleManager @inject PersistentComponentState ApplicationState @if (ScriptFiles != null) { foreach (var file in ScriptFiles) { var src = file; if (!AppBasePath.IsNullOrWhiteSpace()) { src = AppBasePath.EnsureEndsWith('/') + file.RemovePreFix("/"); } } } @code { private const string PrerenderedKey = "abp_script_prerendered"; [Parameter] public List? WebAssemblyScriptFiles { get; set; } [Parameter] public string? BundleName { get; set; } [Parameter] public string? AppBasePath { get; set; } private List? ScriptFiles { get; set; } private PersistingComponentStateSubscription _persistingSubscription; protected override async Task OnInitializedAsync() { _persistingSubscription = ApplicationState.RegisterOnPersisting(Callback); if (!ApplicationState.TryTakeFromJson(PrerenderedKey, out _)) { if (!BundleName.IsNullOrWhiteSpace()) { ScriptFiles = (await BundleManager.GetScriptBundleFilesAsync(BundleName!)).ToList(); } } else { if (OperatingSystem.IsBrowser() && WebAssemblyScriptFiles != null) { ScriptFiles = WebAssemblyScriptFiles; } } } private Task Callback() { ApplicationState.PersistAsJson(PrerenderedKey, PrerenderedKey); return Task.CompletedTask; } public void Dispose() => _persistingSubscription.Dispose(); }