@@ -29,12 +29,20 @@ function filterOptions(options = [], filter, exclude = []) {
29
29
// map a key press to an action
30
30
function getActionFromKey ( event , menuOpen ) {
31
31
const { key, altKey, ctrlKey, metaKey } = event ;
32
- const openKeys = [ 'ArrowDown' , 'ArrowUp' , 'Enter' , ' ' , 'Home' , 'End' ] ; // all keys that will open the combo
32
+ const openKeys = [ 'ArrowDown' , 'ArrowUp' , 'Enter' , ' ' ] ; // all keys that will do the default open action
33
33
// handle opening when closed
34
34
if ( ! menuOpen && openKeys . includes ( key ) ) {
35
35
return SelectActions . Open ;
36
36
}
37
37
38
+ // home and end move the selected option when open or closed
39
+ if ( key === 'Home' ) {
40
+ return SelectActions . First ;
41
+ }
42
+ if ( key === 'End' ) {
43
+ return SelectActions . Last ;
44
+ }
45
+
38
46
// handle typing characters when open or closed
39
47
if ( key === 'Backspace' || key === 'Clear' || ( key . length === 1 && key !== ' ' && ! altKey && ! ctrlKey && ! metaKey ) ) {
40
48
return SelectActions . Type ;
@@ -45,18 +53,12 @@ function getActionFromKey(event, menuOpen) {
45
53
if ( key === 'ArrowUp' && altKey ) {
46
54
return SelectActions . CloseSelect ;
47
55
}
48
- if ( key === 'ArrowDown' && ! altKey ) {
56
+ else if ( key === 'ArrowDown' && ! altKey ) {
49
57
return SelectActions . Next ;
50
58
}
51
59
else if ( key === 'ArrowUp' ) {
52
60
return SelectActions . Previous ;
53
61
}
54
- else if ( key === 'Home' ) {
55
- return SelectActions . First ;
56
- }
57
- else if ( key === 'End' ) {
58
- return SelectActions . Last ;
59
- }
60
62
else if ( key === 'PageUp' ) {
61
63
return SelectActions . PageUp ;
62
64
}
@@ -236,27 +238,29 @@ Select.prototype.onComboKeyDown = function(event) {
236
238
const action = getActionFromKey ( event , this . open ) ;
237
239
238
240
switch ( action ) {
239
- case SelectActions . Next :
240
- case SelectActions . Last :
241
- case SelectActions . First :
242
- case SelectActions . Previous :
243
- case SelectActions . PageUp :
244
- case SelectActions . PageDown :
245
- event . preventDefault ( ) ;
246
- return this . onOptionChange ( getUpdatedIndex ( this . activeIndex , max , action ) ) ;
247
- case SelectActions . CloseSelect :
248
- event . preventDefault ( ) ;
249
- this . selectOption ( this . activeIndex ) ;
250
- // intentional fallthrough
251
- case SelectActions . Close :
252
- event . preventDefault ( ) ;
253
- return this . updateMenuState ( false ) ;
254
- case SelectActions . Type :
255
- return this . onComboType ( key ) ;
256
- case SelectActions . Open :
257
- event . preventDefault ( ) ;
258
- return this . updateMenuState ( true ) ;
259
- }
241
+ case SelectActions . Last :
242
+ case SelectActions . First :
243
+ this . updateMenuState ( true ) ;
244
+ // intentional fallthrough
245
+ case SelectActions . Next :
246
+ case SelectActions . Previous :
247
+ case SelectActions . PageUp :
248
+ case SelectActions . PageDown :
249
+ event . preventDefault ( ) ;
250
+ return this . onOptionChange ( getUpdatedIndex ( this . activeIndex , max , action ) ) ;
251
+ case SelectActions . CloseSelect :
252
+ event . preventDefault ( ) ;
253
+ this . selectOption ( this . activeIndex ) ;
254
+ // intentional fallthrough
255
+ case SelectActions . Close :
256
+ event . preventDefault ( ) ;
257
+ return this . updateMenuState ( false ) ;
258
+ case SelectActions . Type :
259
+ return this . onComboType ( key ) ;
260
+ case SelectActions . Open :
261
+ event . preventDefault ( ) ;
262
+ return this . updateMenuState ( true ) ;
263
+ }
260
264
}
261
265
262
266
Select . prototype . onComboType = function ( letter ) {
0 commit comments