abcd / src /hooks /useKeyboard.ts
docs4you's picture
Upload 41 files
84121fd verified
import { useEffect } from 'react'
interface KeyboardHandlers {
onArrowUp?: () => void
onArrowDown?: () => void
onArrowLeft?: () => void
onArrowRight?: () => void
onEnter?: () => void
onEscape?: () => void
onBackspace?: () => void
}
export function useKeyboard(handlers: KeyboardHandlers, enabled: boolean = true) {
useEffect(() => {
if (!enabled) return
const handleKeyDown = (event: KeyboardEvent) => {
switch (event.key) {
case 'ArrowUp':
event.preventDefault()
handlers.onArrowUp?.()
break
case 'ArrowDown':
event.preventDefault()
handlers.onArrowDown?.()
break
case 'ArrowLeft':
event.preventDefault()
handlers.onArrowLeft?.()
break
case 'ArrowRight':
event.preventDefault()
handlers.onArrowRight?.()
break
case 'Enter':
event.preventDefault()
handlers.onEnter?.()
break
case 'Escape':
event.preventDefault()
handlers.onEscape?.()
break
case 'Backspace':
event.preventDefault()
handlers.onBackspace?.()
break
}
}
document.addEventListener('keydown', handleKeyDown)
return () => document.removeEventListener('keydown', handleKeyDown)
}, [handlers, enabled])
}