// ============================================================ // MOORE AI v13 — ACTION ITEMS TAB // Requires: shared/utils.js, shared/components.jsx loaded first // ============================================================ const ActionItemsView = ({ actionItems, setActionItems, crmData, setActiveTab, handleSendMessage, activeCalls }) => { const { useState } = React; const [newItemText, setNewItemText] = useState(''); const [filterDone, setFilterDone] = useState(false); const addManual = () => { if (!newItemText.trim()) return; setActionItems(prev => [{ id: Date.now(), title: newItemText, priority: 'medium', done: false, createdAt: new Date().toISOString(), contact: '', source: 'manual' }, ...prev]); setNewItemText(''); }; const toggle = (id) => setActionItems(prev => prev.map(a => a.id === id ? { ...a, done: !a.done } : a)); const remove = (id) => setActionItems(prev => prev.filter(a => a.id !== id)); const displayed = filterDone ? actionItems.filter(a => !a.done) : actionItems; const pendingCount = actionItems.filter(a => !a.done).length; const priorityColor = { high: 'text-red-400 border-red-700/40 bg-red-950/30', medium: 'text-amber-400 border-amber-700/40 bg-amber-950/30', low: 'text-slate-400 border-slate-700/40 bg-slate-900/30' }; return (
Intelligence Layer

Action Items

{pendingCount} outstanding · Jake extracts these from calls, AI analysis, and pipeline review
{activeCalls && activeCalls.length > 0 && (
{activeCalls.map((c, i) => (
Live Call: {c.contactName} {c.status || 'ringing'} · transcript will auto-save
))}
)}
setNewItemText(e.target.value)} onKeyDown={e => e.key === 'Enter' && addManual()} placeholder="Add action item manually..." className="flex-1 bg-slate-900/60 border border-slate-800 rounded-xl px-4 py-2.5 text-sm text-white outline-none focus:border-blue-500/50 placeholder:text-slate-600" />
{crmData.opportunities && crmData.opportunities.length > 0 && displayed.length === 0 && (
No action items yet.
Jake auto-generates these from call transcripts and AI analysis.
)}
{displayed.map(item => (
{item.title}
{item.contact && {item.contact}} {item.priority && ( {item.priority} )} {item.source === 'call' && From call} {item.createdAt ? new Date(item.createdAt).toLocaleDateString() : ''}
))}
); };