import { useEffect } from 'react'; import { Form as RemixForm } from "@remix-run/react"; import { Input } from "~/components/ui/Input"; import { Select } from "~/components/ui/Select"; import { Button } from "~/components/ui/Button"; import { FormField } from "~/components/ui/FormField"; import { Form, FormActions, FormSection, FormGrid } from "~/components/ui/Form"; import { useFormValidation } from "~/hooks/useFormValidation"; import { vehicleSchema } from "~/lib/form-validation"; import { TRANSMISSION_TYPES, FUEL_TYPES, USE_TYPES, BODY_TYPES, MANUFACTURERS, VALIDATION } from "~/lib/constants"; import type { Vehicle } from "~/types/database"; interface EnhancedVehicleFormProps { vehicle?: Vehicle; customers: { id: number; name: string; phone?: string | null }[]; onCancel: () => void; errors?: Record; isLoading: boolean; onSubmit?: (data: any) => void; } export function EnhancedVehicleForm({ vehicle, customers, onCancel, errors = {}, isLoading, onSubmit, }: EnhancedVehicleFormProps) { const { values, errors: validationErrors, touched, isValid, setValue, setTouched, reset, validate, getFieldProps, } = useFormValidation({ schema: vehicleSchema, initialValues: { plateNumber: vehicle?.plateNumber || "", bodyType: vehicle?.bodyType || "", manufacturer: vehicle?.manufacturer || "", model: vehicle?.model || "", trim: vehicle?.trim || "", year: vehicle?.year || new Date().getFullYear(), transmission: vehicle?.transmission || "", fuel: vehicle?.fuel || "", cylinders: vehicle?.cylinders || null, engineDisplacement: vehicle?.engineDisplacement || null, useType: vehicle?.useType || "", ownerId: vehicle?.ownerId || 0, }, validateOnChange: true, validateOnBlur: true, }); // Reset form when vehicle changes useEffect(() => { if (vehicle) { reset({ plateNumber: vehicle.plateNumber || "", bodyType: vehicle.bodyType || "", manufacturer: vehicle.manufacturer || "", model: vehicle.model || "", trim: vehicle.trim || "", year: vehicle.year || new Date().getFullYear(), transmission: vehicle.transmission || "", fuel: vehicle.fuel || "", cylinders: vehicle.cylinders || null, engineDisplacement: vehicle.engineDisplacement || null, useType: vehicle.useType || "", ownerId: vehicle.ownerId || 0, }); } else { reset({ plateNumber: "", bodyType: "", manufacturer: "", model: "", trim: "", year: new Date().getFullYear(), transmission: "", fuel: "", cylinders: null, engineDisplacement: null, useType: "", ownerId: 0, }); } }, [vehicle, reset]); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); const { isValid: formIsValid } = validate(); if (formIsValid && onSubmit) { onSubmit(values); } }; const isEditing = !!vehicle; const combinedErrors = { ...validationErrors, ...errors }; const currentYear = new Date().getFullYear(); return (
{isEditing && ( )} {/* Plate Number */} {/* Owner */} ({ value: type.value, label: type.label, }))} {...getFieldProps('bodyType')} /> {/* Manufacturer */} {/* Trim */} {/* Year */} setValue('year', parseInt(e.target.value) || currentYear)} /> {/* Use Type */} ({ value: transmission.value, label: transmission.label, }))} {...getFieldProps('transmission')} /> {/* Fuel */} setValue('cylinders', e.target.value ? parseInt(e.target.value) : null)} /> {/* Engine Displacement */} setValue('engineDisplacement', e.target.value ? parseFloat(e.target.value) : null)} />
); }