Guard Home JS interop during prerender disposal
This commit is contained in:
@@ -69,6 +69,7 @@ public partial class Home
|
|||||||
private Guid? EditingCharacterId { get; set; }
|
private Guid? EditingCharacterId { get; set; }
|
||||||
private Guid? EditingSkillId { get; set; }
|
private Guid? EditingSkillId { get; set; }
|
||||||
private bool StateRefreshInProgress { get; set; }
|
private bool StateRefreshInProgress { get; set; }
|
||||||
|
private bool HasInteractiveRenderStarted { get; set; }
|
||||||
private DotNetObjectReference<Home>? DotNetRef { get; set; }
|
private DotNetObjectReference<Home>? DotNetRef { get; set; }
|
||||||
|
|
||||||
[Inject]
|
[Inject]
|
||||||
@@ -104,6 +105,8 @@ public partial class Home
|
|||||||
|
|
||||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||||
{
|
{
|
||||||
|
HasInteractiveRenderStarted = true;
|
||||||
|
|
||||||
if (!firstRender)
|
if (!firstRender)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -901,6 +904,11 @@ public partial class Home
|
|||||||
|
|
||||||
private async Task StopStateEventsAsync()
|
private async Task StopStateEventsAsync()
|
||||||
{
|
{
|
||||||
|
if (!HasInteractiveRenderStarted)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await JS.InvokeVoidAsync("rpgRollerApi.stopStateEvents");
|
await JS.InvokeVoidAsync("rpgRollerApi.stopStateEvents");
|
||||||
@@ -908,6 +916,9 @@ public partial class Home
|
|||||||
catch (JSDisconnectedException)
|
catch (JSDisconnectedException)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
catch (InvalidOperationException ex) when (IsStaticRenderInteropException(ex))
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async ValueTask DisposeAsync()
|
public async ValueTask DisposeAsync()
|
||||||
@@ -916,6 +927,11 @@ public partial class Home
|
|||||||
DotNetRef?.Dispose();
|
DotNetRef?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsStaticRenderInteropException(InvalidOperationException exception)
|
||||||
|
{
|
||||||
|
return exception.Message.Contains("statically rendered", StringComparison.OrdinalIgnoreCase);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task<T> RequestAsync<T>(string method, string path, object? payload = null)
|
private async Task<T> RequestAsync<T>(string method, string path, object? payload = null)
|
||||||
{
|
{
|
||||||
var response = await JS.InvokeAsync<JsApiResponse>("rpgRollerApi.request", method, path, payload);
|
var response = await JS.InvokeAsync<JsApiResponse>("rpgRollerApi.request", method, path, payload);
|
||||||
|
|||||||
Reference in New Issue
Block a user