import { useEffect, useState } from "react"; import { Link, useSearchParams } from "react-router-dom"; import { api, type Game } from "../api"; export function Library() { const [params, setParams] = useSearchParams(); const q = params.get("q") ?? ""; const [query, setQuery] = useState(q); const [games, setGames] = useState(null); const [error, setError] = useState(""); useEffect(() => { const t = setTimeout(() => setParams(query ? { q: query } : {}, { replace: true }), 250); return () => clearTimeout(t); }, [query, setParams]); useEffect(() => { let cancelled = false; api.get(`/api/games?q=${encodeURIComponent(q)}`) .then((g) => !cancelled && setGames(g)) .catch((e) => !cancelled && setError(e.message)); return () => { cancelled = true; }; }, [q]); return (
setQuery(e.target.value)} autoFocus />
{error &&
{error}
} {games === null ? (

Загрузка…

) : games.length === 0 ? (

{q ? "Ничего не найдено." : "В библиотеке пока нет игр."}

) : (
{games.map((g) => (
{g.cover_hash ? : {g.title[0]}}
{g.title}
{g.tags.slice(0, 4).map((t) => {t})}
))}
)}
); }