@using BimAI.UI.Shared.Services @using Microsoft.Extensions.Configuration @inject IJSRuntime JS @inject IConfiguration Configuration @inject AuthService AuthService @inject NavigationManager NavigationManager Witaj w BimAI Zaloguj się używając konta Google @if (_isLoading) { } else { Zaloguj z Google } @if (!string.IsNullOrEmpty(_errorMessage)) { @_errorMessage } @code { private bool _isLoading = false; private string _errorMessage = string.Empty; private static LoginCard? _instance; private bool _isInitialized = false; protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { _instance = this; await InitializeGoogleSignIn(); } } private async Task InitializeGoogleSignIn() { try { if (_isInitialized) return; var clientId = Configuration["GoogleAuth:ClientId"]; if (string.IsNullOrEmpty(clientId)) { throw new Exception("Google ClientId is not configured."); } await JS.InvokeVoidAsync("initGoogleSignIn", clientId); _isInitialized = true; } catch (Exception ex) { _errorMessage = "Błąd inicjalizacji Google Sign-In."; Console.Error.WriteLine($"Google Sign-In initialization error: {ex.Message}"); } } private async Task HandleGoogleSignIn() { try { _isLoading = true; _errorMessage = string.Empty; StateHasChanged(); await JS.InvokeVoidAsync("requestGoogleSignIn"); } catch (Exception ex) { _errorMessage = "Błąd podczas logowania. Spróbuj ponownie"; _isLoading = false; StateHasChanged(); } } [JSInvokable] public static async Task OnGoogleSignInSuccess(string accessToken, string fullName, string email, string avatarUrl) { Console.WriteLine($"Google Sign-In Success: {email}"); if (_instance != null) { var userInfo = new UserInfo { FullName = fullName, Email = email, AvatarUrl = avatarUrl }; await _instance.AuthService.SetAuthenticationAsync(accessToken, userInfo); _instance._isLoading = false; _instance._errorMessage = string.Empty; _instance.NavigationManager.NavigateTo("/dashboard", replace: true); await _instance.InvokeAsync(() => _instance.StateHasChanged()); } } [JSInvokable] public static async Task OnGoogleSignInError(string error) { Console.WriteLine($"Google SignIn Error: {error}"); if (_instance != null) { _instance._isLoading = false; _instance._errorMessage = "Błąd logowania Google. Spróbuj ponownie"; await _instance.InvokeAsync(() => _instance.StateHasChanged()); } } }