From 070ce33026206dfb5a2440f2de9337dd1206472d Mon Sep 17 00:00:00 2001
From: "gpt-engineer-app[bot]"
<159125892+gpt-engineer-app[bot]@users.noreply.github.com>
Date: Mon, 29 Sep 2025 13:07:59 +0000
Subject: [PATCH] Visual edit in Lovable
---
src/pages/ParkDetail.tsx | 269 +++++++++++++--------------------------
1 file changed, 91 insertions(+), 178 deletions(-)
diff --git a/src/pages/ParkDetail.tsx b/src/pages/ParkDetail.tsx
index 59da5712..7aaa368a 100644
--- a/src/pages/ParkDetail.tsx
+++ b/src/pages/ParkDetail.tsx
@@ -6,66 +6,44 @@ import { Badge } from '@/components/ui/badge';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import { Separator } from '@/components/ui/separator';
-import {
- MapPin,
- Star,
- Clock,
- Phone,
- Globe,
- Calendar,
- ArrowLeft,
- Users,
- Zap,
- Camera,
- Castle,
- FerrisWheel,
- Waves,
- Tent,
- Theater,
- Train
-} from 'lucide-react';
+import { MapPin, Star, Clock, Phone, Globe, Calendar, ArrowLeft, Users, Zap, Camera, Castle, FerrisWheel, Waves, Tent, Theater, Train } from 'lucide-react';
import { ReviewsSection } from '@/components/reviews/ReviewsSection';
import { MeasurementDisplay } from '@/components/ui/measurement-display';
import { Park, Ride } from '@/types/database';
import { supabase } from '@/integrations/supabase/client';
-
export default function ParkDetail() {
- const { slug } = useParams<{ slug: string }>();
+ const {
+ slug
+ } = useParams<{
+ slug: string;
+ }>();
const navigate = useNavigate();
const [park, setPark] = useState(null);
const [rides, setRides] = useState([]);
const [loading, setLoading] = useState(true);
-
useEffect(() => {
if (slug) {
fetchParkData();
}
}, [slug]);
-
const fetchParkData = async () => {
try {
// Fetch park details
- const { data: parkData } = await supabase
- .from('parks')
- .select(`
+ const {
+ data: parkData
+ } = await supabase.from('parks').select(`
*,
location:locations(*),
operator:companies!parks_operator_id_fkey(*),
property_owner:companies!parks_property_owner_id_fkey(*)
- `)
- .eq('slug', slug)
- .maybeSingle();
-
+ `).eq('slug', slug).maybeSingle();
if (parkData) {
setPark(parkData);
// Fetch park rides
- const { data: ridesData } = await supabase
- .from('rides')
- .select(`*`)
- .eq('park_id', parkData.id)
- .order('name');
-
+ const {
+ data: ridesData
+ } = await supabase.from('rides').select(`*`).eq('park_id', parkData.id).order('name');
setRides(ridesData || []);
}
} catch (error) {
@@ -74,47 +52,55 @@ export default function ParkDetail() {
setLoading(false);
}
};
-
const getStatusColor = (status: string) => {
switch (status) {
- case 'operating': return 'bg-green-500/20 text-green-400 border-green-500/30';
- case 'seasonal': return 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30';
- case 'under_construction': return 'bg-blue-500/20 text-blue-400 border-blue-500/30';
- default: return 'bg-red-500/20 text-red-400 border-red-500/30';
+ case 'operating':
+ return 'bg-green-500/20 text-green-400 border-green-500/30';
+ case 'seasonal':
+ return 'bg-yellow-500/20 text-yellow-400 border-yellow-500/30';
+ case 'under_construction':
+ return 'bg-blue-500/20 text-blue-400 border-blue-500/30';
+ default:
+ return 'bg-red-500/20 text-red-400 border-red-500/30';
}
};
-
const getParkTypeIcon = (type: string) => {
switch (type) {
- case 'theme_park': return ;
- case 'amusement_park': return ;
- case 'water_park': return ;
- case 'family_entertainment': return ;
- default: return ;
+ case 'theme_park':
+ return ;
+ case 'amusement_park':
+ return ;
+ case 'water_park':
+ return ;
+ case 'family_entertainment':
+ return ;
+ default:
+ return ;
}
};
-
const formatParkType = (type: string) => {
- return type.split('_').map(word =>
- word.charAt(0).toUpperCase() + word.slice(1)
- ).join(' ');
+ return type.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(' ');
};
-
const getRideIcon = (category: string) => {
switch (category) {
- case 'roller_coaster': return ;
- case 'water_ride': return ;
- case 'dark_ride': return ;
- case 'flat_ride': return ;
- case 'kiddie_ride': return ;
- case 'transportation': return ;
- default: return ;
+ case 'roller_coaster':
+ return ;
+ case 'water_ride':
+ return ;
+ case 'dark_ride':
+ return ;
+ case 'flat_ride':
+ return ;
+ case 'kiddie_ride':
+ return ;
+ case 'transportation':
+ return ;
+ default:
+ return ;
}
};
-
if (loading) {
- return (
-
+ return
@@ -123,13 +109,10 @@ export default function ParkDetail() {
-
- );
+
;
}
-
if (!park) {
- return (
-
+ return
@@ -143,21 +126,14 @@ export default function ParkDetail() {
-
- );
+
;
}
-
- return (
-
+ return
{/* Back Button */}
-
@@ -266,14 +230,12 @@ export default function ParkDetail() {
{park.review_count}
Reviews
- {park.average_rating > 0 && (
-
+ {park.average_rating > 0 &&
{park.average_rating.toFixed(1)}
-
- )}
+
}
@@ -288,12 +250,9 @@ export default function ParkDetail() {
- {park.opening_date
- ? `Opened ${new Date(park.opening_date).getFullYear()}`
- : 'Opening Soon'
- }
+ {park.opening_date ? `Opened ${new Date(park.opening_date).getFullYear()}` : 'Opening Soon'}
- Since
+
@@ -313,8 +272,7 @@ export default function ParkDetail() {
{/* Description */}
- {park.description && (
-
+ {park.description &&
About {park.name}
@@ -323,8 +281,7 @@ export default function ParkDetail() {
{park.description}
-
- )}
+ }
{/* Top Rides Preview */}
@@ -333,12 +290,7 @@ export default function ParkDetail() {
- {rides.slice(0, 4).map((ride) => (
-
navigate(`/parks/${park.slug}/rides/${ride.slug}`)}
- >
+ {rides.slice(0, 4).map(ride =>
navigate(`/parks/${park.slug}/rides/${ride.slug}`)}>
{getRideIcon(ride.category)}
{ride.name}
@@ -346,14 +298,11 @@ export default function ParkDetail() {
{ride.category.replace('_', ' ')}
- {ride.average_rating > 0 && (
-
+ {ride.average_rating > 0 &&
{ride.average_rating.toFixed(1)}
-
- )}
-
- ))}
+
}
+
)}
@@ -366,8 +315,7 @@ export default function ParkDetail() {
Park Information
- {park.opening_date && (
-
+ {park.opening_date &&
Opened
@@ -375,11 +323,9 @@ export default function ParkDetail() {
{new Date(park.opening_date).getFullYear()}
-
- )}
+ }
- {park.operator && (
-
+ {park.operator &&
Operator
@@ -387,28 +333,19 @@ export default function ParkDetail() {
{park.operator.name}
-
- )}
+
}
- {park.website_url && (
-
+ {park.website_url &&
- )}
+
}
- {park.phone && (
-
+ {park.phone &&
Phone
@@ -416,20 +353,17 @@ export default function ParkDetail() {
{park.phone}
-
- )}
+ }
Location
- {park.location && (
-
+ {park.location &&
{park.location.city &&
{park.location.city}
}
{park.location.state_province &&
{park.location.state_province}
}
{park.location.country}
-
- )}
+
}
@@ -439,12 +373,7 @@ export default function ParkDetail() {
- {rides.map((ride) => (
-
navigate(`/parks/${park.slug}/rides/${ride.slug}`)}
- >
+ {rides.map(ride => navigate(`/parks/${park.slug}/rides/${ride.slug}`)}>
{getRideIcon(ride.category)}
@@ -454,51 +383,36 @@ export default function ParkDetail() {
{ride.category.replace('_', ' ')}
- {ride.average_rating > 0 && (
-
+ {ride.average_rating > 0 &&
{ride.average_rating.toFixed(1)}
-
- )}
+
}
- {ride.description && (
-
+ {ride.description &&
{ride.description}
-
- )}
+
}
- {ride.max_speed_kmh && (
-
+ {ride.max_speed_kmh &&
-
- )}
- {ride.max_height_meters && (
-
+ }
+ {ride.max_height_meters &&
-
- )}
+ }
{ride.status}
-
- ))}
+ )}
-
+
@@ -512,6 +426,5 @@ export default function ParkDetail() {
-
- );
+ ;
}
\ No newline at end of file