@inject IJSRuntime JS
@implements IDisposable
@if (!string.IsNullOrEmpty(displayMessage))
{
}
@code {
[Parameter] public string? Message { get; set; }
private string? displayMessage;
private CancellationTokenSource? hideCts;
protected override async Task OnParametersSetAsync()
{
if (!string.IsNullOrEmpty(Message) && Message != displayMessage)
{
hideCts?.Cancel();
hideCts?.Dispose();
hideCts = new CancellationTokenSource();
displayMessage = Message;
await InvokeAsync(StateHasChanged);
await JS.InvokeVoidAsync("initIcons");
var token = hideCts.Token;
_ = HideAfterDelay(token);
}
}
private async Task HideAfterDelay(CancellationToken token)
{
try
{
await Task.Delay(3000, token);
displayMessage = null;
await InvokeAsync(StateHasChanged);
}
catch (TaskCanceledException)
{
}
}
public void Dispose()
{
hideCts?.Cancel();
hideCts?.Dispose();
}
}