react-use/src/useKeyboardJs.ts
Robert Hurst 8410bb042f fix: repair useKeyboardJs hook
Fixed the importing of the KeyboardJS library with backward compatibility. Updated how bindings are set to prevent KeyboardJS from calling handlers repeatedly while holding keys.
2020-06-08 10:57:51 -07:00

30 lines
739 B
TypeScript

import { useEffect, useState } from 'react';
import useMount from './useMount';
const useKeyboardJs = (combination: string | string[]) => {
const [state, set] = useState<[boolean, null | KeyboardEvent]>([false, null]);
const [keyboardJs, setKeyboardJs] = useState<any>(null);
useMount(() => {
import('keyboardjs').then(k => setKeyboardJs(k.default || k));
});
useEffect(() => {
if (!keyboardJs) {
return;
}
const down = event => set([true, event]);
const up = event => set([false, event]);
keyboardJs.bind(combination, down, up, true);
return () => {
keyboardJs.unbind(combination, down, up);
};
}, [combination, keyboardJs]);
return state;
};
export default useKeyboardJs;