UNPKG

react-admin-kit

Version:

A react based UI components for admin system

184 lines (172 loc) 8.87 kB
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } /** * 表单 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'}} */ export 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 (_typeof(value) === 'object' && value !== null && !Array.isArray(value)) { value = splitValues(value); } var _key$split = key.split('_'), _key$split2 = _slicedToArray(_key$split, 2), before = _key$split2[0], after = _key$split2[1]; var names = before.split(','); if (names.length > 1) { var _value, _value2; var _names = _slicedToArray(names, 2), valueName = _names[0], labelName = _names[1]; var _ref = after ? after.split(',') : [], _ref2 = _slicedToArray(_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, 根据约定的规范,输出一个约定的值 * * 1. 参数: values: {userId: '1', userName: 'jack'} dataIndex: 'userId,userName', * 输出 {value: '1', label: 'jack'} * 2. 参数: values: {userId: '1', userName: 'jack'} dataIndex: 'userId,userName_id,name' * 输出: {id: '1', name: 'jack'} * 3. dataIndex不含逗号原样输出 * */ function getConventionValue() { var values = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var dataIndex = arguments.length > 1 ? arguments[1] : undefined; var _dataIndex$split = dataIndex.split('_'), _dataIndex$split2 = _slicedToArray(_dataIndex$split, 2), before = _dataIndex$split2[0], after = _dataIndex$split2[1]; var names = before.split(','); if (names.length > 1) { var _names2 = _slicedToArray(names, 2), valueName = _names2[0], labelName = _names2[1]; var _ref3 = after ? after.split(',') : [], _ref4 = _slicedToArray(_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 _defineProperty(_defineProperty({}, toValueName, values[valueName]), toLabelName, values[labelName]); } else { return values[dataIndex]; } } /** * 根据约定的规范, 分析 dataIndex, 将 values 转换成约定的数据 * @参数 values 是需要转换的数据. * @参数 allVals 是通过 getFieldsValue 收集到的所有的表单值,通过它可以拿到所有的 dataIndex * * 1. * 参数values: {userId: '1', userName: 'jack} * 参数allVals: {'userId,userName': undefined} * => {'userId,userName': {value: '1', label: 'jack'}, userId: '1', userName: 'jack'} * * 2. 自定义取值: * 参数values: {userId: '1', userName: 'jack} * 参数allVals: {'userId,userName_id,name': undefined} * => {'userId,userName_id,name': {id: '1', name: 'jack'}, userId: '1', userName: 'jack'} * * 3. 套嵌数据也能处理: * 参数values: {info: {userId: '1', userName: 'jack'}} * 参数allVals: {info: {'userId,userName': undefined}} * => {info: {'userId,userName': {value: '1', label: 'jack'}, userId: '1', userName: 'jack'}} */ export function convertValues(values) { var allVals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!values) return values; Object.keys(allVals).forEach(function (dataIndex) { var val = allVals[dataIndex]; // 如果是对象处理套嵌数据 if (_typeof(val) === 'object') { convertValues(values[dataIndex], val); } // bugfix: 如果 dataIndex 不是约定格式则不处理. 否则在 setFieldsValues 时会误赋值 if (!matchConvention(dataIndex)) return; values[dataIndex] = getConventionValue(values, dataIndex); }); return values; } /** * 判断 dataIndex 格式是否满足约定式 * @param dataIndex */ export function matchConvention(dataIndex) { return dataIndex && typeof dataIndex === 'string' && dataIndex.includes(','); } /** * 从一个字符串中提取类似对象结构的值 * 用法可参看测试用例 * * @todo 这个方法暂时用不上, 因为 dataIndex 可能还是数组, 需要考虑套嵌的情况 */ export function extractValuesInString(string, key) { var reg1 = new RegExp(key); var reg2 = new RegExp(/\s*:\s*[\'\"]([^\"\']*)[\'\"]/, 'g'); // reg 拼接成一个新的 reg, 因为如果直接用字符串拼接可能会丢失一些特殊字符 var reg = new RegExp(reg1.source + reg2.source, 'g'); /** * 直接字符串拼接会丢失 * const reg = new RegExp(`${key}\s*:\s*[\'\"]([^\"\']*)[\'\"]`, 'g'); * 输出: /dataIndexs*:s*['"]([^"']*)['"]/g * 会丢失 \s 这样的转译 */ var matchResult = string.matchAll(reg); return Array.from(matchResult).map(function (item) { return item[1]; }); } export function setFieldsValueConvention(values, _ref6) { var getFieldsValue = _ref6.getFieldsValue, setFieldsValue = _ref6.setFieldsValue, callback = _ref6.callback; var fields = getFieldsValue(); var convertedVals = convertValues(values, fields); // 第一次赋值 setFieldsValue(convertedVals); // 第二次赋值. 因为一次赋值不够, 有些 field 是 dependency 的 setTimeout(function () { var allFields = getFieldsValue(); var finalConvertedVals = convertValues(values, allFields); setFieldsValue(finalConvertedVals); if (callback) { callback(finalConvertedVals); } }, 50); }