@@ -358,23 +358,32 @@ export function RecordPickerDialog({
358358 // Auto-derive from lookupFilters: each filter entry becomes a filterable field
359359 if ( lookupFilters && lookupFilters . length > 0 ) {
360360 return lookupFilters . map ( f => {
361+ // Infer filter input type from value type first, then fall back to operator
361362 let type : RecordPickerFilterColumn [ 'type' ] = 'text' ;
362- if ( f . operator === 'gt' || f . operator === 'lt' || f . operator === 'gte' || f . operator === 'lte' ) {
363- type = 'number' ;
364- } else if ( f . operator === 'in' || f . operator === 'notIn' ) {
365- type = 'select' ;
366- } else if ( typeof f . value === 'boolean' ) {
363+ if ( typeof f . value === 'boolean' ) {
367364 type = 'boolean' ;
365+ } else if ( Array . isArray ( f . value ) ) {
366+ type = 'select' ;
368367 } else if ( typeof f . value === 'number' ) {
369368 type = 'number' ;
369+ } else if ( f . operator === 'gt' || f . operator === 'lt' || f . operator === 'gte' || f . operator === 'lte' ) {
370+ type = 'number' ;
371+ } else if ( f . operator === 'in' || f . operator === 'notIn' ) {
372+ type = 'select' ;
370373 }
371374 return {
372375 field : f . field ,
373376 label : fieldToLabel ( f . field ) ,
374377 type,
375- // For 'in' filters , derive options from the value array
378+ // For array values (in/notIn) , derive selectable options
376379 ...( Array . isArray ( f . value ) ? {
377- options : ( f . value as any [ ] ) . map ( v => ( { label : String ( v ) , value : v } ) ) ,
380+ options : ( f . value as any [ ] ) . map ( v => {
381+ if ( v != null && typeof v === 'object' ) {
382+ const obj = v as Record < string , unknown > ;
383+ return { label : String ( obj . name || obj . label || obj . title || v ) , value : v } ;
384+ }
385+ return { label : String ( v ) , value : v } ;
386+ } ) ,
378387 } : { } ) ,
379388 } ;
380389 } ) ;
0 commit comments