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) {
} 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 => {
const index = items.findIndex(item => {
return (item.value === value);
});
- let element;
+ let element = null;
switch(e.key) {
case 'Escape':
this.handleClick(e);
break;
case 'ArrowDown':
- element = this.node.childNodes[index + 1];
- if (element) {
- element.focus();
- this.props.onChange(element.getAttribute('data-index'));
- }
+ element = this.node.childNodes[index + 1] || this.node.firstChild;
break;
case 'ArrowUp':
- element = this.node.childNodes[index - 1];
- if (element) {
- element.focus();
- this.props.onChange(element.getAttribute('data-index'));
- }
+ element = this.node.childNodes[index - 1] || this.node.lastChild;
break;
case 'Tab':
if (e.shiftKey) {
} else {
element = this.node.childNodes[index + 1] || this.node.firstChild;
}
- if (element) {
- element.focus();
- this.props.onChange(element.getAttribute('data-index'));
- e.preventDefault();
- e.stopPropagation();
- }
break;
case 'Home':
element = this.node.firstChild;
- if (element) {
- element.focus();
- this.props.onChange(element.getAttribute('data-index'));
- }
break;
case 'End':
element = this.node.lastChild;
- if (element) {
- element.focus();
- this.props.onChange(element.getAttribute('data-index'));
- }
break;
}
+
+ if (element) {
+ element.focus();
+ this.props.onChange(element.getAttribute('data-index'));
+ e.preventDefault();
+ e.stopPropagation();
+ }
}
handleClick = e => {