Skip to content

Commit 0b02d1b

Browse files
Copilothotlong
andcommitted
fix: address code review - sanitize recordId, use Promise.all, add cancellation, log errors
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent 41337eb commit 0b02d1b

1 file changed

Lines changed: 24 additions & 9 deletions

File tree

apps/console/src/components/RecordDetailView.tsx

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,16 +70,31 @@ export function RecordDetailView({ dataSource, objects, onEdit }: RecordDetailVi
7070
// Fetch related child records for each reverse reference
7171
useEffect(() => {
7272
if (!dataSource || !pureRecordId || childRelations.length === 0) return;
73-
for (const { childObject, referenceField } of childRelations) {
74-
dataSource.find(childObject, {
75-
$filter: `${referenceField} eq '${pureRecordId}'`,
76-
})
77-
.then((res: any) => {
78-
const items = Array.isArray(res) ? res : res?.data || [];
79-
setChildRelatedData(prev => ({ ...prev, [childObject]: items }));
73+
let cancelled = false;
74+
const sanitizedId = pureRecordId.replace(/'/g, "''");
75+
Promise.all(
76+
childRelations.map(({ childObject, referenceField }) =>
77+
dataSource.find(childObject, {
78+
$filter: `${referenceField} eq '${sanitizedId}'`,
8079
})
81-
.catch(() => {});
82-
}
80+
.then((res: any) => {
81+
const items = Array.isArray(res) ? res : res?.data || [];
82+
return { childObject, items };
83+
})
84+
.catch((err: any) => {
85+
console.warn(`[RecordDetailView] Failed to fetch related ${childObject}:`, err);
86+
return { childObject, items: [] as any[] };
87+
})
88+
)
89+
).then((results) => {
90+
if (cancelled) return;
91+
const data: Record<string, any[]> = {};
92+
for (const { childObject, items } of results) {
93+
data[childObject] = items;
94+
}
95+
setChildRelatedData(data);
96+
});
97+
return () => { cancelled = true; };
8398
}, [dataSource, pureRecordId, childRelations]);
8499

85100
const currentUser = user

0 commit comments

Comments
 (0)