@using DiunaBI.UI.Shared.Services @using Microsoft.Extensions.Configuration @inject IJSRuntime JS @inject IConfiguration Configuration @inject AuthService AuthService @inject NavigationManager NavigationManager Witaj w DiunaBI Zaloguj się używając konta Google @if (_isLoading) { Weryfikacja... } 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 googleCredential, string fullName, string email, string avatarUrl) { Console.WriteLine($"=== OnGoogleSignInSuccess: {email} ==="); if (_instance != null) { try { // Waliduj użytkownika w backendzie DiunaBI var (success, errorMessage) = await _instance.AuthService.ValidateWithBackendAsync( googleCredential, fullName, email, avatarUrl); if (success) { Console.WriteLine("✅ User validated, navigating to dashboard"); _instance._isLoading = false; _instance._errorMessage = string.Empty; _instance.NavigationManager.NavigateTo("/dashboard", replace: true); } else { Console.WriteLine($"❌ Validation failed: {errorMessage}"); _instance._isLoading = false; _instance._errorMessage = errorMessage ?? "Nie udało się zalogować."; } await _instance.InvokeAsync(() => _instance.StateHasChanged()); } catch (Exception ex) { Console.Error.WriteLine($"❌ OnGoogleSignInSuccess error: {ex.Message}"); _instance._isLoading = false; _instance._errorMessage = "Błąd podczas weryfikacji użytkownika."; 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()); } } }