@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();
}