import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Header } from '@/components/layout/Header'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { ArrowLeft, Filter, SlidersHorizontal, FerrisWheel } from 'lucide-react'; import { RideModel, Company } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; import { RideModelCard } from '@/components/rides/RideModelCard'; import { AutocompleteSearch } from '@/components/search/AutocompleteSearch'; export default function ManufacturerModels() { const { manufacturerSlug } = useParams<{ manufacturerSlug: string }>(); const navigate = useNavigate(); const [manufacturer, setManufacturer] = useState(null); const [models, setModels] = useState([]); const [loading, setLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(''); const [sortBy, setSortBy] = useState('name'); const [filterCategory, setFilterCategory] = useState('all'); useEffect(() => { if (manufacturerSlug) { fetchData(); } }, [manufacturerSlug, sortBy, filterCategory]); const fetchData = async () => { try { // Fetch manufacturer const { data: manufacturerData, error: manufacturerError } = await supabase .from('companies') .select('*') .eq('slug', manufacturerSlug) .eq('company_type', 'manufacturer') .maybeSingle(); if (manufacturerError) throw manufacturerError; setManufacturer(manufacturerData); if (manufacturerData) { // Fetch ride models with ride count let query = supabase .from('ride_models') .select(` *, rides:rides(count) `) .eq('manufacturer_id', manufacturerData.id); if (filterCategory !== 'all') { query = query.eq('category', filterCategory); } switch (sortBy) { case 'name': query = query.order('name'); break; default: query = query.order('name'); } const { data: modelsData, error: modelsError } = await query; if (modelsError) throw modelsError; setModels((modelsData || []) as any); } } catch (error) { console.error('Error fetching data:', error); } finally { setLoading(false); } }; const filteredModels = models.filter(model => model.name.toLowerCase().includes(searchQuery.toLowerCase()) || model.description?.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' } ]; if (loading) { return (
{[...Array(8)].map((_, i) => (
))}
); } if (!manufacturer) { return (

Manufacturer Not Found

); } return (

Models by {manufacturer.name}

Explore all ride models manufactured by {manufacturer.name}

{filteredModels.length} models
setSearchQuery(query)} showRecentSearches={false} />
{filteredModels.length > 0 ? (
{filteredModels.map((model) => ( ))}
) : (

No models found

{manufacturer.name} doesn't have any models matching your criteria

)}
); }