yuand 1.0.5 → 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.
@@ -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: typeof columns === "function" ? columns(data) : columns,
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
- }, [table]);
236
+ }, []);
228
237
  var onFinish = useCallback(function (values) {
229
238
  if (formHandleValues) {
230
239
  values = formHandleValues(values);
@@ -26,7 +26,6 @@ export interface TableInstance<TData = any> {
26
26
  clear: () => void;
27
27
  refresh: () => void;
28
28
  reset: () => void;
29
- sortOrder: (key: string) => any;
30
29
  update: () => void;
31
30
  resetStore: () => void;
32
31
  form?: FormInstance;
@@ -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
  };
@@ -119,13 +119,22 @@ var ProTable = function ProTable(props) {
119
119
  }),
120
120
  loading = _useFetch.loading;
121
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
+ }
122
131
  return {
123
- column: typeof columns === "function" ? columns(data) : columns,
132
+ column: column,
124
133
  dataSource: getDataSource(data, dataKey),
125
134
  renderAlert: typeof alert === "function" ? alert(data) : alert,
126
135
  total: getTotal(totalKey, data)
127
136
  };
128
- }, [columns, data, dataKey, totalKey]),
137
+ }, [columns, data, dataKey, totalKey, sorter]),
129
138
  dataSource = _useMemo.dataSource,
130
139
  total = _useMemo.total,
131
140
  column = _useMemo.column,
@@ -175,7 +184,7 @@ var ProTable = function ProTable(props) {
175
184
  return function () {
176
185
  table.resetStore();
177
186
  };
178
- }, [table]);
187
+ }, []);
179
188
  var onFinish = function onFinish(values) {
180
189
  if (formHandleValues) {
181
190
  values = formHandleValues(values);
@@ -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: typeof columns === "function" ? columns(data) : columns,
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
- }, [table]);
223
+ }, []);
215
224
  const onFinish = (0, import_react.useCallback)((values) => {
216
225
  if (formHandleValues) {
217
226
  values = formHandleValues(values);
@@ -26,7 +26,6 @@ export interface TableInstance<TData = any> {
26
26
  clear: () => void;
27
27
  refresh: () => void;
28
28
  reset: () => void;
29
- sortOrder: (key: string) => any;
30
29
  update: () => void;
31
30
  resetStore: () => void;
32
31
  form?: FormInstance;
@@ -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
  };
@@ -128,13 +128,22 @@ var ProTable = (props) => {
128
128
  }
129
129
  });
130
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
+ }
131
140
  return {
132
- column: typeof columns === "function" ? columns(data) : columns,
141
+ column: column2,
133
142
  dataSource: (0, import_table.getDataSource)(data, dataKey),
134
143
  renderAlert: typeof alert === "function" ? alert(data) : alert,
135
144
  total: (0, import_table.getTotal)(totalKey, data)
136
145
  };
137
- }, [columns, data, dataKey, totalKey]);
146
+ }, [columns, data, dataKey, totalKey, sorter]);
138
147
  const onSearch = () => {
139
148
  if (formItems) {
140
149
  table.form.submit();
@@ -182,7 +191,7 @@ var ProTable = (props) => {
182
191
  return () => {
183
192
  table.resetStore();
184
193
  };
185
- }, [table]);
194
+ }, []);
186
195
  const onFinish = (values) => {
187
196
  if (formHandleValues) {
188
197
  values = formHandleValues(values);
@@ -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.5",
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
- ```