UNPKG

react-admin-kit

Version:

A react based UI components for admin system

230 lines (217 loc) 8.77 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.collectDataIndex = exports._transformValueForConvention = exports._genDataIndex = void 0; exports.splitValues = splitValues; exports.uniqueNestedArrays = exports.transformValuesForConvention = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _get = _interopRequireDefault(require("lodash/get")); var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep")); var _isPlainObject = _interopRequireDefault(require("lodash/isPlainObject")); /** * 表单 onFinish 时,将符合约定规范的 dataIndex 转成需要的数据, 看下面的例子 * * {'user,userName': {value: '1', label: 'jack'}} => {user: '1', userName: 'jack} * * 自定义取值: * {'user,userName_id,name': {id: '1', name: 'jack'}} => {user: '1', userName: 'jack} * * 套嵌数据也能处理: * {info: {'user,userName': {value: '1', label: 'jack'}}} => {info: {user: '1, userName: 'jack'}} */ function splitValues() { var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var result = {}; Object.keys(values).forEach(function (key) { var value = values[key]; // 处理数组 if (Array.isArray(value)) { value = value.map(function (item) { return (0, _typeof2.default)(item) === 'object' && item !== null ? splitValues(item) : item; }); // 把对象的形式全都循环处理一遍 } else if ((0, _typeof2.default)(value) === 'object' && value !== null) { value = splitValues(value); } if (_stringMatchConvention(key)) { var _value, _value2; var _key$split = key.split('_'), _key$split2 = (0, _slicedToArray2.default)(_key$split, 2), before = _key$split2[0], after = _key$split2[1]; var _before$split = before.split(','), _before$split2 = (0, _slicedToArray2.default)(_before$split, 2), valueName = _before$split2[0], labelName = _before$split2[1]; var _ref = after ? after.split(',') : [], _ref2 = (0, _slicedToArray2.default)(_ref, 2), _ref2$ = _ref2[0], toValueName = _ref2$ === void 0 ? 'value' : _ref2$, _ref2$2 = _ref2[1], toLabelName = _ref2$2 === void 0 ? 'label' : _ref2$2; result[valueName] = (_value = value) === null || _value === void 0 ? void 0 : _value[toValueName]; result[labelName] = (_value2 = value) === null || _value2 === void 0 ? void 0 : _value2[toLabelName]; } else { result[key] = value; } }); return result; } /** * 内部调用 * dataIndex 必有值 */ var _stringMatchConvention = function _stringMatchConvention(dataIndex) { return dataIndex.toString().includes(','); }; /** * 内部调用 * dataIndex 是数组 * 若符合返回所在的 index */ var _arrMatchConventionIndex = function _arrMatchConventionIndex(dataIndexArr) { return dataIndexArr.findIndex(function (dataIndex) { return _stringMatchConvention(dataIndex); }); }; var _genDataIndex = exports._genDataIndex = function _genDataIndex(key, baseName) { if (baseName || baseName === 0) { if (Array.isArray(key)) { return [baseName].concat(key); } else { return [baseName, key]; } } return key; }; /** * 数组套嵌数组去重 * @param arrays 要去重的数组 * @returns 去重后的数组 */ var uniqueNestedArrays = exports.uniqueNestedArrays = function uniqueNestedArrays(arrays) { var seen = new Set(); return arrays.filter(function (item) { var key = JSON.stringify(item); if (seen.has(key)) { return false; } seen.add(key); return true; }); }; /** * 收集单个列的 dataIndex * 用于循环 */ var collectDataIndexByColumn = function collectDataIndexByColumn(column) { var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var baseName = arguments.length > 2 ? arguments[2] : undefined; var result = []; if (column.valueType === 'dependency') { if (typeof column.columns === 'function') { // 如果是函数, 需要执行函数获取 dataIndex var columns = column.columns(transformValuesForConvention(value, column.name)); result = result.concat(collectDataIndex(columns, value, baseName)); } } else if (column.valueType === 'group') { if (Array.isArray(column.columns)) { result = result.concat(collectDataIndex(column.columns, value, baseName)); } } else if (column.valueType === 'formList') { // todo: 对于 formList 暂不考虑额外 baseName 前缀, formList 本身就是一个前缀 var dataIndex = column.dataIndex; // @ts-ignore dataIndex 可能是 number if (!!dataIndex || dataIndex === 0) { // result.push(_genDataIndex(dataIndex)); if (Array.isArray(column.columns)) { var arrValue = value[dataIndex.toString()] || []; // 使用数组存储结果,最后再去重 var listResult = []; arrValue.forEach(function (itemValue) { collectDataIndex( // @ts-ignore column.columns, itemValue, dataIndex // baseName ).forEach(function (key) { listResult.push(key); }); }); result = result.concat(uniqueNestedArrays(listResult)); } } // @ts-ignore dataIndex 可能是 number } else if (!!column.dataIndex || column.dataIndex === 0) { if (!(0, _isPlainObject.default)(column.dataIndex)) { // @ts-ignore dataIndex 的类型是 unknow, 理论上只能是 React.key 或 React.key[]. 这里为了安全排除了对象 result.push(_genDataIndex(column.dataIndex, baseName)); } } return result; }; /** * 收集所有的 dataIndex, 包括套嵌的(dependency) */ var collectDataIndex = exports.collectDataIndex = function collectDataIndex(columns) { var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var baseName = arguments.length > 2 ? arguments[2] : undefined; var result = []; columns.forEach(function (column) { result = result.concat(collectDataIndexByColumn(column, value, baseName)); }); return result; }; // 处理单个 dataIndex // 内部调用 var _transformValueForConvention = exports._transformValueForConvention = function _transformValueForConvention(values, dataIndex) { var _dataIndex$split = dataIndex.split('_'), _dataIndex$split2 = (0, _slicedToArray2.default)(_dataIndex$split, 2), before = _dataIndex$split2[0], after = _dataIndex$split2[1]; var _before$split3 = before.split(','), _before$split4 = (0, _slicedToArray2.default)(_before$split3, 2), valueName = _before$split4[0], labelName = _before$split4[1]; var _ref3 = after ? after.split(',') : [], _ref4 = (0, _slicedToArray2.default)(_ref3, 2), _ref4$ = _ref4[0], toValueName = _ref4$ === void 0 ? 'value' : _ref4$, _ref4$2 = _ref4[1], toLabelName = _ref4$2 === void 0 ? 'label' : _ref4$2; if (values[valueName] === undefined && values[labelName] === undefined) { return undefined; } return (0, _defineProperty2.default)((0, _defineProperty2.default)({}, toValueName, values[valueName]), toLabelName, values[labelName]); }; var transformValuesForConvention = exports.transformValuesForConvention = function transformValuesForConvention(_values) { var dataIndexes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var values = (0, _cloneDeep.default)(_values); if (!values) return values; dataIndexes.forEach(function (dataIndex) { if (typeof dataIndex === 'string' || typeof dataIndex === 'number') { if (_stringMatchConvention(dataIndex)) { values[dataIndex] = _transformValueForConvention(values, dataIndex); } } if (Array.isArray(dataIndex)) { var matchIndex = _arrMatchConventionIndex(dataIndex); if (matchIndex > 0) { var path = dataIndex.slice(0, matchIndex).join('.'); var $values = (0, _get.default)(values, path); var $dataIndex = dataIndex[matchIndex]; // formList 的情况 if (Array.isArray($values)) { $values.forEach(function (itemValue, index) { $values[index][$dataIndex.toString()] = _transformValueForConvention(itemValue, $dataIndex); }); } else { $values[$dataIndex] = _transformValueForConvention($values, $dataIndex); } } } }); return values; };