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
|