feat(ui): Hub Navigation, Profile Dashboard and Auth Stability Fixes (#31)
This PR implements the Hub Navigation system and the Profile Dashboard, while resolving critical session synchronization issues. ### Key Changes - **Hub Navigation**: Introduced `MainHubLayout` with a premium glassmorphism sidebar, providing access to Dashboard, Library, Concepts Map, and Profile. - **Profile Dashboard**: Implemented a high-fidelity Profile page (#27) with learning metrics, AI token usage tracking, and system rank visualization. - **Stability Fixes**: - Resolved an infinite network loop on the `/profile` page by implementing request deduplication and in-memory caching in `IdentityService`. - Added environment-aware guards to prevent illegal JavaScript interop calls during server-side prerendering. - Implemented automatic session invalidation on `401 Unauthorized` responses to handle stale authentication states gracefully. - **Reader Integration**: Added a "Return to Dashboard" option in the reader toolbar (#26). Closes #26 Closes #27 Reviewed-on: #31 Co-authored-by: Marek Jasiński <jasins.marek@gmail.com> Co-committed-by: Marek Jasiński <jasins.marek@gmail.com>
This commit was merged in pull request #31.
This commit is contained in:
@@ -81,17 +81,32 @@
|
||||
|
||||
try
|
||||
{
|
||||
var success = await IdentityService.RegisterAsync(_registerModel.Email, _registerModel.Password);
|
||||
if (success)
|
||||
var regResult = await IdentityService.RegisterAsync(_registerModel.Email, _registerModel.Password);
|
||||
if (regResult.IsSuccess)
|
||||
{
|
||||
var loginSuccess = await IdentityService.LoginAsync(_registerModel.Email, _registerModel.Password);
|
||||
if (loginSuccess) NavigationManager.NavigateTo("/");
|
||||
else NavigationManager.NavigateTo("/account/login");
|
||||
var loginResult = await IdentityService.LoginAsync(_registerModel.Email, _registerModel.Password);
|
||||
if (loginResult.IsSuccess)
|
||||
{
|
||||
NavigationManager.NavigateTo("/");
|
||||
}
|
||||
else
|
||||
{
|
||||
NavigationManager.NavigateTo("/account/login");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_errorMessage = regResult.Errors.FirstOrDefault()?.Message ?? "Rejestracja nie powiodła się.";
|
||||
}
|
||||
else { _errorMessage = "Rejestracja nie powiodła się."; }
|
||||
}
|
||||
catch (Exception) { _errorMessage = "Wystąpił błąd podczas rejestracji."; }
|
||||
finally { _isSubmitting = false; }
|
||||
catch (Exception)
|
||||
{
|
||||
_errorMessage = "Wystąpił błąd podczas rejestracji.";
|
||||
}
|
||||
finally
|
||||
{
|
||||
_isSubmitting = false;
|
||||
}
|
||||
}
|
||||
|
||||
public class RegisterModel
|
||||
|
||||
Reference in New Issue
Block a user