From 7df81a6ba03130b2315df8a2a37102e8af1312bd Mon Sep 17 00:00:00 2001 From: "gpt-engineer-app[bot]" <159125892+gpt-engineer-app[bot]@users.noreply.github.com> Date: Thu, 2 Oct 2025 01:26:03 +0000 Subject: [PATCH] Add advanced form editors --- src/components/admin/RideForm.tsx | 42 ++++++- src/components/admin/RideModelForm.tsx | 24 ++-- ...8_6ec24f6e-7c27-49f8-b001-0900aab69a2b.sql | 115 ++++++++++++++++++ 3 files changed, 172 insertions(+), 9 deletions(-) create mode 100644 supabase/migrations/20251002012418_6ec24f6e-7c27-49f8-b001-0900aab69a2b.sql diff --git a/src/components/admin/RideForm.tsx b/src/components/admin/RideForm.tsx index 897fd95b..d7d2cfea 100644 --- a/src/components/admin/RideForm.tsx +++ b/src/components/admin/RideForm.tsx @@ -21,6 +21,9 @@ import { useManufacturers, useRideModels } from '@/hooks/useAutocompleteData'; import { useUserRole } from '@/hooks/useUserRole'; import { ManufacturerForm } from './ManufacturerForm'; import { RideModelForm } from './RideModelForm'; +import { TechnicalSpecsEditor } from './editors/TechnicalSpecsEditor'; +import { CoasterStatsEditor } from './editors/CoasterStatsEditor'; +import { FormerNamesEditor } from './editors/FormerNamesEditor'; import { convertSpeed, convertDistance, @@ -144,6 +147,11 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: const [isManufacturerModalOpen, setIsManufacturerModalOpen] = useState(false); const [isModelModalOpen, setIsModelModalOpen] = useState(false); + // Advanced editor state + const [technicalSpecs, setTechnicalSpecs] = useState([]); + const [coasterStats, setCoasterStats] = useState([]); + const [formerNames, setFormerNames] = useState([]); + // Fetch data const { manufacturers, loading: manufacturersLoading } = useManufacturers(); const { rideModels, loading: modelsLoading } = useRideModels(selectedManufacturerId); @@ -221,12 +229,20 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: : undefined, drop_height_meters: data.drop_height_meters ? convertDistanceToMetric(data.drop_height_meters, measurementSystem) - : undefined + : undefined, + // Add structured data from advanced editors + technical_specs: JSON.stringify(technicalSpecs), + coaster_stats: JSON.stringify(coasterStats), + former_names: JSON.stringify(formerNames) }; // Build composite submission if new entities were created const submissionContent: any = { ride: metricData, + // Include structured data for relational tables + technical_specifications: technicalSpecs, + coaster_statistics: coasterStats, + name_history: formerNames }; // Add new manufacturer if created @@ -706,6 +722,30 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: + {/* Advanced Editors */} +
+ + + {selectedCategory === 'roller_coaster' && ( + <> + + + + + )} +
+ {/* Images */} ([]); const { register, @@ -166,15 +169,20 @@ export function RideModelForm({ {/* Technical Specs */} -
- -