Fix and refactor keyboard navigation in dropdown menus (#13528)
Fixes #13527 - Fixes caught keyboard events being needlessly propagated - Let up/down arrows wrap around like the tab key does - Refactor common code
This commit is contained in:
		
					parent
					
						
							
								ff32a25ee3
							
						
					
				
			
			
				commit
				
					
						80182eda62
					
				
			
		
					 2 changed files with 19 additions and 45 deletions
				
			
		|  | @ -68,20 +68,14 @@ class DropdownMenu extends React.PureComponent { | |||
|   handleKeyDown = e => { | ||||
|     const items = Array.from(this.node.getElementsByTagName('a')); | ||||
|     const index = items.indexOf(document.activeElement); | ||||
|     let element; | ||||
|     let element = null; | ||||
| 
 | ||||
|     switch(e.key) { | ||||
|     case 'ArrowDown': | ||||
|       element = items[index+1]; | ||||
|       if (element) { | ||||
|         element.focus(); | ||||
|       } | ||||
|       element = items[index+1] || items[0]; | ||||
|       break; | ||||
|     case 'ArrowUp': | ||||
|       element = items[index-1]; | ||||
|       if (element) { | ||||
|         element.focus(); | ||||
|       } | ||||
|       element = items[index-1] || items[items.length-1]; | ||||
|       break; | ||||
|     case 'Tab': | ||||
|       if (e.shiftKey) { | ||||
|  | @ -89,28 +83,23 @@ class DropdownMenu extends React.PureComponent { | |||
|       } else { | ||||
|         element = items[index+1] || items[0]; | ||||
|       } | ||||
|       if (element) { | ||||
|         element.focus(); | ||||
|         e.preventDefault(); | ||||
|         e.stopPropagation(); | ||||
|       } | ||||
|       break; | ||||
|     case 'Home': | ||||
|       element = items[0]; | ||||
|       if (element) { | ||||
|         element.focus(); | ||||
|       } | ||||
|       break; | ||||
|     case 'End': | ||||
|       element = items[items.length-1]; | ||||
|       if (element) { | ||||
|         element.focus(); | ||||
|       } | ||||
|       break; | ||||
|     case 'Escape': | ||||
|       this.props.onClose(); | ||||
|       break; | ||||
|     } | ||||
| 
 | ||||
|     if (element) { | ||||
|       element.focus(); | ||||
|       e.preventDefault(); | ||||
|       e.stopPropagation(); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   handleItemKeyPress = e => { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue