UNPKG

@modern-kit/react

Version:
43 lines (40 loc) 1.07 kB
import { usePreservedCallback } from '../usePreservedCallback/index.mjs'; import { useRef, useEffect } from 'react'; import { isFunction } from '@modern-kit/utils'; function useKeyDown({ enabled = true, keyDownCallbackMap = {}, allKeyDownCallback }) { const targetRef = useRef(null); const onKeyDown = usePreservedCallback((event) => { event.stopPropagation(); if (allKeyDownCallback) { allKeyDownCallback(event); return; } const key = event.key; const keyDownCallback = keyDownCallbackMap[key]; if (isFunction(keyDownCallback)) { keyDownCallback(event); } }); useEffect(() => { if (!enabled) return; if (!targetRef.current) { targetRef.current = window; } const targetElement = targetRef.current; targetElement.addEventListener( "keydown", onKeyDown ); return () => targetElement.removeEventListener( "keydown", onKeyDown ); }, [enabled, onKeyDown]); return { ref: targetRef }; } export { useKeyDown }; //# sourceMappingURL=index.mjs.map