Add multi-select machine filters
Replace machine dropdowns with multi-select chips and pass machine lists in queries. Signed-off-by: codex@lucy.xalior.com
This commit is contained in:
@@ -7,6 +7,16 @@ export const metadata = {
|
||||
|
||||
export const dynamic = "force-dynamic";
|
||||
|
||||
function parseIdList(value: string | string[] | undefined) {
|
||||
if (!value) return undefined;
|
||||
const raw = Array.isArray(value) ? value.join(",") : value;
|
||||
const ids = raw
|
||||
.split(",")
|
||||
.map((id) => Number(id.trim()))
|
||||
.filter((id) => Number.isFinite(id) && id > 0);
|
||||
return ids.length ? ids : undefined;
|
||||
}
|
||||
|
||||
export default async function Page({ searchParams }: { searchParams: Promise<{ [key: string]: string | string[] | undefined }> }) {
|
||||
const sp = await searchParams;
|
||||
const hasParams = Object.values(sp).some((value) => value !== undefined);
|
||||
@@ -16,8 +26,9 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
|
||||
const year = yearStr ? Number(yearStr) : undefined;
|
||||
const sort = ((Array.isArray(sp.sort) ? sp.sort[0] : sp.sort) ?? "year_desc") as "year_desc" | "year_asc" | "title" | "entry_id_desc";
|
||||
const dLanguageId = (Array.isArray(sp.dLanguageId) ? sp.dLanguageId[0] : sp.dLanguageId) ?? "";
|
||||
const dMachinetypeIdStr = (Array.isArray(sp.dMachinetypeId) ? sp.dMachinetypeId[0] : sp.dMachinetypeId) ?? "";
|
||||
const dMachinetypeId = dMachinetypeIdStr ? Number(dMachinetypeIdStr) : undefined;
|
||||
const preferredMachineIds = [27, 26, 8, 9];
|
||||
const dMachinetypeIds = parseIdList(sp.dMachinetypeId) ?? preferredMachineIds;
|
||||
const dMachinetypeIdStr = dMachinetypeIds.join(",");
|
||||
const filetypeIdStr = (Array.isArray(sp.filetypeId) ? sp.filetypeId[0] : sp.filetypeId) ?? "";
|
||||
const filetypeId = filetypeIdStr ? Number(filetypeIdStr) : undefined;
|
||||
const schemetypeId = (Array.isArray(sp.schemetypeId) ? sp.schemetypeId[0] : sp.schemetypeId) ?? "";
|
||||
@@ -27,7 +38,7 @@ export default async function Page({ searchParams }: { searchParams: Promise<{ [
|
||||
const isDemo = isDemoStr ? (isDemoStr === "true" || isDemoStr === "1") : undefined;
|
||||
|
||||
const [initial, langs, machines, filetypes, schemes, sources, cases] = await Promise.all([
|
||||
searchReleases({ page, pageSize: 20, q, year, sort, dLanguageId: dLanguageId || undefined, dMachinetypeId, filetypeId, schemetypeId: schemetypeId || undefined, sourcetypeId: sourcetypeId || undefined, casetypeId: casetypeId || undefined, isDemo }),
|
||||
searchReleases({ page, pageSize: 20, q, year, sort, dLanguageId: dLanguageId || undefined, dMachinetypeId: dMachinetypeIds, filetypeId, schemetypeId: schemetypeId || undefined, sourcetypeId: sourcetypeId || undefined, casetypeId: casetypeId || undefined, isDemo }),
|
||||
listLanguages(),
|
||||
listMachinetypes(),
|
||||
listFiletypes(),
|
||||
|
||||
Reference in New Issue
Block a user