@ozen-ui/kit
Version:
React component library
94 lines (93 loc) • 4.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.useAutocompleteBaseValue = void 0;
var tslib_1 = require("tslib");
var useControlled_1 = require("../../../../hooks/useControlled");
var array_1 = require("../../../../utils/array");
var isNotNil_1 = require("../../../../utils/isNotNil");
var utils_1 = require("../../utils");
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 ((0, array_1.isArray)(value)) {
return value.map(function (value) {
return prepareOption(value);
});
}
return prepareOption(value);
};
var _c = tslib_1.__read((0, useControlled_1.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 = tslib_1.__assign(tslib_1.__assign({}, inProps), { onChange: onChange });
if ((0, utils_1.isMultipleProps)(params) &&
(0, utils_1.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 tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__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 ((0, utils_1.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 = (0, utils_1.isMultipleInternalValue)(valueState, multiple)
? !!valueState && valueState.length > 0
: (0, isNotNil_1.isNotNil)(valueState);
var selectedOptionsLength = (0, utils_1.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,
};
};
exports.useAutocompleteBaseValue = useAutocompleteBaseValue;