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:
@@ -12,12 +12,21 @@ const querySchema = z.object({
|
||||
.trim()
|
||||
.length(2, "languageId must be a 2-char code")
|
||||
.optional(),
|
||||
machinetypeId: z.coerce.number().int().positive().optional(),
|
||||
machinetypeId: z.string().optional(),
|
||||
sort: z.enum(["title", "id_desc"]).optional(),
|
||||
scope: z.enum(["title", "title_aliases", "title_aliases_origins"]).optional(),
|
||||
facets: z.coerce.boolean().optional(),
|
||||
});
|
||||
|
||||
function parseIdList(value: string | undefined) {
|
||||
if (!value) return undefined;
|
||||
const ids = value
|
||||
.split(",")
|
||||
.map((id) => Number(id.trim()))
|
||||
.filter((id) => Number.isFinite(id) && id > 0);
|
||||
return ids.length ? ids : undefined;
|
||||
}
|
||||
|
||||
export async function GET(req: NextRequest) {
|
||||
const { searchParams } = new URL(req.url);
|
||||
const parsed = querySchema.safeParse({
|
||||
@@ -37,9 +46,11 @@ export async function GET(req: NextRequest) {
|
||||
{ status: 400, headers: { "content-type": "application/json" } }
|
||||
);
|
||||
}
|
||||
const data = await searchEntries(parsed.data);
|
||||
const machinetypeId = parseIdList(parsed.data.machinetypeId);
|
||||
const searchParamsParsed = { ...parsed.data, machinetypeId };
|
||||
const data = await searchEntries(searchParamsParsed);
|
||||
const body = parsed.data.facets
|
||||
? { ...data, facets: await getEntryFacets(parsed.data) }
|
||||
? { ...data, facets: await getEntryFacets(searchParamsParsed) }
|
||||
: data;
|
||||
return new Response(JSON.stringify(body), {
|
||||
headers: { "content-type": "application/json" },
|
||||
|
||||
Reference in New Issue
Block a user