@rainbow-oh/yee-c 0.8.12 → 0.8.14
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/Pagination/style/index.less +4 -0
- package/dist/cjs/Spin/demo/types.js +1 -1
- package/dist/cjs/Spin/indicator.js +4 -2
- package/dist/cjs/Spin/style/index.less +2 -8
- 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/Pagination/style/index.less +4 -0
- package/dist/esm/Spin/demo/types.js +6 -3
- package/dist/esm/Spin/indicator.js +4 -2
- package/dist/esm/Spin/style/index.less +2 -8
- 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.css +1 -1
- package/dist/umd/yee-c.min.js +1 -1
- package/package.json +1 -1
- package/src/Pagination/style/index.less +4 -0
- package/src/Spin/demo/types.tsx +3 -3
- package/src/Spin/index.en-US.md +2 -8
- package/src/Spin/index.zh-CN.md +2 -8
- package/src/Spin/indicator.tsx +2 -0
- package/src/Spin/style/index.less +2 -8
- 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
|
@@ -1,13 +1,19 @@
|
|
|
1
|
-
type FilterValue
|
|
1
|
+
import type { ColumnProps, FilterValue } from '../interface';
|
|
2
2
|
type FilterInput = FilterValue | FilterValue[];
|
|
3
3
|
type FilterOptions = {
|
|
4
4
|
dataIndex: string;
|
|
5
5
|
value: FilterInput;
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
type FilterRecord = {
|
|
8
|
+
value: FilterInput;
|
|
9
|
+
dataIndex: string;
|
|
10
|
+
};
|
|
11
|
+
export default function useFilter({ data, columns, }: {
|
|
8
12
|
data: Array<Record<string, unknown>>;
|
|
13
|
+
columns: ColumnProps[];
|
|
9
14
|
}): {
|
|
10
15
|
data: Record<string, unknown>[];
|
|
16
|
+
filterRecords: FilterRecord[];
|
|
11
17
|
onFilter: ({ value, dataIndex }: FilterOptions) => void;
|
|
12
18
|
};
|
|
13
19
|
export {};
|
|
@@ -14,7 +14,7 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
14
14
|
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; }
|
|
15
15
|
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; } }
|
|
16
16
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
17
|
-
import { useMemo, useState } from 'react';
|
|
17
|
+
import { useEffect, useMemo, useState } from 'react';
|
|
18
18
|
var isEmptyFilterValue = function isEmptyFilterValue(value) {
|
|
19
19
|
return value === '' || Array.isArray(value) && value.length === 0;
|
|
20
20
|
};
|
|
@@ -22,52 +22,71 @@ var normalizeValue = function normalizeValue(value) {
|
|
|
22
22
|
return value === null || value === undefined ? '' : String(value).toLowerCase();
|
|
23
23
|
};
|
|
24
24
|
export default function useFilter(_ref) {
|
|
25
|
-
var data = _ref.data
|
|
25
|
+
var data = _ref.data,
|
|
26
|
+
columns = _ref.columns;
|
|
26
27
|
var _useState = useState([]),
|
|
27
28
|
_useState2 = _slicedToArray(_useState, 2),
|
|
28
29
|
filterRecords = _useState2[0],
|
|
29
30
|
setFilterRecords = _useState2[1];
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
dataIndex
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
var columnMap = useMemo(function () {
|
|
32
|
+
return new Map(columns.flatMap(function (column) {
|
|
33
|
+
return column.dataIndex ? [[column.dataIndex, column]] : [];
|
|
34
|
+
}));
|
|
35
|
+
}, [columns]);
|
|
36
|
+
useEffect(function () {
|
|
37
|
+
setFilterRecords(function (current) {
|
|
38
|
+
var next = current.filter(function (_ref2) {
|
|
39
|
+
var dataIndex = _ref2.dataIndex;
|
|
40
|
+
return columnMap.has(dataIndex);
|
|
37
41
|
});
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
return next.length === current.length ? current : next;
|
|
43
|
+
});
|
|
44
|
+
}, [columnMap]);
|
|
45
|
+
var onFilter = function onFilter(_ref3) {
|
|
46
|
+
var value = _ref3.value,
|
|
47
|
+
dataIndex = _ref3.dataIndex;
|
|
48
|
+
setFilterRecords(function (current) {
|
|
49
|
+
if (isEmptyFilterValue(value)) {
|
|
50
|
+
return current.filter(function (item) {
|
|
51
|
+
return item.dataIndex !== dataIndex;
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
var index = current.findIndex(function (item) {
|
|
55
|
+
return item.dataIndex === dataIndex;
|
|
48
56
|
});
|
|
49
|
-
if (
|
|
50
|
-
|
|
57
|
+
if (index === -1) {
|
|
58
|
+
return [].concat(_toConsumableArray(current), [{
|
|
51
59
|
dataIndex: dataIndex,
|
|
52
60
|
value: value
|
|
53
|
-
});
|
|
61
|
+
}]);
|
|
54
62
|
}
|
|
55
|
-
|
|
56
|
-
|
|
63
|
+
return current.map(function (item, itemIndex) {
|
|
64
|
+
return itemIndex === index ? _objectSpread(_objectSpread({}, item), {}, {
|
|
65
|
+
value: value
|
|
66
|
+
}) : item;
|
|
67
|
+
});
|
|
68
|
+
});
|
|
57
69
|
};
|
|
58
70
|
var filtered = useMemo(function () {
|
|
59
|
-
var handled = filterRecords.filter(function (
|
|
60
|
-
var dataIndex =
|
|
61
|
-
value =
|
|
62
|
-
return Boolean(dataIndex) && !isEmptyFilterValue(value);
|
|
71
|
+
var handled = filterRecords.filter(function (_ref4) {
|
|
72
|
+
var dataIndex = _ref4.dataIndex,
|
|
73
|
+
value = _ref4.value;
|
|
74
|
+
return Boolean(dataIndex) && columnMap.has(dataIndex) && !isEmptyFilterValue(value);
|
|
63
75
|
});
|
|
64
76
|
if (!handled.length) {
|
|
65
77
|
return data;
|
|
66
78
|
}
|
|
67
79
|
return data.filter(function (item) {
|
|
68
|
-
return handled.
|
|
69
|
-
var
|
|
70
|
-
|
|
80
|
+
return handled.every(function (_ref5) {
|
|
81
|
+
var _columnMap$get;
|
|
82
|
+
var dataIndex = _ref5.dataIndex,
|
|
83
|
+
value = _ref5.value;
|
|
84
|
+
var customFilter = (_columnMap$get = columnMap.get(dataIndex)) === null || _columnMap$get === void 0 || (_columnMap$get = _columnMap$get.filter) === null || _columnMap$get === void 0 ? void 0 : _columnMap$get.onFilter;
|
|
85
|
+
if (customFilter) {
|
|
86
|
+
return Array.isArray(value) ? value.some(function (filterValue) {
|
|
87
|
+
return customFilter(filterValue, item);
|
|
88
|
+
}) : customFilter(value, item);
|
|
89
|
+
}
|
|
71
90
|
var targetValue = normalizeValue(item[dataIndex]);
|
|
72
91
|
if (Array.isArray(value)) {
|
|
73
92
|
return value.some(function (filterValue) {
|
|
@@ -77,9 +96,10 @@ export default function useFilter(_ref) {
|
|
|
77
96
|
return targetValue.includes(normalizeValue(value));
|
|
78
97
|
});
|
|
79
98
|
});
|
|
80
|
-
}, [data, filterRecords]);
|
|
99
|
+
}, [columnMap, data, filterRecords]);
|
|
81
100
|
return {
|
|
82
101
|
data: filtered,
|
|
102
|
+
filterRecords: filterRecords,
|
|
83
103
|
onFilter: onFilter
|
|
84
104
|
};
|
|
85
105
|
}
|
|
@@ -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,
|