UNPKG

@ozen-ui/kit

Version:

React component library

90 lines (89 loc) 4.39 kB
import { __assign, __read, __spreadArray } from "tslib"; 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; var source = paramsProp.source; var option = optionId === null ? 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 (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; }); })(); (_a = params.onChange) === null || _a === void 0 ? void 0 : _a.call(params, event, result, { source: source }); } searchControl.deactivate(); } else if (isSingleProps(params)) { inputValue = (_b = option === null || option === void 0 ? void 0 : option.label) !== null && _b !== void 0 ? _b : ''; (_c = params.onChange) === null || _c === void 0 ? void 0 : _c.call(params, event, (_d = option === null || option === void 0 ? void 0 : option.raw) !== null && _d !== void 0 ? _d : 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, }; };