@codeurs/react-simple-wheel-picker
Version:
- This package is simple and flexible wheel picker for React - This package move like same as native applications picker - This package support accessibility
59 lines • 2.23 kB
JavaScript
;
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var useScrollAnimation_1 = require("./useScrollAnimation");
var react_1 = require("react");
var useHandleKeyboard = function (itemHeight) {
var _a = react_1.useState({}), pressedKeys = _a[0], setPressedKeys = _a[1];
var onKeyUp = react_1.useCallback(function (e) {
var code = e.keyCode;
if (pressedKeys[code]) {
e.persist();
setPressedKeys(function (prev) {
var _a;
return (__assign(__assign({}, prev), (_a = {}, _a[code] = false, _a)));
});
}
}, [pressedKeys]);
var onKeyPress = react_1.useCallback(function (e) {
var target = e.currentTarget;
var code = e.keyCode;
if (!pressedKeys[code] && code === 16) {
e.persist();
setPressedKeys(function (prev) {
var _a;
return (__assign(__assign({}, prev), (_a = {}, _a[e.keyCode] = true, _a)));
});
}
if ((!pressedKeys[16] && code === 9) || code === 40) {
e.preventDefault();
var animate = useScrollAnimation_1.setScrollAnimation(target, target.scrollTop, itemHeight);
requestAnimationFrame(animate);
}
if ((pressedKeys[16] && code === 9) || code === 38) {
e.preventDefault();
var animate = useScrollAnimation_1.setScrollAnimation(target, target.scrollTop, itemHeight * -1);
requestAnimationFrame(animate);
}
if (code === 32 || code === 27) {
e.preventDefault();
target.blur();
}
}, [itemHeight, pressedKeys]);
return {
onKeyUp: onKeyUp,
onKeyPress: onKeyPress
};
};
exports.default = useHandleKeyboard;
//# sourceMappingURL=useHandleKeyboard.js.map