UNPKG

@fruits-chain/react-native-xiaoshu

Version:
131 lines (123 loc) 3.88 kB
"use strict"; 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