import React, { useEffect, useState } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { useLocation, useNavigate } from 'react-router-dom'; import { handleLinkedInCallback, clearLinkedInError } from '../../store/reducers/linkedinAccountsSlice'; const LinkedInCallbackHandler = () => { const dispatch = useDispatch(); const location = useLocation(); const navigate = useNavigate(); const { oauthLoading, oauthError } = useSelector(state => state.linkedinAccounts); const [status, setStatus] = useState('processing'); const [message, setMessage] = useState('Processing LinkedIn authentication...'); useEffect(() => { const handleCallback = async () => { try { // Parse URL parameters const urlParams = new URLSearchParams(location.search); const code = urlParams.get('code'); const state = urlParams.get('state'); const error = urlParams.get('error'); if (error) { setStatus('error'); setMessage(`Authentication failed: ${error}`); return; } if (!code || !state) { setStatus('error'); setMessage('Invalid callback parameters'); return; } setStatus('processing'); setMessage('Completing LinkedIn authentication...'); // Dispatch the callback action const result = await dispatch(handleLinkedInCallback({ code, state })).unwrap(); if (result.success) { setStatus('success'); setMessage('LinkedIn account linked successfully!'); // Redirect to sources page after a short delay setTimeout(() => { navigate('/sources'); }, 2000); } else { setStatus('error'); setMessage(result.message || 'Failed to link LinkedIn account'); } } catch (error) { console.error('Callback handler error:', error); setStatus('error'); setMessage('An error occurred during authentication'); } }; handleCallback(); }, [dispatch, location, navigate]); const handleRetry = () => { dispatch(clearLinkedInError()); navigate('/sources'); }; return (
Please wait while we complete the authentication process...
Redirecting to your accounts...
There was an issue with the LinkedIn authentication process.