@rainbow-oh/yee-c 0.8.12 → 0.8.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Table/col-group.d.ts +2 -2
- package/dist/cjs/Table/col-group.js +1 -1
- package/dist/cjs/Table/demo/sorter-callback.js +3 -2
- package/dist/cjs/Table/demo/sorter.js +3 -2
- package/dist/cjs/Table/hooks/useExpand.d.ts +2 -2
- package/dist/cjs/Table/hooks/useFilter.d.ts +8 -2
- package/dist/cjs/Table/hooks/useFilter.js +36 -22
- package/dist/cjs/Table/hooks/usePagination.js +8 -8
- package/dist/cjs/Table/hooks/useSelection.d.ts +3 -3
- package/dist/cjs/Table/hooks/useSelection.js +8 -9
- package/dist/cjs/Table/hooks/useSorter.d.ts +6 -3
- package/dist/cjs/Table/hooks/useSorter.js +193 -87
- package/dist/cjs/Table/interface.d.ts +10 -7
- package/dist/cjs/Table/table.js +51 -45
- package/dist/cjs/Table/tbody/index.js +13 -5
- package/dist/cjs/Table/tbody/lazy-row.js +6 -3
- package/dist/cjs/Table/tbody/row.js +5 -4
- package/dist/cjs/Table/theader/cell.js +4 -0
- package/dist/cjs/Table/theader/filter.js +52 -20
- package/dist/cjs/Table/util/index.js +5 -3
- package/dist/cjs/style/themes.css +1 -1
- package/dist/cjs/style/variables.css +1 -1
- package/dist/cjs/version.d.ts +1 -1
- package/dist/cjs/version.js +1 -1
- package/dist/esm/Table/col-group.d.ts +2 -2
- package/dist/esm/Table/col-group.js +1 -1
- package/dist/esm/Table/demo/sorter-callback.js +3 -2
- package/dist/esm/Table/demo/sorter.js +3 -2
- package/dist/esm/Table/hooks/useExpand.d.ts +2 -2
- package/dist/esm/Table/hooks/useFilter.d.ts +8 -2
- package/dist/esm/Table/hooks/useFilter.js +52 -32
- package/dist/esm/Table/hooks/usePagination.js +8 -10
- package/dist/esm/Table/hooks/useSelection.d.ts +3 -3
- package/dist/esm/Table/hooks/useSelection.js +16 -11
- package/dist/esm/Table/hooks/useSorter.d.ts +6 -3
- package/dist/esm/Table/hooks/useSorter.js +218 -105
- package/dist/esm/Table/interface.d.ts +10 -7
- package/dist/esm/Table/table.js +42 -47
- package/dist/esm/Table/tbody/index.js +8 -5
- package/dist/esm/Table/tbody/lazy-row.js +7 -3
- package/dist/esm/Table/tbody/row.js +7 -6
- package/dist/esm/Table/theader/cell.js +7 -1
- package/dist/esm/Table/theader/filter.js +75 -27
- package/dist/esm/Table/util/index.js +6 -3
- package/dist/esm/style/themes.css +1 -1
- package/dist/esm/style/variables.css +1 -1
- package/dist/esm/version.d.ts +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Table/col-group.tsx +1 -1
- package/src/Table/demo/sorter-callback.tsx +3 -2
- package/src/Table/demo/sorter.tsx +3 -2
- package/src/Table/hooks/useExpand.ts +3 -3
- package/src/Table/hooks/useFilter.ts +47 -23
- package/src/Table/hooks/usePagination.ts +9 -10
- package/src/Table/hooks/useSelection.ts +18 -20
- package/src/Table/hooks/useSorter.ts +236 -82
- package/src/Table/interface.ts +19 -7
- package/src/Table/table.tsx +54 -49
- package/src/Table/tbody/index.tsx +14 -5
- package/src/Table/tbody/lazy-row.tsx +6 -3
- package/src/Table/tbody/row.tsx +5 -4
- package/src/Table/theader/cell.tsx +10 -0
- package/src/Table/theader/filter.tsx +64 -22
- package/src/Table/util/index.ts +3 -1
- package/src/version.ts +1 -1
|
@@ -77,16 +77,6 @@ export default function usePagination(_ref) {
|
|
|
77
77
|
pageSize: pageSize
|
|
78
78
|
});
|
|
79
79
|
};
|
|
80
|
-
if (pagination === false) {
|
|
81
|
-
return {
|
|
82
|
-
pageData: data,
|
|
83
|
-
current: 1,
|
|
84
|
-
pageSize: data.length,
|
|
85
|
-
pagination: false
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
90
80
|
var pageData = useMemo(function () {
|
|
91
81
|
var total = data.length;
|
|
92
82
|
if (total <= mergedPageSize) return data;
|
|
@@ -98,6 +88,14 @@ export default function usePagination(_ref) {
|
|
|
98
88
|
var start = (current - 1) * mergedPageSize;
|
|
99
89
|
return data.slice(start, start + mergedPageSize);
|
|
100
90
|
}, [data, meregdCurrent, mergedPageSize]);
|
|
91
|
+
if (pagination === false) {
|
|
92
|
+
return {
|
|
93
|
+
pageData: data,
|
|
94
|
+
current: 1,
|
|
95
|
+
pageSize: data.length,
|
|
96
|
+
pagination: false
|
|
97
|
+
};
|
|
98
|
+
}
|
|
101
99
|
return {
|
|
102
100
|
pageData: pageData,
|
|
103
101
|
current: meregdCurrent,
|
|
@@ -3,15 +3,15 @@ import type { RowSelectionType, SelectionKeyType } from '../interface';
|
|
|
3
3
|
export default function useSelection({ pageData, dataSource: data, getRowKey, rowSelection, allKeys, }: {
|
|
4
4
|
pageData: Array<Record<string, unknown>>;
|
|
5
5
|
dataSource: Array<Record<string, unknown>>;
|
|
6
|
-
getRowKey: (record: Record<string, unknown>) =>
|
|
6
|
+
getRowKey: (record: Record<string, unknown>) => SelectionKeyType;
|
|
7
7
|
allKeys: Array<SelectionKeyType>;
|
|
8
8
|
rowSelection?: RowSelectionType;
|
|
9
9
|
}): {
|
|
10
10
|
selectedRowKeys: (string | number)[];
|
|
11
11
|
checkedAll: boolean;
|
|
12
|
-
pageDataRowKeys:
|
|
12
|
+
pageDataRowKeys: SelectionKeyType[];
|
|
13
13
|
onCheck: (checked: boolean, key: number | string) => void;
|
|
14
14
|
onCheckAll: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
15
15
|
onRadioCheck: (checked: boolean, key: number | string) => void;
|
|
16
|
-
onChange: (event: ChangeEvent<HTMLInputElement
|
|
16
|
+
onChange: (event: ChangeEvent<HTMLInputElement>, key: SelectionKeyType) => void;
|
|
17
17
|
};
|
|
@@ -40,11 +40,20 @@ export default function useSelection(_ref) {
|
|
|
40
40
|
onChange === null || onChange === void 0 || onChange(rowKeys, rowRecords);
|
|
41
41
|
};
|
|
42
42
|
var getDisabledKeys = function getDisabledKeys() {
|
|
43
|
+
if (disabled === true) {
|
|
44
|
+
return pageData.map(function (record) {
|
|
45
|
+
return getRowKey(record);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
43
48
|
if (Array.isArray(disabled)) {
|
|
44
|
-
return
|
|
49
|
+
return pageData.filter(function (_, index) {
|
|
50
|
+
return disabled[index];
|
|
51
|
+
}).map(function (record) {
|
|
52
|
+
return getRowKey(record);
|
|
53
|
+
});
|
|
45
54
|
}
|
|
46
55
|
if (typeof disabled === 'function') {
|
|
47
|
-
return
|
|
56
|
+
return pageData.filter(function (record, index) {
|
|
48
57
|
return disabled(record, index);
|
|
49
58
|
}).map(function (record) {
|
|
50
59
|
return getRowKey(record);
|
|
@@ -52,13 +61,10 @@ export default function useSelection(_ref) {
|
|
|
52
61
|
}
|
|
53
62
|
return [];
|
|
54
63
|
};
|
|
55
|
-
var getPageDataRowKeys = function getPageDataRowKeys() {
|
|
56
|
-
return Array.isArray(pageData) && pageData.map(function (record) {
|
|
57
|
-
return getRowKey(record);
|
|
58
|
-
});
|
|
59
|
-
};
|
|
60
64
|
var disabledKeys = getDisabledKeys();
|
|
61
|
-
var pageDataRowKeys =
|
|
65
|
+
var pageDataRowKeys = pageData.map(function (record) {
|
|
66
|
+
return getRowKey(record);
|
|
67
|
+
});
|
|
62
68
|
var isCheckedAll = function isCheckedAll() {
|
|
63
69
|
var filtered = pageDataRowKeys.filter(function (key) {
|
|
64
70
|
return !disabledKeys.includes(key);
|
|
@@ -93,7 +99,7 @@ export default function useSelection(_ref) {
|
|
|
93
99
|
});
|
|
94
100
|
setMergedSelectedRowKeys(rowKeys);
|
|
95
101
|
onChange === null || onChange === void 0 || onChange(rowKeys, rowRecords);
|
|
96
|
-
onSelectAll === null || onSelectAll === void 0 || onSelectAll(rowKeys, rowRecords
|
|
102
|
+
onSelectAll === null || onSelectAll === void 0 || onSelectAll(checked, rowKeys, rowRecords);
|
|
97
103
|
};
|
|
98
104
|
var onRadioCheck = function onRadioCheck(checked, key) {
|
|
99
105
|
var record = pageData.find(function (item) {
|
|
@@ -102,8 +108,7 @@ export default function useSelection(_ref) {
|
|
|
102
108
|
setMergedSelectedRowKeys([key]);
|
|
103
109
|
onChange === null || onChange === void 0 || onChange([key], record);
|
|
104
110
|
};
|
|
105
|
-
var handleChange = function handleChange(event) {
|
|
106
|
-
var key = event.target.value;
|
|
111
|
+
var handleChange = function handleChange(event, key) {
|
|
107
112
|
var checked = event.target.checked;
|
|
108
113
|
if (type === 'checkbox') {
|
|
109
114
|
onCheck(checked, key);
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { ColumnProps } from '../interface';
|
|
2
|
-
type
|
|
3
|
-
|
|
2
|
+
type SortOrder = 1 | -1;
|
|
3
|
+
type SortState = Record<string, SortOrder>;
|
|
4
|
+
type SortChangeResult = {
|
|
5
|
+
data: Array<Record<string, unknown>>;
|
|
6
|
+
sorters: SortState;
|
|
4
7
|
};
|
|
5
8
|
export default function useSorter({ data, columns, }: {
|
|
6
9
|
data: Array<Record<string, unknown>>;
|
|
@@ -8,6 +11,6 @@ export default function useSorter({ data, columns, }: {
|
|
|
8
11
|
}): {
|
|
9
12
|
data: Record<string, unknown>[];
|
|
10
13
|
sorters: SortState;
|
|
11
|
-
onSort: (dataIndex: string) =>
|
|
14
|
+
onSort: (dataIndex: string) => SortChangeResult;
|
|
12
15
|
};
|
|
13
16
|
export {};
|
|
@@ -1,122 +1,235 @@
|
|
|
1
|
-
function
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
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."); }
|
|
3
|
+
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; } }
|
|
4
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
2
5
|
function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
3
6
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
4
7
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
8
|
+
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); }
|
|
5
9
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
6
10
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
7
|
-
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; }
|
|
8
|
-
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(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; }
|
|
9
|
-
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; }
|
|
10
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
11
|
-
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); }
|
|
12
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
13
|
-
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."); }
|
|
14
|
-
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); }
|
|
15
11
|
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; }
|
|
16
|
-
function
|
|
17
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
12
|
+
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); }
|
|
18
13
|
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
44
|
-
sorters = _useState2[0],
|
|
45
|
-
setSorters = _useState2[1];
|
|
46
|
-
|
|
47
|
-
// when columns changed, reset sorters
|
|
48
|
-
useEffect(function () {
|
|
49
|
-
setSorters(getDefaultSorters());
|
|
50
|
-
}, [getDefaultSorters]);
|
|
51
|
-
|
|
52
|
-
// handle sort on column title click
|
|
53
|
-
var onSort = function onSort(dataIndex) {
|
|
54
|
-
setSorters(function (prev) {
|
|
55
|
-
var _newSorters$dataIndex;
|
|
56
|
-
var newSorters = _objectSpread({}, prev);
|
|
57
|
-
var currentOrder = (_newSorters$dataIndex = newSorters[dataIndex]) !== null && _newSorters$dataIndex !== void 0 ? _newSorters$dataIndex : 0;
|
|
58
|
-
if (currentOrder === 0) {
|
|
59
|
-
newSorters[dataIndex] = 1;
|
|
60
|
-
} else if (currentOrder === 1) {
|
|
61
|
-
newSorters[dataIndex] = -1;
|
|
62
|
-
} else {
|
|
63
|
-
newSorters[dataIndex] = 0;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// is multiple sort
|
|
67
|
-
var isMultipleSort = undefined;
|
|
68
|
-
if (isMultipleSort) {} else {
|
|
69
|
-
Object.keys(newSorters).forEach(function (key) {
|
|
70
|
-
if (key !== dataIndex) {
|
|
71
|
-
delete newSorters[key];
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
return newSorters;
|
|
14
|
+
var getSorterConfig = function getSorterConfig(column) {
|
|
15
|
+
return column && _typeof(column.sorter) === 'object' ? column.sorter : undefined;
|
|
16
|
+
};
|
|
17
|
+
var toSortOrder = function toSortOrder(order) {
|
|
18
|
+
if (order === 'ascend') return 1;
|
|
19
|
+
if (order === 'descend') return -1;
|
|
20
|
+
return 0;
|
|
21
|
+
};
|
|
22
|
+
var getNextSortOrder = function getNextSortOrder(order) {
|
|
23
|
+
if (order === 0) return 1;
|
|
24
|
+
if (order === 1) return -1;
|
|
25
|
+
return 0;
|
|
26
|
+
};
|
|
27
|
+
var isMultipleSorter = function isMultipleSorter(column) {
|
|
28
|
+
var _getSorterConfig;
|
|
29
|
+
return Boolean((_getSorterConfig = getSorterConfig(column)) === null || _getSorterConfig === void 0 ? void 0 : _getSorterConfig.multiple);
|
|
30
|
+
};
|
|
31
|
+
var applySortChange = function applySortChange(queue, column, order, columnMap) {
|
|
32
|
+
var _getSorterConfig2;
|
|
33
|
+
var dataIndex = column.dataIndex;
|
|
34
|
+
if (!dataIndex) return queue;
|
|
35
|
+
if (order === 0) {
|
|
36
|
+
return queue.filter(function (item) {
|
|
37
|
+
return item.dataIndex !== dataIndex;
|
|
76
38
|
});
|
|
39
|
+
}
|
|
40
|
+
var multiple = (_getSorterConfig2 = getSorterConfig(column)) === null || _getSorterConfig2 === void 0 ? void 0 : _getSorterConfig2.multiple;
|
|
41
|
+
var nextItem = {
|
|
42
|
+
dataIndex: dataIndex,
|
|
43
|
+
order: order
|
|
77
44
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
45
|
+
if (!multiple) {
|
|
46
|
+
return [nextItem];
|
|
47
|
+
}
|
|
48
|
+
var next = queue.filter(function (item) {
|
|
49
|
+
return item.dataIndex === dataIndex || isMultipleSorter(columnMap.get(item.dataIndex));
|
|
50
|
+
});
|
|
51
|
+
var currentIndex = next.findIndex(function (item) {
|
|
52
|
+
return item.dataIndex === dataIndex;
|
|
53
|
+
});
|
|
54
|
+
if (currentIndex === -1) {
|
|
55
|
+
next.push(nextItem);
|
|
56
|
+
} else {
|
|
57
|
+
next[currentIndex] = nextItem;
|
|
58
|
+
}
|
|
59
|
+
if (typeof multiple === 'number') {
|
|
60
|
+
var limit = Math.max(1, Math.floor(multiple));
|
|
61
|
+
while (next.length > limit) {
|
|
62
|
+
var removeIndex = next.findIndex(function (item) {
|
|
63
|
+
return item.dataIndex !== dataIndex;
|
|
64
|
+
});
|
|
65
|
+
if (removeIndex === -1) break;
|
|
66
|
+
next.splice(removeIndex, 1);
|
|
86
67
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
68
|
+
}
|
|
69
|
+
return next;
|
|
70
|
+
};
|
|
71
|
+
var normalizeQueue = function normalizeQueue(queue, columnMap) {
|
|
72
|
+
return queue.reduce(function (next, item) {
|
|
73
|
+
var column = columnMap.get(item.dataIndex);
|
|
74
|
+
return column ? applySortChange(next, column, item.order, columnMap) : next;
|
|
75
|
+
}, []);
|
|
76
|
+
};
|
|
77
|
+
var areQueuesEqual = function areQueuesEqual(a, b) {
|
|
78
|
+
return a.length === b.length && a.every(function (item, index) {
|
|
79
|
+
var _b$index, _b$index2;
|
|
80
|
+
return item.dataIndex === ((_b$index = b[index]) === null || _b$index === void 0 ? void 0 : _b$index.dataIndex) && item.order === ((_b$index2 = b[index]) === null || _b$index2 === void 0 ? void 0 : _b$index2.order);
|
|
81
|
+
});
|
|
82
|
+
};
|
|
83
|
+
var createColumnMap = function createColumnMap(columns) {
|
|
84
|
+
return new Map(columns.filter(function (column) {
|
|
85
|
+
return Boolean(column.dataIndex && column.sorter);
|
|
86
|
+
}).map(function (column) {
|
|
87
|
+
return [column.dataIndex, column];
|
|
88
|
+
}));
|
|
89
|
+
};
|
|
90
|
+
var createInitialQueue = function createInitialQueue(columns, columnMap) {
|
|
91
|
+
return columns.reduce(function (queue, column) {
|
|
92
|
+
var config = getSorterConfig(column);
|
|
93
|
+
var order = toSortOrder((config === null || config === void 0 ? void 0 : config.sortOrder) !== undefined ? config.sortOrder : config === null || config === void 0 ? void 0 : config.defaultSortOrder);
|
|
94
|
+
return order ? applySortChange(queue, column, order, columnMap) : queue;
|
|
95
|
+
}, []);
|
|
96
|
+
};
|
|
97
|
+
var mergeControlledSorters = function mergeControlledSorters(queue, columns, columnMap) {
|
|
98
|
+
var controlledOrders = new Map();
|
|
99
|
+
columns.forEach(function (column) {
|
|
100
|
+
var config = getSorterConfig(column);
|
|
101
|
+
if (column.dataIndex && (config === null || config === void 0 ? void 0 : config.sortOrder) !== undefined) {
|
|
102
|
+
controlledOrders.set(column.dataIndex, toSortOrder(config.sortOrder));
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
var uncontrolledQueue = queue.filter(function (item) {
|
|
106
|
+
return !controlledOrders.has(item.dataIndex);
|
|
107
|
+
});
|
|
108
|
+
var controlledQueue = [];
|
|
109
|
+
queue.forEach(function (item) {
|
|
110
|
+
var controlledOrder = controlledOrders.get(item.dataIndex);
|
|
111
|
+
if (controlledOrder === undefined) return;
|
|
112
|
+
controlledOrders.delete(item.dataIndex);
|
|
113
|
+
if (controlledOrder) {
|
|
114
|
+
controlledQueue.push({
|
|
115
|
+
dataIndex: item.dataIndex,
|
|
116
|
+
order: controlledOrder
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
columns.forEach(function (column) {
|
|
121
|
+
var dataIndex = column.dataIndex;
|
|
122
|
+
if (!dataIndex) return;
|
|
123
|
+
var controlledOrder = controlledOrders.get(dataIndex);
|
|
124
|
+
if (controlledOrder) {
|
|
125
|
+
controlledQueue.push({
|
|
126
|
+
dataIndex: dataIndex,
|
|
127
|
+
order: controlledOrder
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
return normalizeQueue([].concat(_toConsumableArray(uncontrolledQueue), controlledQueue), columnMap);
|
|
132
|
+
};
|
|
133
|
+
var queueToSortState = function queueToSortState(queue) {
|
|
134
|
+
return Object.fromEntries(queue.map(function (_ref) {
|
|
135
|
+
var dataIndex = _ref.dataIndex,
|
|
136
|
+
order = _ref.order;
|
|
137
|
+
return [dataIndex, order];
|
|
138
|
+
}));
|
|
139
|
+
};
|
|
140
|
+
var compareValues = function compareValues(a, b) {
|
|
141
|
+
if (Object.is(a, b)) return 0;
|
|
142
|
+
if (typeof a === 'number' && typeof b === 'number') return a - b;
|
|
143
|
+
if (typeof a === 'bigint' && typeof b === 'bigint') return a < b ? -1 : 1;
|
|
144
|
+
if (a instanceof Date && b instanceof Date) return a.getTime() - b.getTime();
|
|
145
|
+
if (typeof a === 'boolean' && typeof b === 'boolean') {
|
|
146
|
+
return Number(a) - Number(b);
|
|
147
|
+
}
|
|
148
|
+
return String(a).localeCompare(String(b));
|
|
149
|
+
};
|
|
150
|
+
var sortData = function sortData(data, queue, columnMap) {
|
|
151
|
+
if (!queue.length) return data;
|
|
152
|
+
return _toConsumableArray(data).sort(function (a, b) {
|
|
153
|
+
var _iterator = _createForOfIteratorHelper(queue),
|
|
154
|
+
_step;
|
|
155
|
+
try {
|
|
156
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
157
|
+
var _getSorterConfig3;
|
|
158
|
+
var _step$value = _step.value,
|
|
159
|
+
dataIndex = _step$value.dataIndex,
|
|
160
|
+
order = _step$value.order;
|
|
161
|
+
var aValue = a[dataIndex];
|
|
162
|
+
var bValue = b[dataIndex];
|
|
163
|
+
var compare = (_getSorterConfig3 = getSorterConfig(columnMap.get(dataIndex))) === null || _getSorterConfig3 === void 0 ? void 0 : _getSorterConfig3.sort;
|
|
164
|
+
if (compare) {
|
|
165
|
+
var _result = compare(a, b);
|
|
166
|
+
if (_result !== 0) {
|
|
167
|
+
return order === -1 ? -_result : _result;
|
|
109
168
|
}
|
|
169
|
+
continue;
|
|
170
|
+
}
|
|
171
|
+
if (aValue === null && bValue === null) continue;
|
|
172
|
+
if (aValue === null || aValue === undefined) return 1;
|
|
173
|
+
if (bValue === null || bValue === undefined) return -1;
|
|
174
|
+
var result = compareValues(aValue, bValue);
|
|
175
|
+
if (result !== 0) {
|
|
176
|
+
return order === -1 ? -result : result;
|
|
110
177
|
}
|
|
111
|
-
} catch (err) {
|
|
112
|
-
_iterator.e(err);
|
|
113
|
-
} finally {
|
|
114
|
-
_iterator.f();
|
|
115
178
|
}
|
|
116
|
-
|
|
179
|
+
} catch (err) {
|
|
180
|
+
_iterator.e(err);
|
|
181
|
+
} finally {
|
|
182
|
+
_iterator.f();
|
|
183
|
+
}
|
|
184
|
+
return 0;
|
|
185
|
+
});
|
|
186
|
+
};
|
|
187
|
+
export default function useSorter(_ref2) {
|
|
188
|
+
var data = _ref2.data,
|
|
189
|
+
columns = _ref2.columns;
|
|
190
|
+
var columnMap = useMemo(function () {
|
|
191
|
+
return createColumnMap(columns);
|
|
192
|
+
}, [columns]);
|
|
193
|
+
var _useState = useState(function () {
|
|
194
|
+
return createInitialQueue(columns, columnMap);
|
|
195
|
+
}),
|
|
196
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
197
|
+
internalQueue = _useState2[0],
|
|
198
|
+
setInternalQueue = _useState2[1];
|
|
199
|
+
useEffect(function () {
|
|
200
|
+
setInternalQueue(function (current) {
|
|
201
|
+
var next = normalizeQueue(current, columnMap);
|
|
202
|
+
return areQueuesEqual(current, next) ? current : next;
|
|
117
203
|
});
|
|
118
|
-
|
|
119
|
-
|
|
204
|
+
}, [columnMap]);
|
|
205
|
+
var activeQueue = useMemo(function () {
|
|
206
|
+
return mergeControlledSorters(internalQueue, columns, columnMap);
|
|
207
|
+
}, [internalQueue, columns, columnMap]);
|
|
208
|
+
var sorters = useMemo(function () {
|
|
209
|
+
return queueToSortState(activeQueue);
|
|
210
|
+
}, [activeQueue]);
|
|
211
|
+
var sorted = useMemo(function () {
|
|
212
|
+
return sortData(data, activeQueue, columnMap);
|
|
213
|
+
}, [data, activeQueue, columnMap]);
|
|
214
|
+
var onSort = useCallback(function (dataIndex) {
|
|
215
|
+
var _activeQueue$find$ord, _activeQueue$find;
|
|
216
|
+
var column = columnMap.get(dataIndex);
|
|
217
|
+
if (!column) return {
|
|
218
|
+
data: sorted,
|
|
219
|
+
sorters: sorters
|
|
220
|
+
};
|
|
221
|
+
var currentOrder = (_activeQueue$find$ord = (_activeQueue$find = activeQueue.find(function (item) {
|
|
222
|
+
return item.dataIndex === dataIndex;
|
|
223
|
+
})) === null || _activeQueue$find === void 0 ? void 0 : _activeQueue$find.order) !== null && _activeQueue$find$ord !== void 0 ? _activeQueue$find$ord : 0;
|
|
224
|
+
var nextQueue = applySortChange(activeQueue, column, getNextSortOrder(currentOrder), columnMap);
|
|
225
|
+
var nextSorters = queueToSortState(nextQueue);
|
|
226
|
+
var nextData = sortData(data, nextQueue, columnMap);
|
|
227
|
+
setInternalQueue(nextQueue);
|
|
228
|
+
return {
|
|
229
|
+
data: nextData,
|
|
230
|
+
sorters: nextSorters
|
|
231
|
+
};
|
|
232
|
+
}, [activeQueue, columnMap, data, sorted, sorters]);
|
|
120
233
|
return {
|
|
121
234
|
data: sorted,
|
|
122
235
|
sorters: sorters,
|
|
@@ -23,7 +23,7 @@ export interface ExpandableType {
|
|
|
23
23
|
/**
|
|
24
24
|
* Default expanded rows
|
|
25
25
|
*/
|
|
26
|
-
defaultExpandedRowKeys?:
|
|
26
|
+
defaultExpandedRowKeys?: SelectionKeyType[];
|
|
27
27
|
/**
|
|
28
28
|
* Expanded rows
|
|
29
29
|
*/
|
|
@@ -51,6 +51,7 @@ export interface ExpandableType {
|
|
|
51
51
|
expandedRowRender?: (record: object, index: number, page: Record<string, any>) => React.ReactNode;
|
|
52
52
|
}
|
|
53
53
|
export type SelectionKeyType = string | number;
|
|
54
|
+
export type FilterValue = string | number;
|
|
54
55
|
export type ColumnSemanticType = 'inner' | 'action';
|
|
55
56
|
export interface HeadCellProps extends Omit<WrapedColumnProps, 'title'> {
|
|
56
57
|
prefixCls?: string;
|
|
@@ -186,7 +187,7 @@ export interface ColumnProps {
|
|
|
186
187
|
/**
|
|
187
188
|
* Filter callback function
|
|
188
189
|
*/
|
|
189
|
-
onFilter?: (value:
|
|
190
|
+
onFilter?: (value: FilterValue, record: Record<string, any>) => boolean;
|
|
190
191
|
};
|
|
191
192
|
/**
|
|
192
193
|
* Sorter config
|
|
@@ -195,9 +196,10 @@ export interface ColumnProps {
|
|
|
195
196
|
/**
|
|
196
197
|
* Sort function
|
|
197
198
|
*/
|
|
198
|
-
sort?: () => number
|
|
199
|
+
sort?: (a: Record<string, unknown>, b: Record<string, unknown>) => number;
|
|
199
200
|
/**
|
|
200
|
-
*
|
|
201
|
+
* Enable multi-column sorting. A positive number limits the active
|
|
202
|
+
* sorters; when exceeded, the earliest activated sorter is removed.
|
|
201
203
|
*/
|
|
202
204
|
multiple?: boolean | number;
|
|
203
205
|
/**
|
|
@@ -359,6 +361,7 @@ export interface TableRowProps {
|
|
|
359
361
|
pageSize: number;
|
|
360
362
|
index: number;
|
|
361
363
|
record: Record<string, any>;
|
|
364
|
+
rowKeyValue: SelectionKeyType;
|
|
362
365
|
columns: ColumnProps[];
|
|
363
366
|
expandable?: ExpandableType;
|
|
364
367
|
expandedRowKeys?: Array<string | number>;
|
|
@@ -375,7 +378,7 @@ export interface TableRowProps {
|
|
|
375
378
|
record: Record<string, any>;
|
|
376
379
|
index: number;
|
|
377
380
|
}) => void;
|
|
378
|
-
onSelectionChange: (event: ChangeEvent<HTMLInputElement
|
|
381
|
+
onSelectionChange: (event: ChangeEvent<HTMLInputElement>, key: SelectionKeyType) => void;
|
|
379
382
|
}
|
|
380
383
|
type LazyLoadType = {
|
|
381
384
|
lazyLoadRows?: number;
|
|
@@ -389,7 +392,7 @@ export interface LazyRowProps extends TableRowProps {
|
|
|
389
392
|
};
|
|
390
393
|
lazyLoad?: boolean | LazyLoadType;
|
|
391
394
|
}
|
|
392
|
-
export interface TableBodyProps extends Omit<LazyRowProps, 'index' | 'record'> {
|
|
395
|
+
export interface TableBodyProps extends Omit<LazyRowProps, 'index' | 'record' | 'rowKeyValue'> {
|
|
393
396
|
pageData: Array<Record<string, any>>;
|
|
394
397
|
noData?: React.ReactNode;
|
|
395
398
|
}
|
|
@@ -542,7 +545,7 @@ export interface TableProps extends FooterProps, Omit<HeaderProps, 'pageData'>,
|
|
|
542
545
|
* Set the unique key for rows
|
|
543
546
|
* @default id
|
|
544
547
|
*/
|
|
545
|
-
rowKey?: string | ((record: Record<string, any>) =>
|
|
548
|
+
rowKey?: string | ((record: Record<string, any>) => SelectionKeyType);
|
|
546
549
|
/**
|
|
547
550
|
* Summary bar
|
|
548
551
|
*/
|