in src/accordion/accordion.tsx [65:103]
handleKeyDown(e: KeyboardEvent) {
if (this.props.disabled) {
return;
}
const itemRefs = this.itemRefs;
const HOME = 36;
const END = 35;
const ARROW_UP = 38;
const ARROW_DOWN = 40;
if (e.keyCode === HOME) {
e.preventDefault();
const firstItem = itemRefs[0];
firstItem.current && firstItem.current.focus();
}
if (e.keyCode === END) {
e.preventDefault();
const lastItem = itemRefs[itemRefs.length - 1];
lastItem.current && lastItem.current.focus();
}
if (e.keyCode === ARROW_UP) {
const activeItemIdx = itemRefs.findIndex((item) => item.current === document.activeElement);
if (activeItemIdx >= 0) {
e.preventDefault();
const prevItem = itemRefs[activeItemIdx - 1];
prevItem.current && prevItem.current.focus();
}
}
if (e.keyCode === ARROW_DOWN) {
const activeItemIdx = itemRefs.findIndex((item) => item.current === document.activeElement);
if (activeItemIdx >= 0 && activeItemIdx < itemRefs.length - 1) {
e.preventDefault();
const nextItem = itemRefs[activeItemIdx + 1];
nextItem.current && nextItem.current.focus();
}
}
}