import { useEffect, useRef } from 'react'; import { Navigate, useNavigate } from 'react-router'; import { useAuthStore } from './auth-store'; import { Card, Spinner, Alert, Button } from '@cameleer/design-system'; export function OidcCallback() { const { isAuthenticated, loading, error, loginWithOidcCode } = useAuthStore(); const navigate = useNavigate(); const exchanged = useRef(false); useEffect(() => { if (exchanged.current) return; exchanged.current = true; const params = new URLSearchParams(window.location.search); const code = params.get('code'); const errorParam = params.get('error'); if (errorParam) { useAuthStore.setState({ error: params.get('error_description') || errorParam, loading: false, }); return; } if (!code) { useAuthStore.setState({ error: 'No authorization code received', loading: false }); return; } const redirectUri = `${window.location.origin}/oidc/callback`; loginWithOidcCode(code, redirectUri); }, [loginWithOidcCode]); if (isAuthenticated) return ; return (

cameleer3

{loading && } {error && ( <> {error} )}
); }