function WhatsappContact({ salesUrl, token }) { const [form, setForm] = React.useState({ name: '', number: '', district: '' }); const [rows, setRows] = React.useState([]); const [saving, setSaving] = React.useState(false); const [error, setError] = React.useState(''); // Tamil Nadu districts list (common set) const DISTRICTS = [ 'Ariyalur','Chengalpattu','Chennai','Coimbatore','Cuddalore','Dharmapuri','Dindigul','Erode','Kallakurichi','Kanchipuram','Kanyakumari','Karur','Krishnagiri','Madurai','Nagapattinam','Namakkal','Nilgiris','Perambalur','Pudukkottai','Ramanathapuram','Ranipet','Salem','Sivaganga','Tenkasi','Thanjavur','Theni','Thiruvallur','Thiruvarur','Thoothukudi','Tiruchirappalli','Tirunelveli','Tiruppur','Tiruvannamalai','Vellore','Viluppuram','Virudhunagar' ]; const onChange = (e) => { const { name, value } = e.target; setForm(f => ({ ...f, [name]: value })); }; const fetchContacts = async () => { try { setError(''); const res = await fetch(salesUrl + '/api/whatsapp-contacts', { headers: { Authorization: 'Bearer ' + token } }); const data = await res.json(); if (!res.ok) throw new Error(data.message || 'Failed to load'); setRows(Array.isArray(data.contacts) ? data.contacts : []); } catch (err) { setError(err.message); } }; React.useEffect(() => { fetchContacts(); }, []); const submit = async (e) => { e.preventDefault(); setSaving(true); setError(''); try { const res = await fetch(salesUrl + '/api/whatsapp-contacts', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + token }, body: JSON.stringify(form) }); const data = await res.json(); if (!res.ok || !data.success) throw new Error(data.message || 'Save failed'); setForm({ name: '', number: '', district: '' }); await fetchContacts(); } catch (err) { setError(err.message); } finally { setSaving(false); } }; // Filtered district suggestions for a simple dropdown list const suggested = React.useMemo(() => { const q = (form.district || '').toLowerCase(); if (!q) return DISTRICTS.slice(0, 8); return DISTRICTS.filter(d => d.toLowerCase().includes(q)).slice(0, 12); }, [form.district]); return (
| S.No | Contact Name | Number | District | Purchase Amount |
|---|---|---|---|---|
| {i+1} | {r.name || '-'} | {r.number || '-'} | {r.district || '-'} | {(Number(r.purchaseAmount || 0)).toFixed(2)} |