UNPKG

@ozen-ui/kit

Version:

React component library

103 lines (102 loc) 5.19 kB
import { __assign, __read, __spreadArray } from "tslib"; import { logger } from '@ozen-ui/logger'; import { useControlled } from '../../../../hooks/useControlled'; import { isArray } from '../../../../utils/array'; import { isNotNil } from '../../../../utils/isNotNil'; import { isMultipleInternalValue, isMultipleProps, isSingleProps, } from '../../utils'; export var useAutocompleteBaseValue = function (_a) { var _b; var valueProp = _a.value, options = _a.options, defaultValue = _a.defaultValue, onChangeProp = _a.onChange, inProps = _a.inProps, prepareOption = _a.prepareOption, searchControl = _a.searchControl, multiple = _a.multiple, inputControl = _a.inputControl; var prepareValue = function (value) { if (!value) { return null; } if (isArray(value)) { return value.map(function (value) { return prepareOption(value); }); } return prepareOption(value); }; var _c = __read(useControlled({ value: valueProp === undefined ? undefined : prepareValue(valueProp), defaultValue: defaultValue === undefined ? undefined : prepareValue(defaultValue), name: 'AutocompleteBase', state: 'value', }), 2), valueState = _c[0], setValueState = _c[1]; var onChange = function (event, option, params) { setValueState(prepareValue(option)); onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(event, option, params); }; var setValue = function (event, optionId, paramsProp) { var _a, _b, _c, _d, _e; var source = paramsProp.source; var option = optionId === null || isArray(optionId) ? null : options.find(function (option) { return option.id === optionId; }); if (option === undefined) { return; } var inputValue = ''; var params = __assign(__assign({}, inProps), { onChange: onChange }); if (isMultipleProps(params) && isMultipleInternalValue(valueState, multiple)) { if (isArray(optionId)) { var preparedOptions_1 = []; optionId.forEach(function (optionId) { var option = options.find(function (option) { return option.id === optionId; }); if (!option) { logger.error("\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u043D\u0430\u0439\u0442\u0438 option \u0434\u043B\u044F \"".concat(optionId, "\"")); return; } preparedOptions_1.push(option.raw); }); (_a = params.onChange) === null || _a === void 0 ? void 0 : _a.call(params, event, preparedOptions_1, { source: source }); } else if (option === null) { onChange === null || onChange === void 0 ? void 0 : onChange(event, null, { source: source }); } else { var value_1 = valueState !== null && valueState !== void 0 ? valueState : []; var optionIsSelected_1 = value_1.find(function (item) { return item.id === optionId; }); var result = (function () { if (optionIsSelected_1) { var options_1 = []; value_1.forEach(function (option) { if (option.id !== optionId) { options_1.push(option.raw); } }); return options_1; } if (option) { return __spreadArray(__spreadArray([], __read(value_1.map(function (option) { return option.raw; })), false), [option.raw], false); } return value_1.map(function (option) { return option.raw; }); })(); (_b = params.onChange) === null || _b === void 0 ? void 0 : _b.call(params, event, result, { source: source }); } searchControl.deactivate(); } else if (isSingleProps(params)) { inputValue = (_c = option === null || option === void 0 ? void 0 : option.label) !== null && _c !== void 0 ? _c : ''; (_d = params.onChange) === null || _d === void 0 ? void 0 : _d.call(params, event, (_e = option === null || option === void 0 ? void 0 : option.raw) !== null && _e !== void 0 ? _e : null, { source: source }); if (option) { searchControl.deactivate(); } } inputControl.setValue(null, inputValue); }; var hasValue = isMultipleInternalValue(valueState, multiple) ? !!valueState && valueState.length > 0 : isNotNil(valueState); var selectedOptionsLength = isMultipleInternalValue(valueState, multiple) ? (_b = valueState === null || valueState === void 0 ? void 0 : valueState.length) !== null && _b !== void 0 ? _b : 0 : 0; return { value: valueState, setValue: setValue, hasValue: hasValue, selectedOptionsLength: selectedOptionsLength, }; };