tdesign-react
Version:
TDesign Component for React
303 lines (295 loc) • 11.4 kB
JavaScript
/**
* tdesign v1.13.2
* (c) 2025 tdesign
* @license MIT
*/
;
Object.defineProperty(exports, '__esModule', { value: true });
var toConsumableArray = require('../../_chunks/dep-64a1054a.js');
var defineProperty = require('../../_chunks/dep-cc768e34.js');
var slicedToArray = require('../../_chunks/dep-e17e2d31.js');
var React = require('react');
var table_SorterButton = require('../SorterButton.js');
var hooks_useControlled = require('../../hooks/useControlled.js');
var isFunction = require('../../_chunks/dep-bed9d73e.js');
require('../../_chunks/dep-b7d577ac.js');
require('../../_chunks/dep-6d4d8660.js');
require('tdesign-icons-react');
require('classnames');
require('../../hooks/useGlobalIcon.js');
require('../../hooks/useConfig.js');
require('../../config-provider/ConfigContext.js');
require('../../_chunks/dep-3a869b87.js');
require('../../_chunks/dep-ac58e1cc.js');
require('dayjs');
require('../../_chunks/dep-7da96a57.js');
require('../../_chunks/dep-07b911d8.js');
require('../../_chunks/dep-4b02d669.js');
require('../../_chunks/dep-f0379c5f.js');
require('../../_chunks/dep-ddacd27a.js');
require('../../_chunks/dep-028b759d.js');
require('../../_chunks/dep-8a116183.js');
require('../../_chunks/dep-4671b9bd.js');
require('../../_chunks/dep-47bdc05f.js');
require('../../_chunks/dep-cab13149.js');
require('../../_chunks/dep-a30819a4.js');
require('../../_chunks/dep-6a7ba247.js');
require('../../_chunks/dep-780eda7b.js');
require('../../_chunks/dep-c87d9752.js');
require('../../_chunks/dep-bd956a2d.js');
require('../../_chunks/dep-0cdb3286.js');
require('../../_chunks/dep-865c186c.js');
require('../../_chunks/dep-f4e58639.js');
require('../../_chunks/dep-781a2854.js');
require('../../_chunks/dep-1ef213f8.js');
require('../../_chunks/dep-e2c832a5.js');
require('./useClassName.js');
require('../../tooltip/index.js');
require('../../tooltip/Tooltip.js');
require('../../_chunks/dep-810b3643.js');
require('../../popup/index.js');
require('../../popup/Popup.js');
require('react-transition-group');
require('../../_util/ref.js');
require('react-is');
require('../../_util/isFragment.js');
require('../../_chunks/dep-3f65dfe7.js');
require('../../_chunks/dep-3e2d2665.js');
require('../../common/Portal.js');
require('react-dom');
require('../../hooks/useLayoutEffect.js');
require('../../hooks/useAnimation.js');
require('../../hooks/useAttach.js');
require('../../hooks/useDefaultProps.js');
require('../../hooks/useMutationObserver.js');
require('../../hooks/useLatest.js');
require('../../_chunks/dep-d6e82200.js');
require('../../_chunks/dep-94d97586.js');
require('../../_chunks/dep-b12bf98d.js');
require('../../_chunks/dep-0c1ca63f.js');
require('../../_chunks/dep-fd5d57c1.js');
require('../../_chunks/dep-ac2874ce.js');
require('../../_chunks/dep-6cfc06a0.js');
require('../../_chunks/dep-5d9d080b.js');
require('../../_chunks/dep-1bcdd0a4.js');
require('../../_chunks/dep-c915e145.js');
require('../../_chunks/dep-f076775e.js');
require('../../hooks/usePopper.js');
require('@popperjs/core');
require('react-fast-compare');
require('../../hooks/useWindowSize.js');
require('../../popup/defaultProps.js');
require('../../popup/hooks/useTrigger.js');
require('../../_util/composeRefs.js');
require('../../_util/listener.js');
require('../../popup/utils/transition.js');
require('../../_util/noop.js');
require('../../_chunks/dep-4be7f839.js');
require('../../_chunks/dep-d42c60f4.js');
require('../../_chunks/dep-05b4c661.js');
require('../../_chunks/dep-62193a48.js');
require('../../popup/PopupPlugin.js');
require('../../_chunks/dep-a93b6608.js');
require('../../_util/react-render.js');
require('../../common/PluginContainer.js');
require('../../config-provider/ConfigProvider.js');
require('../../_chunks/dep-ed886f2a.js');
require('../../_chunks/dep-aeef4e56.js');
require('../../tooltip/defaultProps.js');
require('../../tooltip/TooltipLite.js');
require('../../hooks/useSwitch.js');
require('../../hooks/usePersistFn.js');
require('../../_chunks/dep-f7574d05.js');
require('../../locale/LocalReceiver.js');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { defineProperty._defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function useSorter(props) {
var _useState = React.useState(),
_useState2 = slicedToArray._slicedToArray(_useState, 2),
originalData = _useState2[0],
setOriginalData = _useState2[1];
var _useControlled = hooks_useControlled["default"](props, "sort", props.onSortChange),
_useControlled2 = slicedToArray._slicedToArray(_useControlled, 2),
tSortInfo = _useControlled2[0],
setTSortInfo = _useControlled2[1];
var _useControlled3 = hooks_useControlled["default"](props, "data", props.onDataChange),
_useControlled4 = slicedToArray._slicedToArray(_useControlled3, 2),
tData = _useControlled4[0],
setTData = _useControlled4[1];
var sorterFuncMap = getSorterFuncMap(props.columns);
var _useState3 = React.useState(),
_useState4 = slicedToArray._slicedToArray(_useState3, 2),
innerSort = _useState4[0],
setInnerSort = _useState4[1];
var sortArray = function () {
var sort = tSortInfo;
if (!sort) return [];
return Array.isArray(sort) ? sort : [sort];
}();
var sortMap = function () {
var sortMap2 = {};
sortArray.forEach(function (info, index) {
var sortBy = info.sortBy;
sortMap2[sortBy] = _objectSpread({
index: index
}, info);
});
return sortMap2;
}();
function getSorterFuncMap(columns) {
var map = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
for (var i = 0, len = columns.length; i < len; i++) {
var _col$children;
var col = columns[i];
if (isFunction.isFunction(col.sorter)) {
map[col.colKey] = col.sorter;
}
if ((_col$children = col.children) !== null && _col$children !== void 0 && _col$children.length) {
getSorterFuncMap(col.children, map);
}
}
return map;
}
function handleDataSort(sortInfo) {
var sort = sortInfo;
if (!sorterFuncMap || !Object.keys(sorterFuncMap).length) return;
if (!originalData) {
setOriginalData(tData);
}
var isEmptyArraySort = !sort || sort instanceof Array && !sort.length;
var isEmptyObjectSort = !(sort instanceof Array) && !(sort !== null && sort !== void 0 && sort.sortBy);
if (isEmptyArraySort || isEmptyObjectSort) {
setTData(originalData, {
trigger: "sort"
});
return originalData;
}
var formattedSort = sort instanceof Array ? sort : [sort];
var newData = tData.slice().sort(function (a, b) {
var sortResult = 0;
for (var i = 0, len = formattedSort.length; i < len; i++) {
var item = formattedSort[i];
var sortFunc = sorterFuncMap[item.sortBy];
if (sortResult === 0 && sortFunc) {
sortResult = item.descending ? sortFunc(b, a) : sortFunc(a, b);
} else {
break;
}
}
return sortResult;
});
if (JSON.stringify(newData) === JSON.stringify(tData)) return;
setTData(newData, {
trigger: "sort"
});
return newData;
}
function handleSortHeaderClick(col, p) {
var _props$onChange;
var sortInfo;
if (props.multipleSort) {
sortInfo = getMultipleNextSort(col, p);
} else {
var sort = tSortInfo instanceof Array ? tSortInfo[0] : tSortInfo;
sortInfo = getSingleNextSort(col, sort, p);
}
var newData = handleDataSort(sortInfo);
var currentData = newData || tData;
var currentDataSource = currentData;
setTSortInfo(sortInfo, {
currentDataSource: currentDataSource,
col: col
});
(_props$onChange = props.onChange) === null || _props$onChange === void 0 || _props$onChange.call(props, {
sorter: sortInfo
}, {
currentData: currentData,
trigger: "sorter"
});
setInnerSort(sortInfo);
}
function getSortOrder(descending) {
if (descending === void 0) return;
return descending ? "desc" : "asc";
}
function getSingleNextSort(col, sortInfo, p) {
if (sortInfo && sortInfo.sortBy === col.colKey && sortInfo.descending === p.descending) {
return void 0;
}
return {
sortBy: col.colKey,
descending: p.descending
};
}
function getMultipleNextSort(col, p) {
var sort = tSortInfo;
if (!(sort instanceof Array)) return;
var colKey = col.colKey;
var result = toConsumableArray._toConsumableArray(sort);
for (var i = 0, len = sort.length; i < len; i++) {
if (sort[i].sortBy === colKey) {
var next = getSingleNextSort(col, sort[i], p);
next ? result[i] = next : result.splice(i, 1);
return result;
}
}
result.push({
sortBy: colKey,
descending: p.descending
});
return result;
}
function renderSortIcon(_ref) {
var _sortMap$col$colKey;
var col = _ref.col;
if (!col.sorter) return null;
var sorterButtonsProps = {
sortType: col.sortType,
sortOrder: getSortOrder((_sortMap$col$colKey = sortMap[col.colKey]) === null || _sortMap$col$colKey === void 0 ? void 0 : _sortMap$col$colKey.descending),
sortIcon: props.sortIcon,
hideSortTips: props.hideSortTips
};
return /* @__PURE__ */React__default["default"].createElement(table_SorterButton["default"], _objectSpread(_objectSpread({
key: "sorter-button-".concat(col.colKey)
}, sorterButtonsProps), {}, {
onSortIconClick: function onSortIconClick(_, p) {
return handleSortHeaderClick(col, p);
}
}));
}
var isSortInfoSame = function isSortInfoSame(a, b) {
var tmpSortInfo = Array.isArray(a) ? a : [a];
var tmpInnerSortInfo = Array.isArray(b) ? b : [b];
if (tmpSortInfo.length && !b) return false;
var _loop = function _loop() {
var item = tmpSortInfo[i];
var result = tmpInnerSortInfo.find(function (t) {
return t.sortBy === item.sortBy;
});
if (!result) return {
v: false
};
return {
v: item.descending === result.descending
};
},
_ret;
for (var i = 0, len = tmpSortInfo.length; i < len; i++) {
_ret = _loop();
if (_ret) return _ret.v;
}
};
React.useEffect(function () {
if (!tSortInfo || !Object.keys(tSortInfo).length || !tData.length) return;
if (!isSortInfoSame(tSortInfo, innerSort)) {
handleDataSort(tSortInfo);
}
}, [tSortInfo, tData]);
return {
renderSortIcon: renderSortIcon
};
}
exports["default"] = useSorter;
//# sourceMappingURL=useSorter.js.map