diff --git a/src/components/admin/ParkForm.tsx b/src/components/admin/ParkForm.tsx index 06706773..1965d1e3 100644 --- a/src/components/admin/ParkForm.tsx +++ b/src/components/admin/ParkForm.tsx @@ -17,7 +17,7 @@ import { FlexibleDateInput, type DatePrecision } from '@/components/ui/flexible- import { SlugField } from '@/components/ui/slug-field'; import { toast } from '@/hooks/use-toast'; import { handleError } from '@/lib/errorHandler'; -import { MapPin, Save, X, Plus, AlertCircle } from 'lucide-react'; +import { MapPin, Save, X, Plus, AlertCircle, Info } from 'lucide-react'; import { toDateOnly, parseDateOnly, toDateWithPrecision } from '@/lib/dateUtils'; import { Badge } from '@/components/ui/badge'; import { Combobox } from '@/components/ui/combobox'; @@ -370,6 +370,10 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }: ))} +
+ +

Choose the primary classification. Theme parks have themed areas, while amusement parks focus on rides.

+
{errors.park_type && (

{errors.park_type.message}

)} @@ -395,6 +399,10 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }: })} +
+ +

Current operational status. Use "Closed Temporarily" for seasonal closures or renovations.

+
{errors.status && (

{errors.status.message}

)} @@ -446,6 +454,10 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }: }} initialLocationId={watch('location_id')} /> +
+ +

Search by park name, address, or city. Select from results to auto-fill coordinates and timezone.

+
{errors.location && (

@@ -462,6 +474,10 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }: {/* Operator & Property Owner Selection */}

Operator & Property Owner

+
+ +

The operator runs the park, while the property owner owns the land. Often the same entity.

+
+
+ +

Primary ride type. Choose roller coaster for any coaster, flat ride for spinners/swings, water ride for flumes/rapids.

+
{errors.category && (

{errors.category.message}

)} @@ -541,6 +545,10 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: {...register('ride_sub_type')} placeholder="e.g. Inverted Coaster, Log Flume" /> +
+ +

Specific type within category (e.g., "Inverted Coaster", "Flume").

+
@@ -563,6 +571,10 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: })} +
+ +

Current state. Use "Relocated" if moved to another park.

+
{errors.status && (

{errors.status.message}

)} @@ -572,6 +584,10 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: {/* Manufacturer & Model Selection */}

Manufacturer & Model

+
+ +

The company that built the ride. Model is the specific product line (e.g., "B&M" makes "Inverted Coaster" models).

+
{/* Manufacturer Column */} @@ -747,6 +763,10 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: {...register('height_requirement', { setValueAs: (v) => v === "" ? undefined : parseFloat(v) })} placeholder={measurementSystem === 'imperial' ? 'e.g. 47' : 'e.g. 120'} /> +
+ +

Minimum height to ride. Values automatically convert to {measurementSystem === 'imperial' ? 'inches' : 'cm'}.

+
@@ -758,6 +778,10 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: {...register('age_requirement', { setValueAs: (v) => v === "" ? undefined : parseFloat(v) })} placeholder="e.g. 8" /> +
+ +

Minimum age in years, if different from height requirement.

+
@@ -765,6 +789,10 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: {selectedCategory === 'roller_coaster' && (

Roller Coaster Details

+
+ +

Specific attributes for roller coasters. Track/support materials help classify hybrid coasters.

+