// ─── Call Logs Page ────────────────────────────────────────────────────────── const LOG_STATUS_COLORS = { booked: 'green', completed: 'blue', failed: 'red', unknown: 'gray' }; function fmtDur(sec) { if (!sec && sec !== 0) return '—'; return `${Math.floor(sec / 60)}m ${Math.round(sec % 60)}s`; } function fmtDateTime(iso) { if (!iso) return '—'; return new Date(iso).toLocaleString('en-IN', { month: 'short', day: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit', hour12: true }); } function CallLogsPage() { const [logs, setLogs] = React.useState([]); const [loading, setLoading] = React.useState(true); const [filter, setFilter] = React.useState('all'); const [search, setSearch] = React.useState(''); React.useEffect(() => { fetch('/api/logs') .then(r => r.json()) .then(data => { setLogs(Array.isArray(data) ? data : []); setLoading(false); }) .catch(() => setLoading(false)); }, []); const filtered = logs.filter(c => { if (filter !== 'all' && c.status !== filter) return false; if (search) { const q = search.toLowerCase(); return (c.phone_number || '').includes(q) || (c.caller_name || '').toLowerCase().includes(q); } return true; }); const booked = logs.filter(c => c.status === 'booked').length; const failed = logs.filter(c => c.status === 'failed').length; return (