import {useEffect, useState} from 'react'; import {useNavigate, useSearchParams} from 'react-router-dom'; import {useTranslation} from 'react-i18next'; import {Search} from 'lucide-react'; import {Card, CardContent, CardHeader, CardTitle} from '@/components/ui/card'; import GameSearch from '../components/GameSearch.jsx'; import PageContainer from '../components/PageContainer.jsx'; import SearchHitCard from '../components/SearchHitCard.jsx'; /** * Find games by name on IGDB. A game the user owns opens its page; any other hit opens a detail view with "Add". * The query lives in the URL, so it stays when the user comes back from a game page. */ export default function GameSearchPage() { const {t} = useTranslation(); const navigate = useNavigate(); const [params, setParams] = useSearchParams(); const [query, setQuery] = useState(params.get('q') ?? ''); const [picked, setPicked] = useState(null); // The input keeps its own state: a router update per keystroke runs in a transition and drops keys of a burst. useEffect(() => { const timer = setTimeout(() => setParams(query ? {q: query} : {}, {replace: true}), 400); return () => clearTimeout(timer); }, [query, setParams]); const onQueryChange = (q) => { setPicked(null); setQuery(q); }; const onPick = (hit) => (hit.inLibrary ? navigate(`/library/${hit.appid}`) : setPicked(hit)); return ( {picked ? ( setPicked(null)}/> ) : ( {t('GAME_SEARCH.TITLE')}

{t('GAME_SEARCH.HINT')}

)}
); }