Add advanced form editors

This commit is contained in:
gpt-engineer-app[bot]
2025-10-02 01:26:03 +00:00
parent 0996e8256c
commit 7df81a6ba0
3 changed files with 172 additions and 9 deletions

View File

@@ -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<any[]>([]);
const [coasterStats, setCoasterStats] = useState<any[]>([]);
const [formerNames, setFormerNames] = useState<any[]>([]);
// 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 }:
</div>
</div>
{/* Advanced Editors */}
<div className="space-y-6 border-t pt-6">
<TechnicalSpecsEditor
specs={technicalSpecs}
onChange={setTechnicalSpecs}
commonSpecs={['Track Material', 'Manufacturer', 'Train Type', 'Restraint System', 'Block Sections']}
/>
{selectedCategory === 'roller_coaster' && (
<>
<CoasterStatsEditor
stats={coasterStats}
onChange={setCoasterStats}
/>
<FormerNamesEditor
names={formerNames}
onChange={setFormerNames}
currentName={watch('name') || 'Unnamed Ride'}
/>
</>
)}
</div>
{/* Images */}
<EntityMultiImageUploader
mode={isEditing ? 'edit' : 'create'}