import { useState, useEffect } from 'react'; import { Input, InputGroup, InputLeftElement, VStack, Box, Text, Spinner, Icon, useToast, Image, Flex, Badge, } from '@chakra-ui/react'; import { FaSearch, FaFutbol, FaFutbol as FaFutsal } from 'react-icons/fa'; import { useFacrApi } from '../../hooks/useFacrApi'; export const ClubSearch = () => { const [searchQuery, setSearchQuery] = useState(''); const [debouncedQuery, setDebouncedQuery] = useState(''); const { searchClubs, searchResults, searchLoading, searchError } = useFacrApi(); const toast = useToast(); // Debounce search input useEffect(() => { const handler = setTimeout(() => { setDebouncedQuery(searchQuery); }, 500); return () => { clearTimeout(handler); }; }, [searchQuery]); // Trigger search when debounced query changes useEffect(() => { if (debouncedQuery) { searchClubs(debouncedQuery).catch(() => { toast({ title: 'Error', description: 'Failed to search for clubs', status: 'error', duration: 5000, isClosable: true, }); }); } }, [debouncedQuery, searchClubs, toast]); const handleSearchChange = (e: React.ChangeEvent) => { setSearchQuery(e.target.value); }; return ( {searchLoading && ( )} {searchError && ( Error: {searchError.message} )} {!searchLoading && searchResults.length > 0 && ( Search Results: {searchResults.map((club) => ( {club.logo_url ? ( {`${club.name} ) : ( )} {club.name} {club.club_type === 'football' ? 'Football' : 'Futsal'} {club.category} {club.address && ( {club.address} )} ))} )} {!searchLoading && searchQuery && searchResults.length === 0 && ( No clubs found matching "{searchQuery}" )} ); }; export default ClubSearch;