const { useState, useEffect } = React; function ContactDetail({ contactId }) { const [contact, setContact] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [showDraftModal, setShowDraftModal] = useState(false); const [draftSubject, setDraftSubject] = useState(''); const [draftBody, setDraftBody] = useState(''); const [fromIdentity, setFromIdentity] = useState('iain@gmail'); const [interactionSummary, setInteractionSummary] = useState(''); const [talkinPoints, setTalkingPoints] = useState([]); const [generatingPoints, setGeneratingPoints] = useState(false); useEffect(() => { if (!contactId) return; loadContact(); }, [contactId]); const loadContact = async () => { try { const res = await fetch(`/api/contacts/${contactId}`); if (!res.ok) throw new Error('Contact not found'); const data = await res.json(); setContact(data); setLoading(false); } catch (err) { setError(err.message); setLoading(false); } }; const generateTalkingPoints = async () => { if (!contactId) return; setGeneratingPoints(true); try { const res = await fetch(`/api/contacts/${contactId}/talking-points`, { method: 'POST', }); const data = await res.json(); setTalkingPoints(data.talking_points || []); } catch (err) { console.error('Error generating talking points:', err); } finally { setGeneratingPoints(false); } }; const submitDraft = async () => { if (!draftSubject || !draftBody) { alert('Subject and body are required'); return; } try { const res = await fetch('/api/email-drafts', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ contact_id: contactId, subject: draftSubject, body: draftBody, from_identity: fromIdentity, }), }); const data = await res.json(); alert('Draft created: ' + data.status); setShowDraftModal(false); setDraftSubject(''); setDraftBody(''); } catch (err) { alert('Error creating draft: ' + err.message); } }; const logInteraction = async () => { if (!interactionSummary) { alert('Please enter an interaction summary'); return; } try { const res = await fetch(`/api/contacts/${contactId}/interactions`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ interaction_type: 'email', direction: 'outbound', channel: 'email', summary: interactionSummary, }), }); const data = await res.json(); alert('Interaction logged'); setInteractionSummary(''); loadContact(); } catch (err) { alert('Error logging interaction: ' + err.message); } }; if (loading) return
No talking points yet. Click "Generate New" to fetch recent news and updates.
)}No interactions logged yet
) : ( interactions.map(interaction => (