File tree Expand file tree Collapse file tree 2 files changed +18
-2
lines changed Expand file tree Collapse file tree 2 files changed +18
-2
lines changed Original file line number Diff line number Diff line change @@ -135,7 +135,7 @@ const OptionList: React.RefForwardingComponent<
135
135
* `setActive` function will call root accessibility state update which makes re-render.
136
136
* So we need to delay to let Input component trigger onChange first.
137
137
*/
138
- setTimeout ( ( ) => {
138
+ const timeoutId = setTimeout ( ( ) => {
139
139
if ( ! multiple && open && values . size === 1 ) {
140
140
const value : RawValueType = Array . from ( values ) [ 0 ] ;
141
141
const index = memoFlattenOptions . findIndex (
@@ -145,6 +145,8 @@ const OptionList: React.RefForwardingComponent<
145
145
scrollIntoView ( index ) ;
146
146
}
147
147
} ) ;
148
+
149
+ return ( ) => clearTimeout ( timeoutId ) ;
148
150
} , [ open ] ) ;
149
151
150
152
// ========================== Values ==========================
Original file line number Diff line number Diff line change @@ -780,19 +780,33 @@ export default function generateSelector<
780
780
}
781
781
} ;
782
782
783
+ const activeTimeoutIds : number [ ] = [ ] ;
784
+ React . useEffect ( ( ) => ( ) => {
785
+ activeTimeoutIds . forEach ( timeoutId => clearTimeout ( timeoutId ) ) ;
786
+ activeTimeoutIds . splice ( 0 , activeTimeoutIds . length ) ;
787
+ } , [ ] ) ;
788
+
783
789
const onInternalMouseDown : React . MouseEventHandler < HTMLDivElement > = ( event , ...restArgs ) => {
784
790
const { target } = event ;
785
791
const popupElement : HTMLDivElement =
786
792
triggerRef . current && triggerRef . current . getPopupElement ( ) ;
787
793
788
794
// We should give focus back to selector if clicked item is not focusable
789
795
if ( popupElement && popupElement . contains ( target as HTMLElement ) ) {
790
- setTimeout ( ( ) => {
796
+ const timeoutId = setTimeout ( ( ) => {
797
+ const index = activeTimeoutIds . indexOf ( timeoutId ) ;
798
+ if ( index !== - 1 ) {
799
+ activeTimeoutIds . splice ( index , 1 ) ;
800
+ }
801
+
791
802
cancelSetMockFocused ( ) ;
803
+
792
804
if ( ! popupElement . contains ( document . activeElement ) ) {
793
805
selectorRef . current . focus ( ) ;
794
806
}
795
807
} ) ;
808
+
809
+ activeTimeoutIds . push ( timeoutId ) ;
796
810
}
797
811
798
812
if ( onMouseDown ) {
You can’t perform that action at this time.
0 commit comments