@ozen-ui/kit
Version:
React component library
99 lines (98 loc) • 4.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useAutocompleteBaseInputEvents = void 0;
var tslib_1 = require("tslib");
var react_1 = require("react");
var useStoredValue_1 = require("../../../../hooks/useStoredValue");
var isKeys_1 = require("../../../../utils/isKeys");
var utils_1 = require("../../utils");
var useAutocompleteBaseInputEvents = function (_a) {
var multiple = _a.multiple, inputControl = _a.inputControl, valueControl = _a.valueControl, dropdownControl = _a.dropdownControl, searchControl = _a.searchControl, allowCustomValue = _a.allowCustomValue;
var lastInputValue = (0, useStoredValue_1.useStoredValue)('');
var observableValuesAllowCustomValueSync = (function () {
if ((0, utils_1.isMultipleInternalValue)(valueControl.value, multiple) ||
!valueControl.value) {
return '';
}
var withoutRawValue = {};
Object.entries(valueControl.value).forEach(function (_a) {
var _b = tslib_1.__read(_a, 2), _key = _b[0], value = _b[1];
var key = _key;
if (key === 'raw') {
return;
}
withoutRawValue[key] = value;
});
return JSON.stringify(withoutRawValue);
})();
(0, react_1.useEffect)(function () {
var _a;
if (allowCustomValue || multiple) {
return;
}
var value = valueControl.value;
if ((0, utils_1.isSingleInternalValue)(value, multiple)) {
lastInputValue.current = (_a = value === null || value === void 0 ? void 0 : value.label) !== null && _a !== void 0 ? _a : '';
if (lastInputValue.current !== inputControl.value) {
inputControl.setValue(null, lastInputValue.current);
}
}
}, [observableValuesAllowCustomValueSync, allowCustomValue]);
var onChange = function (event) {
var value = event.target.value;
// Открываем список при вводе первого символа (при условии, что список еще не открыт)
if (value.length && !dropdownControl.isOpen) {
dropdownControl.open();
}
if (multiple) {
inputControl.setValue(event, value);
}
if (value && !multiple) {
inputControl.setValue(event, value);
}
if (!value && !multiple) {
valueControl.setValue(event, null, {
source: 'input',
});
}
searchControl.activate(value);
};
/** Актуализация значения текстового поля после его покидания */
var onBlur = function () {
if (allowCustomValue) {
return;
}
if (inputControl.value !== lastInputValue.current) {
inputControl.setValue(null, lastInputValue.current);
}
};
/** Открытие списка по клику на текстовом поле */
var onClick = function () {
dropdownControl.toggle();
};
/** Управление элементом контроля через клавиатуру */
var onKeyDown = function (event) {
var _a;
if ((0, isKeys_1.isKeys)(event, ['ArrowDown', 'ArrowUp']) && !dropdownControl.isOpen) {
event.preventDefault();
dropdownControl.open();
}
var value = valueControl.value;
if ((0, utils_1.isMultipleInternalValue)(value, multiple) &&
(0, isKeys_1.isKeys)(event, ['Backspace']) &&
!inputControl.value) {
if (value) {
valueControl.setValue(event, ((_a = value[value.length - 1]) === null || _a === void 0 ? void 0 : _a.id) || null, {
source: 'input',
});
}
}
};
return {
onChange: onChange,
onBlur: onBlur,
onClick: onClick,
onKeyDown: onKeyDown,
};
};
exports.useAutocompleteBaseInputEvents = useAutocompleteBaseInputEvents;