@page "/register" @inject IAuthService AuthService @inject CustomAuthStateProvider AuthStateProvider @inject NavigationManager Navigation @inject ILocalizationService Loc @rendermode InteractiveServer @Loc["page.title.register"]

@Loc["register.heading"]

@Loc["register.link.back_to_login"]
@if (!string.IsNullOrEmpty(errorMessage)) {
@errorMessage
}
@code { private string username = string.Empty; private string password = string.Empty; private string confirmPassword = string.Empty; private string errorMessage = string.Empty; private bool isBusy; private async Task HandleKeyDown(KeyboardEventArgs e) { if (e.Key == "Enter") await DoRegister(); } private async Task DoRegister() { if (string.IsNullOrWhiteSpace(username)) { errorMessage = Loc["register.error.no_username"]; return; } if (string.IsNullOrWhiteSpace(password)) { errorMessage = Loc["register.error.no_password"]; return; } if (password != confirmPassword) { errorMessage = Loc["register.error.password_mismatch"]; return; } if (password.Length < 4) { errorMessage = Loc["register.error.password_too_short"]; return; } isBusy = true; errorMessage = string.Empty; try { var result = await AuthService.RegisterAsync(username, password); if (result) { AuthStateProvider.NotifyStateChanged(); Navigation.NavigateTo("/"); } else { errorMessage = Loc["register.error.username_taken"]; } } catch (Exception ex) { errorMessage = $"{Loc["common.error"]} {ex.Message}"; } finally { isBusy = false; } } }