handleKeyDown()

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();
      }
    }
  }