From ef7a9db8f6991ea2fd629826a2e017fd1f38508c Mon Sep 17 00:00:00 2001 From: Phil-NHS Date: Wed, 20 Aug 2025 14:13:54 +0100 Subject: [PATCH] chore(warnings): tidying --- .../Pages/BaseComponentPages/TELButtonPageTests.cs | 5 ++--- .../Components/BaseComponents/TELButton.razor | 10 ++++------ .../BaseComponents/TELButtonSubComponent.razor | 14 ++++++-------- .../Core/Models/Logging/LocalStorageLogLevel.cs | 2 +- .../HelperServices/ILogLevelSwitcherService.cs | 2 +- .../HelperServices/SerilogLogLevelSwitcher.cs | 12 ++++++------ .../Test/TestComponents/LogLevelSwitcher.razor | 8 +++----- 7 files changed, 23 insertions(+), 30 deletions(-) diff --git a/TELBlazor.Components.ShowCase.E2ETests/Pages/BaseComponentPages/TELButtonPageTests.cs b/TELBlazor.Components.ShowCase.E2ETests/Pages/BaseComponentPages/TELButtonPageTests.cs index aac63c8..708ee9e 100644 --- a/TELBlazor.Components.ShowCase.E2ETests/Pages/BaseComponentPages/TELButtonPageTests.cs +++ b/TELBlazor.Components.ShowCase.E2ETests/Pages/BaseComponentPages/TELButtonPageTests.cs @@ -41,8 +41,6 @@ public TELButtonPageTests() public async Task TELBlazorButtonMeetsAxeAccesibilityStandards(string browserType, bool jsEnabled, ViewportHelper.ViewportType viewport) { - - using IPlaywright playwright = await Microsoft.Playwright.Playwright.CreateAsync(); IBrowserContext browserContext = await BrowserHelper.CreateBrowserContextAsync(playwright, browserType, jsEnabled, viewport, BaseUrl); @@ -61,7 +59,8 @@ await browserContext.Tracing.StartAsync(new() await page.GotoOnceNetworkIsIdleAsync("TELButton"); - await page.WaitForSelectorAsync("button"); + // await page.WaitForSelectorAsync("button"); + await page.GetByRole(AriaRole.Button, new() { Name = "Click Counter" }).WaitForAsync(); ILocator button = page.GetByRole(AriaRole.Button, new() { Name = "Click Counter" }); AxeResult axeResults = await button.RunAxe(); diff --git a/TELBlazor.Components/Components/BaseComponents/TELButton.razor b/TELBlazor.Components/Components/BaseComponents/TELButton.razor index 1a6fa71..281582e 100644 --- a/TELBlazor.Components/Components/BaseComponents/TELButton.razor +++ b/TELBlazor.Components/Components/BaseComponents/TELButton.razor @@ -13,7 +13,7 @@ ToolTipTitle="@ToolTipTitle" AdditionalCssClasses="@AdditionalCssClasses" PreventDoubleClick="@PreventDoubleClick" - /> + DisableButton="@DisableButton" /> } else { @@ -38,7 +38,7 @@ else ToolTipTitle="@ToolTipTitle" AdditionalCssClasses="@AdditionalCssClasses" PreventDoubleClick="@PreventDoubleClick" - /> + DisableButton="@DisableButton" /> } @@ -55,7 +55,7 @@ else /// [Parameter] public bool IsSubmitButtonForEditForm { get; set; } = false; [Parameter] public Dictionary FormData { get; set; } = new(); - [Parameter] public string NoJSActionUrl { get; set; } = null; // URL for the form submission (not required because there may be a parent form with it if its a submit for a form) + [Parameter] public string? NoJSActionUrl { get; set; } = null; // URL for the form submission (not required because there may be a parent form with it if its a submit for a form) [Parameter] public EventCallback OnClick { get; set; } // Not required because the submit wont use it, when its placed in a form. [Parameter] public bool PreventDoubleClick { get; set; } = false; // View Component equivalent behaviour @@ -64,6 +64,7 @@ else // ----------------------------- [EditorRequired, Parameter] public required string ButtonText { get; set; } [Parameter] public TELButtonStyle ButtonStyle { get; set; } = TELButtonStyle.Primary; + [Parameter] public bool DisableButton { get; set; } = false; // Disable the button if true [Parameter] public string AdditionalCssClasses { get; set; } = ""; [EditorRequired, Parameter] public required string ToolTipTitle { get; set; } @@ -83,7 +84,6 @@ else // ----------------------------- // Internal State // ----------------------------- - private bool isButtonDisabled = false; private bool isClickedRecently = false; // ----------------------------- @@ -101,7 +101,6 @@ else if (PreventDoubleClick && !isClickedRecently) { isClickedRecently = true; - isButtonDisabled = true; if (OnClick.HasDelegate) { @@ -110,7 +109,6 @@ else await Task.Delay(1000); // Re-enable after 1 sec isClickedRecently = false; - isButtonDisabled = false; } else if (!PreventDoubleClick && OnClick.HasDelegate) // Just call the OnClick handler if double-click prevention is not needed { diff --git a/TELBlazor.Components/Components/BaseComponents/TELButtonSubComponent.razor b/TELBlazor.Components/Components/BaseComponents/TELButtonSubComponent.razor index a54cd03..c93cc8d 100644 --- a/TELBlazor.Components/Components/BaseComponents/TELButtonSubComponent.razor +++ b/TELBlazor.Components/Components/BaseComponents/TELButtonSubComponent.razor @@ -7,7 +7,9 @@ role="@AriaRole" aria-describedby="@AriaDescribedBy" title="@ToolTipTitle" - tabindex="@TabIndex"> + tabindex="@TabIndex" + disabled="@DisableButton" +> @ButtonText @if (!string.IsNullOrEmpty(AssistiveText)) { @@ -20,13 +22,7 @@ /// /// Guid generated on creation to link elements for screen readers /// - private string _ariaDescribedBy; - public string AriaDescribedBy => _ariaDescribedBy; - - protected override void OnInitialized() - { - _ariaDescribedBy = $"assistive-text-{Guid.NewGuid()}"; - } + public string AriaDescribedBy {get;} = $"assistive-text-{Guid.NewGuid()}"; /// /// Button Options @@ -37,6 +33,8 @@ [EditorRequired, Parameter] public required string ButtonText { get; set; } + [Parameter] public bool DisableButton { get; set; } = false; // Disable the button if true + [Parameter] public string AdditionalCssClasses { get; set; } = ""; // Custom CSS classes for additional styling [Parameter] diff --git a/TELBlazor.Components/Core/Models/Logging/LocalStorageLogLevel.cs b/TELBlazor.Components/Core/Models/Logging/LocalStorageLogLevel.cs index 04e8bbc..422b613 100644 --- a/TELBlazor.Components/Core/Models/Logging/LocalStorageLogLevel.cs +++ b/TELBlazor.Components/Core/Models/Logging/LocalStorageLogLevel.cs @@ -8,7 +8,7 @@ namespace TELBlazor.Components.Core.Models.Logging { public class LocalStorageLogLevel : ILocalStorageLogLevel { - public string Level { get; set; } = null; + public required string Level { get; set; } public DateTime Expires { get; set; } } } diff --git a/TELBlazor.Components/Core/Services/HelperServices/ILogLevelSwitcherService.cs b/TELBlazor.Components/Core/Services/HelperServices/ILogLevelSwitcherService.cs index 822abc9..2661653 100644 --- a/TELBlazor.Components/Core/Services/HelperServices/ILogLevelSwitcherService.cs +++ b/TELBlazor.Components/Core/Services/HelperServices/ILogLevelSwitcherService.cs @@ -10,7 +10,7 @@ public interface ILogLevelSwitcherService { public string GetCurrentLogLevel();// String so can be more generic - public string SetLogLevel(string level); + public Task SetLogLevel(string level); public List GetAvailableLogLevels(); public bool IsInitialized { get; set; } diff --git a/TELBlazor.Components/OptionalImplementations/Core/Services/HelperServices/SerilogLogLevelSwitcher.cs b/TELBlazor.Components/OptionalImplementations/Core/Services/HelperServices/SerilogLogLevelSwitcher.cs index 9706948..94da3e9 100644 --- a/TELBlazor.Components/OptionalImplementations/Core/Services/HelperServices/SerilogLogLevelSwitcher.cs +++ b/TELBlazor.Components/OptionalImplementations/Core/Services/HelperServices/SerilogLogLevelSwitcher.cs @@ -37,12 +37,12 @@ public async Task InitializeLogLevelFromAsyncSourceIfAvailable() try { - string storedLevel = await GetStoredLogLevelWithExpiration(); + string? storedLevel = await GetStoredLogLevelWithExpiration(); if (!string.IsNullOrEmpty(storedLevel)) { if (Enum.TryParse(storedLevel, true, out LogEventLevel logLevel) && logLevel > _loggingLevelSwitch.MinimumLevel) { - SetLogLevel(logLevel.ToString()); + await SetLogLevel(logLevel.ToString()); _logger.LogInformation("Log level initialized from local storage: {Level}", logLevel); } } @@ -55,7 +55,7 @@ public async Task InitializeLogLevelFromAsyncSourceIfAvailable() } } - public List GetAvailableLogLevels() => Enum.GetNames(typeof(LogEventLevel)).ToList(); + public List GetAvailableLogLevels() => Enum.GetNames(typeof(LogEventLevel)).ToList(); public string GetCurrentLogLevel() { @@ -65,7 +65,7 @@ public string GetCurrentLogLevel() return logLevel; } - public string SetLogLevel(string level) + public async Task SetLogLevel(string level) { LogAllLevels("Before Change"); if (string.IsNullOrWhiteSpace(level)) @@ -83,7 +83,7 @@ public string SetLogLevel(string level) _loggingLevelSwitch.MinimumLevel.ToString(), logLevel.ToString()); _loggingLevelSwitch.MinimumLevel = logLevel; - StoreLogLevelWithTimestamp(logLevel.ToString()); + await StoreLogLevelWithTimestamp(logLevel.ToString()); LogAllLevels("After Change"); return GetCurrentLogLevel(); } @@ -100,7 +100,7 @@ private void LogAllLevels(string phase) } - private async Task GetStoredLogLevelWithExpiration() + private async Task GetStoredLogLevelWithExpiration() { try { diff --git a/TELBlazor.Components/OptionalImplementations/Test/TestComponents/LogLevelSwitcher.razor b/TELBlazor.Components/OptionalImplementations/Test/TestComponents/LogLevelSwitcher.razor index 2942646..8243793 100644 --- a/TELBlazor.Components/OptionalImplementations/Test/TestComponents/LogLevelSwitcher.razor +++ b/TELBlazor.Components/OptionalImplementations/Test/TestComponents/LogLevelSwitcher.razor @@ -22,9 +22,9 @@ CurrentLogLevel = LogLevelSwitcherService.GetCurrentLogLevel(); } - private void SetLogLevel(string level) + private async void SetLogLevel(string level) { - CurrentLogLevel = LogLevelSwitcherService.SetLogLevel(level); + CurrentLogLevel = await LogLevelSwitcherService.SetLogLevel(level); // No StateHasChanged needed here. The component will re-render // when CurrentLogLevel is updated due to how Blazor change detection works. } @@ -33,11 +33,9 @@ { if (e.Value is string selectedLevel) // Safe casting { - CurrentLogLevel = e.Value.ToString(); + CurrentLogLevel = selectedLevel; // Use the safely casted value LogLevelSwitcherService.SetLogLevel(CurrentLogLevel); StateHasChanged(); } } - } -