@@ -28,6 +28,7 @@ import {
28
28
keyUp ,
29
29
selectItem ,
30
30
toggleOpen ,
31
+ waitFakeTimer ,
31
32
} from './utils/common' ;
32
33
33
34
describe ( 'Select.Basic' , ( ) => {
@@ -2367,4 +2368,53 @@ describe('Select.Basic', () => {
2367
2368
expect ( element [ 0 ] ) . not . toHaveClass ( 'rc-select-item-option-disabled' ) ;
2368
2369
expect ( element [ 1 ] ) . toHaveClass ( 'rc-select-item-option-disabled' ) ;
2369
2370
} ) ;
2371
+
2372
+ it ( 'release Enter key lock after customize input calls blur()' , async ( ) => {
2373
+ let inputElem : HTMLInputElement | null = null ;
2374
+ const onBlur = jest . fn ( ) ;
2375
+ const Demo : React . FC = ( ) => {
2376
+ const ref = React . useRef < HTMLInputElement > ( null ) ;
2377
+ const onSelect = ( ) => {
2378
+ ref . current ! . blur ( ) ;
2379
+ fireEvent . blur ( ref . current ) ;
2380
+ } ;
2381
+ const getInputElement = ( ) => {
2382
+ return < input ref = { ref } onBlur = { onBlur } /> ;
2383
+ } ;
2384
+ return (
2385
+ < Select
2386
+ options = { [ { value : 'aa' } , { value : 'bb' } ] }
2387
+ onSelect = { onSelect }
2388
+ mode = "combobox"
2389
+ getInputElement = { getInputElement }
2390
+ />
2391
+ ) ;
2392
+ } ;
2393
+ const { container } = render ( < Demo /> ) ;
2394
+ inputElem = container . querySelector ( 'input' ) ;
2395
+ toggleOpen ( container ) ;
2396
+ await waitFakeTimer ( ) ;
2397
+ expectOpen ( container , true ) ;
2398
+
2399
+ keyDown ( inputElem ! , 40 ) ;
2400
+ keyUp ( inputElem ! , 40 ) ;
2401
+ keyDown ( inputElem ! , 13 ) ;
2402
+
2403
+ await waitFakeTimer ( ) ;
2404
+ expect ( onBlur ) . toHaveBeenCalledTimes ( 1 ) ;
2405
+ expectOpen ( container , false ) ;
2406
+ expect ( inputElem . value ) . toEqual ( 'aa' ) ;
2407
+
2408
+ toggleOpen ( container ) ;
2409
+ await waitFakeTimer ( ) ;
2410
+ expectOpen ( container , true ) ;
2411
+
2412
+ keyDown ( inputElem ! , 40 ) ;
2413
+ keyUp ( inputElem ! , 40 ) ;
2414
+ keyDown ( inputElem ! , 13 ) ;
2415
+
2416
+ await waitFakeTimer ( ) ;
2417
+ expect ( onBlur ) . toHaveBeenCalledTimes ( 2 ) ;
2418
+ expect ( inputElem . value ) . toEqual ( 'bb' ) ;
2419
+ } ) ;
2370
2420
} ) ;
0 commit comments