@using Microsoft.JSInterop @inject IJSRuntime JS @code { private TaskCompletionSource? tcs; private string ModalId { get; } = $"modal_{Guid.NewGuid():N}"; [Parameter] public string Title { get; set; } = "Modal"; [Parameter] public string Message { get; set; } = ""; [Parameter] public string UserInput { get; set; } = ""; [Parameter] public string Placeholder { get; set; } = ""; [Parameter] public Dictionary UserOptions { get; set; } = new(); [Parameter] public ModalMode Mode { get; set; } = ModalMode.Message; [Parameter] public ModalSize Size { get; set; } = ModalSize.Normal; [Parameter] public bool BigButtons { get; set; } = false; [Parameter] public string TitleCss { get; set; } = "bg-secondary bg-opacity-25 bg-gradient"; /// /// Mostra la modale ed aspetta risultato utente /// public async Task ShowAsync() { tcs = new TaskCompletionSource(); await JS.InvokeVoidAsync("bootstrapModalHelper.show", $"#{ModalId}"); var result = await tcs.Task; // Convert result to requested type if (result is null) return default; return (T)result; } protected override void OnParametersSet() { // fix opzioni standard... SE HO MODE... if (!Mode.Equals(lastMode)) { lastMode = Mode; if (UserOptions != null && UserOptions.Count > 0) { CurrOptions = UserOptions; } else { CurrOptions = new(); switch (Mode) { case ModalMode.Confirm: CurrOptions.Add(true, "Yes"); CurrOptions.Add(false, "No"); break; case ModalMode.Message: CurrOptions.Add(true, "Ok"); break; case ModalMode.Prompt: CurrOptions.Add(true, "Ok"); CurrOptions.Add(false, "Cancel"); break; default: break; } } } // base.OnParametersSet(); } private Dictionary CurrOptions { get; set; } = new(); private ModalMode lastMode { get; set; } = ModalMode.ND; private async Task OnOk() { await JS.InvokeVoidAsync("bootstrapModalHelper.hide", $"#{ModalId}"); tcs?.TrySetResult(true); } private async Task OnConfirm() { await JS.InvokeVoidAsync("bootstrapModalHelper.hide", $"#{ModalId}"); tcs?.TrySetResult(true); } private async Task OnPromptOk() { await JS.InvokeVoidAsync("bootstrapModalHelper.hide", $"#{ModalId}"); tcs?.TrySetResult(UserInput); } private async Task OnCancel() { await JS.InvokeVoidAsync("bootstrapModalHelper.hide", $"#{ModalId}"); if (Mode == ModalMode.Prompt) tcs?.TrySetResult(null); else if (Mode == ModalMode.Confirm) tcs?.TrySetResult(false); else tcs?.TrySetResult(null); } private string modalCss { get { string answ = ""; if (Size != ModalSize.Normal) { answ = Size == ModalSize.Small ? "modal-sm" : "modal-lg"; } return answ; } } private string btnCss => BigButtons ? "equal-buttons" : ""; /// /// Modalità display componente /// public enum ModalMode { ND, Message, Confirm, Prompt } /// /// Dimensione modale /// public enum ModalSize { Small, Normal, Large } }