@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
131 lines (123 loc) • 3.88 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getDataType = exports.findNextAllColumns = exports.findDefaultValue = exports.findAllColumnsByValues = exports.buildSelectedValue = exports.buildOptions = void 0;
var _isArray = _interopRequireDefault(require("lodash/isArray"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
/**
* 获取当前选项是什么数据
* @description cascade 联级选择,multiple 多列选择,single 单列选择
*/
const getDataType = columns => {
const firstColumn = columns[0];
if (firstColumn) {
if ('children' in firstColumn) {
return 'cascade';
}
if ('options' in firstColumn || (0, _isArray.default)(firstColumn)) {
return 'multiple';
}
}
return 'single';
};
exports.getDataType = getDataType;
const findDefaultValue = (value, options) => {
// value 是否在 options 内
const valueIndex = options.findIndex(item => item.value === value);
if (valueIndex < 0 || options[valueIndex].disabled) {
// 重新找一个
const index = options.findIndex(item => !item.disabled);
if (index < 0) {
return null;
}
return options[index].value;
}
return value;
};
/** 把联级选择的所有子级找到 */
exports.findDefaultValue = findDefaultValue;
const findNextAllColumns = columns => {
const options = [];
const values = [];
const findNext = c => {
if (c.length) {
options.push(c);
values.push(c[0].value);
const cc = c[0].children || [];
findNext(cc);
}
};
findNext(columns);
return {
options,
values
};
};
/** 通过已有值找到联级选择的所有子级找到 */
exports.findNextAllColumns = findNextAllColumns;
const findAllColumnsByValues = (columns, values) => {
const options = [];
// TODO 补全候选项还是不需要管
let currentColumn = columns;
values.forEach(value => {
options.push(currentColumn);
const nextIndex = currentColumn.findIndex(item => item.value === value);
currentColumn = currentColumn[nextIndex]?.children || [];
});
return options;
};
/** 构建选项 */
exports.findAllColumnsByValues = findAllColumnsByValues;
const buildOptions = (dataType, columns, values) => {
switch (dataType) {
case 'cascade':
{
if (!values?.length) {
const data = findNextAllColumns(columns);
return [data.options, [], data.values];
}
return [findAllColumnsByValues(columns, values), [], values];
}
case 'multiple':
{
const mixOptions = [];
const defaultValues = [];
columns.forEach(item => {
const isOption = (0, _isArray.default)(item);
// 默认值需要检验它是否合法
if (isOption) {
const option = item;
mixOptions.push(option);
defaultValues.push(findDefaultValue(option[0].value, option));
} else {
const {
options: _options,
defaultValue: _defaultValue
} = item;
mixOptions.push(_options);
defaultValues.push(findDefaultValue(_defaultValue, _options));
}
});
return [mixOptions, defaultValues, []];
}
default:
{
const options = [columns];
const [firstColumn] = options[0];
const defaultValues = [firstColumn.value];
return [options, defaultValues, []];
}
}
};
/** 构建选中的值 */
exports.buildOptions = buildOptions;
const buildSelectedValue = (values, options) => {
const selectedColumns = values.map((v, index) => {
const vIndex = options[index].findIndex(o => o.value === v);
return options[index][vIndex];
});
return [values, selectedColumns];
};
exports.buildSelectedValue = buildSelectedValue;
//# sourceMappingURL=picker.js.map
;