@@ -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