yuand 1.0.4 → 1.0.6
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/es/components/Table/index.js +12 -3
- package/es/components/Table/types.d.ts +0 -1
- package/es/components/Table/useTable.js +0 -21
- package/es/components/TableUseFetch/index.js +49 -28
- package/es/components/TableUseFetch/types.d.ts +0 -2
- package/es/components/TableUseFetch/useTable.js +0 -16
- package/lib/components/Table/index.js +12 -3
- package/lib/components/Table/types.d.ts +0 -1
- package/lib/components/Table/useTable.js +0 -17
- package/lib/components/TableUseFetch/index.js +40 -27
- package/lib/components/TableUseFetch/types.d.ts +0 -2
- package/lib/components/TableUseFetch/useTable.js +0 -14
- package/package.json +2 -6
- package/README.test.md +0 -112
|
@@ -163,13 +163,22 @@ var ProTable = function ProTable(props) {
|
|
|
163
163
|
}
|
|
164
164
|
}, [data, useData]);
|
|
165
165
|
var _useMemo = useMemo(function () {
|
|
166
|
+
var isFunctionColumns = typeof columns === 'function';
|
|
167
|
+
var column = isFunctionColumns ? columns(data) : columns;
|
|
168
|
+
if (!isFunctionColumns) {
|
|
169
|
+
column.map(function (col) {
|
|
170
|
+
if (col.sorter) {
|
|
171
|
+
col.sortOrder = sorter && sorter.field === col.dataIndex ? sorter.order : null;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
166
175
|
return {
|
|
167
|
-
column:
|
|
176
|
+
column: column,
|
|
168
177
|
dataSource: getDataSource(data, dataKey),
|
|
169
178
|
renderAlert: typeof alert === "function" ? alert(data) : alert,
|
|
170
179
|
total: getTotal(totalKey, data)
|
|
171
180
|
};
|
|
172
|
-
}, [columns, data, dataKey, totalKey]),
|
|
181
|
+
}, [columns, data, dataKey, totalKey, sorter]),
|
|
173
182
|
dataSource = _useMemo.dataSource,
|
|
174
183
|
total = _useMemo.total,
|
|
175
184
|
column = _useMemo.column,
|
|
@@ -224,7 +233,7 @@ var ProTable = function ProTable(props) {
|
|
|
224
233
|
return function () {
|
|
225
234
|
table.resetStore();
|
|
226
235
|
};
|
|
227
|
-
}, [
|
|
236
|
+
}, []);
|
|
228
237
|
var onFinish = useCallback(function (values) {
|
|
229
238
|
if (formHandleValues) {
|
|
230
239
|
values = formHandleValues(values);
|
|
@@ -40,13 +40,6 @@ var useTable = function useTable() {
|
|
|
40
40
|
clear: function clear() {},
|
|
41
41
|
refresh: function refresh() {},
|
|
42
42
|
reset: function reset() {},
|
|
43
|
-
sortOrder: function sortOrder(key) {
|
|
44
|
-
var sorter = useStore.getState().sorter;
|
|
45
|
-
if (sorter && sorter.field === key) {
|
|
46
|
-
return sorter.order;
|
|
47
|
-
}
|
|
48
|
-
return null;
|
|
49
|
-
},
|
|
50
43
|
resetStore: function resetStore() {
|
|
51
44
|
useStore.getState().setState(initState);
|
|
52
45
|
},
|
|
@@ -56,20 +49,6 @@ var useTable = function useTable() {
|
|
|
56
49
|
});
|
|
57
50
|
}
|
|
58
51
|
};
|
|
59
|
-
useStore.subscribe(function (state, prevState) {
|
|
60
|
-
var _state$sorter, _prevState$sorter, _state$sorter2, _prevState$sorter2;
|
|
61
|
-
// 只在排序真正变化时才触发更新
|
|
62
|
-
var sorterChanged = state.sorter !== prevState.sorter;
|
|
63
|
-
var orderChanged = ((_state$sorter = state.sorter) === null || _state$sorter === void 0 ? void 0 : _state$sorter.order) !== ((_prevState$sorter = prevState.sorter) === null || _prevState$sorter === void 0 ? void 0 : _prevState$sorter.order);
|
|
64
|
-
var fieldChanged = ((_state$sorter2 = state.sorter) === null || _state$sorter2 === void 0 ? void 0 : _state$sorter2.field) !== ((_prevState$sorter2 = prevState.sorter) === null || _prevState$sorter2 === void 0 ? void 0 : _prevState$sorter2.field);
|
|
65
|
-
if (sorterChanged && (orderChanged || fieldChanged)) {
|
|
66
|
-
// 创建新的引用以触发使用 tableRef.current 的组件更新
|
|
67
|
-
tableRef.current = _objectSpread({}, tableRef.current);
|
|
68
|
-
_update(function (v) {
|
|
69
|
-
return v + 1;
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
52
|
}
|
|
74
53
|
return [tableRef.current];
|
|
75
54
|
};
|
|
@@ -11,31 +11,40 @@ import useFetch from "../../hooks/useFetch";
|
|
|
11
11
|
import useX from "../../hooks/useX";
|
|
12
12
|
import useTable from "./useTable";
|
|
13
13
|
import "./style.css";
|
|
14
|
+
|
|
15
|
+
// 统一默认配置管理
|
|
14
16
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
17
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
root: {},
|
|
23
|
-
form: {
|
|
24
|
-
display: "flex",
|
|
25
|
-
justifyContent: "space-between"
|
|
18
|
+
var DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
19
|
+
var DEFAULT_CONFIG = {
|
|
20
|
+
classNames: {
|
|
21
|
+
root: "main-container",
|
|
22
|
+
form: "search-form",
|
|
23
|
+
table: "main-table"
|
|
26
24
|
},
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
styles: {
|
|
26
|
+
root: {},
|
|
27
|
+
form: {
|
|
28
|
+
display: "flex",
|
|
29
|
+
justifyContent: "space-between"
|
|
30
|
+
},
|
|
31
|
+
table: {},
|
|
32
|
+
toolbar: {
|
|
33
|
+
marginBottom: 15
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
pagination: {
|
|
37
|
+
showQuickJumper: true,
|
|
38
|
+
showSizeChanger: true,
|
|
39
|
+
hideOnSinglePage: false
|
|
30
40
|
}
|
|
31
41
|
};
|
|
32
|
-
var DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
33
42
|
var ProTable = function ProTable(props) {
|
|
34
|
-
var _pagination$
|
|
43
|
+
var _pagination$showTotal, _pagination$pageSizeO, _classNames$root, _classNames$form, _classNames$table;
|
|
35
44
|
var _props$classNames = props.classNames,
|
|
36
|
-
classNames = _props$classNames === void 0 ?
|
|
45
|
+
classNames = _props$classNames === void 0 ? DEFAULT_CONFIG.classNames : _props$classNames,
|
|
37
46
|
_props$styles = props.styles,
|
|
38
|
-
styles = _props$styles === void 0 ?
|
|
47
|
+
styles = _props$styles === void 0 ? DEFAULT_CONFIG.styles : _props$styles,
|
|
39
48
|
table = props.table,
|
|
40
49
|
locale = props.locale,
|
|
41
50
|
_props$dataKey = props.dataKey,
|
|
@@ -51,16 +60,14 @@ var ProTable = function ProTable(props) {
|
|
|
51
60
|
alert = props.alert,
|
|
52
61
|
_props$toolbar = props.toolbar,
|
|
53
62
|
toolbar = _props$toolbar === void 0 ? null : _props$toolbar,
|
|
54
|
-
pagination = props.pagination,
|
|
63
|
+
_props$pagination = props.pagination,
|
|
64
|
+
pagination = _props$pagination === void 0 ? DEFAULT_CONFIG.pagination : _props$pagination,
|
|
55
65
|
scroll = props.scroll,
|
|
56
66
|
prop = _objectWithoutProperties(props, _excluded);
|
|
57
|
-
(_pagination$showQuick = pagination.showQuickJumper) !== null && _pagination$showQuick !== void 0 ? _pagination$showQuick : pagination.showQuickJumper = true;
|
|
58
|
-
(_pagination$showSizeC = pagination.showSizeChanger) !== null && _pagination$showSizeC !== void 0 ? _pagination$showSizeC : pagination.showSizeChanger = true;
|
|
59
|
-
(_pagination$hideOnSin = pagination.hideOnSinglePage) !== null && _pagination$hideOnSin !== void 0 ? _pagination$hideOnSin : pagination.hideOnSinglePage = false;
|
|
60
|
-
(_pagination$pageSizeO = pagination.pageSizeOptions) !== null && _pagination$pageSizeO !== void 0 ? _pagination$pageSizeO : pagination.pageSizeOptions = ProTable.pageSizeOptions;
|
|
61
67
|
(_pagination$showTotal = pagination.showTotal) !== null && _pagination$showTotal !== void 0 ? _pagination$showTotal : pagination.showTotal = function (total) {
|
|
62
68
|
return "\u5171 ".concat(total, " \u6761\u8BB0\u5F55");
|
|
63
69
|
};
|
|
70
|
+
(_pagination$pageSizeO = pagination.pageSizeOptions) !== null && _pagination$pageSizeO !== void 0 ? _pagination$pageSizeO : pagination.pageSizeOptions = ProTable.pageSizeOptions;
|
|
64
71
|
var formTitle = form.title,
|
|
65
72
|
formExtra = form.extra,
|
|
66
73
|
formRight = form.right,
|
|
@@ -112,13 +119,22 @@ var ProTable = function ProTable(props) {
|
|
|
112
119
|
}),
|
|
113
120
|
loading = _useFetch.loading;
|
|
114
121
|
var _useMemo = useMemo(function () {
|
|
122
|
+
var isFunctionColumns = typeof columns === 'function';
|
|
123
|
+
var column = isFunctionColumns ? columns(data) : columns;
|
|
124
|
+
if (!isFunctionColumns) {
|
|
125
|
+
column.map(function (col) {
|
|
126
|
+
if (col.sorter) {
|
|
127
|
+
col.sortOrder = sorter && sorter.field === col.dataIndex ? sorter.order : null;
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
115
131
|
return {
|
|
116
|
-
column:
|
|
132
|
+
column: column,
|
|
117
133
|
dataSource: getDataSource(data, dataKey),
|
|
118
134
|
renderAlert: typeof alert === "function" ? alert(data) : alert,
|
|
119
135
|
total: getTotal(totalKey, data)
|
|
120
136
|
};
|
|
121
|
-
}, [columns, data, dataKey, totalKey]),
|
|
137
|
+
}, [columns, data, dataKey, totalKey, sorter]),
|
|
122
138
|
dataSource = _useMemo.dataSource,
|
|
123
139
|
total = _useMemo.total,
|
|
124
140
|
column = _useMemo.column,
|
|
@@ -163,7 +179,12 @@ var ProTable = function ProTable(props) {
|
|
|
163
179
|
ready: true
|
|
164
180
|
});
|
|
165
181
|
}
|
|
166
|
-
}, [
|
|
182
|
+
}, []);
|
|
183
|
+
useEffect(function () {
|
|
184
|
+
return function () {
|
|
185
|
+
table.resetStore();
|
|
186
|
+
};
|
|
187
|
+
}, []);
|
|
167
188
|
var onFinish = function onFinish(values) {
|
|
168
189
|
if (formHandleValues) {
|
|
169
190
|
values = formHandleValues(values);
|
|
@@ -206,10 +227,10 @@ var ProTable = function ProTable(props) {
|
|
|
206
227
|
}, prop));
|
|
207
228
|
};
|
|
208
229
|
return /*#__PURE__*/_jsxs("div", {
|
|
209
|
-
className: (_classNames$root = classNames === null || classNames === void 0 ? void 0 : classNames.root) !== null && _classNames$root !== void 0 ? _classNames$root :
|
|
230
|
+
className: (_classNames$root = classNames === null || classNames === void 0 ? void 0 : classNames.root) !== null && _classNames$root !== void 0 ? _classNames$root : DEFAULT_CONFIG.classNames.root,
|
|
210
231
|
style: styles.root,
|
|
211
232
|
children: [!!formItems && /*#__PURE__*/_jsxs("div", {
|
|
212
|
-
className: (_classNames$form = classNames === null || classNames === void 0 ? void 0 : classNames.form) !== null && _classNames$form !== void 0 ? _classNames$form :
|
|
233
|
+
className: (_classNames$form = classNames === null || classNames === void 0 ? void 0 : classNames.form) !== null && _classNames$form !== void 0 ? _classNames$form : DEFAULT_CONFIG.classNames.form,
|
|
213
234
|
style: styles.form,
|
|
214
235
|
children: [/*#__PURE__*/_jsxs(Form, _objectSpread(_objectSpread({
|
|
215
236
|
form: table.form,
|
|
@@ -234,7 +255,7 @@ var ProTable = function ProTable(props) {
|
|
|
234
255
|
})]
|
|
235
256
|
})), formRight]
|
|
236
257
|
}), /*#__PURE__*/_jsxs("div", {
|
|
237
|
-
className: (_classNames$table = classNames === null || classNames === void 0 ? void 0 : classNames.table) !== null && _classNames$table !== void 0 ? _classNames$table :
|
|
258
|
+
className: (_classNames$table = classNames === null || classNames === void 0 ? void 0 : classNames.table) !== null && _classNames$table !== void 0 ? _classNames$table : DEFAULT_CONFIG.classNames.table,
|
|
238
259
|
style: styles.table,
|
|
239
260
|
children: [toolbar && /*#__PURE__*/_jsx("div", {
|
|
240
261
|
style: styles.toolbar,
|
|
@@ -25,7 +25,6 @@ export interface TableInstance<TData = any> {
|
|
|
25
25
|
clear: () => void;
|
|
26
26
|
refresh: () => void;
|
|
27
27
|
reset: () => void;
|
|
28
|
-
sortOrder: (key: string) => any;
|
|
29
28
|
update: () => void;
|
|
30
29
|
resetStore: () => void;
|
|
31
30
|
form?: FormInstance;
|
|
@@ -86,7 +85,6 @@ export interface TableRef {
|
|
|
86
85
|
clear: () => void;
|
|
87
86
|
refresh: () => void;
|
|
88
87
|
reset: () => void;
|
|
89
|
-
sortOrder: (key: string) => "ascend" | "descend" | null;
|
|
90
88
|
resetStore: () => void;
|
|
91
89
|
update: () => void;
|
|
92
90
|
}
|
|
@@ -47,13 +47,6 @@ var useTable = function useTable() {
|
|
|
47
47
|
});
|
|
48
48
|
},
|
|
49
49
|
reset: function reset() {},
|
|
50
|
-
sortOrder: function sortOrder(key) {
|
|
51
|
-
var sorter = useStore.getState().sorter;
|
|
52
|
-
if (sorter && sorter.field === key) {
|
|
53
|
-
return sorter.order;
|
|
54
|
-
}
|
|
55
|
-
return null;
|
|
56
|
-
},
|
|
57
50
|
resetStore: function resetStore() {
|
|
58
51
|
useStore.getState().setState(initState);
|
|
59
52
|
},
|
|
@@ -63,15 +56,6 @@ var useTable = function useTable() {
|
|
|
63
56
|
});
|
|
64
57
|
}
|
|
65
58
|
};
|
|
66
|
-
useStore.subscribe(function (state, prevState) {
|
|
67
|
-
var _state$sorter, _prevState$sorter;
|
|
68
|
-
if (state.sorter !== prevState.sorter && ((_state$sorter = state.sorter) === null || _state$sorter === void 0 ? void 0 : _state$sorter.order) !== ((_prevState$sorter = prevState.sorter) === null || _prevState$sorter === void 0 ? void 0 : _prevState$sorter.order)) {
|
|
69
|
-
tableRef.current = _objectSpread({}, tableRef.current);
|
|
70
|
-
_update(function (v) {
|
|
71
|
-
return v + 1;
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
});
|
|
75
59
|
}
|
|
76
60
|
return [tableRef.current];
|
|
77
61
|
};
|
|
@@ -154,13 +154,22 @@ var ProTable = (props) => {
|
|
|
154
154
|
}
|
|
155
155
|
}, [data, useData]);
|
|
156
156
|
const { dataSource, total, column, renderAlert } = (0, import_react.useMemo)(() => {
|
|
157
|
+
const isFunctionColumns = typeof columns === "function";
|
|
158
|
+
let column2 = isFunctionColumns ? columns(data) : columns;
|
|
159
|
+
if (!isFunctionColumns) {
|
|
160
|
+
column2.map((col) => {
|
|
161
|
+
if (col.sorter) {
|
|
162
|
+
col.sortOrder = sorter && sorter.field === col.dataIndex ? sorter.order : null;
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
}
|
|
157
166
|
return {
|
|
158
|
-
column:
|
|
167
|
+
column: column2,
|
|
159
168
|
dataSource: (0, import_table.getDataSource)(data, dataKey),
|
|
160
169
|
renderAlert: typeof alert === "function" ? alert(data) : alert,
|
|
161
170
|
total: (0, import_table.getTotal)(totalKey, data)
|
|
162
171
|
};
|
|
163
|
-
}, [columns, data, dataKey, totalKey]);
|
|
172
|
+
}, [columns, data, dataKey, totalKey, sorter]);
|
|
164
173
|
const onSearch = () => {
|
|
165
174
|
if (formItems) {
|
|
166
175
|
table.form.submit();
|
|
@@ -211,7 +220,7 @@ var ProTable = (props) => {
|
|
|
211
220
|
return () => {
|
|
212
221
|
table.resetStore();
|
|
213
222
|
};
|
|
214
|
-
}, [
|
|
223
|
+
}, []);
|
|
215
224
|
const onFinish = (0, import_react.useCallback)((values) => {
|
|
216
225
|
if (formHandleValues) {
|
|
217
226
|
values = formHandleValues(values);
|
|
@@ -57,28 +57,11 @@ var useTable = (options = {}) => {
|
|
|
57
57
|
},
|
|
58
58
|
reset: () => {
|
|
59
59
|
},
|
|
60
|
-
sortOrder(key) {
|
|
61
|
-
const sorter = useStore.getState().sorter;
|
|
62
|
-
if (sorter && sorter.field === key) {
|
|
63
|
-
return sorter.order;
|
|
64
|
-
}
|
|
65
|
-
return null;
|
|
66
|
-
},
|
|
67
60
|
resetStore() {
|
|
68
61
|
useStore.getState().setState(initState);
|
|
69
62
|
},
|
|
70
63
|
update: () => update((v) => v + 1)
|
|
71
64
|
};
|
|
72
|
-
useStore.subscribe((state, prevState) => {
|
|
73
|
-
var _a, _b, _c, _d;
|
|
74
|
-
const sorterChanged = state.sorter !== prevState.sorter;
|
|
75
|
-
const orderChanged = ((_a = state.sorter) == null ? void 0 : _a.order) !== ((_b = prevState.sorter) == null ? void 0 : _b.order);
|
|
76
|
-
const fieldChanged = ((_c = state.sorter) == null ? void 0 : _c.field) !== ((_d = prevState.sorter) == null ? void 0 : _d.field);
|
|
77
|
-
if (sorterChanged && (orderChanged || fieldChanged)) {
|
|
78
|
-
tableRef.current = { ...tableRef.current };
|
|
79
|
-
update((v) => v + 1);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
65
|
}
|
|
83
66
|
return [tableRef.current];
|
|
84
67
|
};
|
|
@@ -42,27 +42,29 @@ var import_useX = __toESM(require("../../hooks/useX"));
|
|
|
42
42
|
var import_useTable = __toESM(require("./useTable"));
|
|
43
43
|
var import_style = require("./style.css");
|
|
44
44
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
45
|
-
var
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
justifyContent: "space-between"
|
|
45
|
+
var DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
46
|
+
var DEFAULT_CONFIG = {
|
|
47
|
+
classNames: {
|
|
48
|
+
root: "main-container",
|
|
49
|
+
form: "search-form",
|
|
50
|
+
table: "main-table"
|
|
51
|
+
},
|
|
52
|
+
styles: {
|
|
53
|
+
root: {},
|
|
54
|
+
form: { display: "flex", justifyContent: "space-between" },
|
|
55
|
+
table: {},
|
|
56
|
+
toolbar: { marginBottom: 15 }
|
|
55
57
|
},
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
58
|
+
pagination: {
|
|
59
|
+
showQuickJumper: true,
|
|
60
|
+
showSizeChanger: true,
|
|
61
|
+
hideOnSinglePage: false
|
|
59
62
|
}
|
|
60
63
|
};
|
|
61
|
-
var DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50, 100];
|
|
62
64
|
var ProTable = (props) => {
|
|
63
65
|
const {
|
|
64
|
-
classNames =
|
|
65
|
-
styles =
|
|
66
|
+
classNames = DEFAULT_CONFIG.classNames,
|
|
67
|
+
styles = DEFAULT_CONFIG.styles,
|
|
66
68
|
table,
|
|
67
69
|
locale,
|
|
68
70
|
dataKey = "data",
|
|
@@ -73,15 +75,12 @@ var ProTable = (props) => {
|
|
|
73
75
|
form = {},
|
|
74
76
|
alert,
|
|
75
77
|
toolbar = null,
|
|
76
|
-
pagination,
|
|
78
|
+
pagination = DEFAULT_CONFIG.pagination,
|
|
77
79
|
scroll,
|
|
78
80
|
...prop
|
|
79
81
|
} = props;
|
|
80
|
-
pagination.showQuickJumper ?? (pagination.showQuickJumper = true);
|
|
81
|
-
pagination.showSizeChanger ?? (pagination.showSizeChanger = true);
|
|
82
|
-
pagination.hideOnSinglePage ?? (pagination.hideOnSinglePage = false);
|
|
83
|
-
pagination.pageSizeOptions ?? (pagination.pageSizeOptions = ProTable.pageSizeOptions);
|
|
84
82
|
pagination.showTotal ?? (pagination.showTotal = (total2) => `共 ${total2} 条记录`);
|
|
83
|
+
pagination.pageSizeOptions ?? (pagination.pageSizeOptions = ProTable.pageSizeOptions);
|
|
85
84
|
const {
|
|
86
85
|
title: formTitle,
|
|
87
86
|
extra: formExtra,
|
|
@@ -129,13 +128,22 @@ var ProTable = (props) => {
|
|
|
129
128
|
}
|
|
130
129
|
});
|
|
131
130
|
const { dataSource, total, column, renderAlert } = (0, import_react.useMemo)(() => {
|
|
131
|
+
const isFunctionColumns = typeof columns === "function";
|
|
132
|
+
let column2 = isFunctionColumns ? columns(data) : columns;
|
|
133
|
+
if (!isFunctionColumns) {
|
|
134
|
+
column2.map((col) => {
|
|
135
|
+
if (col.sorter) {
|
|
136
|
+
col.sortOrder = sorter && sorter.field === col.dataIndex ? sorter.order : null;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
132
140
|
return {
|
|
133
|
-
column:
|
|
141
|
+
column: column2,
|
|
134
142
|
dataSource: (0, import_table.getDataSource)(data, dataKey),
|
|
135
143
|
renderAlert: typeof alert === "function" ? alert(data) : alert,
|
|
136
144
|
total: (0, import_table.getTotal)(totalKey, data)
|
|
137
145
|
};
|
|
138
|
-
}, [columns, data, dataKey, totalKey]);
|
|
146
|
+
}, [columns, data, dataKey, totalKey, sorter]);
|
|
139
147
|
const onSearch = () => {
|
|
140
148
|
if (formItems) {
|
|
141
149
|
table.form.submit();
|
|
@@ -178,7 +186,12 @@ var ProTable = (props) => {
|
|
|
178
186
|
ready: true
|
|
179
187
|
});
|
|
180
188
|
}
|
|
181
|
-
}, [
|
|
189
|
+
}, []);
|
|
190
|
+
(0, import_react.useEffect)(() => {
|
|
191
|
+
return () => {
|
|
192
|
+
table.resetStore();
|
|
193
|
+
};
|
|
194
|
+
}, []);
|
|
182
195
|
const onFinish = (values) => {
|
|
183
196
|
if (formHandleValues) {
|
|
184
197
|
values = formHandleValues(values);
|
|
@@ -224,13 +237,13 @@ var ProTable = (props) => {
|
|
|
224
237
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
225
238
|
"div",
|
|
226
239
|
{
|
|
227
|
-
className: (classNames == null ? void 0 : classNames.root) ??
|
|
240
|
+
className: (classNames == null ? void 0 : classNames.root) ?? DEFAULT_CONFIG.classNames.root,
|
|
228
241
|
style: styles.root,
|
|
229
242
|
children: [
|
|
230
243
|
!!formItems && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
231
244
|
"div",
|
|
232
245
|
{
|
|
233
|
-
className: (classNames == null ? void 0 : classNames.form) ??
|
|
246
|
+
className: (classNames == null ? void 0 : classNames.form) ?? DEFAULT_CONFIG.classNames.form,
|
|
234
247
|
style: styles.form,
|
|
235
248
|
children: [
|
|
236
249
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
@@ -258,7 +271,7 @@ var ProTable = (props) => {
|
|
|
258
271
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
259
272
|
"div",
|
|
260
273
|
{
|
|
261
|
-
className: (classNames == null ? void 0 : classNames.table) ??
|
|
274
|
+
className: (classNames == null ? void 0 : classNames.table) ?? DEFAULT_CONFIG.classNames.table,
|
|
262
275
|
style: styles.table,
|
|
263
276
|
children: [
|
|
264
277
|
toolbar && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: styles.toolbar, children: toolbar }),
|
|
@@ -25,7 +25,6 @@ export interface TableInstance<TData = any> {
|
|
|
25
25
|
clear: () => void;
|
|
26
26
|
refresh: () => void;
|
|
27
27
|
reset: () => void;
|
|
28
|
-
sortOrder: (key: string) => any;
|
|
29
28
|
update: () => void;
|
|
30
29
|
resetStore: () => void;
|
|
31
30
|
form?: FormInstance;
|
|
@@ -86,7 +85,6 @@ export interface TableRef {
|
|
|
86
85
|
clear: () => void;
|
|
87
86
|
refresh: () => void;
|
|
88
87
|
reset: () => void;
|
|
89
|
-
sortOrder: (key: string) => "ascend" | "descend" | null;
|
|
90
88
|
resetStore: () => void;
|
|
91
89
|
update: () => void;
|
|
92
90
|
}
|
|
@@ -62,25 +62,11 @@ var useTable = (options = {}) => {
|
|
|
62
62
|
},
|
|
63
63
|
reset: () => {
|
|
64
64
|
},
|
|
65
|
-
sortOrder(key) {
|
|
66
|
-
const sorter = useStore.getState().sorter;
|
|
67
|
-
if (sorter && sorter.field === key) {
|
|
68
|
-
return sorter.order;
|
|
69
|
-
}
|
|
70
|
-
return null;
|
|
71
|
-
},
|
|
72
65
|
resetStore() {
|
|
73
66
|
useStore.getState().setState(initState);
|
|
74
67
|
},
|
|
75
68
|
update: () => update((v) => v + 1)
|
|
76
69
|
};
|
|
77
|
-
useStore.subscribe((state, prevState) => {
|
|
78
|
-
var _a, _b;
|
|
79
|
-
if (state.sorter !== prevState.sorter && ((_a = state.sorter) == null ? void 0 : _a.order) !== ((_b = prevState.sorter) == null ? void 0 : _b.order)) {
|
|
80
|
-
tableRef.current = { ...tableRef.current };
|
|
81
|
-
update((v) => v + 1);
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
70
|
}
|
|
85
71
|
return [tableRef.current];
|
|
86
72
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yuand",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "hyu",
|
|
5
5
|
"module": "./es/index",
|
|
6
6
|
"main": "./lib/index",
|
|
@@ -10,11 +10,7 @@
|
|
|
10
10
|
"dev": "father dev",
|
|
11
11
|
"build": "sudo father build",
|
|
12
12
|
"build:deps": "father prebundle",
|
|
13
|
-
"prepublishOnly": "father doctor && npm run build"
|
|
14
|
-
"publish": "npm publish --access public",
|
|
15
|
-
"test": "vitest",
|
|
16
|
-
"test:ui": "vitest --ui",
|
|
17
|
-
"test:coverage": "vitest --coverage"
|
|
13
|
+
"prepublishOnly": "father doctor && npm run build"
|
|
18
14
|
},
|
|
19
15
|
"keywords": [],
|
|
20
16
|
"authors": [
|
package/README.test.md
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
# Table 组件测试说明
|
|
2
|
-
|
|
3
|
-
## 安装测试依赖
|
|
4
|
-
|
|
5
|
-
```bash
|
|
6
|
-
npm install -D vitest @vitest/ui @vitejs/plugin-react jsdom
|
|
7
|
-
npm install -D @testing-library/react @testing-library/user-event @testing-library/jest-dom
|
|
8
|
-
npm install -D @types/testing-library__jest-dom
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## 运行测试
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# 运行所有测试
|
|
15
|
-
npm test
|
|
16
|
-
|
|
17
|
-
# 监听模式
|
|
18
|
-
npm test -- --watch
|
|
19
|
-
|
|
20
|
-
# 生成覆盖率报告
|
|
21
|
-
npm test -- --coverage
|
|
22
|
-
|
|
23
|
-
# 运行 UI 界面
|
|
24
|
-
npm test -- --ui
|
|
25
|
-
|
|
26
|
-
# 运行特定测试文件
|
|
27
|
-
npm test src/components/Table/__tests__/index.test.tsx
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
## 测试覆盖范围
|
|
31
|
-
|
|
32
|
-
### 1. 组件基础功能测试 (`index.test.tsx`)
|
|
33
|
-
- ✅ 基础渲染
|
|
34
|
-
- ✅ 加载状态
|
|
35
|
-
- ✅ 自定义 classNames 和 styles
|
|
36
|
-
- ✅ 自定义 dataKey 和 totalKey
|
|
37
|
-
- ✅ 表单搜索功能
|
|
38
|
-
- ✅ 表单提交和重置
|
|
39
|
-
- ✅ handleValues 表单值处理
|
|
40
|
-
- ✅ 分页器显示和切换
|
|
41
|
-
- ✅ 每页大小变化
|
|
42
|
-
- ✅ 列排序功能
|
|
43
|
-
- ✅ Table 实例方法(run, reset, refresh, sortOrder)
|
|
44
|
-
- ✅ 动态列配置(函数形式 columns)
|
|
45
|
-
- ✅ Alert 和 Toolbar 渲染
|
|
46
|
-
- ✅ 国际化支持
|
|
47
|
-
- ✅ 静态方法(config, formatDate, removeEmpty)
|
|
48
|
-
|
|
49
|
-
### 2. useTable Hook 测试 (`useTable.test.ts`)
|
|
50
|
-
- ✅ 返回正确的实例结构
|
|
51
|
-
- ✅ 默认和自定义初始状态
|
|
52
|
-
- ✅ 状态更新
|
|
53
|
-
- ✅ sortOrder 方法
|
|
54
|
-
- ✅ resetStore 方法
|
|
55
|
-
- ✅ 实例稳定性(多次渲染)
|
|
56
|
-
- ✅ subscribe 回调
|
|
57
|
-
- ✅ sorter 变化触发更新
|
|
58
|
-
- ✅ Form 实例
|
|
59
|
-
- ✅ 多实例独立性
|
|
60
|
-
|
|
61
|
-
### 3. 集成测试 (`integration.test.tsx`)
|
|
62
|
-
- ✅ 完整的搜索-分页-排序流程
|
|
63
|
-
- ✅ 表单验证与条件搜索
|
|
64
|
-
- ✅ 自定义 handleValues 转换
|
|
65
|
-
- ✅ 动态列与数据联动
|
|
66
|
-
- ✅ Alert 统计信息显示
|
|
67
|
-
- ✅ 外部控制刷新与清空
|
|
68
|
-
|
|
69
|
-
## 测试配置文件
|
|
70
|
-
|
|
71
|
-
### vitest.config.ts
|
|
72
|
-
配置了测试环境、覆盖率报告、路径别名等。
|
|
73
|
-
|
|
74
|
-
### src/test/setup.ts
|
|
75
|
-
测试环境初始化,包括:
|
|
76
|
-
- jest-dom 断言扩展
|
|
77
|
-
- 自动清理
|
|
78
|
-
- window.matchMedia mock
|
|
79
|
-
- IntersectionObserver mock
|
|
80
|
-
- ResizeObserver mock
|
|
81
|
-
|
|
82
|
-
## 覆盖率目标
|
|
83
|
-
|
|
84
|
-
- **语句覆盖率**: > 80%
|
|
85
|
-
- **分支覆盖率**: > 75%
|
|
86
|
-
- **函数覆盖率**: > 80%
|
|
87
|
-
- **行覆盖率**: > 80%
|
|
88
|
-
|
|
89
|
-
## 常见问题
|
|
90
|
-
|
|
91
|
-
### Q: 如何调试测试?
|
|
92
|
-
A: 使用 `--ui` 参数打开 Vitest UI 界面进行可视化调试。
|
|
93
|
-
|
|
94
|
-
### Q: 测试运行很慢怎么办?
|
|
95
|
-
A: 可以使用 `--run` 参数禁用监听模式,或使用 `--isolate=false` 提升性能。
|
|
96
|
-
|
|
97
|
-
### Q: 如何 mock API 请求?
|
|
98
|
-
A: 在测试文件中使用 `vi.mock()` mock fetch 模块,参考测试文件中的示例。
|
|
99
|
-
|
|
100
|
-
## package.json 脚本配置
|
|
101
|
-
|
|
102
|
-
在 package.json 中添加以下脚本:
|
|
103
|
-
|
|
104
|
-
```json
|
|
105
|
-
{
|
|
106
|
-
"scripts": {
|
|
107
|
-
"test": "vitest",
|
|
108
|
-
"test:ui": "vitest --ui",
|
|
109
|
-
"test:coverage": "vitest --coverage"
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
```
|