From 00fd9360cbf6729526df9590653a5d6dcb63b463 Mon Sep 17 00:00:00 2001 From: gvreddy04 Date: Sun, 22 Feb 2026 10:29:54 +0530 Subject: [PATCH] Auto-focus "Yes" button now handled in Blazor Moved auto-focus logic from JS to Blazor using ElementReference and FocusAsync. Updated ConfirmDialog to use @ref and OnAfterRenderAsync for focusing. Removed autoFocusYesButton handling from JS. --- .../ConfirmDialog/ConfirmDialog.razor | 2 +- .../ConfirmDialog/ConfirmDialog.razor.cs | 19 ++++++++++++------- blazorbootstrap/wwwroot/blazor.bootstrap.js | 9 +-------- 3 files changed, 14 insertions(+), 16 deletions(-) diff --git a/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor b/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor index 9979dd35f..5c9c3aceb 100644 --- a/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor +++ b/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor @@ -41,7 +41,7 @@ } @if (!string.IsNullOrWhiteSpace(yesButtonText)) { - + } diff --git a/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor.cs b/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor.cs index 3324cb8d6..d488ac7d1 100644 --- a/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor.cs +++ b/blazorbootstrap/Components/ConfirmDialog/ConfirmDialog.razor.cs @@ -5,11 +5,9 @@ public partial class ConfirmDialog : BlazorBootstrapComponentBase #region Fields and Constants private Type? childComponent; - private string? dialogCssClass; private bool dismissable; private string? headerCssClass; - private bool isVisible; private string? message1; private string? message2; @@ -18,13 +16,12 @@ public partial class ConfirmDialog : BlazorBootstrapComponentBase private string? noButtonText; private Dictionary? parameters; private string? scrollable; - + private bool shouldAutoFocusYesButton; private bool showBackdrop; - private TaskCompletionSource? taskCompletionSource; - private string? title; private string? verticallyCentered; + private ElementReference yesButtonElement; private string? yesButtonColor; private string? yesButtonText; @@ -32,6 +29,14 @@ public partial class ConfirmDialog : BlazorBootstrapComponentBase #region Methods + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if(isVisible && shouldAutoFocusYesButton) + await yesButtonElement.FocusAsync(); + + await base.OnAfterRenderAsync(firstRender); + } + /// /// Shows confirm dialog. /// @@ -116,13 +121,13 @@ private Task Show(string title, string? message1, string? message2, Type? modalSize = confirmDialogOptions.Size.ToDialogSizeClass(); yesButtonColor = $"{BootstrapClass.Button} {confirmDialogOptions.YesButtonColor.ToButtonColorClass()}"; yesButtonText = confirmDialogOptions.YesButtonText; - + shouldAutoFocusYesButton = confirmDialogOptions.AutoFocusYesButton; isVisible = true; showBackdrop = true; StateHasChanged(); - Task.Run(async () => await SafeInvokeVoidAsync("window.blazorBootstrap.confirmDialog.show", Id, confirmDialogOptions.AutoFocusYesButton)); + Task.Run(async () => await SafeInvokeVoidAsync("window.blazorBootstrap.confirmDialog.show", Id)); return task; } diff --git a/blazorbootstrap/wwwroot/blazor.bootstrap.js b/blazorbootstrap/wwwroot/blazor.bootstrap.js index 952776f28..7d86c7fda 100644 --- a/blazorbootstrap/wwwroot/blazor.bootstrap.js +++ b/blazorbootstrap/wwwroot/blazor.bootstrap.js @@ -223,7 +223,7 @@ window.blazorBootstrap = { } }, confirmDialog: { - show: (elementId, autoFocusYesButton) => { + show: (elementId) => { let confirmDialogEl = document.getElementById(elementId); if (confirmDialogEl != null) setTimeout(() => confirmDialogEl.classList.add('show'), 90); // added delay for server @@ -231,13 +231,6 @@ window.blazorBootstrap = { let bodyEl = document.getElementsByTagName('body'); if (bodyEl.length > 0) bodyEl[0].style['overflow'] = 'hidden'; - - if (!autoFocusYesButton) - return; - - let yesButtonEl = document.getElementById(`bb-confirm-${elementId}`); - if (yesButtonEl) - yesButtonEl.focus(); }, hide: (elementId) => { let confirmDialogEl = document.getElementById(elementId);