import Layout from '@/components/ui/Layout'; import { NextPage } from 'next'; import { useRouter } from 'next/router'; import BeerCard from '@/components/BeerIndex/BeerCard'; import { ChangeEvent, useEffect, useState } from 'react'; import Spinner from '@/components/ui/Spinner'; import debounce from 'lodash/debounce'; import useBeerPostSearch from '@/hooks/useBeerPostSearch'; import FormLabel from '@/components/ui/forms/FormLabel'; const DEBOUNCE_DELAY = 300; const SearchPage: NextPage = () => { const router = useRouter(); const querySearch = (router.query.search as string) || ''; const [searchValue, setSearchValue] = useState(querySearch); const { searchResults, isLoading, searchError } = useBeerPostSearch(searchValue); const debounceSearch = debounce((value: string) => { router.push({ pathname: '/beers/search', query: { search: value }, }); }, DEBOUNCE_DELAY); const onChange = (event: ChangeEvent) => { const { value } = event.target; setSearchValue(value); debounceSearch(value); }; useEffect(() => { debounce(() => { if (!querySearch || searchValue) { return; } setSearchValue(querySearch); }, DEBOUNCE_DELAY)(); }, [querySearch, searchValue]); const showSearchResults = !isLoading && searchResults && !searchError; return (
What are you looking for?
{!showSearchResults ? ( ) : (
{searchResults.map((result) => { return ; })}
)}
); }; export default SearchPage;