@@ -397,8 +397,13 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
397397
398398 const triggerChange = (
399399 newValue : RangeValue < DateType > ,
400- forceInput : boolean = true ,
400+ config : {
401+ source ?: 'open' ;
402+ forceInput ?: boolean ;
403+ } = { } ,
401404 ) => {
405+ const { forceInput = true , source } = config ;
406+
402407 let values = newValue ;
403408 const startValue = getValue ( values , 0 ) ;
404409 let endValue = getValue ( values , 1 ) ;
@@ -438,7 +443,9 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
438443 if ( canTrigger ) {
439444 // Trigger onChange only when value is validate
440445 setInnerValue ( values ) ;
441- triggerOpen ( false , activePickerIndex , true ) ;
446+ if ( source !== 'open' ) {
447+ triggerOpen ( false , activePickerIndex , true ) ;
448+ }
442449
443450 if (
444451 onChange &&
@@ -456,7 +463,9 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
456463 return ;
457464 }
458465
459- triggerOpen ( true , missingValueIndex ) ;
466+ if ( source !== 'open' ) {
467+ triggerOpen ( true , missingValueIndex ) ;
468+ }
460469
461470 // Delay to focus to avoid input blur trigger expired selectedValues
462471 setTimeout ( ( ) => {
@@ -479,7 +488,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
479488 } else if ( activePickerIndex === index ) {
480489 triggerInnerOpen ( newOpen ) ;
481490 if ( ! preventChangeEvent ) {
482- triggerChange ( selectedValue ) ;
491+ triggerChange ( selectedValue , { source : 'open' } ) ;
483492 }
484493 }
485494 } ;
@@ -550,20 +559,18 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
550559 } ) ;
551560
552561 // ============================= Input =============================
553- const getSharedInputHookProps = (
554- index : 0 | 1 ,
555- inputDivRef : React . RefObject < HTMLDivElement > ,
556- resetText : ( ) => void ,
557- ) => ( {
562+ const getSharedInputHookProps = ( index : 0 | 1 , resetText : ( ) => void ) => ( {
558563 blurToCancel : ! ! ( picker === 'date' && showTime ) ,
559564 forwardKeyDown,
560565 onBlur,
561566 isClickOutside : ( target : EventTarget | null ) =>
562567 ! ! (
563568 panelDivRef . current &&
564569 ! panelDivRef . current . contains ( target as Node ) &&
565- inputDivRef . current &&
566- ! inputDivRef . current . contains ( target as Node )
570+ startInputDivRef . current &&
571+ ! startInputDivRef . current . contains ( target as Node ) &&
572+ endInputDivRef . current &&
573+ ! endInputDivRef . current . contains ( target as Node )
567574 ) ,
568575 onFocus : ( e : React . FocusEvent < HTMLInputElement > ) => {
569576 setActivePickerIndex ( index ) ;
@@ -587,15 +594,15 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
587594 startInputProps ,
588595 { focused : startFocused , typing : startTyping } ,
589596 ] = usePickerInput ( {
590- ...getSharedInputHookProps ( 0 , startInputDivRef , resetStartText ) ,
597+ ...getSharedInputHookProps ( 0 , resetStartText ) ,
591598 open : startOpen ,
592599 } ) ;
593600
594601 const [
595602 endInputProps ,
596603 { focused : endFocused , typing : endTyping } ,
597604 ] = usePickerInput ( {
598- ...getSharedInputHookProps ( 1 , endInputDivRef , resetEndText ) ,
605+ ...getSharedInputHookProps ( 1 , resetEndText ) ,
599606 open : endOpen ,
600607 } ) ;
601608
@@ -930,7 +937,7 @@ function InnerRangePicker<DateType>(props: RangePickerProps<DateType>) {
930937 values = updateValues ( values , null , 1 ) ;
931938 }
932939
933- triggerChange ( values , false ) ;
940+ triggerChange ( values , { forceInput : false } ) ;
934941 } }
935942 className = { `${ prefixCls } -clear` }
936943 >
0 commit comments