Skip to content

Commit 9e889d0

Browse files
Copilothotlong
andcommitted
fix: use object-based $filter for child record queries instead of OData string
The $filter was being passed as an OData string ("order eq 'o1'") but the ObjectStackAdapter.convertQueryParams expects a Record<string, any> object which gets converted to FilterNode AST. A string filter was silently mangled by Object.entries() treating each character as a key, resulting in no matching records returned. Changed to: { [referenceField]: pureRecordId } which produces the correct filter AST ['order', '=', 'o1'] for the backend query. Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 5b70bc0 commit 9e889d0

2 files changed

Lines changed: 2 additions & 3 deletions

File tree

apps/console/src/__tests__/RecordDetailEdit.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ describe('RecordDetailView — detail schema features', () => {
264264
// Should fetch child records filtered by parent ID
265265
await waitFor(() => {
266266
expect(ds.find).toHaveBeenCalledWith('order_item', {
267-
$filter: "order eq 'order-1'",
267+
$filter: { order: 'order-1' },
268268
});
269269
});
270270

apps/console/src/components/RecordDetailView.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,10 @@ export function RecordDetailView({ dataSource, objects, onEdit }: RecordDetailVi
7171
useEffect(() => {
7272
if (!dataSource || !pureRecordId || childRelations.length === 0) return;
7373
let cancelled = false;
74-
const sanitizedId = pureRecordId.replace(/'/g, "''");
7574
Promise.all(
7675
childRelations.map(({ childObject, referenceField }) =>
7776
dataSource.find(childObject, {
78-
$filter: `${referenceField} eq '${sanitizedId}'`,
77+
$filter: { [referenceField]: pureRecordId },
7978
})
8079
.then((res: any) => {
8180
const items = Array.isArray(res) ? res : res?.data || [];

0 commit comments

Comments
 (0)