fix(developers): distinguish API errors from taken usernames in availability check
All checks were successful
Build and Deploy / deploy (push) Successful in 40s

CheckUsernameAsync returned false (taken) on any API failure, making every
username appear taken when SilverDESK was unreachable. Now returns nullable
bool so errors show a warning instead of blocking submission.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-22 18:00:46 +00:00
parent a8d827eace
commit 33b21959d8
4 changed files with 51 additions and 8 deletions

View File

@@ -107,6 +107,10 @@
{
<span class="username-status username-taken">&#10007; Username is already taken</span>
}
else if (_usernameCheckState == UsernameCheckState.Error)
{
<span class="username-status username-error">&#9888; Could not check availability — you can still submit</span>
}
<ValidationMessage For="() => _application.DesiredUsername" />
</div>
@@ -209,7 +213,7 @@
{
<div class="dev-error">@_errorMessage</div>
}
<button type="submit" class="dev-btn dev-btn-primary" disabled="@_submitting">
<button type="submit" class="dev-btn dev-btn-primary" disabled="@(_submitting || _usernameCheckState == UsernameCheckState.Taken)">
@if (_submitting)
{
<span class="btn-spinner"></span>
@@ -240,7 +244,7 @@
private readonly string[] _availablePlatforms = { "Windows", "macOS", "Linux", "Android", "iOS", "Other" };
private enum UsernameCheckState { None, Checking, Available, Taken }
private enum UsernameCheckState { None, Checking, Available, Taken, Error }
private void SelectRole(ApplicationRole role)
{
@@ -279,7 +283,12 @@
if (!token.IsCancellationRequested)
{
_usernameCheckState = available ? UsernameCheckState.Available : UsernameCheckState.Taken;
_usernameCheckState = available switch
{
true => UsernameCheckState.Available,
false => UsernameCheckState.Taken,
null => UsernameCheckState.Error
};
StateHasChanged();
}
}