@@ -34,53 +34,62 @@ export const ObjectKanban: React.FC<ObjectKanbanProps> = ({
3434
3535 // Fetch object definition for metadata (labels, options)
3636 useEffect ( ( ) => {
37+ let isMounted = true ;
3738 const fetchMeta = async ( ) => {
3839 if ( ! dataSource || ! schema . objectName ) return ;
3940 try {
40- const def = await dataSource . getObject ( schema . objectName ) ;
41- setObjectDef ( def ) ;
41+ const def = await dataSource . getObjectSchema ( schema . objectName ) ;
42+ if ( isMounted ) setObjectDef ( def ) ;
4243 } catch ( e ) {
4344 console . warn ( "Failed to fetch object def" , e ) ;
4445 }
4546 } ;
4647 fetchMeta ( ) ;
48+ return ( ) => { isMounted = false ; } ;
4749 } , [ schema . objectName , dataSource ] ) ;
4850
4951 useEffect ( ( ) => {
52+ let isMounted = true ;
5053 const fetchData = async ( ) => {
5154 if ( ! dataSource || ! schema . objectName ) return ;
52- setLoading ( true ) ;
55+ if ( isMounted ) setLoading ( true ) ;
5356 try {
54- // Simple find for now, usually we might want filters
55- // Using a large limit or pagination would be needed for real apps,
56- // for now, we assume a reasonable default.
5757 const results = await dataSource . find ( schema . objectName , {
58- options : { $top : 100 } // Fetch up to 100 cards
58+ options : { $top : 100 } ,
59+ $filter : schema . filter
5960 } ) ;
61+
6062 // Handle { value: [] } OData shape or { data: [] } shape or direct array
61- let data = results ;
62- if ( ( results as any ) . value ) {
63- data = ( results as any ) . value ;
64- } else if ( ( results as any ) . data ) {
65- data = ( results as any ) . data ;
63+ let data : any [ ] = [ ] ;
64+ if ( Array . isArray ( results ) ) {
65+ data = results ;
66+ } else if ( results && typeof results === 'object' ) {
67+ if ( Array . isArray ( ( results as any ) . value ) ) {
68+ data = ( results as any ) . value ;
69+ } else if ( Array . isArray ( ( results as any ) . data ) ) {
70+ data = ( results as any ) . data ;
71+ }
6672 }
6773
68- if ( Array . isArray ( data ) ) {
74+ console . log ( `[ObjectKanban] Extracted data (length: ${ data . length } )` ) ;
75+
76+ if ( isMounted ) {
6977 setFetchedData ( data ) ;
7078 }
7179 } catch ( e ) {
72- console . error ( e ) ;
73- setError ( e as Error ) ;
80+ console . error ( '[ObjectKanban] Fetch error:' , e ) ;
81+ if ( isMounted ) setError ( e as Error ) ;
7482 } finally {
75- setLoading ( false ) ;
83+ if ( isMounted ) setLoading ( false ) ;
7684 }
7785 } ;
7886
7987 // Trigger fetch if we have an objectName AND verify no inline/bound data overrides it
8088 if ( schema . objectName && ! boundData && ! schema . data ) {
8189 fetchData ( ) ;
8290 }
83- } , [ schema . objectName , dataSource , boundData , schema . data ] ) ;
91+ return ( ) => { isMounted = false ; } ;
92+ } , [ schema . objectName , dataSource , boundData , schema . data , schema . filter ] ) ;
8493
8594 // Determine which data to use: bound -> inline -> fetched
8695 const rawData = boundData || schema . data || fetchedData ;
0 commit comments