@ozen-ui/kit
Version:
React component library
90 lines (89 loc) • 4.39 kB
JavaScript
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,
};
};