import React, { useState } from 'react'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { IndJobStatusOptions, IndJobRecordNoId } from '@/lib/pbtypes'; import { IndJob } from '@/lib/types'; import { parseISKAmount } from '@/utils/priceUtils'; interface JobFormProps { job?: IndJob; onSubmit: (job: IndJobRecordNoId) => void; onCancel: () => void; } const formatDateForInput = (dateString: string | undefined | null): string => { if (!dateString) return ''; // Create a date object in local timezone const date = new Date(dateString); // Format to YYYY-MM-DD const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); // Format to HH:MM const hours = String(date.getHours()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0'); // Combine into format required by datetime-local (YYYY-MM-DDTHH:MM) return `${year}-${month}-${day}T${hours}:${minutes}`; }; const JobForm: React.FC = ({ job, onSubmit, onCancel }) => { const [formData, setFormData] = useState({ outputItem: job?.outputItem || '', outputQuantity: job?.outputQuantity || 0, jobStart: formatDateForInput(job?.jobStart), jobEnd: formatDateForInput(job?.jobEnd), saleStart: formatDateForInput(job?.saleStart), saleEnd: formatDateForInput(job?.saleEnd), status: job?.status || IndJobStatusOptions.Planned, projectedCost: job?.projectedCost || 0, projectedRevenue: job?.projectedRevenue || 0 }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSubmit({ outputItem: formData.outputItem, outputQuantity: formData.outputQuantity, jobStart: formData.jobStart || undefined, jobEnd: formData.jobEnd || undefined, saleStart: formData.saleStart || undefined, saleEnd: formData.saleEnd || undefined, status: formData.status, projectedCost: formData.projectedCost, projectedRevenue: formData.projectedRevenue }); }; const statusOptions = Object.values(IndJobStatusOptions); return ( {job ? 'Edit Job' : 'Create New Job'}
setFormData({ ...formData, outputItem: e.target.value })} className="bg-gray-800 border-gray-600 text-white" required />
setFormData({ ...formData, outputQuantity: parseInt(e.target.value) || 0 })} className="bg-gray-800 border-gray-600 text-white" required />
setFormData({ ...formData, jobStart: e.target.value })} className="bg-gray-800 border-gray-600 text-white" />
setFormData({ ...formData, jobEnd: e.target.value })} className="bg-gray-800 border-gray-600 text-white" />
setFormData({ ...formData, saleStart: e.target.value })} className="bg-gray-800 border-gray-600 text-white" />
setFormData({ ...formData, saleEnd: e.target.value })} className="bg-gray-800 border-gray-600 text-white" />
setFormData({ ...formData, projectedCost: parseISKAmount(e.target.value) })} className="bg-gray-800 border-gray-600 text-white" />
setFormData({ ...formData, projectedRevenue: parseISKAmount(e.target.value) })} className="bg-gray-800 border-gray-600 text-white" />
); }; export default JobForm;