const { useState, useEffect } = React; const { Save, Check, Copy, FileText, Mail, ShieldAlert, Database, ExternalLink } = window.lucide; function SettingsPanel({ onSettingsSaved }) { const [settings, setSettings] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [copied, setCopied] = useState(false); const [success, setSuccess] = useState(false); useEffect(() => { fetchSettings(); }, []); const fetchSettings = async () => { try { const res = await fetch('api.php?action=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.php?action=settings but got HTML/text:', text.substring(0, 100)); } } } catch (e) { console.error('Failed to fetch settings:', e); } finally { setLoading(false); } }; const handleSave = async (e) => { e.preventDefault(); if (!settings) return; setSaving(true); setSuccess(false); try { const res = await fetch('api.php?action=settings', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(settings) }); if (res.ok) { setSuccess(true); if (onSettingsSaved) onSettingsSaved(); setTimeout(() => setSuccess(false), 3000); } } catch (err) { console.error('Failed to save settings:', err); } finally { setSaving(false); } }; const appsScriptCode = `function doPost(e) { try { var data = JSON.parse(e.postData.contents); var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // หากชีตว่างเปล่า ให้สร้างหัวคอลัมน์ (Headers) if (sheet.getLastRow() == 0) { sheet.appendRow([ "วันที่ประมวลผล (Timestamp)", "แพลตฟอร์ม (Category)", "เลขที่สั่งซื้อ (Order ID)", "ชื่อผู้รับ (Customer Name)", "ชื่อสินค้า (Product Name)", "ราคาต่อหน่วย (Unit Price)", "จำนวน (Quantity)", "จำนวนเงินรวม (Item Amount)", "ยอดชำระทั้งสิ้น (Total Paid Amount)" ]); } // เพิ่มข้อมูลสินค้าทีละแถวลงในชีต data.items.forEach(function(item) { sheet.appendRow([ new Date(data.timestamp).toLocaleString("th-TH"), data.category, data.orderId || "", data.customerName || "", item.productName, item.price, item.quantity, item.amount, data.totalAmount ]); }); return ContentService.createTextOutput(JSON.stringify({ status: "success", message: "Rows appended successfully" })) .setMimeType(ContentService.MimeType.JSON); } catch (error) { return ContentService.createTextOutput(JSON.stringify({ status: "error", message: error.toString() })) .setMimeType(ContentService.MimeType.JSON); } }`; const handleCopyScript = () => { navigator.clipboard.writeText(appsScriptCode); setCopied(true); setTimeout(() => setCopied(false), 2000); }; if (loading) { return (
ก๊อปปี้โค้ด JavaScript ด้านล่างนี้ไปวางในเครื่องมือ Apps Script ของ Google Sheets เพื่อเชื่อมต่อแบบเรียลไทม์:
{appsScriptCode}