All files / atom/pinInput/src/hooks useKeyPress.js

57.14% Statements 12/21
12.5% Branches 1/8
50% Functions 3/6
66.66% Lines 12/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34    1x   1x 5x 5x 5x   5x               5x           5x 5x 5x 5x 5x            
import {useEffect} from 'react'
 
const UNIDENTIFIED_KEYS = ['Unidentified', 'Process']
 
const useKeyPress = (callback, {target, onChange}) => {
  return useEffect(() => {
    const element = target?.current
    Iif (!element) return
 
    const handleKeyDown = event => {
      if (UNIDENTIFIED_KEYS.includes(event.key)) return
      if (event.key.length === 1) {
        event.preventDefault()
      }
      callback(event)
    }
 
    const handleInput = event => {
      if (!event.data) return
      // eslint-disable-next-line n/no-callback-literal
      callback({key: event.data, preventDefault: () => {}})
    }
 
    element.addEventListener('keydown', handleKeyDown)
    element.addEventListener('input', handleInput)
    return () => {
      element.removeEventListener('keydown', handleKeyDown)
      element.removeEventListener('input', handleInput)
    }
  }, [target, callback, onChange]) // eslint-disable-line react-hooks/exhaustive-deps
}
 
export default useKeyPress