import { useState, useEffect, useMemo } from 'react'; import BaseModal from '../BaseModal'; function ScheduleItemModal({ date, hour, plannableItems, onSchedule, onClose }) { const [selectedItemId, setSelectedItemId] = useState(''); const [startTime, setStartTime] = useState(''); const [endTime, setEndTime] = useState(''); const [error, setError] = useState(''); const [submitting, setSubmitting] = useState(false); useEffect(() => { // Set default times based on the clicked hour const startHour = hour.toString().padStart(2, '0'); const endHour = (hour + 1).toString().padStart(2, '0'); setStartTime(`${startHour}:00`); setEndTime(`${endHour}:00`); }, [hour]); const handleSubmit = async (e) => { e.preventDefault(); setError(''); if (!selectedItemId) { setError('Please select an item to schedule'); return; } if (!startTime || !endTime) { setError('Please select start and end times'); return; } // Construct full datetime strings const dateString = date.toISOString().split('T')[0]; const startDatetime = `${dateString} ${startTime}:00`; const endDatetime = `${dateString} ${endTime}:00`; // Validate end time is after start time if (endTime <= startTime) { setError('End time must be after start time'); return; } try { setSubmitting(true); await onSchedule(selectedItemId, startDatetime, endDatetime); } catch (err) { setError(err.response?.data?.message || 'Failed to schedule item'); } finally { setSubmitting(false); } }; // Generate time options (every 30 minutes) - memoized to avoid recreation const timeOptions = useMemo(() => { const options = []; for (let h = 0; h < 24; h++) { for (let m = 0; m < 60; m += 30) { const timeStr = `${h.toString().padStart(2, '0')}:${m.toString().padStart(2, '0')}`; options.push(timeStr); } } return options; }, []); return (
{error && (
{error}
)}
); } export default ScheduleItemModal;