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 */} - @@ -165,19 +141,11 @@ export default function ParkDetail() { {/* Hero Section */}
- {park.banner_image_url ? ( - {park.name} - ) : ( -
+ {park.banner_image_url ? {park.name} :
{getParkTypeIcon(park.park_type)}
-
- )} +
}
{/* Park Title Overlay */} @@ -195,16 +163,13 @@ export default function ParkDetail() {

{park.name}

- {park.location && ( -
+ {park.location &&
{park.location.city && `${park.location.city}, `}{park.location.country} -
- )} +
}
- {park.average_rating > 0 && ( -
+ {park.average_rating > 0 &&
{park.average_rating.toFixed(1)} @@ -212,8 +177,7 @@ export default function ParkDetail() {
{park.review_count} reviews
-
- )} +
}
@@ -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