import { useState, useEffect } from 'react'; import { Header } from '@/components/layout/Header'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Badge } from '@/components/ui/badge'; import { Search, Filter, SlidersHorizontal, Globe, MapPin, Factory, FerrisWheel, Ruler, Hammer, Building2 } from 'lucide-react'; import { Company } from '@/types/database'; import { supabase } from '@/integrations/supabase/client'; import { useNavigate } from 'react-router-dom'; export default function Manufacturers() { const [companies, setCompanies] = useState([]); const [loading, setLoading] = useState(true); const [searchQuery, setSearchQuery] = useState(''); const [sortBy, setSortBy] = useState('name'); const [filterType, setFilterType] = useState('all'); const navigate = useNavigate(); useEffect(() => { fetchCompanies(); }, [sortBy, filterType]); const fetchCompanies = async () => { try { let query = supabase .from('companies') .select('*'); // Apply filters if (filterType !== 'all') { query = query.eq('company_type', filterType); } // Apply sorting switch (sortBy) { case 'founded': query = query.order('founded_year', { ascending: false, nullsFirst: false }); break; default: query = query.order('name'); } const { data } = await query; setCompanies(data || []); } catch (error) { console.error('Error fetching companies:', error); } finally { setLoading(false); } }; const filteredCompanies = companies.filter(company => company.name.toLowerCase().includes(searchQuery.toLowerCase()) || company.headquarters_location?.toLowerCase().includes(searchQuery.toLowerCase()) || company.description?.toLowerCase().includes(searchQuery.toLowerCase()) ); const getCompanyIcon = (type: string) => { switch (type) { case 'manufacturer': return ; case 'operator': return ; case 'designer': return ; case 'contractor': return ; default: return ; } }; const formatCompanyType = (type: string) => { return type.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1) ).join(' '); }; const companyTypes = [ { value: 'all', label: 'All Types' }, { value: 'manufacturer', label: 'Manufacturers' }, { value: 'operator', label: 'Operators' }, { value: 'designer', label: 'Designers' }, { value: 'contractor', label: 'Contractors' } ]; if (loading) { return (
{[...Array(8)].map((_, i) => (
))}
); } return (
{/* Page Header */}

Manufacturers & Companies

Explore the companies behind your favorite rides and attractions

{filteredCompanies.length} companies found {companies.filter(c => c.company_type === 'manufacturer').length} manufacturers
{/* Search and Filters */}
setSearchQuery(e.target.value)} className="pl-10" />
{/* Companies Grid */} {filteredCompanies.length > 0 ? (
{filteredCompanies.map((company) => (
{getCompanyIcon(company.company_type)} {formatCompanyType(company.company_type)}
{company.name}
{company.logo_url && (
{`${company.name}
)}
{company.description && (

{company.description}

)}
{company.founded_year && (
Founded: {company.founded_year}
)} {company.headquarters_location && (
{company.headquarters_location}
)}
{company.website_url && ( )}
))}
) : (

No companies found

Try adjusting your search criteria or filters

)}
); }