// ============================================================
// 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() : ''}
))}
);
};