@nokecy/qc-ui 1.0.70 → 1.0.72

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.
Files changed (189) hide show
  1. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +409 -206
  2. package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +30 -5
  3. package/dist/cjs/ag-grid-plus/context/gridContext.js +6 -1
  4. package/dist/cjs/ag-grid-plus/errors/ErrorBoundary.d.ts +36 -0
  5. package/dist/cjs/ag-grid-plus/errors/ErrorBoundary.js +143 -0
  6. package/dist/cjs/ag-grid-plus/errors/index.d.ts +3 -0
  7. package/dist/cjs/ag-grid-plus/errors/index.js +31 -0
  8. package/dist/cjs/ag-grid-plus/errors/types.d.ts +71 -0
  9. package/dist/cjs/ag-grid-plus/errors/types.js +137 -0
  10. package/dist/cjs/ag-grid-plus/hooks/index.d.ts +7 -0
  11. package/dist/cjs/ag-grid-plus/hooks/index.js +51 -0
  12. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.d.ts +88 -0
  13. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.js +224 -0
  14. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.d.ts +91 -0
  15. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.js +230 -0
  16. package/dist/cjs/ag-grid-plus/hooks/useGridPlusColumnState.d.ts +1 -8
  17. package/dist/cjs/ag-grid-plus/hooks/useGridState.d.ts +153 -0
  18. package/dist/cjs/ag-grid-plus/hooks/useGridState.js +258 -0
  19. package/dist/cjs/ag-grid-plus/index.d.ts +5 -0
  20. package/dist/cjs/ag-grid-plus/index.js +164 -0
  21. package/dist/cjs/ag-grid-plus/interface.d.ts +37 -0
  22. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.d.ts +21 -0
  23. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +580 -0
  24. package/dist/cjs/ag-grid-plus/querySchemes/components/QuerySchemesManager.less +86 -0
  25. package/dist/cjs/ag-grid-plus/querySchemes/components/index.d.ts +5 -0
  26. package/dist/cjs/ag-grid-plus/querySchemes/components/index.js +12 -0
  27. package/dist/cjs/ag-grid-plus/querySchemes/constants.d.ts +17 -0
  28. package/dist/cjs/ag-grid-plus/querySchemes/constants.js +30 -0
  29. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.d.ts +10 -0
  30. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.js +65 -0
  31. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.d.ts +6 -0
  32. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +542 -0
  33. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +7 -0
  34. package/dist/cjs/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +32 -0
  35. package/dist/cjs/ag-grid-plus/querySchemes/index.d.ts +11 -0
  36. package/dist/cjs/ag-grid-plus/querySchemes/index.js +113 -0
  37. package/dist/cjs/ag-grid-plus/querySchemes/storage/localStorageAdapter.d.ts +44 -0
  38. package/dist/cjs/ag-grid-plus/querySchemes/storage/localStorageAdapter.js +261 -0
  39. package/dist/cjs/ag-grid-plus/querySchemes/types.d.ts +143 -0
  40. package/dist/cjs/ag-grid-plus/querySchemes/types.js +5 -0
  41. package/dist/cjs/ag-grid-plus/querySchemes/utils/validator.d.ts +36 -0
  42. package/dist/cjs/ag-grid-plus/querySchemes/utils/validator.js +155 -0
  43. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.d.ts +16 -0
  44. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.js +342 -0
  45. package/dist/cjs/ag-grid-plus/schemes/components/SchemeManager.less +35 -0
  46. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.d.ts +20 -0
  47. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.js +289 -0
  48. package/dist/cjs/ag-grid-plus/schemes/components/SchemeSelector.less +39 -0
  49. package/dist/cjs/ag-grid-plus/schemes/components/index.d.ts +4 -0
  50. package/dist/cjs/ag-grid-plus/schemes/components/index.js +19 -0
  51. package/dist/cjs/ag-grid-plus/schemes/constants.d.ts +23 -0
  52. package/dist/cjs/ag-grid-plus/schemes/constants.js +39 -0
  53. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.d.ts +6 -0
  54. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.js +542 -0
  55. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +7 -0
  56. package/dist/cjs/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +32 -0
  57. package/dist/cjs/ag-grid-plus/schemes/index.d.ts +16 -0
  58. package/dist/cjs/ag-grid-plus/schemes/index.js +124 -0
  59. package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.d.ts +64 -0
  60. package/dist/cjs/ag-grid-plus/schemes/storage/localStorageAdapter.js +368 -0
  61. package/dist/cjs/ag-grid-plus/schemes/types.d.ts +126 -0
  62. package/dist/cjs/ag-grid-plus/schemes/types.js +5 -0
  63. package/dist/cjs/ag-grid-plus/schemes/utils/validator.d.ts +27 -0
  64. package/dist/cjs/ag-grid-plus/schemes/utils/validator.js +113 -0
  65. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.d.ts +17 -0
  66. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +955 -0
  67. package/dist/cjs/ag-grid-plus/setting/index.d.ts +1 -1
  68. package/dist/cjs/ag-grid-plus/setting/index.js +74 -111
  69. package/dist/cjs/ag-grid-plus/shared/hooks/useSchemeManager.d.ts +66 -0
  70. package/dist/cjs/ag-grid-plus/shared/hooks/useSchemeManager.js +648 -0
  71. package/dist/cjs/ag-grid-plus/storage/MemoryStorageAdapter.d.ts +76 -0
  72. package/dist/cjs/ag-grid-plus/storage/MemoryStorageAdapter.js +276 -0
  73. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.d.ts +114 -0
  74. package/dist/cjs/ag-grid-plus/storage/SchemeSyncManager.js +615 -0
  75. package/dist/cjs/ag-grid-plus/storage/globalSyncManager.d.ts +100 -0
  76. package/dist/cjs/ag-grid-plus/storage/globalSyncManager.js +335 -0
  77. package/dist/cjs/ag-grid-plus/storage/index.d.ts +8 -0
  78. package/dist/cjs/ag-grid-plus/storage/index.js +49 -0
  79. package/dist/cjs/ag-grid-plus/storage/types.d.ts +144 -0
  80. package/dist/cjs/ag-grid-plus/storage/types.js +5 -0
  81. package/dist/cjs/ag-grid-plus/types.d.ts +310 -0
  82. package/dist/cjs/ag-grid-plus/types.js +5 -0
  83. package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +95 -0
  84. package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +265 -0
  85. package/dist/cjs/ag-grid-plus/utils/constants.d.ts +41 -0
  86. package/dist/cjs/ag-grid-plus/utils/constants.js +56 -0
  87. package/dist/cjs/ag-grid-plus/utils/logger.d.ts +34 -0
  88. package/dist/cjs/ag-grid-plus/utils/logger.js +119 -0
  89. package/dist/cjs/ag-grid-plus/utils/sanitize.d.ts +15 -0
  90. package/dist/cjs/ag-grid-plus/utils/sanitize.js +39 -0
  91. package/dist/cjs/index.d.ts +3 -2
  92. package/dist/cjs/index.js +84 -0
  93. package/dist/esm/ag-grid-plus/ag-gridPlus.js +410 -206
  94. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +30 -5
  95. package/dist/esm/ag-grid-plus/context/gridContext.js +6 -1
  96. package/dist/esm/ag-grid-plus/errors/ErrorBoundary.d.ts +36 -0
  97. package/dist/esm/ag-grid-plus/errors/ErrorBoundary.js +137 -0
  98. package/dist/esm/ag-grid-plus/errors/index.d.ts +3 -0
  99. package/dist/esm/ag-grid-plus/errors/index.js +2 -0
  100. package/dist/esm/ag-grid-plus/errors/types.d.ts +71 -0
  101. package/dist/esm/ag-grid-plus/errors/types.js +135 -0
  102. package/dist/esm/ag-grid-plus/hooks/index.d.ts +7 -0
  103. package/dist/esm/ag-grid-plus/hooks/index.js +10 -0
  104. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.d.ts +88 -0
  105. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.js +217 -0
  106. package/dist/esm/ag-grid-plus/hooks/useAgGridData.d.ts +91 -0
  107. package/dist/esm/ag-grid-plus/hooks/useAgGridData.js +225 -0
  108. package/dist/esm/ag-grid-plus/hooks/useGridPlusColumnState.d.ts +1 -8
  109. package/dist/esm/ag-grid-plus/hooks/useGridState.d.ts +153 -0
  110. package/dist/esm/ag-grid-plus/hooks/useGridState.js +258 -0
  111. package/dist/esm/ag-grid-plus/index.d.ts +5 -0
  112. package/dist/esm/ag-grid-plus/index.js +6 -1
  113. package/dist/esm/ag-grid-plus/interface.d.ts +37 -0
  114. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.d.ts +21 -0
  115. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.js +572 -0
  116. package/dist/esm/ag-grid-plus/querySchemes/components/QuerySchemesManager.less +86 -0
  117. package/dist/esm/ag-grid-plus/querySchemes/components/index.d.ts +5 -0
  118. package/dist/esm/ag-grid-plus/querySchemes/components/index.js +5 -0
  119. package/dist/esm/ag-grid-plus/querySchemes/constants.d.ts +17 -0
  120. package/dist/esm/ag-grid-plus/querySchemes/constants.js +24 -0
  121. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.d.ts +10 -0
  122. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQueryOrderManager.js +60 -0
  123. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.d.ts +6 -0
  124. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.js +537 -0
  125. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.d.ts +7 -0
  126. package/dist/esm/ag-grid-plus/querySchemes/hooks/useQuerySchemes.refactored.js +27 -0
  127. package/dist/esm/ag-grid-plus/querySchemes/index.d.ts +11 -0
  128. package/dist/esm/ag-grid-plus/querySchemes/index.js +20 -0
  129. package/dist/esm/ag-grid-plus/querySchemes/storage/localStorageAdapter.d.ts +44 -0
  130. package/dist/esm/ag-grid-plus/querySchemes/storage/localStorageAdapter.js +256 -0
  131. package/dist/esm/ag-grid-plus/querySchemes/types.d.ts +143 -0
  132. package/dist/esm/ag-grid-plus/querySchemes/types.js +1 -0
  133. package/dist/esm/ag-grid-plus/querySchemes/utils/validator.d.ts +36 -0
  134. package/dist/esm/ag-grid-plus/querySchemes/utils/validator.js +144 -0
  135. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.d.ts +16 -0
  136. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.js +334 -0
  137. package/dist/esm/ag-grid-plus/schemes/components/SchemeManager.less +35 -0
  138. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.d.ts +20 -0
  139. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.js +281 -0
  140. package/dist/esm/ag-grid-plus/schemes/components/SchemeSelector.less +39 -0
  141. package/dist/esm/ag-grid-plus/schemes/components/index.d.ts +4 -0
  142. package/dist/esm/ag-grid-plus/schemes/components/index.js +2 -0
  143. package/dist/esm/ag-grid-plus/schemes/constants.d.ts +23 -0
  144. package/dist/esm/ag-grid-plus/schemes/constants.js +33 -0
  145. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.d.ts +6 -0
  146. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.js +537 -0
  147. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.d.ts +7 -0
  148. package/dist/esm/ag-grid-plus/schemes/hooks/useColumnSchemes.refactored.js +27 -0
  149. package/dist/esm/ag-grid-plus/schemes/index.d.ts +16 -0
  150. package/dist/esm/ag-grid-plus/schemes/index.js +25 -0
  151. package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.d.ts +64 -0
  152. package/dist/esm/ag-grid-plus/schemes/storage/localStorageAdapter.js +363 -0
  153. package/dist/esm/ag-grid-plus/schemes/types.d.ts +126 -0
  154. package/dist/esm/ag-grid-plus/schemes/types.js +1 -0
  155. package/dist/esm/ag-grid-plus/schemes/utils/validator.d.ts +27 -0
  156. package/dist/esm/ag-grid-plus/schemes/utils/validator.js +104 -0
  157. package/dist/esm/ag-grid-plus/setting/ColumnSetting.d.ts +17 -0
  158. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +946 -0
  159. package/dist/esm/ag-grid-plus/setting/index.d.ts +1 -1
  160. package/dist/esm/ag-grid-plus/setting/index.js +69 -107
  161. package/dist/esm/ag-grid-plus/shared/hooks/useSchemeManager.d.ts +66 -0
  162. package/dist/esm/ag-grid-plus/shared/hooks/useSchemeManager.js +643 -0
  163. package/dist/esm/ag-grid-plus/storage/MemoryStorageAdapter.d.ts +76 -0
  164. package/dist/esm/ag-grid-plus/storage/MemoryStorageAdapter.js +273 -0
  165. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.d.ts +114 -0
  166. package/dist/esm/ag-grid-plus/storage/SchemeSyncManager.js +609 -0
  167. package/dist/esm/ag-grid-plus/storage/globalSyncManager.d.ts +100 -0
  168. package/dist/esm/ag-grid-plus/storage/globalSyncManager.js +321 -0
  169. package/dist/esm/ag-grid-plus/storage/index.d.ts +8 -0
  170. package/dist/esm/ag-grid-plus/storage/index.js +9 -0
  171. package/dist/esm/ag-grid-plus/storage/types.d.ts +144 -0
  172. package/dist/esm/ag-grid-plus/storage/types.js +1 -0
  173. package/dist/esm/ag-grid-plus/types.d.ts +310 -0
  174. package/dist/esm/ag-grid-plus/types.js +1 -0
  175. package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +95 -0
  176. package/dist/esm/ag-grid-plus/utils/columnProcessors.js +251 -0
  177. package/dist/esm/ag-grid-plus/utils/constants.d.ts +41 -0
  178. package/dist/esm/ag-grid-plus/utils/constants.js +50 -0
  179. package/dist/esm/ag-grid-plus/utils/logger.d.ts +34 -0
  180. package/dist/esm/ag-grid-plus/utils/logger.js +114 -0
  181. package/dist/esm/ag-grid-plus/utils/sanitize.d.ts +15 -0
  182. package/dist/esm/ag-grid-plus/utils/sanitize.js +32 -0
  183. package/dist/esm/index.d.ts +3 -2
  184. package/dist/esm/index.js +8 -2
  185. package/dist/esm/standardFormDialog/useStandardFormSchema.d.ts +1 -1
  186. package/dist/esm/standardFormDialog/withStandardForm.d.ts +2 -2
  187. package/dist/umd/qc-ui.min.css +1 -1
  188. package/dist/umd/qc-ui.min.js +1 -1
  189. package/package.json +3 -2
@@ -0,0 +1,217 @@
1
+ import _uniqueId from "lodash/uniqueId";
2
+ import _sumBy from "lodash/sumBy";
3
+ import { useCallback, useEffect } from 'react';
4
+
5
+ /**
6
+ * 计算类型
7
+ */
8
+
9
+ /**
10
+ * 计算列配置
11
+ */
12
+
13
+ /**
14
+ * Hook 配置接口
15
+ */
16
+
17
+ /**
18
+ * Hook 返回值接口
19
+ */
20
+
21
+ /**
22
+ * 验证数值有效性
23
+ */
24
+ function isValidNumber(value) {
25
+ return typeof value === 'number' && !isNaN(value);
26
+ }
27
+
28
+ /**
29
+ * 格式化数字(添加千分位)
30
+ */
31
+ function formatNumber(value) {
32
+ var decimalPlaces = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
33
+ return value.toLocaleString(undefined, {
34
+ minimumFractionDigits: decimalPlaces,
35
+ maximumFractionDigits: decimalPlaces
36
+ });
37
+ }
38
+
39
+ /**
40
+ * 求和函数
41
+ */
42
+ function sumFn(field, displayedData) {
43
+ return _sumBy(displayedData, function (cur) {
44
+ if (cur && isValidNumber(cur[field])) {
45
+ return cur[field];
46
+ }
47
+ return 0;
48
+ });
49
+ }
50
+
51
+ /**
52
+ * 平均值函数
53
+ */
54
+ function avgFn(field, displayedData) {
55
+ var validItems = displayedData.filter(function (cur) {
56
+ return cur && cur[field] !== undefined && cur[field] !== null;
57
+ });
58
+ if (validItems.length === 0) return 0;
59
+ var sum = sumFn(field, displayedData);
60
+ return sum / validItems.length;
61
+ }
62
+
63
+ /**
64
+ * 标准差函数
65
+ */
66
+ function standardDeviationFn(field, displayedData) {
67
+ var validValues = displayedData.filter(function (cur) {
68
+ return isValidNumber(cur[field]);
69
+ });
70
+ var count = validValues.length;
71
+ if (count === 0) return 0;
72
+ var mean = sumFn(field, displayedData) / count;
73
+ var variance = _sumBy(displayedData, function (cur) {
74
+ if (cur && cur[field] !== undefined && cur[field] !== null) {
75
+ var diff = cur[field] - mean;
76
+ return diff * diff;
77
+ }
78
+ return 0;
79
+ }) / count;
80
+ return Math.sqrt(variance);
81
+ }
82
+
83
+ /**
84
+ * 执行计算
85
+ */
86
+ function calculate(column, displayedData) {
87
+ var field = column.field,
88
+ calculateType = column.calculateType,
89
+ _column$transactionAm = column.transactionAmount,
90
+ transactionAmount = _column$transactionAm === void 0 ? 2 : _column$transactionAm,
91
+ formatWithCommas = column.formatWithCommas;
92
+ var result;
93
+ switch (calculateType) {
94
+ case 'sum':
95
+ result = sumFn(field, displayedData);
96
+ break;
97
+ case 'avg':
98
+ result = avgFn(field, displayedData);
99
+ break;
100
+ case 'standardDeviation':
101
+ result = standardDeviationFn(field, displayedData);
102
+ break;
103
+ default:
104
+ return 0;
105
+ }
106
+
107
+ // 格式化结果
108
+ var fixedResult = Number(result.toFixed(transactionAmount));
109
+ return formatWithCommas ? formatNumber(fixedResult, transactionAmount) : fixedResult;
110
+ }
111
+
112
+ /**
113
+ * AG-Grid 计算列管理 Hook
114
+ *
115
+ * @description
116
+ * 处理 AG-Grid 底部固定行的聚合计算(求和、平均值、标准差)
117
+ *
118
+ * @example
119
+ * ```tsx
120
+ * const { calculateSum, onFilterChanged } = useAgGridCalculation({
121
+ * gridApi,
122
+ * allColDefs,
123
+ * rowData
124
+ * });
125
+ *
126
+ * // 在筛选变化时调用
127
+ * <AgGridReact onFilterChanged={onFilterChanged} />
128
+ * ```
129
+ */
130
+ export function useAgGridCalculation(config) {
131
+ var gridApi = config.gridApi,
132
+ allColDefs = config.allColDefs,
133
+ rowData = config.rowData;
134
+
135
+ /**
136
+ * 计算并更新底部固定行
137
+ */
138
+ var calculateSum = useCallback(function () {
139
+ if (!gridApi || !allColDefs) {
140
+ gridApi === null || gridApi === void 0 || gridApi.setGridOption('pinnedBottomRowData', undefined);
141
+ return;
142
+ }
143
+
144
+ // 获取筛选后的数据
145
+ var displayedData = [];
146
+ gridApi.forEachNodeAfterFilter(function (node) {
147
+ displayedData.push(node.data);
148
+ });
149
+ if (displayedData.length === 0) {
150
+ gridApi.setGridOption('pinnedBottomRowData', undefined);
151
+ return;
152
+ }
153
+
154
+ // 提取需要计算的列
155
+ var calcColumns = allColDefs.filter(function (col) {
156
+ return col.calculateType && col.calculateType !== false;
157
+ }).map(function (col) {
158
+ return {
159
+ field: col.field,
160
+ calculateType: col.calculateType,
161
+ transactionAmount: col.transactionAmount || 2,
162
+ formatWithCommas: col.formatWithCommas,
163
+ cellRenderer: col.cellRenderer
164
+ };
165
+ });
166
+ if (calcColumns.length === 0) {
167
+ gridApi.setGridOption('pinnedBottomRowData', undefined);
168
+ return;
169
+ }
170
+
171
+ // 执行计算
172
+ var calculatedData = {
173
+ id: _uniqueId('calc_')
174
+ };
175
+ calcColumns.forEach(function (column) {
176
+ // 如果有自定义渲染器,跳过计算
177
+ if (!column.cellRenderer) {
178
+ calculatedData[column.field] = calculate(column, displayedData);
179
+ }
180
+ });
181
+
182
+ // 更新底部固定行
183
+ if (Object.keys(calculatedData).length > 1) {
184
+ // 除了 id 之外还有其他字段
185
+ gridApi.setGridOption('pinnedBottomRowData', [calculatedData]);
186
+ }
187
+ }, [gridApi, allColDefs]);
188
+
189
+ /**
190
+ * 处理筛选变化
191
+ */
192
+ var onFilterChanged = useCallback(function () {
193
+ calculateSum();
194
+ }, [calculateSum]);
195
+
196
+ /**
197
+ * 监听列定义和行数据变化,自动计算
198
+ */
199
+ useEffect(function () {
200
+ calculateSum();
201
+ }, [allColDefs, rowData, calculateSum]);
202
+ return {
203
+ calculateSum: calculateSum,
204
+ onFilterChanged: onFilterChanged
205
+ };
206
+ }
207
+
208
+ /**
209
+ * 导出工具函数供外部使用
210
+ */
211
+ export var calculationUtils = {
212
+ isValidNumber: isValidNumber,
213
+ formatNumber: formatNumber,
214
+ sumFn: sumFn,
215
+ avgFn: avgFn,
216
+ standardDeviationFn: standardDeviationFn
217
+ };
@@ -0,0 +1,91 @@
1
+ /// <reference types="react" />
2
+ import { GridApi, ColumnState } from 'ag-grid-community';
3
+ /**
4
+ * 分页状态接口
5
+ */
6
+ export interface PaginationState {
7
+ pageSize: number;
8
+ current: number;
9
+ total: number;
10
+ }
11
+ /**
12
+ * 请求参数接口
13
+ */
14
+ export interface RequestParams {
15
+ filter: any;
16
+ current: number;
17
+ skipCount: number;
18
+ maxResultCount: number;
19
+ sorter: string;
20
+ [key: string]: any;
21
+ }
22
+ /**
23
+ * 请求响应接口
24
+ */
25
+ export interface RequestResponse {
26
+ data: any[];
27
+ total: number;
28
+ }
29
+ /**
30
+ * Hook 配置接口
31
+ */
32
+ export interface UseAgGridDataConfig {
33
+ /** 请求函数 */
34
+ request?: (params: RequestParams, sort: any, filter: any) => Promise<RequestResponse>;
35
+ /** 静态数据源 */
36
+ dataSource?: any[];
37
+ /** 初始分页大小 */
38
+ pageSize?: number;
39
+ /** 是否隐藏分页 */
40
+ hidePagination?: boolean;
41
+ /** 外部 loading 状态 */
42
+ loading?: boolean;
43
+ /** 额外的请求参数 */
44
+ gridParams?: any;
45
+ /** 列过滤模型转换函数 */
46
+ convertFilterModel?: (queryFilter: any, colDefs: any[]) => any;
47
+ /** 所有列定义 */
48
+ allColDefs?: any[];
49
+ }
50
+ /**
51
+ * Hook 返回值接口
52
+ */
53
+ export interface UseAgGridDataReturn {
54
+ rowData: any[];
55
+ loading: boolean;
56
+ pagination: PaginationState;
57
+ queryFilter: any;
58
+ sortColumn?: ColumnState;
59
+ ready: boolean;
60
+ setRowData: React.Dispatch<React.SetStateAction<any[]>>;
61
+ setLoading: React.Dispatch<React.SetStateAction<boolean>>;
62
+ setPagination: React.Dispatch<React.SetStateAction<PaginationState>>;
63
+ setQueryFilter: React.Dispatch<React.SetStateAction<any>>;
64
+ setSortColumn: React.Dispatch<React.SetStateAction<ColumnState | undefined>>;
65
+ setReady: React.Dispatch<React.SetStateAction<boolean>>;
66
+ onRequest: (filter: any) => void;
67
+ onRefresh: () => void;
68
+ handleSortChanged: (columnApi: GridApi) => void;
69
+ }
70
+ /**
71
+ * AG-Grid 数据获取和分页管理 Hook
72
+ *
73
+ * @description
74
+ * 处理 AG-Grid 的数据请求、分页、排序、筛选等逻辑
75
+ *
76
+ * @example
77
+ * ```tsx
78
+ * const {
79
+ * rowData,
80
+ * loading,
81
+ * pagination,
82
+ * onRequest,
83
+ * onRefresh
84
+ * } = useAgGridData({
85
+ * request: fetchData,
86
+ * pageSize: 50,
87
+ * gridParams: { status: 'active' }
88
+ * });
89
+ * ```
90
+ */
91
+ export declare function useAgGridData(config: UseAgGridDataConfig): UseAgGridDataReturn;
@@ -0,0 +1,225 @@
1
+ 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); }
2
+ 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; }
3
+ 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; }
4
+ 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; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ 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); }
7
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
8
+ 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."); }
9
+ 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); }
10
+ 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; }
11
+ 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; } }
12
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
13
+ import { useState, useEffect, useCallback, useRef } from 'react';
14
+ import { message } from 'antd';
15
+
16
+ /**
17
+ * 分页状态接口
18
+ */
19
+
20
+ /**
21
+ * 请求参数接口
22
+ */
23
+
24
+ /**
25
+ * 请求响应接口
26
+ */
27
+
28
+ /**
29
+ * Hook 配置接口
30
+ */
31
+
32
+ /**
33
+ * Hook 返回值接口
34
+ */
35
+
36
+ /**
37
+ * 获取排序字符串
38
+ */
39
+ function getSort(columnState) {
40
+ return columnState ? "".concat(columnState.colId, " ").concat(columnState.sort) : '';
41
+ }
42
+
43
+ /**
44
+ * AG-Grid 数据获取和分页管理 Hook
45
+ *
46
+ * @description
47
+ * 处理 AG-Grid 的数据请求、分页、排序、筛选等逻辑
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * const {
52
+ * rowData,
53
+ * loading,
54
+ * pagination,
55
+ * onRequest,
56
+ * onRefresh
57
+ * } = useAgGridData({
58
+ * request: fetchData,
59
+ * pageSize: 50,
60
+ * gridParams: { status: 'active' }
61
+ * });
62
+ * ```
63
+ */
64
+ export function useAgGridData(config) {
65
+ var request = config.request,
66
+ dataSource = config.dataSource,
67
+ initialPageSize = config.pageSize,
68
+ hidePagination = config.hidePagination,
69
+ loadingProps = config.loading,
70
+ gridParams = config.gridParams,
71
+ convertFilterModel = config.convertFilterModel,
72
+ allColDefs = config.allColDefs;
73
+
74
+ // 状态管理
75
+ var _useState = useState(false),
76
+ _useState2 = _slicedToArray(_useState, 2),
77
+ ready = _useState2[0],
78
+ setReady = _useState2[1];
79
+ var _useState3 = useState(loadingProps !== null && loadingProps !== void 0 ? loadingProps : false),
80
+ _useState4 = _slicedToArray(_useState3, 2),
81
+ loading = _useState4[0],
82
+ setLoading = _useState4[1];
83
+ var _useState5 = useState([]),
84
+ _useState6 = _slicedToArray(_useState5, 2),
85
+ rowData = _useState6[0],
86
+ setRowData = _useState6[1];
87
+ var _useState7 = useState({}),
88
+ _useState8 = _slicedToArray(_useState7, 2),
89
+ queryFilter = _useState8[0],
90
+ setQueryFilter = _useState8[1];
91
+ var _useState9 = useState(),
92
+ _useState10 = _slicedToArray(_useState9, 2),
93
+ sortColumn = _useState10[0],
94
+ setSortColumn = _useState10[1];
95
+
96
+ // 初始化分页参数
97
+ var _useState11 = useState({
98
+ pageSize: initialPageSize !== null && initialPageSize !== void 0 ? initialPageSize : hidePagination ? 10000 : 200,
99
+ current: 1,
100
+ total: dataSource ? dataSource.length : 0
101
+ }),
102
+ _useState12 = _slicedToArray(_useState11, 2),
103
+ pagination = _useState12[0],
104
+ setPagination = _useState12[1];
105
+
106
+ // 用于防止不必要的请求
107
+ var requestInProgressRef = useRef(false);
108
+
109
+ /**
110
+ * 发起数据请求
111
+ */
112
+ var onRequest = useCallback(function (filter) {
113
+ if (!request || requestInProgressRef.current) return;
114
+ requestInProgressRef.current = true;
115
+ setLoading(true);
116
+
117
+ // 转换筛选模型
118
+ var convertedFilter = convertFilterModel && allColDefs ? convertFilterModel(filter, allColDefs) : filter;
119
+ var params = _objectSpread(_objectSpread({
120
+ filter: convertedFilter
121
+ }, gridParams), {}, {
122
+ current: pagination.current,
123
+ skipCount: pagination.current === 1 ? 0 : (pagination.current - 1) * pagination.pageSize,
124
+ maxResultCount: pagination.pageSize,
125
+ sorter: getSort(sortColumn)
126
+ });
127
+ request(params, undefined, filter).then(function (response) {
128
+ var newRowData = response.data;
129
+ var rowCount = response.total;
130
+ setRowData(newRowData);
131
+ setPagination(function (prev) {
132
+ return _objectSpread(_objectSpread({}, prev), {}, {
133
+ total: rowCount
134
+ });
135
+ });
136
+ }).catch(function (error) {
137
+ console.error('[useAgGridData] 请求失败:', error);
138
+ message.error((error === null || error === void 0 ? void 0 : error.message) || '数据加载失败,请重试');
139
+ }).finally(function () {
140
+ setLoading(false);
141
+ requestInProgressRef.current = false;
142
+ });
143
+ }, [request, gridParams, pagination.current, pagination.pageSize, sortColumn, convertFilterModel, allColDefs]);
144
+
145
+ /**
146
+ * 刷新数据
147
+ */
148
+ var onRefresh = useCallback(function () {
149
+ if (request) {
150
+ onRequest(queryFilter);
151
+ }
152
+ }, [request, queryFilter, onRequest]);
153
+
154
+ /**
155
+ * 处理排序变化
156
+ */
157
+ var handleSortChanged = useCallback(function (columnApi) {
158
+ var sortedColumn = columnApi.getColumnState().find(function (col) {
159
+ return Boolean(col.sort);
160
+ });
161
+ setSortColumn(sortedColumn);
162
+ }, []);
163
+
164
+ /**
165
+ * 监听外部 loading 状态变化
166
+ */
167
+ useEffect(function () {
168
+ if (loadingProps !== undefined) {
169
+ setLoading(loadingProps);
170
+ }
171
+ }, [loadingProps]);
172
+
173
+ /**
174
+ * 监听静态数据源变化
175
+ */
176
+ useEffect(function () {
177
+ if (dataSource) {
178
+ setRowData(dataSource);
179
+ setPagination(function (prev) {
180
+ return _objectSpread(_objectSpread({}, prev), {}, {
181
+ total: dataSource.length
182
+ });
183
+ });
184
+ }
185
+ }, [dataSource]);
186
+
187
+ /**
188
+ * 自动请求数据(当相关参数变化时)
189
+ */
190
+ useEffect(function () {
191
+ if (ready && request) {
192
+ onRequest(queryFilter);
193
+ }
194
+ }, [ready, pagination.pageSize, pagination.current]);
195
+
196
+ // 监听 gridParams 和 sortColumn 变化(使用 JSON 序列化进行比较)
197
+ var gridParamsRef = useRef(gridParams);
198
+ var sortColumnRef = useRef(sortColumn);
199
+ useEffect(function () {
200
+ var gridParamsChanged = JSON.stringify(gridParams) !== JSON.stringify(gridParamsRef.current);
201
+ var sortColumnChanged = JSON.stringify(sortColumn) !== JSON.stringify(sortColumnRef.current);
202
+ if (ready && request && (gridParamsChanged || sortColumnChanged)) {
203
+ gridParamsRef.current = gridParams;
204
+ sortColumnRef.current = sortColumn;
205
+ onRequest(queryFilter);
206
+ }
207
+ }, [gridParams, sortColumn, ready, request, queryFilter, onRequest]);
208
+ return {
209
+ rowData: rowData,
210
+ loading: loading,
211
+ pagination: pagination,
212
+ queryFilter: queryFilter,
213
+ sortColumn: sortColumn,
214
+ ready: ready,
215
+ setRowData: setRowData,
216
+ setLoading: setLoading,
217
+ setPagination: setPagination,
218
+ setQueryFilter: setQueryFilter,
219
+ setSortColumn: setSortColumn,
220
+ setReady: setReady,
221
+ onRequest: onRequest,
222
+ onRefresh: onRefresh,
223
+ handleSortChanged: handleSortChanged
224
+ };
225
+ }
@@ -2,11 +2,4 @@
2
2
  * 使用 GridPlusContext 的 Hook
3
3
  * 用于访问列状态管理相关的方法和数据
4
4
  */
5
- export declare const useGridPlusColumnState: () => {
6
- extensibleColumns: any;
7
- columnState: any;
8
- onSaveColumnState: (gridKey: string, columnState: any[]) => void;
9
- applyToGlobal: (gridKey: string) => void;
10
- resetCurrent: (gridKey: string) => void;
11
- resetAll: (gridKey: string) => void;
12
- };
5
+ export declare const useGridPlusColumnState: () => import("../context/gridContext").GridPlusContextValue;
@@ -0,0 +1,153 @@
1
+ /**
2
+ * AG-Grid Plus 状态管理 Hook
3
+ *
4
+ * 使用 useReducer 统一管理组件的所有状态,
5
+ * 替代多个 useState 调用,提高性能和可维护性
6
+ */
7
+ import { Dispatch } from 'react';
8
+ import { ColumnState } from 'ag-grid-community';
9
+ import type { ExtendedColumnState, ColumnCellConfigMap, QueryFilterState, PaginationState, RowDataArray } from '../types';
10
+ /**
11
+ * Grid 状态接口
12
+ */
13
+ export interface GridState {
14
+ /** Grid 是否已就绪 */
15
+ ready: boolean;
16
+ /** 加载状态 */
17
+ loading: boolean;
18
+ /** 列状态配置 */
19
+ columnState?: ExtendedColumnState[];
20
+ /** 列单元格样式映射 */
21
+ columnCellClass: ColumnCellConfigMap;
22
+ /** 行数据 */
23
+ rowData: RowDataArray;
24
+ /** 选中的行 */
25
+ selectRow: any;
26
+ /** 查询过滤器 */
27
+ queryFilter: QueryFilterState;
28
+ /** 排序列 */
29
+ sortColumn?: ColumnState;
30
+ /** 分页配置 */
31
+ pagination: PaginationState;
32
+ /** 查询表单项顺序 */
33
+ queryItemsOrder: string[];
34
+ }
35
+ /**
36
+ * Action 类型枚举
37
+ */
38
+ export declare enum GridActionType {
39
+ SET_READY = "SET_READY",
40
+ SET_LOADING = "SET_LOADING",
41
+ SET_COLUMN_STATE = "SET_COLUMN_STATE",
42
+ SET_COLUMN_CELL_CLASS = "SET_COLUMN_CELL_CLASS",
43
+ SET_ROW_DATA = "SET_ROW_DATA",
44
+ SET_SELECT_ROW = "SET_SELECT_ROW",
45
+ SET_QUERY_FILTER = "SET_QUERY_FILTER",
46
+ SET_SORT_COLUMN = "SET_SORT_COLUMN",
47
+ SET_PAGINATION = "SET_PAGINATION",
48
+ UPDATE_PAGINATION = "UPDATE_PAGINATION",
49
+ SET_QUERY_ITEMS_ORDER = "SET_QUERY_ITEMS_ORDER",
50
+ RESET_STATE = "RESET_STATE"
51
+ }
52
+ /**
53
+ * Action 联合类型
54
+ */
55
+ export type GridAction = {
56
+ type: GridActionType.SET_READY;
57
+ payload: boolean;
58
+ } | {
59
+ type: GridActionType.SET_LOADING;
60
+ payload: boolean;
61
+ } | {
62
+ type: GridActionType.SET_COLUMN_STATE;
63
+ payload: ExtendedColumnState[] | undefined;
64
+ } | {
65
+ type: GridActionType.SET_COLUMN_CELL_CLASS;
66
+ payload: ColumnCellConfigMap;
67
+ } | {
68
+ type: GridActionType.SET_ROW_DATA;
69
+ payload: RowDataArray;
70
+ } | {
71
+ type: GridActionType.SET_SELECT_ROW;
72
+ payload: any;
73
+ } | {
74
+ type: GridActionType.SET_QUERY_FILTER;
75
+ payload: QueryFilterState;
76
+ } | {
77
+ type: GridActionType.SET_SORT_COLUMN;
78
+ payload: ColumnState | undefined;
79
+ } | {
80
+ type: GridActionType.SET_PAGINATION;
81
+ payload: PaginationState;
82
+ } | {
83
+ type: GridActionType.UPDATE_PAGINATION;
84
+ payload: Partial<PaginationState>;
85
+ } | {
86
+ type: GridActionType.SET_QUERY_ITEMS_ORDER;
87
+ payload: string[];
88
+ } | {
89
+ type: GridActionType.RESET_STATE;
90
+ payload: Partial<GridState>;
91
+ };
92
+ /**
93
+ * Grid 状态 Reducer
94
+ */
95
+ export declare function gridReducer(state: GridState, action: GridAction): GridState;
96
+ /**
97
+ * useGridState Hook 配置
98
+ */
99
+ export interface UseGridStateConfig {
100
+ /** 初始加载状态 */
101
+ loading?: boolean;
102
+ /** 初始分页配置 */
103
+ pageSize?: number;
104
+ /** 是否隐藏分页 */
105
+ hidePagination?: boolean;
106
+ /** 数据源(用于计算初始 total) */
107
+ dataSource?: any[];
108
+ }
109
+ /**
110
+ * useGridState Hook 返回值
111
+ */
112
+ export interface UseGridStateReturn {
113
+ /** Grid 状态 */
114
+ state: GridState;
115
+ /** Dispatch 函数 */
116
+ dispatch: Dispatch<GridAction>;
117
+ /** 便捷的 actions */
118
+ actions: {
119
+ setReady: (ready: boolean) => void;
120
+ setLoading: (loading: boolean) => void;
121
+ setColumnState: (columnState: ExtendedColumnState[] | undefined) => void;
122
+ setColumnCellClass: (columnCellClass: ColumnCellConfigMap) => void;
123
+ setRowData: (rowData: RowDataArray) => void;
124
+ setSelectRow: (selectRow: any) => void;
125
+ setQueryFilter: (queryFilter: QueryFilterState) => void;
126
+ setSortColumn: (sortColumn: ColumnState | undefined) => void;
127
+ setPagination: (pagination: PaginationState) => void;
128
+ updatePagination: (pagination: Partial<PaginationState>) => void;
129
+ setQueryItemsOrder: (order: string[]) => void;
130
+ resetState: (state: Partial<GridState>) => void;
131
+ };
132
+ }
133
+ /**
134
+ * AG-Grid Plus 状态管理 Hook
135
+ *
136
+ * @param config 配置对象
137
+ * @returns 状态和 actions
138
+ *
139
+ * @example
140
+ * ```tsx
141
+ * const { state, actions } = useGridState({
142
+ * loading: false,
143
+ * pageSize: 200,
144
+ * hidePagination: false
145
+ * });
146
+ *
147
+ * // 使用 actions
148
+ * actions.setLoading(true);
149
+ * actions.setRowData(newData);
150
+ * actions.updatePagination({ current: 2 });
151
+ * ```
152
+ */
153
+ export declare function useGridState(config?: UseGridStateConfig): UseGridStateReturn;