Logout: - It navigated to "authenticatio/logout", a misspelled route. - The correct template route, authentication/logout, would throw anyway. Its RemoteAuthenticatorView casts the AuthenticationStateProvider to the OIDC template's service, and the app registers TokenAuthStateProvider instead. - It now signs out through TokenAuthStateProvider.LogoutAsync, as the code commented out in the page intended, and returns home. LoginDisplay's sign-out goes through it as well. - This also drops the obsolete SignOutSessionStateManager, the build's last warning. The IndexedDB schema never declared the ClientLogs store that IStorage.AddLog writes to, so every client log write failed inside its try/catch. Version 2 adds the store, keyed by the Id AddLog assigns. DInputBase.NameAttribute renders no name instead of name="" when the form maps no field names. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
66 lines
2.2 KiB
Plaintext
66 lines
2.2 KiB
Plaintext
@typeparam TValue
|
|
@inherits DInputBase<TValue>
|
|
|
|
@* daisyUI Input: https://daisyui.com/components/input/ . With Prefix or Suffix (icons, labels, kbd) the input class
|
|
moves to a wrapping <label>, as daisyUI requires when the field holds more than one element. *@
|
|
@if (Prefix is null && Suffix is null)
|
|
{
|
|
<input @attributes="InputAttributes" type="@Type" class="@CssClassFull" name="@NameAttribute"
|
|
value="@CurrentValueAsString" @oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
|
|
}
|
|
else
|
|
{
|
|
<label class="@CssClassFull">
|
|
@Prefix
|
|
<input @attributes="InputAttributes" type="@Type" class="grow" name="@NameAttribute"
|
|
value="@CurrentValueAsString" @oninput="OnInput" @onchange="OnChange" aria-invalid="@(IsInvalid ? "true" : null)" />
|
|
@Suffix
|
|
</label>
|
|
}
|
|
|
|
@code {
|
|
[Parameter] public string Type { get; set; } = "text";
|
|
[Parameter] public DColor Color { get; set; }
|
|
[Parameter] public DSize Size { get; set; }
|
|
[Parameter] public bool Ghost { get; set; }
|
|
/// <summary>Update the bound value on every keystroke instead of on change.</summary>
|
|
[Parameter] public bool Immediate { get; set; }
|
|
[Parameter] public RenderFragment Prefix { get; set; }
|
|
[Parameter] public RenderFragment Suffix { get; set; }
|
|
/// <summary>Adds daisyUI's validator class: error/success colors and a following DValidatorHint.</summary>
|
|
[Parameter] public bool Validator { get; set; }
|
|
|
|
string CssClassFull => Cx("input", IsInvalid ? "input-error" : ColorClass, SizeClass, Ghost ? "input-ghost" : null,
|
|
Validator ? "validator" : null, CssClass);
|
|
|
|
string ColorClass => Color switch
|
|
{
|
|
DColor.Neutral => "input-neutral",
|
|
DColor.Primary => "input-primary",
|
|
DColor.Secondary => "input-secondary",
|
|
DColor.Accent => "input-accent",
|
|
DColor.Info => "input-info",
|
|
DColor.Success => "input-success",
|
|
DColor.Warning => "input-warning",
|
|
DColor.Error => "input-error",
|
|
_ => null
|
|
};
|
|
|
|
string SizeClass => Size switch
|
|
{
|
|
DSize.Xs => "input-xs",
|
|
DSize.Sm => "input-sm",
|
|
DSize.Lg => "input-lg",
|
|
DSize.Xl => "input-xl",
|
|
_ => null
|
|
};
|
|
|
|
void OnInput(ChangeEventArgs e)
|
|
{
|
|
if (Immediate)
|
|
CurrentValueAsString = e.Value?.ToString();
|
|
}
|
|
|
|
void OnChange(ChangeEventArgs e) => CurrentValueAsString = e.Value?.ToString();
|
|
}
|