react-native-external-keyboard
Version:
Toolkit for improving physical keyboard support in React Native
62 lines (61 loc) • 2.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useKeyboardPress = exports.ANDROID_TRIGGER_CODES = exports.ANDROID_SPACE_KEY_CODE = exports.ANDROID_ENTER_CODE = exports.ANDROID_DPAD_CENTER_CODE = void 0;
var _react = require("react");
const ANDROID_SPACE_KEY_CODE = exports.ANDROID_SPACE_KEY_CODE = 62;
const ANDROID_DPAD_CENTER_CODE = exports.ANDROID_DPAD_CENTER_CODE = 23;
const ANDROID_ENTER_CODE = exports.ANDROID_ENTER_CODE = 66;
const ANDROID_TRIGGER_CODES = exports.ANDROID_TRIGGER_CODES = [ANDROID_SPACE_KEY_CODE, ANDROID_DPAD_CENTER_CODE, ANDROID_ENTER_CODE];
const MILLISECOND_THRESHOLD = 20;
const useKeyboardPress = ({
onKeyUpPress,
onKeyDownPress,
onPressIn,
onPressOut,
onPress,
onLongPress,
triggerCodes = ANDROID_TRIGGER_CODES
}) => {
const thresholdTime = (0, _react.useRef)(0);
const onKeyUpPressHandler = (0, _react.useCallback)(e => {
const {
nativeEvent: {
keyCode,
isLongPress
}
} = e;
onPressOut === null || onPressOut === void 0 || onPressOut(e);
onKeyUpPress === null || onKeyUpPress === void 0 || onKeyUpPress(e);
if (triggerCodes.includes(keyCode)) {
if (isLongPress) {
thresholdTime.current = e === null || e === void 0 ? void 0 : e.timeStamp;
onLongPress === null || onLongPress === void 0 || onLongPress({});
}
}
}, [onPressOut, onKeyUpPress, triggerCodes, onLongPress]);
const onKeyDownPressHandler = (0, _react.useMemo)(() => {
if (!onPressIn) return onKeyDownPress;
return e => {
onKeyDownPress === null || onKeyDownPress === void 0 || onKeyDownPress(e);
if (triggerCodes.includes(e.nativeEvent.keyCode)) {
onPressIn === null || onPressIn === void 0 || onPressIn(e);
}
};
}, [onKeyDownPress, onPressIn, triggerCodes]);
const onPressHandler = (0, _react.useCallback)(event => {
const pressThreshold = ((event === null || event === void 0 ? void 0 : event.timeStamp) ?? 0) - thresholdTime.current;
if (pressThreshold > MILLISECOND_THRESHOLD) {
onPress === null || onPress === void 0 || onPress(event);
}
}, [onPress]);
const hasHandler = onPressOut || onKeyUpPress || onLongPress || onPress;
return {
onKeyUpPressHandler: hasHandler && onKeyUpPressHandler,
onKeyDownPressHandler,
onPressHandler: onPress && onPressHandler
};
};
exports.useKeyboardPress = useKeyboardPress;
//# sourceMappingURL=useKeyboardPress.android.js.map