Sha256: 261c15cc6517dd274ec28009d31acafc8f8f3504c83b7c3ea3a2a65f9e9212a1

Contents?: true

Size: 1.22 KB

Versions: 1

Compression:

Stored size: 1.22 KB

Contents

import React, { useContext } from "react";
import DropdownContext from "../context";


export const useHandleOnKeyDown = () => {

const {
  focusedOptionIndex,
  filteredOptions,
  setFocusedOptionIndex,
  handleOptionClick,
  setIsDropDownClosed,
  handleBackspace,
  selected
}= useContext(DropdownContext)

  return (e: React.KeyboardEvent) => {
    switch (e.key) {
    case "Backspace":
    case "Delete":
      handleBackspace();
      break;
    case "ArrowDown": {
      e.preventDefault();
      setIsDropDownClosed(false);
      const nextIndex = (focusedOptionIndex + 1) % filteredOptions.length;
      setFocusedOptionIndex(nextIndex);
      break;
    }
    case "ArrowUp": {
      e.preventDefault();
      const nextIndexUp =
        (focusedOptionIndex - 1 + filteredOptions.length) %
        filteredOptions.length;
      setFocusedOptionIndex(nextIndexUp);
      break;
    }
    case "Enter":
      if (focusedOptionIndex !== -1) {
        e.preventDefault();
        handleOptionClick(filteredOptions[focusedOptionIndex]);
        setFocusedOptionIndex(-1)
      }
      break;
    default:
        if (selected && selected.label) {
          e.preventDefault();
          handleBackspace();
        }
        break;
  }
}
};

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
playbook_ui-13.24.0.pre.alpha.PBNTR261NewKitDropdown2681 app/pb_kits/playbook/pb_dropdown/hooks/useHandleOnKeydown.tsx