Make dropdown component focusable and force focus after selecting an item

pull/2834/head
Alex P 2018-02-21 11:26:39 -08:00
parent e405b62c39
commit 96ff9ecd10
1 changed files with 7 additions and 1 deletions

View File

@ -23,6 +23,7 @@ class Dropdown extends Component {
menuWidth: '100%', menuWidth: '100%',
useAutoComplete: false, useAutoComplete: false,
disabled: false, disabled: false,
tabIndex: 0,
} }
handleClickOutside = () => { handleClickOutside = () => {
@ -44,6 +45,7 @@ class Dropdown extends Component {
handleSelection = item => () => { handleSelection = item => () => {
this.toggleMenu() this.toggleMenu()
this.props.onChoose(item) this.props.onChoose(item)
this.dropdownRef.focus()
} }
handleHighlight = itemIndex => () => { handleHighlight = itemIndex => () => {
@ -215,6 +217,7 @@ class Dropdown extends Component {
toggleStyle, toggleStyle,
useAutoComplete, useAutoComplete,
disabled, disabled,
tabIndex,
} = this.props } = this.props
const {isOpen, searchTerm, filteredItems} = this.state const {isOpen, searchTerm, filteredItems} = this.state
const menuItems = useAutoComplete ? filteredItems : items const menuItems = useAutoComplete ? filteredItems : items
@ -227,6 +230,8 @@ class Dropdown extends Component {
open: isOpen, open: isOpen,
[className]: className, [className]: className,
})} })}
tabIndex={tabIndex}
ref={r => (this.dropdownRef = r)}
> >
{useAutoComplete && isOpen {useAutoComplete && isOpen
? <div ? <div
@ -274,7 +279,7 @@ class Dropdown extends Component {
} }
} }
const {arrayOf, bool, shape, string, func} = PropTypes const {arrayOf, bool, number, shape, string, func} = PropTypes
Dropdown.propTypes = { Dropdown.propTypes = {
actions: arrayOf( actions: arrayOf(
@ -306,6 +311,7 @@ Dropdown.propTypes = {
useAutoComplete: bool, useAutoComplete: bool,
toggleStyle: shape(), toggleStyle: shape(),
disabled: bool, disabled: bool,
tabIndex: number,
} }
export default OnClickOutside(Dropdown) export default OnClickOutside(Dropdown)