rsuite
Version:
A suite of react components
63 lines (60 loc) • 1.69 kB
JavaScript
'use client';
;
exports.__esModule = true;
exports.default = void 0;
exports.useKeyboardInputEvent = useKeyboardInputEvent;
function useKeyboardInputEvent({
onSegmentChange,
onSegmentValueChange,
onSegmentValueChangeWithNumericKeys,
onSegmentValueRemove,
onAmPmToggle,
onKeyDown
}) {
return event => {
const key = event.key;
switch (key) {
case 'ArrowRight':
case 'ArrowLeft':
onSegmentChange?.(event);
event.preventDefault();
break;
case 'ArrowUp':
case 'ArrowDown':
onSegmentValueChange?.(event);
event.preventDefault();
break;
case 'Backspace':
onSegmentValueRemove?.(event);
event.preventDefault();
break;
case key.match(/\d/)?.input:
// Allow numeric keys to be entered
onSegmentValueChangeWithNumericKeys?.(event);
event.preventDefault();
break;
case 'a':
case 'p':
case 'A':
case 'P':
// Determine whether the Ctrl or Command key is pressed, does not affect user copy and paste
if (event.ctrlKey || event.metaKey) {
break;
}
// Handle AM/PM toggle with 'a' or 'p' keys
onAmPmToggle?.(event);
event.preventDefault();
break;
case key.match(/[a-z]/)?.[0]:
// Determine whether the Ctrl or Command key is pressed, does not affect user copy and paste
if (event.ctrlKey || event.metaKey) {
break;
}
// Prevent letters from being entered
event.preventDefault();
break;
}
onKeyDown?.(event);
};
}
var _default = exports.default = useKeyboardInputEvent;