UNPKG

@schema-render/search-table-react

Version:
78 lines (77 loc) 2.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "localSorter", { enumerable: true, get: function() { return localSorter; } }); var _corereact = require("@schema-render/core-react"); var _dayjs = /*#__PURE__*/ _interop_require_default(require("dayjs")); var _common = require("../../../utils/common"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var get = _corereact.utils.get, isArray = _corereact.utils.isArray, isPlainObject = _corereact.utils.isPlainObject; function sorterCompare(a, b) { return a === b ? 0 : a > b ? 1 : -1; } var localSorter = function(a, b, param) { var sortType = param.sortType, sortOrder = param.sortOrder, arrDataIndex = param.arrDataIndex, sortDataExtractor = param.sortDataExtractor, sortStringValueTransform = param.sortStringValueTransform; var aValue = sortDataExtractor ? sortDataExtractor(a) : get(a, arrDataIndex); var bValue = sortDataExtractor ? sortDataExtractor(b) : get(b, arrDataIndex); // 对象类型不排序 if (isPlainObject(aValue) || isPlainObject(bValue)) { return 0; } // 将数值类型转换成字符串类型 if (isArray(aValue)) { aValue = aValue.join(''); } if (isArray(bValue)) { bValue = bValue.join(''); } // 数据字符串化,并去除空字符 aValue = String(aValue).trim(); bValue = String(bValue).trim(); // 处理空值一直排在最后 if ((0, _common.isEmpty)(aValue)) { return sortOrder === 'ascend' ? 1 : -1; } if ((0, _common.isEmpty)(bValue)) { return sortOrder === 'ascend' ? -1 : 1; } // 字符串类型处理 if (sortType === 'string') { if (sortStringValueTransform) { aValue = sortStringValueTransform(aValue); bValue = sortStringValueTransform(bValue); } // 加 @ 符号强制转换数字类型为字符串类型 return sorterCompare("@".concat(aValue).toLowerCase(), "@".concat(bValue).toLowerCase()); } // 日期类型处理 if (sortType === 'date') { return sorterCompare(new Date(aValue), new Date(bValue)); } /** * 以下为自动推断 */ // 数字类型处理 if (!isNaN(Number(aValue)) && !isNaN(Number(bValue))) { return sorterCompare(Number(aValue), Number(bValue)); } // 日期类型处理 if ((0, _dayjs.default)(aValue).isValid() && (0, _dayjs.default)(bValue).isValid()) { return sorterCompare(new Date(aValue), new Date(bValue)); } // 字符串类型处理 if (sortStringValueTransform) { aValue = sortStringValueTransform(aValue); bValue = sortStringValueTransform(bValue); } return sorterCompare(aValue, bValue); };