import { useState, useEffect } from 'react'; import { Header } from '@/components/layout/Header'; import { Badge } from '@/components/ui/badge'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Filter, SlidersHorizontal, FerrisWheel } from 'lucide-react'; import { AutocompleteSearch } from '@/components/search/AutocompleteSearch'; import { RideCard } from '@/components/rides/RideCard'; import { Ride } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; export default function Rides() { const [rides, setRides] = useState([]); const [loading, setLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(''); const [sortBy, setSortBy] = useState('name'); const [filterCategory, setFilterCategory] = useState('all'); const [filterStatus, setFilterStatus] = useState('all'); useEffect(() => { fetchRides(); }, [sortBy, filterCategory, filterStatus]); const fetchRides = async () => { try { let query = supabase .from('rides') .select(` *, park:parks!inner(name, slug, location:locations(*)), manufacturer:companies!rides_manufacturer_id_fkey(*) `); // Apply filters if (filterCategory !== 'all') { query = query.eq('category', filterCategory); } if (filterStatus !== 'all') { query = query.eq('status', filterStatus); } // Apply sorting switch (sortBy) { case 'rating': query = query.order('average_rating', { ascending: false }); break; case 'speed': query = query.order('max_speed_kmh', { ascending: false, nullsFirst: false }); break; case 'height': query = query.order('max_height_meters', { ascending: false, nullsFirst: false }); break; case 'reviews': query = query.order('review_count', { ascending: false }); break; default: query = query.order('name'); } const { data } = await query; setRides(data || []); } catch (error) { console.error('Error fetching rides:', error); } finally { setLoading(false); } }; const filteredRides = rides.filter(ride => ride.name.toLowerCase().includes(searchQuery.toLowerCase()) || ride.park?.name?.toLowerCase().includes(searchQuery.toLowerCase()) || ride.manufacturer?.name?.toLowerCase().includes(searchQuery.toLowerCase()) ); const categories = [ { value: 'all', label: 'All Categories' }, { value: 'roller_coaster', label: 'Roller Coasters' }, { value: 'flat_ride', label: 'Flat Rides' }, { value: 'water_ride', label: 'Water Rides' }, { value: 'dark_ride', label: 'Dark Rides' }, { value: 'kiddie_ride', label: 'Kiddie Rides' }, { value: 'transportation', label: 'Transportation' } ]; const statusOptions = [ { value: 'all', label: 'All Status' }, { value: 'operating', label: 'Operating' }, { value: 'seasonal', label: 'Seasonal' }, { value: 'under_construction', label: 'Under Construction' }, { value: 'closed', label: 'Closed' } ]; if (loading) { return (
{[...Array(8)].map((_, i) => (
))}
); } return (
{/* Page Header */}

Rides & Attractions

Explore amazing rides and attractions from theme parks worldwide

{filteredRides.length} rides {rides.filter(r => r.category === 'roller_coaster').length} coasters
{/* Search and Filters */}
setSearchQuery(query)} showRecentSearches={false} />
{/* Rides Grid */} {filteredRides.length > 0 ? (
{filteredRides.map((ride) => ( ))}
) : (

No rides found

Try adjusting your search criteria or filters

)}
); }