diff --git a/src/app/api/zxdb/search/route.ts b/src/app/api/zxdb/search/route.ts index 9707531..71ebeb3 100644 --- a/src/app/api/zxdb/search/route.ts +++ b/src/app/api/zxdb/search/route.ts @@ -13,6 +13,7 @@ const querySchema = z.object({ .length(2, "languageId must be a 2-char code") .optional(), machinetypeId: z.string().optional(), + year: z.coerce.number().int().optional(), sort: z.enum(["title", "id_desc"]).optional(), scope: z.enum(["title", "title_aliases", "title_aliases_origins"]).optional(), facets: z.coerce.boolean().optional(), @@ -36,6 +37,7 @@ export async function GET(req: NextRequest) { genreId: searchParams.get("genreId") ?? undefined, languageId: searchParams.get("languageId") ?? undefined, machinetypeId: searchParams.get("machinetypeId") ?? undefined, + year: searchParams.get("year") ?? undefined, sort: searchParams.get("sort") ?? undefined, scope: searchParams.get("scope") ?? undefined, facets: searchParams.get("facets") ?? undefined, diff --git a/src/app/zxdb/ZxdbExplorer.tsx b/src/app/zxdb/ZxdbExplorer.tsx index 789e226..314c662 100644 --- a/src/app/zxdb/ZxdbExplorer.tsx +++ b/src/app/zxdb/ZxdbExplorer.tsx @@ -41,6 +41,7 @@ export default function ZxdbExplorer({ const [genreId, setGenreId] = useState(""); const [languageId, setLanguageId] = useState(""); const [machinetypeId, setMachinetypeId] = useState(""); + const [year, setYear] = useState(""); const [sort, setSort] = useState<"title" | "id_desc">("id_desc"); const pageSize = 20; @@ -56,6 +57,7 @@ export default function ZxdbExplorer({ if (genreId !== "") params.set("genreId", String(genreId)); if (languageId !== "") params.set("languageId", String(languageId)); if (machinetypeId !== "") params.set("machinetypeId", String(machinetypeId)); + if (year !== "") params.set("year", year); if (sort) params.set("sort", sort); const res = await fetch(`/api/zxdb/search?${params.toString()}`); if (!res.ok) throw new Error(`Failed: ${res.status}`); @@ -89,13 +91,14 @@ export default function ZxdbExplorer({ genreId === "" && languageId === "" && machinetypeId === "" && + year === "" && sort === "id_desc" ) { return; } fetchData(q, page); // eslint-disable-next-line react-hooks/exhaustive-deps - }, [page, genreId, languageId, machinetypeId, sort]); + }, [page, genreId, languageId, machinetypeId, year, sort]); // Load filter lists on mount only if not provided by server useEffect(() => { @@ -161,6 +164,16 @@ export default function ZxdbExplorer({ ))} +
+ setYear(e.target.value)} + /> +