@@ -24,6 +24,8 @@ import { migratePrevStyles } from '../_common-migrations/migrateStyles';
2424import { useMetadataDispatcher } from '@/providers' ;
2525import { useAsyncMemo } from '@/hooks/useAsyncMemo' ;
2626import { isEntityTypeIdEmpty } from '@/providers/metadataDispatcher/entities/utils' ;
27+ import { isEntityReferenceId } from '@/utils/entity' ;
28+ import { isDefined } from '@/utils/nullables' ;
2729
2830const AutocompleteComponent : AutocompleteComponentDefinition = {
2931 type : 'autocomplete' ,
@@ -47,36 +49,41 @@ const AutocompleteComponent: AutocompleteComponentDefinition = {
4749 const keyPropName = model . keyPropName || ( model . dataSourceType === 'entitiesList' ? 'id' : 'value' ) ;
4850 const displayPropName = model . displayPropName || ( model . dataSourceType === 'entitiesList' ? '_displayName' : 'displayText' ) ;
4951
50- const keyValueFunc : KayValueFunc = useCallback ( ( value : any , args : any ) => {
52+ const keyValueFunc : KayValueFunc = useCallback ( ( value : unknown , args : object ) => {
53+ if ( ! isDefined ( value ) ) return value ;
5154 if ( model . valueFormat === 'custom' && model . keyValueFunc )
5255 return executeExpression < string > ( model . keyValueFunc , { ...args , value } , null , null ) ;
53- if ( model . valueFormat === 'entityReference' )
56+ if ( model . valueFormat === 'entityReference' && isEntityReferenceId ( value ) )
5457 return value ?. id ;
55- return typeof ( value ) === 'object' ? getValueByPropertyName ( value , keyPropName ) : value ;
58+ return typeof ( value ) === 'object' ? getValueByPropertyName ( value as Record < string , unknown > , keyPropName ) : value ;
5659 } , [ model . valueFormat , model . keyValueFunc , keyPropName ] ) ;
5760
58- const outcomeValueFunc : OutcomeValueFunc = useCallback ( ( item : any , args : any ) => {
61+ const outcomeValueFunc : OutcomeValueFunc = useCallback ( ( item : unknown , args : object ) => {
62+ if ( ! isDefined ( item ) ) return item ;
5963 if ( model . valueFormat === 'entityReference' )
60- return Boolean ( item )
64+ return isEntityReferenceId ( item )
6165 ? {
6266 id : item . id ,
63- _displayName : item . _displayName || getValueByPropertyName ( item , displayPropName ) ,
67+ _displayName : getValueByPropertyName ( item as Record < string , unknown > , displayPropName ) || item . _displayName ,
6468 _className : ( item . _className || entityMetadata ?. fullClassName ) ?? undefined ,
6569 }
66- : null ;
70+ : typeof ( item ) !== 'object'
71+ ? { id : item , _displayName : item ?. toString ( ) , _className : undefined }
72+ : item ;
6773 if ( model . valueFormat === 'custom' && model . outcomeValueFunc )
6874 return executeExpression ( model . outcomeValueFunc , { ...args , item : item } , null , null ) ;
69- return typeof ( item ) === 'object' ? getValueByPropertyName ( item , keyPropName ) : item ;
75+ return typeof ( item ) === 'object' ? getValueByPropertyName ( item as Record < string , unknown > , keyPropName ) : item ;
7076 } , [ model . valueFormat , model . outcomeValueFunc , keyPropName , displayPropName , entityMetadata ] ) ;
7177
72- const displayValueFunc : OutcomeValueFunc = useCallback ( ( value : any , args : any ) => {
78+ const displayValueFunc : OutcomeValueFunc = useCallback ( ( value : unknown , args : object ) => {
79+ if ( ! isDefined ( value ) ) return value ;
7380 if ( model . displayValueFunc )
7481 return executeExpression ( model . displayValueFunc , { ...args , item : value } , null , null ) ;
75- return ( typeof ( value ) === 'object' ? getValueByPropertyName ( value , displayPropName ) : value ) || '' ;
82+ return ( typeof ( value ) === 'object' ? getValueByPropertyName ( value as Record < string , unknown > , displayPropName ) : value ) || '' ;
7683 } , [ model . displayValueFunc , displayPropName ] ) ;
7784
78- const filterKeysFunc : FilterSelectedFunc = useCallback ( ( value : any | any [ ] ) => {
79- const localValue = value ?. length === 1 ? value [ 0 ] : value ;
85+ const filterKeysFunc : FilterSelectedFunc = useCallback ( ( value : unknown ) => {
86+ const localValue = Array . isArray ( value ) && value ?. length === 1 ? value [ 0 ] : value ;
8087 return Array . isArray ( localValue )
8188 ? { or : localValue . map ( ( x ) => executeExpression ( model . filterKeysFunc , { value : x } , null , null ) ) }
8289 : executeExpression ( model . filterKeysFunc , { value : localValue } , null , null ) ;
0 commit comments