import { useState, useEffect } from 'react'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { useCreateTrain, useUpdateTrain } from '@/hooks/useTrains'; import { useToast } from '@/hooks/use-toast'; interface TrainFormDialogProps { trigger?: React.ReactNode; train?: any; onSuccess?: () => void; } export function TrainFormDialog({ trigger, train, onSuccess }: TrainFormDialogProps) { const [open, setOpen] = useState(false); const [form, setForm] = useState({ code: '', capacityTons: 0, trainNumber: '', trainName: '' }); const createTrain = useCreateTrain(); const updateTrain = useUpdateTrain(); const { toast } = useToast(); useEffect(() => { if (train) setForm({ code: train.code, capacityTons: train.capacityTons, trainNumber: train.trainNumber || '', trainName: train.trainName || '', }); }, [train]); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { if (train) await updateTrain.mutateAsync({ id: train.id, data: form }); else await createTrain.mutateAsync(form); toast({ title: train ? 'Train updated' : 'Train created', description: `${form.code} saved.` }); setOpen(false); onSuccess?.(); } catch { toast({ title: 'Error', description: `Failed to ${train ? 'update' : 'create'} train.`, variant: 'destructive' }); } }; return ( {trigger || } {train ? 'Edit Train' : 'Create Train'}
setForm({...form, code: e.target.value})} />
setForm({...form, capacityTons: parseFloat(e.target.value)})} />
setForm({...form, trainNumber: e.target.value})} />
setForm({...form, trainName: e.target.value})} />
); }