Skip to content

Commit fdbc8cf

Browse files
authored
fix(api): support filtering with comma-separated values in rest handler (#1620)
1 parent e01751d commit fdbc8cf

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

packages/server/src/api/rest/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1534,7 +1534,16 @@ class RequestHandler extends APIHandlerBase {
15341534
}
15351535
return { isEmpty: value === 'true' ? true : false };
15361536
default:
1537-
return op ? { [op]: coerced } : { equals: coerced };
1537+
if (op === undefined) {
1538+
// regular filter, split value by comma
1539+
const values = value
1540+
.split(',')
1541+
.filter((i) => i)
1542+
.map((v) => this.coerce(fieldInfo.type, v));
1543+
return values.length > 1 ? { in: values } : { equals: values[0] };
1544+
} else {
1545+
return { [op]: coerced };
1546+
}
15381547
}
15391548
}
15401549
}

packages/server/tests/api/rest.test.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,16 @@ describe('REST server tests', () => {
368368
expect(r.body.data).toHaveLength(1);
369369
expect(r.body.data[0]).toMatchObject({ id: 'user2' });
370370

371+
// multi-id filter
372+
r = await handler({
373+
method: 'get',
374+
path: '/user',
375+
query: { ['filter[id]']: 'user1,user2' },
376+
prisma,
377+
});
378+
expect(r.status).toBe(200);
379+
expect(r.body.data).toHaveLength(2);
380+
371381
// String filter
372382
r = await handler({
373383
method: 'get',

0 commit comments

Comments
 (0)