import DeleteRoundedIcon from '@mui/icons-material/DeleteRounded'; import MarkEmailReadRoundedIcon from '@mui/icons-material/MarkEmailReadRounded'; import Box from '@mui/material/Box'; import Card from '@mui/material/Card'; import CardContent from '@mui/material/CardContent'; import Chip from '@mui/material/Chip'; import IconButton from '@mui/material/IconButton'; import Stack from '@mui/material/Stack'; import Tooltip from '@mui/material/Tooltip'; import Typography from '@mui/material/Typography'; import { useEffect, useState } from 'react'; import { deleteEnquiry, listEnquiries, patchEnquiry } from '../../services/content'; import { SEED, type Enquiry } from '../../services/mockData'; export function EnquiriesPanel() { const [rows, setRows] = useState([]); const [loaded, setLoaded] = useState(false); const load = () => { listEnquiries() .then((d) => { setRows(d); setLoaded(true); }) .catch(() => { // Preview / offline: show the seed so the panel isn't empty. setRows(SEED.enquiries); setLoaded(true); }); }; useEffect(load, []); const toggleRead = async (e: Enquiry) => { setRows((rs) => rs.map((r) => (r.id === e.id ? { ...r, is_read: !r.is_read } : r))); try { await patchEnquiry(e.id, !e.is_read); } catch { /* optimistic */ } }; const remove = async (e: Enquiry) => { setRows((rs) => rs.filter((r) => r.id !== e.id)); try { await deleteEnquiry(e.id); } catch { /* optimistic */ } }; const unread = rows.filter((r) => !r.is_read).length; return ( Enquiries {unread > 0 && } {loaded && rows.length === 0 && ( No enquiries yet. Messages from your contact form will appear here. )} {rows.map((e) => ( {e.name} {!e.is_read && ( )} {[e.email, e.phone].filter(Boolean).join(' · ')} {e.subject_interest ? ` · Interested in ${e.subject_interest}` : ''} toggleRead(e)} color={e.is_read ? 'default' : 'primary'}> remove(e)}> {e.message} {new Date(e.created_at).toLocaleString()} ))} ); }