import React, { useState, useEffect, useMemo } from 'react'; import { FeedingEvent } from '../../types'; import { useAppContext } from '../../context/AppContext.tsx'; interface FeedScheduleFormModalProps { isOpen: boolean; onClose: () => void; onSave: (eventData: Omit, id?: string) => void; eventToEdit: FeedingEvent | null; initialDate: Date; } const FeedScheduleFormModal: React.FC = ({ isOpen, onClose, onSave, eventToEdit, initialDate, }) => { const { users, roles } = useAppContext(); const operators = useMemo(() => { const operatorRoleId = roles.find((r) => r.name === 'Operator')?.id; if (!operatorRoleId) return []; return users.filter((u) => u.roleId === operatorRoleId); }, [users, roles]); const [time, setTime] = useState('08:00'); const [type, setType] = useState<'AI Recommended' | 'Manual'>('Manual'); const [operatorId, setOperatorId] = useState(operators[0]?.id || ''); const [feedType, setFeedType] = useState('CP 511 Bravo'); const [quantityKg, setQuantityKg] = useState('250'); useEffect(() => { if (eventToEdit) { const eventTime = eventToEdit.time; setTime( `${String(eventTime.getHours()).padStart(2, '0')}:${String(eventTime.getMinutes()).padStart(2, '0')}` ); if (eventToEdit.type === 'AI Recommended' || eventToEdit.type === 'Manual') { setType(eventToEdit.type); } setOperatorId(eventToEdit.operatorId); setFeedType(eventToEdit.feedType); setQuantityKg(String(eventToEdit.quantityKg)); } else { setTime('08:00'); setType('Manual'); setOperatorId(operators[0]?.id || ''); setFeedType('CP 511 Bravo'); setQuantityKg('250'); } }, [eventToEdit, operators]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); const [hours = 0, minutes = 0] = time.split(':').map(Number); const eventDate = eventToEdit ? new Date(eventToEdit.time) : new Date(initialDate); eventDate.setHours(hours, minutes, 0, 0); const operator = operators.find((o) => o.id === operatorId); if (!operator) return; const kg = parseInt(quantityKg, 10); onSave( { time: eventDate, type, operatorId, operatorName: operator.name, feedType, quantityKg: kg, quantitySacks: Math.round(kg / 50), }, eventToEdit?.id ); }; if (!isOpen) return null; return (
e.stopPropagation()} >

{eventToEdit ? 'Edit Jadwal Pakan' : 'Tambah Jadwal Pakan'}

setTime(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm" required />
setFeedType(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm" required />
setQuantityKg(e.target.value)} className="w-full px-3 py-2 border border-gray-300 rounded-md shadow-sm" required min="1" />
); }; export default FeedScheduleFormModal;