UNPKG

@ozen-ui/kit

Version:

React component library

99 lines (98 loc) 4.08 kB
"use strict"; 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;