@schema-render/search-table-react
Version:
Conditional search table component.
78 lines (77 loc) • 2.85 kB
JavaScript
;
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);
};