@ozen-ui/kit
Version:
React component library
66 lines (65 loc) • 3.23 kB
JavaScript
import { __assign, __read, __spreadArray } from "tslib";
import { useControlled } from '../../../../hooks/useControlled';
import { isNotNil } from '../../../../utils/isNotNil';
import { isMultipleInternalValue, isMultipleProps, isSingleProps, lastSelectedValue, } from '../../utils';
export var useDataListBaseValue = function (_a) {
var _b;
var valueProp = _a.value, defaultValue = _a.defaultValue, onChangeProp = _a.onChange, inProps = _a.inProps, multiple = _a.multiple;
var _c = __read(useControlled({
value: valueProp === undefined ? undefined : valueProp,
defaultValue: defaultValue === undefined ? undefined : defaultValue,
name: 'DataListBase',
state: 'value',
}), 2), valueState = _c[0], setValueState = _c[1];
var onChange = function (event, option, changedOption) {
setValueState(option);
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(event, option, changedOption);
};
var setValue = function (event, optionId) {
var _a, _b;
if (!optionId) {
onChange(event, null, null);
return;
}
var params = __assign(__assign({}, inProps), { onChange: onChange });
if (isMultipleProps(params) &&
isMultipleInternalValue(valueState, multiple)) {
var value_1 = valueState !== null && valueState !== void 0 ? valueState : [];
var optionIsAlreadySelected_1 = valueState === null || valueState === void 0 ? void 0 : valueState.find(function (selectedOptionId) { return selectedOptionId === optionId; });
var result = (function () {
if (optionIsAlreadySelected_1) {
var options_1 = [];
value_1.forEach(function (selectedOption) {
if (selectedOption !== optionId) {
options_1.push(selectedOption);
}
});
return options_1;
}
if (optionId) {
return __spreadArray(__spreadArray([], __read(value_1), false), [optionId], false);
}
return __spreadArray([], __read(value_1), false);
})();
(_a = params.onChange) === null || _a === void 0 ? void 0 : _a.call(params, event, result, optionId);
return;
}
if (isSingleProps(params)) {
(_b = params.onChange) === null || _b === void 0 ? void 0 : _b.call(params, event, optionId, optionId);
}
};
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;
var lastSelected = lastSelectedValue(valueState !== null && valueState !== void 0 ? valueState : null);
return {
value: valueState,
setValue: setValue,
hasValue: hasValue,
selectedOptionsLength: selectedOptionsLength,
lastSelected: lastSelected,
};
};