diff --git a/frontend/src/features/vehicles/components/VehicleForm.tsx b/frontend/src/features/vehicles/components/VehicleForm.tsx index 0b61c6f..2aa0717 100644 --- a/frontend/src/features/vehicles/components/VehicleForm.tsx +++ b/frontend/src/features/vehicles/components/VehicleForm.tsx @@ -13,10 +13,13 @@ import { VehicleImageUpload } from './VehicleImageUpload'; import { useTierAccess } from '../../../core/hooks/useTierAccess'; import { UpgradeRequiredDialog } from '../../../shared-minimal/components/UpgradeRequiredDialog'; +// Helper to convert NaN (from empty number inputs) to null +const nanToNull = (val: unknown) => (typeof val === 'number' && isNaN(val) ? null : val); + const vehicleSchema = z .object({ vin: z.string().max(17).nullable().optional().transform(val => val ?? undefined), - year: z.number().min(1950).max(new Date().getFullYear() + 1).nullable().optional(), + year: z.preprocess(nanToNull, z.number().min(1950).max(new Date().getFullYear() + 1).nullable().optional()), make: z.string().nullable().optional(), model: z.string().nullable().optional(), engine: z.string().nullable().optional(), @@ -27,8 +30,8 @@ const vehicleSchema = z nickname: z.string().nullable().optional(), color: z.string().nullable().optional(), licensePlate: z.string().nullable().optional(), - odometerReading: z.number().min(0).nullable().optional(), - purchasePrice: z.number().min(0).nullable().optional(), + odometerReading: z.preprocess(nanToNull, z.number().min(0).nullable().optional()), + purchasePrice: z.preprocess(nanToNull, z.number().min(0).nullable().optional()), purchaseDate: z.string().nullable().optional(), }) .refine( diff --git a/frontend/src/features/vehicles/pages/VehicleDetailPage.tsx b/frontend/src/features/vehicles/pages/VehicleDetailPage.tsx index 97d8feb..1fb8fdc 100644 --- a/frontend/src/features/vehicles/pages/VehicleDetailPage.tsx +++ b/frontend/src/features/vehicles/pages/VehicleDetailPage.tsx @@ -414,6 +414,23 @@ export const VehicleDetailPage: React.FC = () => { label="Current Odometer Reading" value={vehicle.odometerReading ? `${vehicle.odometerReading.toLocaleString()} mi` : undefined} /> + + {/* Purchase Information Section */} +
+

+ Purchase Information +

+
+ + +
+