@@ -599,6 +599,7 @@ export type LookupProps<
599599 onBlur ?: ( ) => void ;
600600 onFocus ?: ( ) => void ;
601601 onSelect ?: ( entry : LookupEntry | null ) => void ;
602+ onValueChange ?: ( value : string | null , prevValue ?: string | null ) => void ;
602603 onComplete ?: ( cancel ?: boolean ) => void ;
603604} & Omit <
604605 InputHTMLAttributes < HTMLInputElement > ,
@@ -614,6 +615,8 @@ export const Lookup = createFC(
614615 ) => {
615616 const {
616617 id : id_ ,
618+ value : value_ ,
619+ defaultValue,
617620 selected : selected_ ,
618621 defaultSelected,
619622 opened : opened_ ,
@@ -639,6 +642,7 @@ export const Lookup = createFC(
639642 onSearchTextChange : onSearchTextChange_ ,
640643 onLookupRequest : onLookupRequest_ ,
641644 onBlur : onBlur_ ,
645+ onValueChange,
642646 onComplete,
643647 elementRef : elementRef_ ,
644648 inputRef : inputRef_ ,
@@ -648,9 +652,14 @@ export const Lookup = createFC(
648652 } = props ;
649653
650654 const id = useFormElementId ( id_ , 'lookup' ) ;
655+
656+ const [ value , setValue ] = useControlledValue < string | null > (
657+ value_ ,
658+ defaultValue ?? null
659+ ) ;
651660 const [ selected , setSelected ] = useControlledValue < LookupEntry | null > (
652661 selected_ ,
653- defaultSelected ?? null
662+ defaultSelected ?? data ?. find ( ( entry ) => entry . value === value ) ?? null
654663 ) ;
655664 const [ opened , setOpened ] = useControlledValue (
656665 opened_ ,
@@ -697,9 +706,16 @@ export const Lookup = createFC(
697706 onLookupRequest_ ?.( searchText ) ;
698707 } ) ;
699708
709+ const onSelect = useEventCallback ( ( selected : LookupEntry | null ) => {
710+ const currValue = selected ?. value ?? null ;
711+ setValue ( currValue ) ;
712+ setSelected ( selected ) ;
713+ onValueChange ?.( currValue , value ) ;
714+ onSelect_ ?.( selected ) ;
715+ } ) ;
716+
700717 const onResetSelection = useEventCallback ( ( ) => {
701- setSelected ( null ) ;
702- onSelect_ ?.( null ) ;
718+ onSelect ( null ) ;
703719 onSearchTextChange ( '' ) ;
704720 onLookupRequest ( '' ) ;
705721 setTimeout ( ( ) => {
@@ -711,9 +727,8 @@ export const Lookup = createFC(
711727 const onLookupItemSelect = useEventCallback (
712728 ( selected : LookupEntry | null ) => {
713729 if ( selected ) {
714- setSelected ( selected ) ;
730+ onSelect ( selected ) ;
715731 setOpened ( false ) ;
716- onSelect_ ?.( selected ) ;
717732 setTimeout ( ( ) => {
718733 const pillElem = selectionElRef . current ?. querySelector ( 'a' ) ;
719734 pillElem ?. focus ( ) ;
0 commit comments