@talend/react-components
Version:
Set of react components.
101 lines (100 loc) • 2.14 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = useInputPickerHandlers;
var _react = require("react");
function useInputPickerHandlers({
disabled = false,
handleBlur,
handleChange,
handleKeyDown
}) {
const [showPicker, setPickerVisibility] = (0, _react.useState)(false);
const [picked, setPicked] = (0, _react.useState)(false);
function openPicker() {
if (!disabled) {
setPickerVisibility(true);
}
}
function closePicker() {
setPickerVisibility(false);
}
function onBlur(event) {
setPicked(false);
closePicker();
if (handleBlur) {
handleBlur(event);
}
}
function onChange(event, payload, inputRef) {
if (handleChange) {
handleChange(event, payload);
}
if (['PICKER', 'END_PICKER'].includes(payload.origin)) {
inputRef.focus();
setPicked(true);
closePicker();
}
if (['INPUT'].includes(payload.origin)) {
if (!payload.errorMessage) {
inputRef.focus();
closePicker();
} else {
openPicker();
}
}
}
function onClick() {
openPicker();
}
function onFocus() {
if (!picked) {
openPicker();
}
}
function onKeyDown(event, inputRef) {
switch (event.key) {
case 'Esc':
case 'Escape':
inputRef.focus();
closePicker();
break;
case 'Down':
case 'ArrowDown':
if (event.target !== inputRef) {
return;
}
if (showPicker) {
if (handleKeyDown) {
handleKeyDown();
}
} else {
openPicker();
}
break;
default:
break;
}
}
function getPopperPlacement(input) {
if (input) {
const inputDimensions = input.getBoundingClientRect();
if (inputDimensions.left > window.innerWidth / 2) {
return 'bottom-end';
}
}
return 'bottom-start';
}
return {
showPicker,
picked,
onBlur,
onChange,
onClick,
onFocus,
onKeyDown,
getPopperPlacement
};
}
//# sourceMappingURL=useInputPickerHandlers.js.map