diff --git a/src/components/admin/ParkForm.tsx b/src/components/admin/ParkForm.tsx index 1965d1e3..45b1c76b 100644 --- a/src/components/admin/ParkForm.tsx +++ b/src/components/admin/ParkForm.tsx @@ -30,6 +30,7 @@ import { LocationSearch } from './LocationSearch'; import { OperatorForm } from './OperatorForm'; import { PropertyOwnerForm } from './PropertyOwnerForm'; import { Checkbox } from '@/components/ui/checkbox'; +import { SubmissionHelpDialog } from '@/components/help/SubmissionHelpDialog'; const parkSchema = z.object({ name: z.string().min(1, 'Park name is required'), @@ -314,10 +315,13 @@ export function ParkForm({ onSubmit, onCancel, initialData, isEditing = false }: return ( - - - {isEditing ? 'Edit Park' : 'Create New Park'} - +
+ + + {isEditing ? 'Edit Park' : 'Create New Park'} + + +
diff --git a/src/components/admin/RideForm.tsx b/src/components/admin/RideForm.tsx index 47d75f38..f430c3c1 100644 --- a/src/components/admin/RideForm.tsx +++ b/src/components/admin/RideForm.tsx @@ -35,6 +35,7 @@ import { ParkForm } from './ParkForm'; import { TechnicalSpecsEditor, validateTechnicalSpecs } from './editors/TechnicalSpecsEditor'; import { CoasterStatsEditor, validateCoasterStats } from './editors/CoasterStatsEditor'; import { FormerNamesEditor } from './editors/FormerNamesEditor'; +import { SubmissionHelpDialog } from '@/components/help/SubmissionHelpDialog'; import { convertValueToMetric, convertValueFromMetric, @@ -385,10 +386,13 @@ export function RideForm({ onSubmit, onCancel, initialData, isEditing = false }: - - - {isEditing ? 'Edit Ride' : 'Create New Ride'} - +
+ + + {isEditing ? 'Edit Ride' : 'Create New Ride'} + + +
diff --git a/src/components/help/SubmissionHelpDialog.tsx b/src/components/help/SubmissionHelpDialog.tsx new file mode 100644 index 00000000..a3ecd32f --- /dev/null +++ b/src/components/help/SubmissionHelpDialog.tsx @@ -0,0 +1,385 @@ +import { HelpCircle } from "lucide-react"; +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/components/ui/accordion"; +import { Badge } from "@/components/ui/badge"; +import { ScrollArea } from "@/components/ui/scroll-area"; + +interface SubmissionHelpDialogProps { + type: 'park' | 'ride'; + variant?: 'button' | 'icon'; +} + +export function SubmissionHelpDialog({ type, variant = 'button' }: SubmissionHelpDialogProps) { + return ( + + + {variant === 'button' ? ( + + ) : ( + + )} + + + + + {type === 'park' ? 'Park' : 'Ride'} Submission Guide + + + Everything you need to know about submitting {type === 'park' ? 'parks' : 'rides'} to ThrillWiki + + + + + + {/* Date Precision */} + + Date Precision Options + +

+ Choose how precise your date information is. This helps maintain accuracy when exact dates aren't known. +

+ +
+
+

Exact Day

+

Use when you know the specific date (e.g., June 15, 2010)

+ Example: Opening day announcement +
+ +
+

Month & Year

+

Use when you only know the month (e.g., June 2010)

+ Example: "Opened in summer 2010" +
+ +
+

Year Only

+

Use when you only know the year (e.g., 2010)

+ Example: Historical records show "1985" +
+ +
+

Decade

+

Use for events in a general decade (e.g., 1980s)

+ Example: "Built in the early 1970s" +
+ +
+

Century

+

Use for very old dates spanning a century

+ Example: "19th century fairground" +
+ +
+

Approximate

+

Use when the date is uncertain or estimated

+ Example: "circa 2005" +
+
+
+
+ + {type === 'park' && ( + <> + {/* Park Types */} + + Park Types Explained + +
+
+

Theme Park

+

Has distinct themed areas with immersive experiences and storytelling

+ Examples: Disneyland, Universal Studios +
+ +
+

Amusement Park

+

Focuses on rides and attractions without heavy theming

+ Examples: Cedar Point, Six Flags +
+ +
+

Water Park

+

Water-based attractions like slides, wave pools, lazy rivers

+ Examples: Schlitterbahn, Aquatica +
+ +
+

Family Entertainment Center

+

Indoor facilities with arcade games, mini golf, go-karts

+ Examples: Chuck E. Cheese, Dave & Buster's +
+
+
+
+ + {/* Operator vs Owner */} + + Operator vs. Property Owner + +
+
+

Operator

+

+ The company that runs day-to-day operations, manages staff, and operates the park +

+ Example: Six Flags operates many parks +
+ +
+

Property Owner

+

+ The entity that owns the land and physical property +

+ Example: Real estate investment company +
+ +
+

💡 Pro Tip

+

+ Often the operator and owner are the same company (check the "Operator is also the property owner" box). + But sometimes they're different - for example, a park might lease land from a property owner. +

+
+
+
+
+ + )} + + {type === 'ride' && ( + <> + {/* Ride Categories */} + + Ride Categories + +
+
+

Roller Coaster

+

Any type of coaster with a track and gravity-based movement

+ Includes: Steel, Wood, Inverted, Flying +
+ +
+

Flat Ride

+

Spinning, swinging, or rotating rides at ground level

+ Examples: Tilt-A-Whirl, Scrambler, Top Spin +
+ +
+

Water Ride

+

Rides involving water, splashing, or getting wet

+ Examples: Log Flume, River Rapids, Shoot-the-Chute +
+ +
+

Dark Ride

+

Indoor rides with controlled lighting and theming

+ Examples: Haunted Mansion, Pirates of the Caribbean +
+
+
+
+ + {/* Manufacturer vs Designer */} + + Manufacturer vs. Designer + +
+
+

Manufacturer

+

+ The company that physically built and engineered the ride +

+ Examples: Intamin, B&M, Vekoma, RMC +
+ +
+

Designer (Optional)

+

+ The design firm or consultant that created the ride concept and layout +

+ Examples: Werner Stengel, Ride Centerline +
+ +
+

💡 Pro Tip

+

+ Most rides only need a manufacturer. Add a designer only if they're notably different + (e.g., Werner Stengel designed layouts for many B&M coasters). +

+
+
+
+
+ + {/* Technical Specs */} + + Technical Specifications + +

+ Add custom specifications beyond the standard fields. Use for unique features. +

+ +
+
+

Common Spec Examples

+
    +
  • • Track Material: "Steel" or "Wood"
  • +
  • • Propulsion Method: "LSM Launch", "Chain Lift"
  • +
  • • Train Type: "Sit-down", "Inverted", "Flying"
  • +
  • • Restraint System: "Lap bar", "Over-shoulder"
  • +
  • • Number of Trains: "3"
  • +
  • • Riders per Train: "28"
  • +
+
+ +
+

⚠️ Important: Metric Units Only

+

+ All measurements must use metric units (km/h, m, cm, kg). The system will convert + them to your preferred units for display. Examples: "km/h" not "mph", "m" not "ft" +

+
+
+
+
+ + )} + + {/* Units and Measurements */} + + Units and Measurements + +

+ ThrillWiki stores all measurements in metric units but displays them in your preferred system. +

+ +
+
+

How It Works

+
    +
  1. Enter values in YOUR preferred units (metric or imperial)
  2. +
  3. System automatically converts to metric for storage
  4. +
  5. Data displays in each user's preferred unit system
  6. +
+
+ +
+

Speed

+

Enter in km/h or mph (auto-converts)

+ Example: 120 km/h = 74.6 mph +
+ +
+

Height / Length

+

Enter in meters or feet (auto-converts)

+ Example: 50m = 164ft +
+ +
+

Height Requirement

+

Enter in cm or inches (auto-converts)

+ Example: 120cm = 47in +
+
+
+
+ + {/* Submission Process */} + + Submission Process + +
+
+

How Submissions Work

+
    +
  1. Fill out the form with accurate information
  2. +
  3. Your submission goes to a moderation queue
  4. +
  5. Moderators review for accuracy and completeness
  6. +
  7. Approved submissions become visible on the site
  8. +
  9. All changes are versioned - edit history is preserved
  10. +
+
+ +
+

✓ Required Fields

+

+ Fields marked with * are required. You cannot submit without completing these. +

+
+ +
+

Source URL & Notes

+

+ Always provide sources for your information. This helps moderators verify accuracy + and gives credit to original sources. Include official websites, press releases, or news articles. +

+
+
+
+
+ + {/* Best Practices */} + + Best Practices + +
+
+

✓ Do

+
    +
  • Use official names from park/manufacturer sources
  • +
  • Provide accurate dates with appropriate precision
  • +
  • Include source URLs for verification
  • +
  • Add detailed descriptions that help users
  • +
  • Use proper capitalization and spelling
  • +
  • Check if the {type} already exists before creating
  • +
+
+ +
+

✗ Don't

+
    +
  • Use nicknames or unofficial names
  • +
  • Guess dates - use appropriate precision instead
  • +
  • Submit without sources or verification
  • +
  • Leave descriptions empty or vague
  • +
  • Use all caps or poor formatting
  • +
  • Create duplicates of existing entries
  • +
+
+ +
+

💡 Quality over Speed

+

+ Take your time to ensure accuracy. Well-documented submissions are approved faster + and help build a reliable database for everyone. +

+
+
+
+
+
+
+
+
+ ); +} \ No newline at end of file