@using Iceshrimp.Assets.PhosphorIcons @using Iceshrimp.Frontend.Core.Services @using Iceshrimp.Frontend.Localization @using Microsoft.Extensions.Localization @inject GlobalComponentSvc GlobalComponentSvc; @inject IJSRuntime Js; @inject IStringLocalizer Loc;
@if (Waiting) { } else { @Question
}
@code { private ElementReference Dialog { get; set; } private IJSObjectReference _module = null!; private EventCallback Action { get; set; } private string Question { get; set; } = ""; private IconName? ConfirmIcon { get; set; } private string? ButtonText { get; set; } private bool Waiting { get; set; } private async Task CloseDialog() { await _module.InvokeVoidAsync("closeDialog", Dialog); } public async Task Confirm(EventCallback action, string question, IconName? icon = null, string? buttonText = null) { Action = action; Question = question; ConfirmIcon = icon; ButtonText = buttonText; Waiting = false; StateHasChanged(); await _module.InvokeVoidAsync("openDialog", Dialog); } private async Task ConfirmAction() { Waiting = true; await Action.InvokeAsync(true); Waiting = false; await CloseDialog(); } private async Task CancelAction() { await Action.InvokeAsync(false); await CloseDialog(); } protected override async Task OnInitializedAsync() { _module = await Js.InvokeAsync("import", "./Components/ConfirmDialog.razor.js"); GlobalComponentSvc.ConfirmDialog = this; } }