@ant-design/x
Version:
Craft AI-driven interfaces effortlessly
63 lines (59 loc) • 1.8 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
/**
* 🔥 Only for handling ungrouped data. Do not use it for any other purpose! 🔥
*/
const __UNGROUPED = '__ungrouped';
const useGroupable = (groupable, items = []) => {
const [enableGroup, sort, title] = _react.default.useMemo(() => {
if (!groupable) {
return [false, undefined, undefined];
}
let baseConfig = {
sort: undefined,
title: undefined
};
if (typeof groupable === 'object') {
baseConfig = {
...baseConfig,
...groupable
};
}
return [true, baseConfig.sort, baseConfig.title];
}, [groupable]);
return _react.default.useMemo(() => {
// 未开启分组模式直接返回
if (!enableGroup) {
const groupList = [{
name: __UNGROUPED,
data: items,
title: undefined
}];
return [groupList, enableGroup];
}
// 1. 将 data 做数据分组,填充 groupMap
const groupMap = items.reduce((acc, item) => {
const group = item.group || __UNGROUPED;
if (!acc[group]) {
acc[group] = [];
}
acc[group].push(item);
return acc;
}, {});
// 2. 存在 sort 时对 groupKeys 排序
const groupKeys = sort ? Object.keys(groupMap).sort(sort) : Object.keys(groupMap);
// 3. groupMap 转 groupList
const groupList = groupKeys.map(group => ({
name: group === __UNGROUPED ? undefined : group,
title,
data: groupMap[group]
}));
return [groupList, enableGroup];
}, [items, groupable]);
};
var _default = exports.default = useGroupable;