Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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();
Expand Down
10 changes: 4 additions & 6 deletions TELBlazor.Components/Components/BaseComponents/TELButton.razor
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
ToolTipTitle="@ToolTipTitle"
AdditionalCssClasses="@AdditionalCssClasses"
PreventDoubleClick="@PreventDoubleClick"
/>
DisableButton="@DisableButton" />
}
else
{
Expand All @@ -38,7 +38,7 @@ else
ToolTipTitle="@ToolTipTitle"
AdditionalCssClasses="@AdditionalCssClasses"
PreventDoubleClick="@PreventDoubleClick"
/>
DisableButton="@DisableButton" />
</EditForm>
}

Expand All @@ -55,7 +55,7 @@ else
///</summary>
[Parameter] public bool IsSubmitButtonForEditForm { get; set; } = false;
[Parameter] public Dictionary<string, string> 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

Expand All @@ -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; }

Expand All @@ -83,7 +84,6 @@ else
// -----------------------------
// Internal State
// -----------------------------
private bool isButtonDisabled = false;
private bool isClickedRecently = false;

// -----------------------------
Expand All @@ -101,7 +101,6 @@ else
if (PreventDoubleClick && !isClickedRecently)
{
isClickedRecently = true;
isButtonDisabled = true;

if (OnClick.HasDelegate)
{
Expand All @@ -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
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
role="@AriaRole"
aria-describedby="@AriaDescribedBy"
title="@ToolTipTitle"
tabindex="@TabIndex">
tabindex="@TabIndex"
disabled="@DisableButton"
>
<span class="button-text">@ButtonText</span>
@if (!string.IsNullOrEmpty(AssistiveText))
{
Expand All @@ -20,13 +22,7 @@
/// <summary>
/// Guid generated on creation to link elements for screen readers
/// </summary>
private string _ariaDescribedBy;
public string AriaDescribedBy => _ariaDescribedBy;

protected override void OnInitialized()
{
_ariaDescribedBy = $"assistive-text-{Guid.NewGuid()}";
}
public string AriaDescribedBy {get;} = $"assistive-text-{Guid.NewGuid()}";

/// <summary>
/// Button Options
Expand All @@ -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]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public interface ILogLevelSwitcherService
{
public string GetCurrentLogLevel();// String so can be more generic

public string SetLogLevel(string level);
public Task<string> SetLogLevel(string level);

public List<string> GetAvailableLogLevels();
public bool IsInitialized { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand All @@ -55,7 +55,7 @@ public async Task InitializeLogLevelFromAsyncSourceIfAvailable()
}
}

public List<string> GetAvailableLogLevels() => Enum.GetNames(typeof(LogEventLevel)).ToList();
public List<string> GetAvailableLogLevels() => Enum.GetNames(typeof(LogEventLevel)).ToList<string>();

public string GetCurrentLogLevel()
{
Expand All @@ -65,7 +65,7 @@ public string GetCurrentLogLevel()
return logLevel;
}

public string SetLogLevel(string level)
public async Task<string> SetLogLevel(string level)
{
LogAllLevels("Before Change");
if (string.IsNullOrWhiteSpace(level))
Expand All @@ -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();
}
Expand All @@ -100,7 +100,7 @@ private void LogAllLevels(string phase)
}


private async Task<string> GetStoredLogLevelWithExpiration()
private async Task<string?> GetStoredLogLevelWithExpiration()
{
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.
}
Expand All @@ -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();
}
}

}

Loading