@@ -43,6 +43,10 @@ export default function useRangeOpen(
43
43
] {
44
44
const [ firstTimeOpen , setFirstTimeOpen ] = React . useState ( false ) ;
45
45
46
+ const [ afferentOpen , setAfferentOpen ] = useMergedState ( defaultOpen || false , {
47
+ value : open ,
48
+ } ) ;
49
+
46
50
const [ mergedOpen , setMergedOpen ] = useMergedState ( defaultOpen || false , {
47
51
value : open ,
48
52
onChange : ( nextOpen ) => {
@@ -62,6 +66,8 @@ export default function useRangeOpen(
62
66
}
63
67
} , [ mergedOpen ] ) ;
64
68
69
+ const queryNextIndex = ( index : number ) => ( index === 0 ? 1 : 0 ) ;
70
+
65
71
const triggerOpen = useEvent ( ( nextOpen : boolean , index : 0 | 1 | false , source : SourceType ) => {
66
72
if ( index === false ) {
67
73
// Only when `nextOpen` is false and no need open to next index
@@ -70,7 +76,7 @@ export default function useRangeOpen(
70
76
setMergedActivePickerIndex ( index ) ;
71
77
setMergedOpen ( nextOpen ) ;
72
78
73
- const nextIndex = index === 0 ? 1 : 0 ;
79
+ const nextIndex = queryNextIndex ( index ) ;
74
80
75
81
// Record next open index
76
82
if (
@@ -87,23 +93,27 @@ export default function useRangeOpen(
87
93
}
88
94
}
89
95
} else if ( source === 'confirm' || ( source === 'blur' && changeOnBlur ) ) {
90
- if ( nextActiveIndex !== null ) {
96
+ const customNextActiveIndex = afferentOpen ? queryNextIndex ( index ) : nextActiveIndex ;
97
+
98
+ if ( customNextActiveIndex !== null ) {
91
99
setFirstTimeOpen ( false ) ;
92
- setMergedActivePickerIndex ( nextActiveIndex ) ;
100
+ setMergedActivePickerIndex ( customNextActiveIndex ) ;
93
101
}
102
+
94
103
setNextActiveIndex ( null ) ;
95
104
96
105
// Focus back
97
- if ( nextActiveIndex !== null && ! disabled [ nextActiveIndex ] ) {
106
+ if ( customNextActiveIndex !== null && ! disabled [ customNextActiveIndex ] ) {
98
107
raf ( ( ) => {
99
- const ref = [ startInputRef , endInputRef ] [ nextActiveIndex ] ;
108
+ const ref = [ startInputRef , endInputRef ] [ customNextActiveIndex ] ;
100
109
ref . current ?. focus ( ) ;
101
110
} ) ;
102
111
} else {
103
112
setMergedOpen ( false ) ;
104
113
}
105
114
} else {
106
115
setMergedOpen ( false ) ;
116
+ setAfferentOpen ( false ) ;
107
117
}
108
118
} ) ;
109
119
0 commit comments