// Admin werkplaats agenda — drag/drop, statussen, resource view function Admin({ onNav }) { const [view, setView] = React.useState("week"); // day | week | month const [resourceMode, setResourceMode] = React.useState("bay"); // bay | mechanic const [selected, setSelected] = React.useState(null); const [appointments, setAppointments] = React.useState([]); const [stats, setStats] = React.useState(null); const [loading, setLoading] = React.useState(true); // Fetch live data on mount React.useEffect(() => { if (!window.api) { setAppointments(seedAppointments()); setLoading(false); return; } // Bereken huidige week (ma t/m za) const today = new Date(); const dayOfWeek = today.getDay() === 0 ? 6 : today.getDay() - 1; // 0=ma .. 6=zo const monday = new Date(today); monday.setDate(today.getDate() - dayOfWeek); const saturday = new Date(monday); saturday.setDate(monday.getDate() + 5); const fromStr = monday.toISOString().slice(0, 10); const toStr = saturday.toISOString().slice(0, 10); Promise.all([ window.api.admin.appointments({ from: fromStr, to: toStr }).catch(() => ({ appointments: [] })), window.api.admin.stats().catch(() => null), ]).then(([appts, s]) => { // Map naar calendar shape (day 0=ma..5=za, hour, minute, serviceShort, plate, customer) const mapped = (appts.appointments || []).map(a => { const dt = new Date(a.start_at); const dow = dt.getDay() === 0 ? 6 : dt.getDay() - 1; const statusMap = { booked: 'booked', arrived: 'arrived', in_progress: 'progress', done: 'done', picked: 'picked' }; return { id: a.id, day: Math.min(dow, 5), hour: dt.getHours(), minute: dt.getMinutes(), duration: a.service?.duration_min || 60, serviceShort: a.service?.name || '', plate: a.vehicle?.license_plate || '', customer: a.customer?.name || '', status: statusMap[a.status] || 'booked', mechanic: a.mechanic?.id || 1, bay: a.bay?.id || 1, }; }); // Als geen echte appointments, fallback to seed voor visuele demo setAppointments(mapped.length ? mapped : seedAppointments()); if (s) setStats(s); setLoading(false); }); }, []); const STATUSES = { booked: { label: "Geboekt", Icon: I.Calendar, color: "var(--text-muted)" }, arrived: { label: "Aangekomen", Icon: I.Car, color: "var(--accent)" }, progress: { label: "In behandeling", Icon: I.Wrench, color: "var(--warning)" }, done: { label: "Klaar", Icon: I.Check, color: "var(--success)" }, picked: { label: "Opgehaald", Icon: I.Flag, color: "var(--text-muted)" }, }; return (
"{a.notes}"