@nokecy/qc-ui 1.1.38 → 1.1.40

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 (232) hide show
  1. package/dist/cjs/adapters/abpPagedApiAdapter.d.ts +8 -0
  2. package/dist/cjs/adapters/abpPagedApiAdapter.js +35 -0
  3. package/dist/cjs/adapters/index.d.ts +6 -0
  4. package/dist/cjs/adapters/index.js +12 -0
  5. package/dist/cjs/adapters/pagedApiAdapter.d.ts +25 -0
  6. package/dist/cjs/adapters/pagedApiAdapter.js +5 -0
  7. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +81 -222
  8. package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +3 -0
  9. package/dist/cjs/ag-grid-plus/context/queryFormContext.d.ts +20 -0
  10. package/dist/cjs/ag-grid-plus/context/queryFormContext.js +25 -0
  11. package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +37 -1
  12. package/dist/cjs/ag-grid-plus/context/useSchemeManager.js +120 -79
  13. package/dist/cjs/ag-grid-plus/errors/ErrorBoundary.d.ts +1 -1
  14. package/dist/cjs/ag-grid-plus/hooks/index.d.ts +1 -3
  15. package/dist/cjs/ag-grid-plus/hooks/index.js +7 -39
  16. package/dist/cjs/ag-grid-plus/hooks/useRowId.d.ts +13 -0
  17. package/dist/cjs/ag-grid-plus/hooks/useRowId.js +57 -0
  18. package/dist/cjs/ag-grid-plus/interface.d.ts +9 -0
  19. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +52 -36
  20. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +6 -6
  21. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +16 -6
  22. package/dist/cjs/ag-grid-plus/types.d.ts +9 -0
  23. package/dist/cjs/ag-grid-plus/utils/aggregation.d.ts +17 -0
  24. package/dist/cjs/ag-grid-plus/utils/aggregation.js +101 -0
  25. package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +2 -2
  26. package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.d.ts +12 -3
  27. package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.js +20 -5
  28. package/dist/cjs/ag-grid-plus/utils/queryFormDerivation.d.ts +19 -0
  29. package/dist/cjs/ag-grid-plus/utils/queryFormDerivation.js +49 -0
  30. package/dist/cjs/ag-grid-plus/utils/requestParams.d.ts +15 -0
  31. package/dist/cjs/ag-grid-plus/utils/requestParams.js +31 -0
  32. package/dist/cjs/ag-grid-plus/utils/rowSelection.d.ts +9 -0
  33. package/dist/cjs/ag-grid-plus/utils/rowSelection.js +24 -0
  34. package/dist/cjs/ag-grid-plus/utils.js +2 -2
  35. package/dist/cjs/array-table/arrayAddBtn.js +26 -17
  36. package/dist/cjs/array-table/arrayBase.js +2 -0
  37. package/dist/cjs/array-table/hooks.d.ts +2 -1
  38. package/dist/cjs/array-table/hooks.js +23 -43
  39. package/dist/cjs/array-table/index.js +105 -25
  40. package/dist/cjs/array-table/preview.js +1 -1
  41. package/dist/cjs/array-table/readOnlyFormatters.d.ts +28 -0
  42. package/dist/cjs/array-table/readOnlyFormatters.js +113 -0
  43. package/dist/cjs/array-table/utils.d.ts +2 -2
  44. package/dist/cjs/array-table/utils.js +180 -11
  45. package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.js +2 -3
  46. package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.js +1 -0
  47. package/dist/cjs/components/RegexEditor/validation/types.d.ts +1 -3
  48. package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -2
  49. package/dist/cjs/dashboard/dashboard/index.js +8 -11
  50. package/dist/cjs/dashboard/dashboard/utils.js +3 -6
  51. package/dist/cjs/dashboard/widget/index.js +3 -3
  52. package/dist/cjs/dashboard/widget/selector/index.js +5 -7
  53. package/dist/cjs/dashboard/widget/utils.js +3 -4
  54. package/dist/cjs/dialogSelect/index.d.ts +3 -0
  55. package/dist/cjs/dialogSelect/index.js +16 -13
  56. package/dist/cjs/editable/index.js +3 -1
  57. package/dist/cjs/formDesigner/FormDesigner.js +3 -2
  58. package/dist/cjs/formDesigner/preWidgets/index.d.ts +1 -10
  59. package/dist/cjs/formDesigner/preWidgets/index.js +1 -100
  60. package/dist/cjs/formDesigner/preWidgets/preDefineProperty.d.ts +11 -0
  61. package/dist/cjs/formDesigner/preWidgets/preDefineProperty.js +70 -0
  62. package/dist/cjs/generatedListPage/GeneratedListPage.js +20 -19
  63. package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
  64. package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.js +26 -0
  65. package/dist/cjs/generatedListPage/types.d.ts +3 -0
  66. package/dist/cjs/index.d.ts +1 -0
  67. package/dist/cjs/index.js +57 -0
  68. package/dist/cjs/standardFormDialog/types.d.ts +7 -0
  69. package/dist/cjs/standardFormDialog/useStandardFormSchema.d.ts +1 -1
  70. package/dist/cjs/standardFormDialog/withStandardForm.js +5 -4
  71. package/dist/esm/adapters/abpPagedApiAdapter.d.ts +8 -0
  72. package/dist/esm/adapters/abpPagedApiAdapter.js +29 -0
  73. package/dist/esm/adapters/index.d.ts +6 -0
  74. package/dist/esm/adapters/index.js +6 -0
  75. package/dist/esm/adapters/pagedApiAdapter.d.ts +25 -0
  76. package/dist/esm/adapters/pagedApiAdapter.js +1 -0
  77. package/dist/esm/ag-grid-plus/ag-gridPlus.js +79 -220
  78. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +3 -0
  79. package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +20 -0
  80. package/dist/esm/ag-grid-plus/context/queryFormContext.js +19 -0
  81. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +37 -1
  82. package/dist/esm/ag-grid-plus/context/useSchemeManager.js +120 -79
  83. package/dist/esm/ag-grid-plus/hooks/index.d.ts +1 -3
  84. package/dist/esm/ag-grid-plus/hooks/index.js +2 -6
  85. package/dist/esm/ag-grid-plus/hooks/useRowId.d.ts +13 -0
  86. package/dist/esm/ag-grid-plus/hooks/useRowId.js +52 -0
  87. package/dist/esm/ag-grid-plus/interface.d.ts +9 -0
  88. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +52 -36
  89. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +6 -6
  90. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +20 -6
  91. package/dist/esm/ag-grid-plus/types.d.ts +9 -0
  92. package/dist/esm/ag-grid-plus/utils/aggregation.d.ts +17 -0
  93. package/dist/esm/ag-grid-plus/utils/aggregation.js +93 -0
  94. package/dist/esm/ag-grid-plus/utils/columnProcessors.js +2 -2
  95. package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.d.ts +12 -3
  96. package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.js +20 -5
  97. package/dist/esm/ag-grid-plus/utils/queryFormDerivation.d.ts +19 -0
  98. package/dist/esm/ag-grid-plus/utils/queryFormDerivation.js +42 -0
  99. package/dist/esm/ag-grid-plus/utils/requestParams.d.ts +15 -0
  100. package/dist/esm/ag-grid-plus/utils/requestParams.js +24 -0
  101. package/dist/esm/ag-grid-plus/utils/rowSelection.d.ts +9 -0
  102. package/dist/esm/ag-grid-plus/utils/rowSelection.js +18 -0
  103. package/dist/esm/ag-grid-plus/utils.js +2 -2
  104. package/dist/esm/array-table/arrayAddBtn.js +26 -17
  105. package/dist/esm/array-table/arrayBase.js +2 -0
  106. package/dist/esm/array-table/hooks.d.ts +2 -1
  107. package/dist/esm/array-table/hooks.js +23 -43
  108. package/dist/esm/array-table/index.js +107 -27
  109. package/dist/esm/array-table/preview.js +2 -2
  110. package/dist/esm/array-table/readOnlyFormatters.d.ts +28 -0
  111. package/dist/esm/array-table/readOnlyFormatters.js +107 -0
  112. package/dist/esm/array-table/utils.d.ts +2 -2
  113. package/dist/esm/array-table/utils.js +180 -11
  114. package/dist/esm/components/RegexEditor/hooks/useRegexValidation.js +2 -2
  115. package/dist/esm/components/RegexEditor/hooks/useTemplateManager.js +1 -0
  116. package/dist/esm/components/RegexEditor/validation/types.d.ts +0 -1
  117. package/dist/esm/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -1
  118. package/dist/esm/dashboard/dashboard/index.js +8 -11
  119. package/dist/esm/dashboard/dashboard/utils.js +3 -2
  120. package/dist/esm/dashboard/widget/index.js +3 -3
  121. package/dist/esm/dashboard/widget/selector/index.js +5 -7
  122. package/dist/esm/dashboard/widget/utils.js +3 -3
  123. package/dist/esm/dialogSelect/index.d.ts +3 -0
  124. package/dist/esm/dialogSelect/index.js +16 -13
  125. package/dist/esm/editable/index.js +3 -1
  126. package/dist/esm/formDesigner/FormDesigner.js +3 -2
  127. package/dist/esm/formDesigner/preWidgets/index.d.ts +1 -10
  128. package/dist/esm/formDesigner/preWidgets/index.js +1 -10
  129. package/dist/esm/formDesigner/preWidgets/preDefineProperty.d.ts +11 -0
  130. package/dist/esm/formDesigner/preWidgets/{preDefineProperty1/preview.js → preDefineProperty.js} +49 -30
  131. package/dist/esm/generatedListPage/GeneratedListPage.js +20 -19
  132. package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
  133. package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.js +20 -0
  134. package/dist/esm/generatedListPage/types.d.ts +3 -0
  135. package/dist/esm/index.d.ts +1 -0
  136. package/dist/esm/index.js +3 -0
  137. package/dist/esm/standardFormDialog/types.d.ts +7 -0
  138. package/dist/esm/standardFormDialog/withStandardForm.js +5 -4
  139. package/dist/umd/qc-ui.min.css +1 -1
  140. package/dist/umd/qc-ui.min.js +1 -1
  141. package/package.json +52 -13
  142. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
  143. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.js +0 -224
  144. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
  145. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.js +0 -230
  146. package/dist/cjs/ag-grid-plus/hooks/useGridState.d.ts +0 -153
  147. package/dist/cjs/ag-grid-plus/hooks/useGridState.js +0 -258
  148. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/index.d.ts +0 -1
  149. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/index.js +0 -16
  150. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/preview.d.ts +0 -5
  151. package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/preview.js +0 -51
  152. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/index.d.ts +0 -1
  153. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/index.js +0 -16
  154. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/preview.d.ts +0 -5
  155. package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/preview.js +0 -50
  156. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/index.d.ts +0 -1
  157. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/index.js +0 -16
  158. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/preview.d.ts +0 -5
  159. package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/preview.js +0 -50
  160. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/index.d.ts +0 -1
  161. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/index.js +0 -16
  162. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/preview.d.ts +0 -5
  163. package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/preview.js +0 -50
  164. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/index.d.ts +0 -1
  165. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/index.js +0 -16
  166. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/preview.d.ts +0 -5
  167. package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/preview.js +0 -50
  168. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/index.d.ts +0 -1
  169. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/index.js +0 -16
  170. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/preview.d.ts +0 -5
  171. package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/preview.js +0 -50
  172. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/index.d.ts +0 -1
  173. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/index.js +0 -16
  174. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/preview.d.ts +0 -5
  175. package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/preview.js +0 -50
  176. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/index.d.ts +0 -1
  177. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/index.js +0 -16
  178. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/preview.d.ts +0 -5
  179. package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/preview.js +0 -50
  180. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/index.d.ts +0 -1
  181. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/index.js +0 -16
  182. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/preview.d.ts +0 -5
  183. package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/preview.js +0 -50
  184. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/index.d.ts +0 -1
  185. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/index.js +0 -16
  186. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/preview.d.ts +0 -5
  187. package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/preview.js +0 -50
  188. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
  189. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.js +0 -217
  190. package/dist/esm/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
  191. package/dist/esm/ag-grid-plus/hooks/useAgGridData.js +0 -225
  192. package/dist/esm/ag-grid-plus/hooks/useGridState.d.ts +0 -153
  193. package/dist/esm/ag-grid-plus/hooks/useGridState.js +0 -258
  194. package/dist/esm/formDesigner/preWidgets/preDefineProperty1/index.d.ts +0 -1
  195. package/dist/esm/formDesigner/preWidgets/preDefineProperty1/index.js +0 -1
  196. package/dist/esm/formDesigner/preWidgets/preDefineProperty1/preview.d.ts +0 -5
  197. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/index.d.ts +0 -1
  198. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/index.js +0 -1
  199. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/preview.d.ts +0 -5
  200. package/dist/esm/formDesigner/preWidgets/preDefineProperty10/preview.js +0 -43
  201. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/index.d.ts +0 -1
  202. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/index.js +0 -1
  203. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/preview.d.ts +0 -5
  204. package/dist/esm/formDesigner/preWidgets/preDefineProperty2/preview.js +0 -43
  205. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/index.d.ts +0 -1
  206. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/index.js +0 -1
  207. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/preview.d.ts +0 -5
  208. package/dist/esm/formDesigner/preWidgets/preDefineProperty3/preview.js +0 -43
  209. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/index.d.ts +0 -1
  210. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/index.js +0 -1
  211. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/preview.d.ts +0 -5
  212. package/dist/esm/formDesigner/preWidgets/preDefineProperty4/preview.js +0 -43
  213. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/index.d.ts +0 -1
  214. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/index.js +0 -1
  215. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/preview.d.ts +0 -5
  216. package/dist/esm/formDesigner/preWidgets/preDefineProperty5/preview.js +0 -43
  217. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/index.d.ts +0 -1
  218. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/index.js +0 -1
  219. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/preview.d.ts +0 -5
  220. package/dist/esm/formDesigner/preWidgets/preDefineProperty6/preview.js +0 -43
  221. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/index.d.ts +0 -1
  222. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/index.js +0 -1
  223. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/preview.d.ts +0 -5
  224. package/dist/esm/formDesigner/preWidgets/preDefineProperty7/preview.js +0 -43
  225. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/index.d.ts +0 -1
  226. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/index.js +0 -1
  227. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/preview.d.ts +0 -5
  228. package/dist/esm/formDesigner/preWidgets/preDefineProperty8/preview.js +0 -43
  229. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/index.d.ts +0 -1
  230. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/index.js +0 -1
  231. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/preview.d.ts +0 -5
  232. package/dist/esm/formDesigner/preWidgets/preDefineProperty9/preview.js +0 -43
@@ -0,0 +1,29 @@
1
+ /**
2
+ * ABP 默认分页适配器。
3
+ * 请求映射为 { Filter, Sorting, SkipCount, MaxResultCount }(有 maxResultCount 时才带分页字段);
4
+ * 响应读取 { items, totalCount }。字节级复刻库内现有 ABP 行为。
5
+ * @author nokecy
6
+ */
7
+ export var abpPagedApiAdapter = {
8
+ toRequest: function toRequest(_ref) {
9
+ var skipCount = _ref.skipCount,
10
+ maxResultCount = _ref.maxResultCount,
11
+ filter = _ref.filter,
12
+ sorter = _ref.sorter;
13
+ var request = {
14
+ Filter: filter,
15
+ Sorting: sorter
16
+ };
17
+ if (maxResultCount != null) {
18
+ request.SkipCount = skipCount !== null && skipCount !== void 0 ? skipCount : 0;
19
+ request.MaxResultCount = maxResultCount;
20
+ }
21
+ return request;
22
+ },
23
+ getItems: function getItems(response) {
24
+ return (response === null || response === void 0 ? void 0 : response.items) || [];
25
+ },
26
+ getTotal: function getTotal(response) {
27
+ return (response === null || response === void 0 ? void 0 : response.totalCount) || 0;
28
+ }
29
+ };
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 分页 API 适配器模块:剥离 ABP 业务契约,支持注入非 ABP 后端形状。
3
+ * @author nokecy
4
+ */
5
+ export type { GenericPagedQuery, PagedApiAdapter } from './pagedApiAdapter';
6
+ export { abpPagedApiAdapter } from './abpPagedApiAdapter';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 分页 API 适配器模块:剥离 ABP 业务契约,支持注入非 ABP 后端形状。
3
+ * @author nokecy
4
+ */
5
+
6
+ export { abpPagedApiAdapter } from "./abpPagedApiAdapter";
@@ -0,0 +1,25 @@
1
+ /**
2
+ * 分页 API 适配器接口:把库内部的通用分页查询/响应,在"通用形状"与"具体后端形状"
3
+ * 之间转换。默认实现 abpPagedApiAdapter 保持现有 ABP 行为;非 ABP 后端可注入自定义实现。
4
+ * @author nokecy
5
+ */
6
+ /** 通用分页查询参数(后端无关)。 */
7
+ export interface GenericPagedQuery {
8
+ /** 跳过条数(偏移量)。 */
9
+ skipCount?: number;
10
+ /** 取回条数(页大小)。 */
11
+ maxResultCount?: number;
12
+ /** 过滤表达式(已序列化为字符串)。 */
13
+ filter?: string;
14
+ /** 排序表达式,如 "name asc"。 */
15
+ sorter?: string;
16
+ }
17
+ /** 分页 API 适配器。 */
18
+ export interface PagedApiAdapter {
19
+ /** 通用查询 → 后端请求对象(透传给业务方的 list/request 函数)。 */
20
+ toRequest(query: GenericPagedQuery): Record<string, any>;
21
+ /** 后端响应 → 数据项数组。 */
22
+ getItems<T = any>(response: any): T[];
23
+ /** 后端响应 → 总条数。 */
24
+ getTotal(response: any): number;
25
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,8 +1,6 @@
1
- import _sumBy from "lodash/sumBy";
2
- import _uniqueId from "lodash/uniqueId";
3
- import _isArray from "lodash/isArray";
4
1
  var _excluded = ["style", "loading", "params", "request", "dataSource", "treeKeyName", "treeParentName", "rowData", "gridRef", "headerTitle", "toolBarRender", "search", "hideTool", "onGridReady", "gridKey", "children", "defaultSearchExpand", "overlayNoRowsTemplateText", "queryDefaultRows", "onSelectedRowsChange", "enableClickSelection", "rowSelection", "useNativeTreeFilter", "entityType"];
5
2
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
3
+ 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); }
6
4
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
7
5
  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
6
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -18,7 +16,6 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
18
16
  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; }
19
17
  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; } }
20
18
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
21
- 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); }
22
19
  function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
23
20
  function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
24
21
  import { ModuleRegistry } from 'ag-grid-community';
@@ -37,21 +34,28 @@ import FormRender from "./queryForm";
37
34
  import ToolBar from "./toolBar";
38
35
  import SettingItem from "./settingItem";
39
36
  import { RedoOutlined, FilterOutlined } from '@ant-design/icons';
40
- import { convertFilterModel, convertRulesToFilterString, dateTimeValueFormatter, dateValueFormatter, flatten, toTree } from "./utils";
37
+ import { convertFilterModel, dateTimeValueFormatter, dateValueFormatter, flatten, toTree } from "./utils";
41
38
  import AdvancedQueryBuilder from "./queryForm/AdvancedQueryBuilder";
42
39
  import { v4 as uuidv4 } from 'uuid';
43
40
  import Setting from "./setting";
44
41
  import { useGridPlusColumnState } from '.';
42
+ import { useRowId } from "./hooks/useRowId";
43
+ import _, { isArray } from 'lodash';
45
44
  import CustomGroupCellRenderer from "./_utils/customGroupCellRenderer";
46
45
  import processColumnGroups from "./_utils/processColumnGroups";
47
46
  import flattenColumnState from "./_utils/processFormColumnState";
48
47
  import { Select } from '@formily/antd-v5';
49
48
  import { localeText } from "./locale";
50
49
  import { GridPlusContext } from "./context/gridContext";
50
+ import { QueryFormContext } from "./context/queryFormContext";
51
51
  import { useGridSchemes } from "./context/useSchemeManager";
52
52
  import { useSchemeDataFlow } from "./context/useSchemeDataFlow";
53
53
  import { extractItemsOrder, extractHiddenFields } from "./shared/utils/schemeDataMigration";
54
54
  import { createSafeHtmlTemplate } from "./utils/sanitize";
55
+ import { computeAggregationRow } from "./utils/aggregation";
56
+ import { sortFormItemsByOrder, filterHiddenFormItems } from "./utils/queryFormDerivation";
57
+ import { filterVisibleSelectedRows } from "./utils/rowSelection";
58
+ import { buildFilterString, pageToSkipCount } from "./utils/requestParams";
55
59
  import { GridPlusError, ErrorType, ErrorSeverity } from "./errors";
56
60
  import { logger } from "./utils/logger";
57
61
  import { getEntityExtensionColumns } from "./utils/entityExtensionColumns";
@@ -60,6 +64,16 @@ var Text = Typography.Text;
60
64
  var getSort = function getSort(columnState) {
61
65
  return columnState ? "".concat(columnState.colId, " ").concat(columnState.sort) : "";
62
66
  };
67
+
68
+ // 深比较稳定引用:内容不变时返回同一引用。替代 JSON.stringify 作 memo 依赖——
69
+ // 避免每次渲染序列化大对象,且 isEqual 差异早退、对 Date/undefined 比较语义正确 @author nokecy
70
+ function useDeepCompareStable(value) {
71
+ var ref = useRef(value);
72
+ if (!_.isEqual(ref.current, value)) {
73
+ ref.current = value;
74
+ }
75
+ return ref.current;
76
+ }
63
77
  function AgGridPlus(props) {
64
78
  var style = props.style,
65
79
  loadingProps = props.loading,
@@ -103,72 +117,16 @@ function AgGridPlus(props) {
103
117
  var gridRef = useRef();
104
118
  var apiRef = useRef();
105
119
  var allColDefsRef = useRef([]);
120
+ // 请求序号:只接受最新一次请求的响应,防止快速翻页/连续查询时慢请求乱序覆盖新结果 @author nokecy
121
+ var requestSeqRef = useRef(0);
106
122
 
107
123
  // 【新增】缓存初始的 columnDefs,用于保留原始 headerName
108
124
  // 这个值在组件生命周期中保持不变,不会被列方案修改
109
125
  var initialColumnDefsRef = useRef([]);
110
126
 
111
127
  // 【新增】用于缓存每个数据对象的唯一 ID(降级方案)
112
- var rowIdCacheRef = useRef(new WeakMap());
113
- var rowIdCounterRef = useRef(0);
114
-
115
- /**
116
- * 【新增】智能生成唯一行 ID 的降级函数
117
- *
118
- * 策略(按优先级):
119
- * 1. 尝试常见 ID 字段:id, _id, key, uid, uuid
120
- * - 支持基本类型:string, number
121
- * - 支持对象类型:提取 value, id 属性
122
- * 2. 如果对象在 WeakMap 中已有缓存,直接返回
123
- * 3. 生成新的唯一 ID:grid-key-{counter}-{timestamp}
124
- *
125
- * @param data 行数据对象
126
- * @returns 唯一的行 ID 字符串
127
- */
128
- var generateUniqueRowId = useCallback(function (data) {
129
- if (!data || _typeof(data) !== 'object') {
130
- return "row-empty-".concat(rowIdCounterRef.current++);
131
- }
132
-
133
- // 1. 尝试常见 ID 字段
134
- var commonIdFields = ['id', '_id', 'key', 'uid', 'uuid'];
135
- for (var _i = 0, _commonIdFields = commonIdFields; _i < _commonIdFields.length; _i++) {
136
- var field = _commonIdFields[_i];
137
- var value = data[field];
138
- if (value !== undefined && value !== null && value !== '') {
139
- // 【修复】处理对象类型的 ID
140
- var fieldId = void 0;
141
- if (_typeof(value) === 'object' && value !== null) {
142
- // 对象类型:尝试提取常见的 ID 属性
143
- if (value.value !== undefined) {
144
- fieldId = String(value.value);
145
- } else if (value.id !== undefined) {
146
- fieldId = String(value.id);
147
- } else {
148
- // 无法提取,使用 JSON 序列化 + 字段名
149
- fieldId = "".concat(field, "-").concat(JSON.stringify(value));
150
- }
151
- } else {
152
- // 基本类型:直接转换
153
- fieldId = String(value);
154
- }
155
- return fieldId;
156
- }
157
- }
158
-
159
- // 2. 检查 WeakMap 缓存
160
- var cachedId = rowIdCacheRef.current.get(data);
161
- if (cachedId) {
162
- return cachedId;
163
- }
164
-
165
- // 3. 生成新的唯一 ID
166
- var uniqueId = "".concat(gridKey || 'grid', "-row-").concat(rowIdCounterRef.current++, "-").concat(Date.now());
167
-
168
- // 缓存到 WeakMap(对象被回收时自动清理)
169
- rowIdCacheRef.current.set(data, uniqueId);
170
- return uniqueId;
171
- }, [gridKey]);
128
+ var _useRowId = useRowId(gridKey),
129
+ generateUniqueRowId = _useRowId.generateUniqueRowId;
172
130
  var _useState = useState(false),
173
131
  _useState2 = _slicedToArray(_useState, 2),
174
132
  ready = _useState2[0],
@@ -601,7 +559,7 @@ function AgGridPlus(props) {
601
559
  columnDefs = columnDefs.map(function (col) {
602
560
  return processColumnDefRecursively(col);
603
561
  });
604
- extensibleColumns && gridKey && extensibleColumns[gridKey] && extensibleColumns[gridKey].map(function (column) {
562
+ extensibleColumns && gridKey && extensibleColumns[gridKey] && extensibleColumns[gridKey].forEach(function (column) {
605
563
  columnDefs.push({
606
564
  field: column.name,
607
565
  headerName: column.displayName,
@@ -663,16 +621,10 @@ function AgGridPlus(props) {
663
621
  return cols;
664
622
  }, [React.Children.count(children), props.columnDefs, extensibleColumns, gridKey, entityType, hostEntityExtensions]);
665
623
 
666
- // 稳定化 gridParams 和 sortColumn 的引用
667
- var stableGridParams = useMemo(function () {
668
- return gridParams;
669
- }, [JSON.stringify(gridParams)]);
670
- var stableSortColumn = useMemo(function () {
671
- return sortColumn;
672
- }, [JSON.stringify(sortColumn)]);
673
- var stableQueryFilter = useMemo(function () {
674
- return queryFilter;
675
- }, [JSON.stringify(queryFilter)]);
624
+ // 稳定化 gridParams 和 sortColumn 的引用(深比较,内容不变即复用旧引用)
625
+ var stableGridParams = useDeepCompareStable(gridParams);
626
+ var stableSortColumn = useDeepCompareStable(sortColumn);
627
+ var stableQueryFilter = useDeepCompareStable(queryFilter);
676
628
 
677
629
  // AG-Grid v33+ 行选择配置(使用对象 API)
678
630
  var rowSelectionConfig = useMemo(function () {
@@ -735,29 +687,22 @@ function AgGridPlus(props) {
735
687
  pagination: pagination
736
688
  });
737
689
  try {
738
- // 处理高级查询模式
739
- var filter;
740
- if (queryFilter.__advancedMode__ && queryFilter.__rules__) {
741
- // 高级模式:使用规则转换
742
- filter = convertRulesToFilterString(queryFilter.__rules__, allColDefsRef.current);
743
- logger.debug('高级模式 Filter', {
744
- rules: queryFilter.__rules__,
745
- filter: filter
746
- });
747
- } else {
748
- // 简单模式:使用原有的转换逻辑
749
- filter = convertFilterModel(queryFilter, allColDefsRef.current);
750
- }
690
+ // 处理高级查询模式 / 简单模式的过滤字符串构建
691
+ var filter = buildFilterString(queryFilter, allColDefsRef.current);
751
692
  var params = _objectSpread(_objectSpread({
752
693
  filter: filter
753
694
  }, stableGridParams), {}, {
754
695
  current: pagination.current,
755
- skipCount: pagination.current == 1 ? 0 : (pagination.current - 1) * pagination.pageSize,
696
+ skipCount: pageToSkipCount(pagination.current, pagination.pageSize),
756
697
  maxResultCount: pagination.pageSize,
757
698
  sorter: getSort(stableSortColumn)
758
699
  });
700
+ var requestSeq = ++requestSeqRef.current;
759
701
  requestRef.current(params, undefined, queryFilter).then(function (response) {
760
702
  var _apiRef$current2;
703
+ // 过期响应(期间已发起更新的请求),直接丢弃 @author nokecy
704
+ if (requestSeq !== requestSeqRef.current) return;
705
+
761
706
  // 验证响应数据格式
762
707
  if (!response || _typeof(response) !== 'object') {
763
708
  throw new GridPlusError('服务器返回数据格式错误', ErrorType.DATA_FORMAT_ERROR, ErrorSeverity.HIGH, {
@@ -833,6 +778,8 @@ function AgGridPlus(props) {
833
778
  });
834
779
  }
835
780
  }).catch(function (error) {
781
+ // 过期请求的失败不再提示/改状态,避免干扰最新请求 @author nokecy
782
+ if (requestSeq !== requestSeqRef.current) return;
836
783
  setLoading(false);
837
784
 
838
785
  // 包装错误为 GridPlusError
@@ -913,7 +860,7 @@ function AgGridPlus(props) {
913
860
  }, [ready, formInitialized, stableQueryFilter, stableGridParams, pagination.current, pagination.pageSize, stableSortColumn]);
914
861
  var handelgridPlusColumnState = function handelgridPlusColumnState(columnState) {
915
862
  var cellMap = {};
916
- if (_isArray(columnState)) {
863
+ if (isArray(columnState)) {
917
864
  columnState.forEach(function (item) {
918
865
  if (item.field && (item.cellClass || item.suppressHeaderFilterButton !== undefined || item.groupName)) {
919
866
  // 使用对象存储多个字段的值
@@ -982,21 +929,12 @@ function AgGridPlus(props) {
982
929
  };
983
930
 
984
931
  // 只保留既被选中又在当前显示的行
985
- var visibleSelectedRows = allSelectedRows.filter(function (selectedRow) {
986
- return displayedRows.some(function (displayedRow) {
987
- var selectedRowId = getRowIdMethod({
988
- data: selectedRow,
989
- level: 0,
990
- api: apiRef.current,
991
- context: null
992
- });
993
- var displayedRowId = getRowIdMethod({
994
- data: displayedRow,
995
- level: 0,
996
- api: apiRef.current,
997
- context: null
998
- });
999
- return selectedRowId && displayedRowId && selectedRowId === displayedRowId;
932
+ var visibleSelectedRows = filterVisibleSelectedRows(allSelectedRows, displayedRows, function (row) {
933
+ return getRowIdMethod({
934
+ data: row,
935
+ level: 0,
936
+ api: apiRef.current,
937
+ context: null
1000
938
  });
1001
939
  });
1002
940
  onSelectedRowsChangeRef.current(visibleSelectedRows);
@@ -1011,82 +949,6 @@ function AgGridPlus(props) {
1011
949
  setColumnCellClass(handelgridPlusColumnState(columnState));
1012
950
  }
1013
951
  };
1014
- var isValidNumber = function isValidNumber(value) {
1015
- return typeof value === 'number' && !isNaN(value);
1016
- };
1017
- var sumFun = function sumFun(field, displayedData) {
1018
- return _sumBy(displayedData, function (cur) {
1019
- if (cur && isValidNumber(cur[field])) {
1020
- return cur[field];
1021
- }
1022
- return 0;
1023
- });
1024
- };
1025
- var avgFun = function avgFun(field, displayedData) {
1026
- // 修正:分子分母口径统一为「有效数字」,避免 count 误用数组(恒真)及除零得 NaN @author nokecy
1027
- var validValues = displayedData.filter(function (cur) {
1028
- return cur && isValidNumber(cur[field]);
1029
- });
1030
- if (validValues.length === 0) return 0;
1031
- var sum = _sumBy(validValues, function (cur) {
1032
- return cur[field];
1033
- });
1034
- return sum / validValues.length;
1035
- };
1036
- var standardDeviationFun = function standardDeviationFun(field, displayedData) {
1037
- var validValues = displayedData.filter(function (cur) {
1038
- return isValidNumber(cur[field]);
1039
- });
1040
- var count = validValues.length;
1041
- if (count === 0) return 0;
1042
- var mean = sumFun(field, displayedData) / count;
1043
- var variance = _sumBy(displayedData, function (cur) {
1044
- if (cur && cur[field] !== undefined && cur[field] !== null) {
1045
- var diff = cur[field] - mean;
1046
- return diff * diff;
1047
- }
1048
- return 0;
1049
- }) / count;
1050
- return Math.sqrt(variance);
1051
- };
1052
- var handelNumber = function handelNumber(value) {
1053
- return (value / 1).toLocaleString(undefined, {
1054
- minimumFractionDigits: 2,
1055
- maximumFractionDigits: 2
1056
- });
1057
- };
1058
- // sum 求和 avg 平均值 standardDeviation 标准差
1059
- var calculatefun = function calculatefun(calcColFields, displayedData) {
1060
- var calculateArrCopy = [];
1061
- var calculateData = {
1062
- id: _uniqueId()
1063
- };
1064
- calcColFields.forEach(function (i) {
1065
- if (!i.cellRenderer) {
1066
- switch (i.calculateType) {
1067
- case "sum":
1068
- var sumPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
1069
- var sumValue = Number(sumFun(i.field, displayedData).toFixed(sumPrecision));
1070
- calculateData[i.field] = i.formatWithCommas ? handelNumber(sumValue) : sumValue;
1071
- break;
1072
- case "avg":
1073
- var avgPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
1074
- calculateData[i.field] = Number(avgFun(i.field, displayedData).toFixed(avgPrecision));
1075
- break;
1076
- case "standardDeviation":
1077
- var stdPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
1078
- calculateData[i.field] = Number(standardDeviationFun(i.field, displayedData).toFixed(stdPrecision));
1079
- break;
1080
- default:
1081
- break;
1082
- }
1083
- }
1084
- });
1085
- if (Object.keys(calculateData).length > 0) {
1086
- calculateArrCopy.push(calculateData);
1087
- }
1088
- return calculateArrCopy;
1089
- };
1090
952
  var calculateSum = useCallback(function () {
1091
953
  var displayedData = [];
1092
954
  if (apiRef.current) {
@@ -1111,10 +973,10 @@ function AgGridPlus(props) {
1111
973
  });
1112
974
  if (calcColFields.length > 0) {
1113
975
  var _apiRef$current5;
1114
- var calculatedValues = calculatefun(calcColFields, displayedData);
976
+ var calculatedValues = computeAggregationRow(calcColFields, displayedData);
1115
977
  (_apiRef$current5 = apiRef.current) === null || _apiRef$current5 === void 0 || _apiRef$current5.setGridOption('pinnedBottomRowData', calculatedValues);
1116
978
  }
1117
- }, [allColDefs, calculatefun]);
979
+ }, [allColDefs]);
1118
980
  var onFilterChanged = function onFilterChanged(event) {
1119
981
  calculateSum();
1120
982
  };
@@ -1172,7 +1034,9 @@ function AgGridPlus(props) {
1172
1034
  return processedColumns;
1173
1035
  }, [
1174
1036
  // 【关键】优先依赖派生状态
1175
- derivedColumnDefs, React.Children.count(children), props.columnDefs, extensibleColumns, columnCellClass, allColDefsRef.current]);
1037
+ derivedColumnDefs, React.Children.count(children), props.columnDefs, extensibleColumns, columnCellClass,
1038
+ // ref.current 变更不触发重渲染,作依赖无效;改依赖真正的数据源 allColDefs(memo 值) @author nokecy
1039
+ allColDefs]);
1176
1040
 
1177
1041
  // 构建查询表单项(带 order 属性)
1178
1042
  var queryFormItems = useMemo(function () {
@@ -1194,36 +1058,22 @@ function AgGridPlus(props) {
1194
1058
  var orderedFormItems = useMemo(function () {
1195
1059
  // 从查询方案提取字段顺序
1196
1060
  var itemsOrder = currentQueryScheme ? extractItemsOrder(currentQueryScheme) : queryItemsOrder;
1197
- if (!itemsOrder || itemsOrder.length === 0) {
1198
- return queryFormItems;
1199
- }
1200
-
1201
- // 按照 itemsOrder 排序
1202
- var ordered = _toConsumableArray(queryFormItems).sort(function (a, b) {
1203
- var indexA = itemsOrder.indexOf(a.field);
1204
- var indexB = itemsOrder.indexOf(b.field);
1205
- if (indexA === -1 && indexB === -1) return 0;
1206
- if (indexA === -1) return 1;
1207
- if (indexB === -1) return -1;
1208
- return indexA - indexB;
1209
- });
1210
- return ordered;
1061
+ return sortFormItemsByOrder(queryFormItems, itemsOrder);
1211
1062
  }, [queryFormItems, currentQueryScheme, queryItemsOrder]);
1212
1063
 
1213
1064
  // 根据方案的隐藏字段过滤表单项
1214
1065
  var visibleFormItems = useMemo(function () {
1215
1066
  // 从查询方案提取隐藏字段
1216
1067
  var hiddenFields = currentQueryScheme ? extractHiddenFields(currentQueryScheme) : [];
1217
- if (hiddenFields.length === 0) {
1218
- return orderedFormItems;
1219
- }
1220
- return orderedFormItems.filter(function (item) {
1221
- return !hiddenFields.includes(item.field);
1222
- });
1068
+ return filterHiddenFormItems(orderedFormItems, hiddenFields);
1223
1069
  }, [orderedFormItems, currentQueryScheme]);
1070
+
1071
+ // 依赖 rowData:数据刷新(翻页/查询)后需重算底部汇总行。
1072
+ // 原内联 calculatefun 每渲染重建使本 effect 每渲染都跑而隐式覆盖此触发;
1073
+ // 抽出后 calculateSum 变稳定,须显式依赖 rowData 以保持原行为。@author nokecy
1224
1074
  useEffect(function () {
1225
1075
  calculateSum();
1226
- }, [calculateSum]);
1076
+ }, [calculateSum, rowData]);
1227
1077
  var rowDataMemo = useMemo(function () {
1228
1078
  // 【兼容】根据 useNativeTreeFilter 决定是否使用原生树形过滤
1229
1079
  // - useNativeTreeFilter=true: 直接传入原始数据,由 AG-Grid 原生处理树形结构(支持列头过滤所有层级)
@@ -1236,7 +1086,9 @@ function AgGridPlus(props) {
1236
1086
  var actionDom = toolBarRender && toolBarRender(apiRef.current, convertFilterModel(queryFilter, allColDefsRef.current), queryFilter, {
1237
1087
  current: pagination.current,
1238
1088
  skipCount: pagination.current == 1 ? 0 : (pagination.current - 1) * pagination.pageSize,
1239
- maxResultCount: pagination.pageSize
1089
+ maxResultCount: pagination.pageSize,
1090
+ page: pagination.current,
1091
+ pageSize: pagination.pageSize
1240
1092
  });
1241
1093
  var autoGroupColumnDef = useMemo(function () {
1242
1094
  var _props$autoGroupColum;
@@ -1245,22 +1097,29 @@ function AgGridPlus(props) {
1245
1097
  });
1246
1098
  }, [props.autoGroupColumnDef]);
1247
1099
 
1248
- // 准备 GridPlusContext 的值(包含方案管理的完整 API)
1100
+ // 查询表单上下文值:从 GridPlusContext 拆出,使查询表单的高频变化(顺序调整)
1101
+ // 不再触发 GridPlusContext 全量重渲染。@author nokecy
1102
+ var queryFormContextValue = useMemo(function () {
1103
+ return {
1104
+ queryFormItems: queryFormItems,
1105
+ currentQueryOrder: currentQueryScheme ? extractItemsOrder(currentQueryScheme) : queryItemsOrder,
1106
+ updateQueryOrder: setQueryItemsOrder
1107
+ };
1108
+ }, [queryFormItems, currentQueryScheme, queryItemsOrder]);
1109
+
1110
+ // 准备 GridPlusContext 的值(包含方案管理的完整 API;查询表单字段已移至 QueryFormContext)
1249
1111
  var gridPlusContextValue = useMemo(function () {
1250
1112
  return {
1251
1113
  extensibleColumns: extensibleColumns,
1252
1114
  columnState: gridPlusColumnState,
1253
- allColDefs: allColDefsRef.current,
1254
- // 【修复】传入原始完整的列定义
1115
+ allColDefs: allColDefs,
1116
+ // 直接用 memo 值(与 ref 同源,引用变化能正确触发 memo 更新) @author nokecy
1255
1117
  initialColumnDefs: initialColumnDefsRef.current,
1256
- // 【新增】传入初始列定义(用于获取原始 headerName)
1118
+ // 初始列定义在 allColDefs 首次计算时填充,之后不变(用于获取原始 headerName)
1257
1119
  onSaveColumnState: onSaveColumnState,
1258
1120
  applyToGlobal: applyToGlobal,
1259
1121
  resetCurrent: resetCurrent,
1260
1122
  resetAll: resetAll,
1261
- currentQueryOrder: currentQueryScheme ? extractItemsOrder(currentQueryScheme) : queryItemsOrder,
1262
- updateQueryOrder: setQueryItemsOrder,
1263
- queryFormItems: queryFormItems,
1264
1123
  // ========== 方案管理 API(透传给子组件) ==========
1265
1124
  columnSchemes: columnSchemes,
1266
1125
  querySchemes: querySchemes,
@@ -1288,11 +1147,9 @@ function AgGridPlus(props) {
1288
1147
  // ========== 实体扩展字段配置 @author nokecy ==========
1289
1148
  hostEntityExtensions: hostEntityExtensions
1290
1149
  };
1291
- }, [extensibleColumns, gridPlusColumnState, allColDefsRef.current,
1292
- // 【修复】添加到依赖数组
1293
- initialColumnDefsRef.current,
1294
- // 【新增】添加初始列定义到依赖数组
1295
- onSaveColumnState, applyToGlobal, resetCurrent, resetAll, currentQueryScheme, queryItemsOrder, queryFormItems,
1150
+ }, [extensibleColumns, gridPlusColumnState,
1151
+ // ref.current 作依赖无效(变更不触发重渲染);依赖数据源 allColDefs,initialColumnDefs 随其首次计算填充 @author nokecy
1152
+ allColDefs, onSaveColumnState, applyToGlobal, resetCurrent, resetAll,
1296
1153
  // 方案管理依赖
1297
1154
  columnSchemes, querySchemes, currentSchemes, schemesLoading, lastSyncTime, saveColumnScheme, deleteColumnScheme, saveQueryScheme, deleteQueryScheme, setCurrentColumnScheme, setCurrentQueryScheme, refreshSchemes, getColumnSchemes, getQuerySchemes, getCurrentScheme,
1298
1155
  // 全局配置依赖
@@ -1303,6 +1160,8 @@ function AgGridPlus(props) {
1303
1160
  hostEntityExtensions]);
1304
1161
  return /*#__PURE__*/React.createElement(GridPlusContext.Provider, {
1305
1162
  value: gridPlusContextValue
1163
+ }, /*#__PURE__*/React.createElement(QueryFormContext.Provider, {
1164
+ value: queryFormContextValue
1306
1165
  }, /*#__PURE__*/React.createElement(Spin, {
1307
1166
  spinning: loading,
1308
1167
  wrapperClassName: "grid-spin"
@@ -1552,6 +1411,6 @@ function AgGridPlus(props) {
1552
1411
  pageSizeOptions: props.pageSizeOptions || [10, 20, 50, 100, 200, 500, 1000, 10000],
1553
1412
  hideOnSinglePage: false,
1554
1413
  showQuickJumper: false
1555
- }))))));
1414
+ })))))));
1556
1415
  }
1557
1416
  export default AgGridPlus;
@@ -129,14 +129,17 @@ export interface GridPlusContextValue extends SchemeManagementAPI {
129
129
  resetAll: (gridKey: string) => void;
130
130
  /**
131
131
  * 查询表单项列表(用于查询方案管理器)
132
+ * @deprecated 已移至 QueryFormContext(useQueryForm);保留此声明仅为向后兼容,AgGridPlus 不再经本 Context 提供。
132
133
  */
133
134
  queryFormItems?: any[];
134
135
  /**
135
136
  * 当前查询项顺序
137
+ * @deprecated 已移至 QueryFormContext(useQueryForm)。
136
138
  */
137
139
  currentQueryOrder?: string[];
138
140
  /**
139
141
  * 更新查询项顺序
142
+ * @deprecated 已移至 QueryFormContext(useQueryForm)。
140
143
  */
141
144
  updateQueryOrder?: (order: string[]) => void;
142
145
  /**
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ /**
3
+ * 查询表单上下文。
4
+ *
5
+ * 从 GridPlusContext 中拆出"查询表单"相关字段(查询项列表/顺序/更新函数),
6
+ * 使查询表单的高频变化(如拖动调整顺序)不再触发 GridPlusContext 全量重渲染。
7
+ * 当前仅 QuerySchemeManager 消费;由 AgGridPlus 内部 Provider 提供。
8
+ * @author nokecy
9
+ */
10
+ export interface QueryFormContextValue {
11
+ /** 查询表单项列表(用于查询方案管理器) */
12
+ queryFormItems?: any[];
13
+ /** 当前查询项顺序 */
14
+ currentQueryOrder?: string[];
15
+ /** 更新查询项顺序 */
16
+ updateQueryOrder?: (order: string[]) => void;
17
+ }
18
+ export declare const QueryFormContext: React.Context<QueryFormContextValue>;
19
+ /** 读取查询表单上下文。@author nokecy */
20
+ export declare const useQueryForm: () => QueryFormContextValue;
@@ -0,0 +1,19 @@
1
+ import React from 'react';
2
+
3
+ /**
4
+ * 查询表单上下文。
5
+ *
6
+ * 从 GridPlusContext 中拆出"查询表单"相关字段(查询项列表/顺序/更新函数),
7
+ * 使查询表单的高频变化(如拖动调整顺序)不再触发 GridPlusContext 全量重渲染。
8
+ * 当前仅 QuerySchemeManager 消费;由 AgGridPlus 内部 Provider 提供。
9
+ * @author nokecy
10
+ */
11
+
12
+ export var QueryFormContext = /*#__PURE__*/React.createContext({
13
+ queryFormItems: []
14
+ });
15
+
16
+ /** 读取查询表单上下文。@author nokecy */
17
+ export var useQueryForm = function useQueryForm() {
18
+ return React.useContext(QueryFormContext);
19
+ };