Support for Keyboard and Accesibility

This commit is contained in:
Belen Curcio
2017-10-12 13:18:07 -03:00
parent 21122016da
commit 798acaf320
2 changed files with 19 additions and 3 deletions
+16 -1
View File
@@ -14,6 +14,20 @@ class Dropdown extends React.Component {
isOpen: false
};
}
handleOptionKeyDown = (value, e) => {
const code = e.which;
// 13 = Return, 32 = Space
if ((code === 13) || (code === 32)) {
e.preventDefault();
this.setValue(value);
}
}
handleOptionClick = (value) => {
this.setValue(value);
}
setValue = (value) => {
if (this.props.onChange) {
@@ -73,7 +87,8 @@ class Dropdown extends React.Component {
.map((child) =>
React.cloneElement(child, {
key: child.props.value,
onClick: () => this.setValue(child.props.value, child.props.label)
onClick: () => this.handleOptionClick(child.props.value),
onKeyDown: (e) => this.handleOptionKeyDown(child.props.value, e)
}))}
</ul>
</div>
+3 -2
View File
@@ -3,8 +3,8 @@ import PropTypes from 'prop-types';
import styles from './Option.css';
import cn from 'classnames';
const Option = ({className, label = '', onClick}) => (
<li className={cn(styles.option, className)} onClick={onClick} role="menuitem" tabIndex="0">
const Option = ({className, label = '', onClick, onKeyDown}) => (
<li className={cn(styles.option, className)} onClick={onClick} onKeyDown={onKeyDown} role="menuitem" tabIndex="0">
{label}
</li>
);
@@ -13,6 +13,7 @@ Option.propTypes = {
className: PropTypes.string,
label: PropTypes.string,
onClick: PropTypes.func,
onKeyDown: PropTypes.func,
value: PropTypes.oneOfType([
PropTypes.number,
PropTypes.string,