feat: Implement phases 5, 6, and 7

This commit is contained in:
gpt-engineer-app[bot]
2025-10-09 18:52:38 +00:00
parent f8232e4555
commit 8c5cf40ccb
5 changed files with 13 additions and 139 deletions

View File

@@ -3,6 +3,7 @@ import { useForm } from 'react-hook-form';
import { zodResolver } from '@hookform/resolvers/zod';
import * as z from 'zod';
import { validateSubmissionHandler } from '@/lib/entityFormValidation';
import { entitySchemas } from '@/lib/entityValidationSchemas';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input';
@@ -34,47 +35,7 @@ import {
getHeightUnit
} from '@/lib/units';
const rideSchema = z.object({
name: z.string().min(1, 'Ride name is required'),
slug: z.string().min(1, 'Slug is required'),
description: z.string().optional(),
category: z.string().min(1, 'Category is required'),
ride_sub_type: z.string().optional(),
status: z.string().min(1, 'Status is required'),
opening_date: z.string().optional(),
closing_date: z.string().optional(),
height_requirement: z.number().optional(),
age_requirement: z.number().optional(),
capacity_per_hour: z.number().optional(),
duration_seconds: z.number().optional(),
max_speed_kmh: z.number().optional(),
max_height_meters: z.number().optional(),
length_meters: z.number().optional(),
inversions: z.number().optional(),
// New roller coaster specific fields
coaster_type: z.string().optional(),
seating_type: z.string().optional(),
intensity_level: z.string().optional(),
drop_height_meters: z.number().optional(),
max_g_force: z.number().optional(),
// Manufacturer and model
manufacturer_id: z.string().uuid().optional(),
ride_model_id: z.string().uuid().optional(),
// Images
images: z.object({
uploaded: z.array(z.object({
url: z.string(),
cloudflare_id: z.string().optional(),
file: z.any().optional(),
isLocal: z.boolean().optional(),
caption: z.string().optional(),
})),
banner_assignment: z.number().nullable().optional(),
card_assignment: z.number().nullable().optional(),
}).optional()
});
type RideFormData = z.infer<typeof rideSchema>;
type RideFormData = z.infer<typeof entitySchemas.ride>;
interface RideFormProps {
onSubmit: (data: RideFormData) => Promise<void>;
@@ -186,7 +147,7 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }:
watch,
formState: { errors }
} = useForm<RideFormData>({
resolver: zodResolver(rideSchema),
resolver: zodResolver(entitySchemas.ride),
defaultValues: {
name: initialData?.name || '',
slug: initialData?.slug || '',