const { useState, useEffect } = React;
const {
Scan, History, Settings, Mail, FileSpreadsheet,
Sparkles, Database, Check, ShieldCheck
} = window.lucide;
const OCRScanner = window.OCRScanner;
const ScanHistory = window.ScanHistory;
const EmailLogsPanel = window.EmailLogsPanel;
const SettingsPanel = window.SettingsPanel;
function App() {
const [activeTab, setActiveTab] = useState('scan');
const [records, setRecords] = useState([]);
const [settings, setSettings] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetchHistory();
fetchSettings();
}, []);
const fetchHistory = async () => {
try {
const res = await fetch('api.php?action=history');
if (res.ok) {
const text = await res.text();
try {
const data = JSON.parse(text);
setRecords(data);
} catch (jsonErr) {
console.error('Expected JSON from /api/history but got HTML/text:', text.substring(0, 100));
}
}
} catch (e) {
console.error('Failed to fetch history:', e);
} finally {
setLoading(false);
}
};
const fetchSettings = async () => {
try {
const res = await fetch('api/settings');
if (res.ok) {
const text = await res.text();
try {
const data = JSON.parse(text);
setSettings(data);
} catch (jsonErr) {
console.error('Expected JSON from /api/settings but got HTML/text:', text.substring(0, 100));
}
}
} catch (e) {
console.error('Failed to fetch settings:', e);
}
};
const handleScanComplete = (newRecords) => {
const recordsArray = Array.isArray(newRecords) ? newRecords : [newRecords];
setRecords(prev => [...recordsArray, ...prev]);
fetchHistory(); // Sync fully
};
const handleRecordDeleted = () => {
fetchHistory();
};
const handleRecordSyncUpdated = () => {
fetchHistory();
};
return (
{/* Sidebar navigation on the left */}
{/* Main content frame on the right */}
{/* Upper sticky header */}
{/* Scrollable Main Area */}
{/* Welcome Banner Banner */}
{activeTab === 'scan' && (
ยินดีต้อนรับสู่ระบบสแกนใบปะหน้าอัจฉริยะ
อัปโหลดไฟล์เอกสาร PDF หรือรูปภาพของคุณเข้าสู่ระบบเพื่อสกัดแยกรายละเอียดสินค้า ราคา และค่ายขนส่ง Lazada, Shopee และ TikTok Shop ออกมารายแถวอย่างอัจฉริยะด้วย AI อัจฉริยะของ Gemini พร้อมส่งตรงเข้า Google Sheet ทันที!
)}
{/* Sub Panels router with animation */}
);
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render();