@nokecy/qc-ui 1.1.39 → 1.1.41

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 (121) 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 +51 -205
  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/errors/ErrorBoundary.d.ts +1 -1
  12. package/dist/cjs/ag-grid-plus/hooks/index.d.ts +1 -3
  13. package/dist/cjs/ag-grid-plus/hooks/index.js +7 -39
  14. package/dist/cjs/ag-grid-plus/hooks/useRowId.d.ts +13 -0
  15. package/dist/cjs/ag-grid-plus/hooks/useRowId.js +57 -0
  16. package/dist/cjs/ag-grid-plus/interface.d.ts +9 -0
  17. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +6 -6
  18. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +2 -3
  19. package/dist/cjs/ag-grid-plus/types.d.ts +9 -0
  20. package/dist/cjs/ag-grid-plus/utils/aggregation.d.ts +17 -0
  21. package/dist/cjs/ag-grid-plus/utils/aggregation.js +101 -0
  22. package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +2 -2
  23. package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.d.ts +12 -3
  24. package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.js +20 -5
  25. package/dist/cjs/ag-grid-plus/utils/queryFormDerivation.d.ts +19 -0
  26. package/dist/cjs/ag-grid-plus/utils/queryFormDerivation.js +49 -0
  27. package/dist/cjs/ag-grid-plus/utils/requestParams.d.ts +15 -0
  28. package/dist/cjs/ag-grid-plus/utils/requestParams.js +31 -0
  29. package/dist/cjs/ag-grid-plus/utils/rowSelection.d.ts +9 -0
  30. package/dist/cjs/ag-grid-plus/utils/rowSelection.js +24 -0
  31. package/dist/cjs/ag-grid-plus/utils.js +2 -2
  32. package/dist/cjs/array-table/arrayBase.js +2 -0
  33. package/dist/cjs/array-table/utils.d.ts +15 -1
  34. package/dist/cjs/array-table/utils.js +48 -20
  35. package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.js +2 -3
  36. package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.js +1 -0
  37. package/dist/cjs/components/RegexEditor/validation/types.d.ts +1 -3
  38. package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -2
  39. package/dist/cjs/dashboard/dashboard/index.js +8 -11
  40. package/dist/cjs/dashboard/dashboard/utils.js +3 -6
  41. package/dist/cjs/dashboard/widget/index.js +3 -3
  42. package/dist/cjs/dashboard/widget/selector/index.js +5 -7
  43. package/dist/cjs/dashboard/widget/utils.js +3 -4
  44. package/dist/cjs/dialogSelect/index.d.ts +3 -0
  45. package/dist/cjs/dialogSelect/index.js +16 -13
  46. package/dist/cjs/generatedListPage/GeneratedListPage.js +20 -19
  47. package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
  48. package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.js +26 -0
  49. package/dist/cjs/generatedListPage/types.d.ts +3 -0
  50. package/dist/cjs/index.d.ts +1 -0
  51. package/dist/cjs/index.js +57 -0
  52. package/dist/cjs/standardFormDialog/types.d.ts +7 -0
  53. package/dist/cjs/standardFormDialog/useStandardFormSchema.d.ts +1 -1
  54. package/dist/cjs/standardFormDialog/withStandardForm.js +5 -4
  55. package/dist/esm/adapters/abpPagedApiAdapter.d.ts +8 -0
  56. package/dist/esm/adapters/abpPagedApiAdapter.js +29 -0
  57. package/dist/esm/adapters/index.d.ts +6 -0
  58. package/dist/esm/adapters/index.js +6 -0
  59. package/dist/esm/adapters/pagedApiAdapter.d.ts +25 -0
  60. package/dist/esm/adapters/pagedApiAdapter.js +1 -0
  61. package/dist/esm/ag-grid-plus/ag-gridPlus.js +49 -203
  62. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +3 -0
  63. package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +20 -0
  64. package/dist/esm/ag-grid-plus/context/queryFormContext.js +19 -0
  65. package/dist/esm/ag-grid-plus/hooks/index.d.ts +1 -3
  66. package/dist/esm/ag-grid-plus/hooks/index.js +2 -6
  67. package/dist/esm/ag-grid-plus/hooks/useRowId.d.ts +13 -0
  68. package/dist/esm/ag-grid-plus/hooks/useRowId.js +52 -0
  69. package/dist/esm/ag-grid-plus/interface.d.ts +9 -0
  70. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +6 -6
  71. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +7 -6
  72. package/dist/esm/ag-grid-plus/types.d.ts +9 -0
  73. package/dist/esm/ag-grid-plus/utils/aggregation.d.ts +17 -0
  74. package/dist/esm/ag-grid-plus/utils/aggregation.js +93 -0
  75. package/dist/esm/ag-grid-plus/utils/columnProcessors.js +2 -2
  76. package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.d.ts +12 -3
  77. package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.js +20 -5
  78. package/dist/esm/ag-grid-plus/utils/queryFormDerivation.d.ts +19 -0
  79. package/dist/esm/ag-grid-plus/utils/queryFormDerivation.js +42 -0
  80. package/dist/esm/ag-grid-plus/utils/requestParams.d.ts +15 -0
  81. package/dist/esm/ag-grid-plus/utils/requestParams.js +24 -0
  82. package/dist/esm/ag-grid-plus/utils/rowSelection.d.ts +9 -0
  83. package/dist/esm/ag-grid-plus/utils/rowSelection.js +18 -0
  84. package/dist/esm/ag-grid-plus/utils.js +2 -2
  85. package/dist/esm/array-table/arrayBase.js +2 -0
  86. package/dist/esm/array-table/utils.d.ts +15 -1
  87. package/dist/esm/array-table/utils.js +48 -20
  88. package/dist/esm/components/RegexEditor/hooks/useRegexValidation.js +2 -2
  89. package/dist/esm/components/RegexEditor/hooks/useTemplateManager.js +1 -0
  90. package/dist/esm/components/RegexEditor/validation/types.d.ts +0 -1
  91. package/dist/esm/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -1
  92. package/dist/esm/dashboard/dashboard/index.js +8 -11
  93. package/dist/esm/dashboard/dashboard/utils.js +3 -2
  94. package/dist/esm/dashboard/widget/index.js +3 -3
  95. package/dist/esm/dashboard/widget/selector/index.js +5 -7
  96. package/dist/esm/dashboard/widget/utils.js +3 -3
  97. package/dist/esm/dialogSelect/index.d.ts +3 -0
  98. package/dist/esm/dialogSelect/index.js +16 -13
  99. package/dist/esm/generatedListPage/GeneratedListPage.js +20 -19
  100. package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
  101. package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.js +20 -0
  102. package/dist/esm/generatedListPage/types.d.ts +3 -0
  103. package/dist/esm/index.d.ts +1 -0
  104. package/dist/esm/index.js +3 -0
  105. package/dist/esm/standardFormDialog/types.d.ts +7 -0
  106. package/dist/esm/standardFormDialog/withStandardForm.js +5 -4
  107. package/dist/umd/qc-ui.min.css +1 -1
  108. package/dist/umd/qc-ui.min.js +1 -1
  109. package/package.json +52 -13
  110. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
  111. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.js +0 -224
  112. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
  113. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.js +0 -230
  114. package/dist/cjs/ag-grid-plus/hooks/useGridState.d.ts +0 -153
  115. package/dist/cjs/ag-grid-plus/hooks/useGridState.js +0 -258
  116. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
  117. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.js +0 -217
  118. package/dist/esm/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
  119. package/dist/esm/ag-grid-plus/hooks/useAgGridData.js +0 -225
  120. package/dist/esm/ag-grid-plus/hooks/useGridState.d.ts +0 -153
  121. package/dist/esm/ag-grid-plus/hooks/useGridState.js +0 -258
@@ -0,0 +1,8 @@
1
+ import type { PagedApiAdapter } from './pagedApiAdapter';
2
+ /**
3
+ * ABP 默认分页适配器。
4
+ * 请求映射为 { Filter, Sorting, SkipCount, MaxResultCount }(有 maxResultCount 时才带分页字段);
5
+ * 响应读取 { items, totalCount }。字节级复刻库内现有 ABP 行为。
6
+ * @author nokecy
7
+ */
8
+ export declare const abpPagedApiAdapter: PagedApiAdapter;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.abpPagedApiAdapter = void 0;
7
+ /**
8
+ * ABP 默认分页适配器。
9
+ * 请求映射为 { Filter, Sorting, SkipCount, MaxResultCount }(有 maxResultCount 时才带分页字段);
10
+ * 响应读取 { items, totalCount }。字节级复刻库内现有 ABP 行为。
11
+ * @author nokecy
12
+ */
13
+ var abpPagedApiAdapter = exports.abpPagedApiAdapter = {
14
+ toRequest: function toRequest(_ref) {
15
+ var skipCount = _ref.skipCount,
16
+ maxResultCount = _ref.maxResultCount,
17
+ filter = _ref.filter,
18
+ sorter = _ref.sorter;
19
+ var request = {
20
+ Filter: filter,
21
+ Sorting: sorter
22
+ };
23
+ if (maxResultCount != null) {
24
+ request.SkipCount = skipCount !== null && skipCount !== void 0 ? skipCount : 0;
25
+ request.MaxResultCount = maxResultCount;
26
+ }
27
+ return request;
28
+ },
29
+ getItems: function getItems(response) {
30
+ return (response === null || response === void 0 ? void 0 : response.items) || [];
31
+ },
32
+ getTotal: function getTotal(response) {
33
+ return (response === null || response === void 0 ? void 0 : response.totalCount) || 0;
34
+ }
35
+ };
@@ -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,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "abpPagedApiAdapter", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _abpPagedApiAdapter.abpPagedApiAdapter;
10
+ }
11
+ });
12
+ var _abpPagedApiAdapter = require("./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,5 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
@@ -4,10 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var _sumBy2 = _interopRequireDefault(require("lodash/sumBy"));
8
- var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
9
- var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId"));
10
- var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
11
7
  var _agGridCommunity = require("ag-grid-community");
12
8
  var _agGridReact = require("ag-grid-react");
13
9
  var _antd = require("antd");
@@ -23,25 +19,33 @@ var _utils = require("./utils");
23
19
  var _AdvancedQueryBuilder = _interopRequireDefault(require("./queryForm/AdvancedQueryBuilder"));
24
20
  var _uuid = require("uuid");
25
21
  var _setting = _interopRequireDefault(require("./setting"));
26
- var _ = require(".");
22
+ var _2 = require(".");
23
+ var _useRowId2 = require("./hooks/useRowId");
24
+ var _lodash = _interopRequireWildcard(require("lodash"));
27
25
  var _customGroupCellRenderer = _interopRequireDefault(require("./_utils/customGroupCellRenderer"));
28
26
  var _processColumnGroups = _interopRequireDefault(require("./_utils/processColumnGroups"));
29
27
  var _processFormColumnState = _interopRequireDefault(require("./_utils/processFormColumnState"));
30
28
  var _antdV = require("@formily/antd-v5");
31
29
  var _locale = require("./locale");
32
30
  var _gridContext = require("./context/gridContext");
31
+ var _queryFormContext = require("./context/queryFormContext");
33
32
  var _useSchemeManager = require("./context/useSchemeManager");
34
33
  var _useSchemeDataFlow = require("./context/useSchemeDataFlow");
35
34
  var _schemeDataMigration = require("./shared/utils/schemeDataMigration");
36
35
  var _sanitize = require("./utils/sanitize");
36
+ var _aggregation = require("./utils/aggregation");
37
+ var _queryFormDerivation = require("./utils/queryFormDerivation");
38
+ var _rowSelection = require("./utils/rowSelection");
39
+ var _requestParams = require("./utils/requestParams");
37
40
  var _errors = require("./errors");
38
41
  var _logger = require("./utils/logger");
39
42
  var _entityExtensionColumns = require("./utils/entityExtensionColumns");
40
43
  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"];
44
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
41
45
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
42
46
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
43
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
44
47
  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); }
48
+ 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); }
45
49
  function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
46
50
  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."); }
47
51
  function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
@@ -57,7 +61,6 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
57
61
  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; }
58
62
  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; } }
59
63
  function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
60
- 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); }
61
64
  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; }
62
65
  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; }
63
66
  // AG-Grid v33+ 需要显式注册模块
@@ -74,7 +77,7 @@ var getSort = function getSort(columnState) {
74
77
  // 避免每次渲染序列化大对象,且 isEqual 差异早退、对 Date/undefined 比较语义正确 @author nokecy
75
78
  function useDeepCompareStable(value) {
76
79
  var ref = (0, _react.useRef)(value);
77
- if (!(0, _isEqual2.default)(ref.current, value)) {
80
+ if (!_lodash.default.isEqual(ref.current, value)) {
78
81
  ref.current = value;
79
82
  }
80
83
  return ref.current;
@@ -107,7 +110,7 @@ function AgGridPlus(props) {
107
110
  useNativeTreeFilter = _props$useNativeTreeF === void 0 ? false : _props$useNativeTreeF,
108
111
  entityType = props.entityType,
109
112
  rest = _objectWithoutProperties(props, _excluded);
110
- var _useGridPlusColumnSta = (0, _.useGridPlusColumnState)(),
113
+ var _useGridPlusColumnSta = (0, _2.useGridPlusColumnState)(),
111
114
  onSaveColumnState = _useGridPlusColumnSta.onSaveColumnState,
112
115
  gridPlusColumnState = _useGridPlusColumnSta.columnState,
113
116
  extensibleColumns = _useGridPlusColumnSta.extensibleColumns,
@@ -130,66 +133,8 @@ function AgGridPlus(props) {
130
133
  var initialColumnDefsRef = (0, _react.useRef)([]);
131
134
 
132
135
  // 【新增】用于缓存每个数据对象的唯一 ID(降级方案)
133
- var rowIdCacheRef = (0, _react.useRef)(new WeakMap());
134
- var rowIdCounterRef = (0, _react.useRef)(0);
135
-
136
- /**
137
- * 【新增】智能生成唯一行 ID 的降级函数
138
- *
139
- * 策略(按优先级):
140
- * 1. 尝试常见 ID 字段:id, _id, key, uid, uuid
141
- * - 支持基本类型:string, number
142
- * - 支持对象类型:提取 value, id 属性
143
- * 2. 如果对象在 WeakMap 中已有缓存,直接返回
144
- * 3. 生成新的唯一 ID:grid-key-{counter}-{timestamp}
145
- *
146
- * @param data 行数据对象
147
- * @returns 唯一的行 ID 字符串
148
- */
149
- var generateUniqueRowId = (0, _react.useCallback)(function (data) {
150
- if (!data || _typeof(data) !== 'object') {
151
- return "row-empty-".concat(rowIdCounterRef.current++);
152
- }
153
-
154
- // 1. 尝试常见 ID 字段
155
- var commonIdFields = ['id', '_id', 'key', 'uid', 'uuid'];
156
- for (var _i = 0, _commonIdFields = commonIdFields; _i < _commonIdFields.length; _i++) {
157
- var field = _commonIdFields[_i];
158
- var value = data[field];
159
- if (value !== undefined && value !== null && value !== '') {
160
- // 【修复】处理对象类型的 ID
161
- var fieldId = void 0;
162
- if (_typeof(value) === 'object' && value !== null) {
163
- // 对象类型:尝试提取常见的 ID 属性
164
- if (value.value !== undefined) {
165
- fieldId = String(value.value);
166
- } else if (value.id !== undefined) {
167
- fieldId = String(value.id);
168
- } else {
169
- // 无法提取,使用 JSON 序列化 + 字段名
170
- fieldId = "".concat(field, "-").concat(JSON.stringify(value));
171
- }
172
- } else {
173
- // 基本类型:直接转换
174
- fieldId = String(value);
175
- }
176
- return fieldId;
177
- }
178
- }
179
-
180
- // 2. 检查 WeakMap 缓存
181
- var cachedId = rowIdCacheRef.current.get(data);
182
- if (cachedId) {
183
- return cachedId;
184
- }
185
-
186
- // 3. 生成新的唯一 ID
187
- var uniqueId = "".concat(gridKey || 'grid', "-row-").concat(rowIdCounterRef.current++, "-").concat(Date.now());
188
-
189
- // 缓存到 WeakMap(对象被回收时自动清理)
190
- rowIdCacheRef.current.set(data, uniqueId);
191
- return uniqueId;
192
- }, [gridKey]);
136
+ var _useRowId = (0, _useRowId2.useRowId)(gridKey),
137
+ generateUniqueRowId = _useRowId.generateUniqueRowId;
193
138
  var _useState = (0, _react.useState)(false),
194
139
  _useState2 = _slicedToArray(_useState, 2),
195
140
  ready = _useState2[0],
@@ -750,24 +695,13 @@ function AgGridPlus(props) {
750
695
  pagination: pagination
751
696
  });
752
697
  try {
753
- // 处理高级查询模式
754
- var filter;
755
- if (queryFilter.__advancedMode__ && queryFilter.__rules__) {
756
- // 高级模式:使用规则转换
757
- filter = (0, _utils.convertRulesToFilterString)(queryFilter.__rules__, allColDefsRef.current);
758
- _logger.logger.debug('高级模式 Filter', {
759
- rules: queryFilter.__rules__,
760
- filter: filter
761
- });
762
- } else {
763
- // 简单模式:使用原有的转换逻辑
764
- filter = (0, _utils.convertFilterModel)(queryFilter, allColDefsRef.current);
765
- }
698
+ // 处理高级查询模式 / 简单模式的过滤字符串构建
699
+ var filter = (0, _requestParams.buildFilterString)(queryFilter, allColDefsRef.current);
766
700
  var params = _objectSpread(_objectSpread({
767
701
  filter: filter
768
702
  }, stableGridParams), {}, {
769
703
  current: pagination.current,
770
- skipCount: pagination.current == 1 ? 0 : (pagination.current - 1) * pagination.pageSize,
704
+ skipCount: (0, _requestParams.pageToSkipCount)(pagination.current, pagination.pageSize),
771
705
  maxResultCount: pagination.pageSize,
772
706
  sorter: getSort(stableSortColumn)
773
707
  });
@@ -934,7 +868,7 @@ function AgGridPlus(props) {
934
868
  }, [ready, formInitialized, stableQueryFilter, stableGridParams, pagination.current, pagination.pageSize, stableSortColumn]);
935
869
  var handelgridPlusColumnState = function handelgridPlusColumnState(columnState) {
936
870
  var cellMap = {};
937
- if ((0, _isArray2.default)(columnState)) {
871
+ if ((0, _lodash.isArray)(columnState)) {
938
872
  columnState.forEach(function (item) {
939
873
  if (item.field && (item.cellClass || item.suppressHeaderFilterButton !== undefined || item.groupName)) {
940
874
  // 使用对象存储多个字段的值
@@ -1003,21 +937,12 @@ function AgGridPlus(props) {
1003
937
  };
1004
938
 
1005
939
  // 只保留既被选中又在当前显示的行
1006
- var visibleSelectedRows = allSelectedRows.filter(function (selectedRow) {
1007
- return displayedRows.some(function (displayedRow) {
1008
- var selectedRowId = getRowIdMethod({
1009
- data: selectedRow,
1010
- level: 0,
1011
- api: apiRef.current,
1012
- context: null
1013
- });
1014
- var displayedRowId = getRowIdMethod({
1015
- data: displayedRow,
1016
- level: 0,
1017
- api: apiRef.current,
1018
- context: null
1019
- });
1020
- return selectedRowId && displayedRowId && selectedRowId === displayedRowId;
940
+ var visibleSelectedRows = (0, _rowSelection.filterVisibleSelectedRows)(allSelectedRows, displayedRows, function (row) {
941
+ return getRowIdMethod({
942
+ data: row,
943
+ level: 0,
944
+ api: apiRef.current,
945
+ context: null
1021
946
  });
1022
947
  });
1023
948
  onSelectedRowsChangeRef.current(visibleSelectedRows);
@@ -1032,82 +957,6 @@ function AgGridPlus(props) {
1032
957
  setColumnCellClass(handelgridPlusColumnState(columnState));
1033
958
  }
1034
959
  };
1035
- var isValidNumber = function isValidNumber(value) {
1036
- return typeof value === 'number' && !isNaN(value);
1037
- };
1038
- var sumFun = function sumFun(field, displayedData) {
1039
- return (0, _sumBy2.default)(displayedData, function (cur) {
1040
- if (cur && isValidNumber(cur[field])) {
1041
- return cur[field];
1042
- }
1043
- return 0;
1044
- });
1045
- };
1046
- var avgFun = function avgFun(field, displayedData) {
1047
- // 修正:分子分母口径统一为「有效数字」,避免 count 误用数组(恒真)及除零得 NaN @author nokecy
1048
- var validValues = displayedData.filter(function (cur) {
1049
- return cur && isValidNumber(cur[field]);
1050
- });
1051
- if (validValues.length === 0) return 0;
1052
- var sum = (0, _sumBy2.default)(validValues, function (cur) {
1053
- return cur[field];
1054
- });
1055
- return sum / validValues.length;
1056
- };
1057
- var standardDeviationFun = function standardDeviationFun(field, displayedData) {
1058
- var validValues = displayedData.filter(function (cur) {
1059
- return isValidNumber(cur[field]);
1060
- });
1061
- var count = validValues.length;
1062
- if (count === 0) return 0;
1063
- var mean = sumFun(field, displayedData) / count;
1064
- var variance = (0, _sumBy2.default)(displayedData, function (cur) {
1065
- if (cur && cur[field] !== undefined && cur[field] !== null) {
1066
- var diff = cur[field] - mean;
1067
- return diff * diff;
1068
- }
1069
- return 0;
1070
- }) / count;
1071
- return Math.sqrt(variance);
1072
- };
1073
- var handelNumber = function handelNumber(value) {
1074
- return (value / 1).toLocaleString(undefined, {
1075
- minimumFractionDigits: 2,
1076
- maximumFractionDigits: 2
1077
- });
1078
- };
1079
- // sum 求和 avg 平均值 standardDeviation 标准差
1080
- var calculatefun = function calculatefun(calcColFields, displayedData) {
1081
- var calculateArrCopy = [];
1082
- var calculateData = {
1083
- id: (0, _uniqueId2.default)()
1084
- };
1085
- calcColFields.forEach(function (i) {
1086
- if (!i.cellRenderer) {
1087
- switch (i.calculateType) {
1088
- case "sum":
1089
- var sumPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
1090
- var sumValue = Number(sumFun(i.field, displayedData).toFixed(sumPrecision));
1091
- calculateData[i.field] = i.formatWithCommas ? handelNumber(sumValue) : sumValue;
1092
- break;
1093
- case "avg":
1094
- var avgPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
1095
- calculateData[i.field] = Number(avgFun(i.field, displayedData).toFixed(avgPrecision));
1096
- break;
1097
- case "standardDeviation":
1098
- var stdPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
1099
- calculateData[i.field] = Number(standardDeviationFun(i.field, displayedData).toFixed(stdPrecision));
1100
- break;
1101
- default:
1102
- break;
1103
- }
1104
- }
1105
- });
1106
- if (Object.keys(calculateData).length > 0) {
1107
- calculateArrCopy.push(calculateData);
1108
- }
1109
- return calculateArrCopy;
1110
- };
1111
960
  var calculateSum = (0, _react.useCallback)(function () {
1112
961
  var displayedData = [];
1113
962
  if (apiRef.current) {
@@ -1132,10 +981,10 @@ function AgGridPlus(props) {
1132
981
  });
1133
982
  if (calcColFields.length > 0) {
1134
983
  var _apiRef$current5;
1135
- var calculatedValues = calculatefun(calcColFields, displayedData);
984
+ var calculatedValues = (0, _aggregation.computeAggregationRow)(calcColFields, displayedData);
1136
985
  (_apiRef$current5 = apiRef.current) === null || _apiRef$current5 === void 0 || _apiRef$current5.setGridOption('pinnedBottomRowData', calculatedValues);
1137
986
  }
1138
- }, [allColDefs, calculatefun]);
987
+ }, [allColDefs]);
1139
988
  var onFilterChanged = function onFilterChanged(event) {
1140
989
  calculateSum();
1141
990
  };
@@ -1217,36 +1066,22 @@ function AgGridPlus(props) {
1217
1066
  var orderedFormItems = (0, _react.useMemo)(function () {
1218
1067
  // 从查询方案提取字段顺序
1219
1068
  var itemsOrder = currentQueryScheme ? (0, _schemeDataMigration.extractItemsOrder)(currentQueryScheme) : queryItemsOrder;
1220
- if (!itemsOrder || itemsOrder.length === 0) {
1221
- return queryFormItems;
1222
- }
1223
-
1224
- // 按照 itemsOrder 排序
1225
- var ordered = _toConsumableArray(queryFormItems).sort(function (a, b) {
1226
- var indexA = itemsOrder.indexOf(a.field);
1227
- var indexB = itemsOrder.indexOf(b.field);
1228
- if (indexA === -1 && indexB === -1) return 0;
1229
- if (indexA === -1) return 1;
1230
- if (indexB === -1) return -1;
1231
- return indexA - indexB;
1232
- });
1233
- return ordered;
1069
+ return (0, _queryFormDerivation.sortFormItemsByOrder)(queryFormItems, itemsOrder);
1234
1070
  }, [queryFormItems, currentQueryScheme, queryItemsOrder]);
1235
1071
 
1236
1072
  // 根据方案的隐藏字段过滤表单项
1237
1073
  var visibleFormItems = (0, _react.useMemo)(function () {
1238
1074
  // 从查询方案提取隐藏字段
1239
1075
  var hiddenFields = currentQueryScheme ? (0, _schemeDataMigration.extractHiddenFields)(currentQueryScheme) : [];
1240
- if (hiddenFields.length === 0) {
1241
- return orderedFormItems;
1242
- }
1243
- return orderedFormItems.filter(function (item) {
1244
- return !hiddenFields.includes(item.field);
1245
- });
1076
+ return (0, _queryFormDerivation.filterHiddenFormItems)(orderedFormItems, hiddenFields);
1246
1077
  }, [orderedFormItems, currentQueryScheme]);
1078
+
1079
+ // 依赖 rowData:数据刷新(翻页/查询)后需重算底部汇总行。
1080
+ // 原内联 calculatefun 每渲染重建使本 effect 每渲染都跑而隐式覆盖此触发;
1081
+ // 抽出后 calculateSum 变稳定,须显式依赖 rowData 以保持原行为。@author nokecy
1247
1082
  (0, _react.useEffect)(function () {
1248
1083
  calculateSum();
1249
- }, [calculateSum]);
1084
+ }, [calculateSum, rowData]);
1250
1085
  var rowDataMemo = (0, _react.useMemo)(function () {
1251
1086
  // 【兼容】根据 useNativeTreeFilter 决定是否使用原生树形过滤
1252
1087
  // - useNativeTreeFilter=true: 直接传入原始数据,由 AG-Grid 原生处理树形结构(支持列头过滤所有层级)
@@ -1259,7 +1094,9 @@ function AgGridPlus(props) {
1259
1094
  var actionDom = toolBarRender && toolBarRender(apiRef.current, (0, _utils.convertFilterModel)(queryFilter, allColDefsRef.current), queryFilter, {
1260
1095
  current: pagination.current,
1261
1096
  skipCount: pagination.current == 1 ? 0 : (pagination.current - 1) * pagination.pageSize,
1262
- maxResultCount: pagination.pageSize
1097
+ maxResultCount: pagination.pageSize,
1098
+ page: pagination.current,
1099
+ pageSize: pagination.pageSize
1263
1100
  });
1264
1101
  var autoGroupColumnDef = (0, _react.useMemo)(function () {
1265
1102
  var _props$autoGroupColum;
@@ -1268,7 +1105,17 @@ function AgGridPlus(props) {
1268
1105
  });
1269
1106
  }, [props.autoGroupColumnDef]);
1270
1107
 
1271
- // 准备 GridPlusContext 的值(包含方案管理的完整 API)
1108
+ // 查询表单上下文值:从 GridPlusContext 拆出,使查询表单的高频变化(顺序调整)
1109
+ // 不再触发 GridPlusContext 全量重渲染。@author nokecy
1110
+ var queryFormContextValue = (0, _react.useMemo)(function () {
1111
+ return {
1112
+ queryFormItems: queryFormItems,
1113
+ currentQueryOrder: currentQueryScheme ? (0, _schemeDataMigration.extractItemsOrder)(currentQueryScheme) : queryItemsOrder,
1114
+ updateQueryOrder: setQueryItemsOrder
1115
+ };
1116
+ }, [queryFormItems, currentQueryScheme, queryItemsOrder]);
1117
+
1118
+ // 准备 GridPlusContext 的值(包含方案管理的完整 API;查询表单字段已移至 QueryFormContext)
1272
1119
  var gridPlusContextValue = (0, _react.useMemo)(function () {
1273
1120
  return {
1274
1121
  extensibleColumns: extensibleColumns,
@@ -1281,9 +1128,6 @@ function AgGridPlus(props) {
1281
1128
  applyToGlobal: applyToGlobal,
1282
1129
  resetCurrent: resetCurrent,
1283
1130
  resetAll: resetAll,
1284
- currentQueryOrder: currentQueryScheme ? (0, _schemeDataMigration.extractItemsOrder)(currentQueryScheme) : queryItemsOrder,
1285
- updateQueryOrder: setQueryItemsOrder,
1286
- queryFormItems: queryFormItems,
1287
1131
  // ========== 方案管理 API(透传给子组件) ==========
1288
1132
  columnSchemes: columnSchemes,
1289
1133
  querySchemes: querySchemes,
@@ -1313,7 +1157,7 @@ function AgGridPlus(props) {
1313
1157
  };
1314
1158
  }, [extensibleColumns, gridPlusColumnState,
1315
1159
  // ref.current 作依赖无效(变更不触发重渲染);依赖数据源 allColDefs,initialColumnDefs 随其首次计算填充 @author nokecy
1316
- allColDefs, onSaveColumnState, applyToGlobal, resetCurrent, resetAll, currentQueryScheme, queryItemsOrder, queryFormItems,
1160
+ allColDefs, onSaveColumnState, applyToGlobal, resetCurrent, resetAll,
1317
1161
  // 方案管理依赖
1318
1162
  columnSchemes, querySchemes, currentSchemes, schemesLoading, lastSyncTime, saveColumnScheme, deleteColumnScheme, saveQueryScheme, deleteQueryScheme, setCurrentColumnScheme, setCurrentQueryScheme, refreshSchemes, getColumnSchemes, getQuerySchemes, getCurrentScheme,
1319
1163
  // 全局配置依赖
@@ -1324,6 +1168,8 @@ function AgGridPlus(props) {
1324
1168
  hostEntityExtensions]);
1325
1169
  return /*#__PURE__*/_react.default.createElement(_gridContext.GridPlusContext.Provider, {
1326
1170
  value: gridPlusContextValue
1171
+ }, /*#__PURE__*/_react.default.createElement(_queryFormContext.QueryFormContext.Provider, {
1172
+ value: queryFormContextValue
1327
1173
  }, /*#__PURE__*/_react.default.createElement(_antd.Spin, {
1328
1174
  spinning: loading,
1329
1175
  wrapperClassName: "grid-spin"
@@ -1573,6 +1419,6 @@ function AgGridPlus(props) {
1573
1419
  pageSizeOptions: props.pageSizeOptions || [10, 20, 50, 100, 200, 500, 1000, 10000],
1574
1420
  hideOnSinglePage: false,
1575
1421
  showQuickJumper: false
1576
- }))))));
1422
+ })))))));
1577
1423
  }
1578
1424
  var _default = exports.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,25 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useQueryForm = exports.QueryFormContext = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
9
+ /**
10
+ * 查询表单上下文。
11
+ *
12
+ * 从 GridPlusContext 中拆出"查询表单"相关字段(查询项列表/顺序/更新函数),
13
+ * 使查询表单的高频变化(如拖动调整顺序)不再触发 GridPlusContext 全量重渲染。
14
+ * 当前仅 QuerySchemeManager 消费;由 AgGridPlus 内部 Provider 提供。
15
+ * @author nokecy
16
+ */
17
+
18
+ var QueryFormContext = exports.QueryFormContext = /*#__PURE__*/_react.default.createContext({
19
+ queryFormItems: []
20
+ });
21
+
22
+ /** 读取查询表单上下文。@author nokecy */
23
+ var useQueryForm = exports.useQueryForm = function useQueryForm() {
24
+ return _react.default.useContext(QueryFormContext);
25
+ };
@@ -31,6 +31,6 @@ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBo
31
31
  * 重置错误状态,重新渲染组件
32
32
  */
33
33
  handleRetry: () => void;
34
- render(): string | number | boolean | React.JSX.Element | Iterable<React.ReactNode> | null | undefined;
34
+ render(): string | number | boolean | Iterable<React.ReactNode> | React.JSX.Element | null | undefined;
35
35
  }
36
36
  export {};
@@ -1,7 +1,5 @@
1
1
  /**
2
2
  * AG-Grid Plus Hooks
3
3
  */
4
- export * from './useAgGridData';
5
- export * from './useAgGridCalculation';
6
- export * from './useGridState';
7
4
  export { useGridPlusColumnState } from './useGridPlusColumnState';
5
+ export { useRowId } from './useRowId';
@@ -3,49 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- var _exportNames = {
7
- useGridPlusColumnState: true
8
- };
9
6
  Object.defineProperty(exports, "useGridPlusColumnState", {
10
7
  enumerable: true,
11
8
  get: function get() {
12
9
  return _useGridPlusColumnState.useGridPlusColumnState;
13
10
  }
14
11
  });
15
- var _useAgGridData = require("./useAgGridData");
16
- Object.keys(_useAgGridData).forEach(function (key) {
17
- if (key === "default" || key === "__esModule") return;
18
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
19
- if (key in exports && exports[key] === _useAgGridData[key]) return;
20
- Object.defineProperty(exports, key, {
21
- enumerable: true,
22
- get: function get() {
23
- return _useAgGridData[key];
24
- }
25
- });
26
- });
27
- var _useAgGridCalculation = require("./useAgGridCalculation");
28
- Object.keys(_useAgGridCalculation).forEach(function (key) {
29
- if (key === "default" || key === "__esModule") return;
30
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
31
- if (key in exports && exports[key] === _useAgGridCalculation[key]) return;
32
- Object.defineProperty(exports, key, {
33
- enumerable: true,
34
- get: function get() {
35
- return _useAgGridCalculation[key];
36
- }
37
- });
38
- });
39
- var _useGridState = require("./useGridState");
40
- Object.keys(_useGridState).forEach(function (key) {
41
- if (key === "default" || key === "__esModule") return;
42
- if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
43
- if (key in exports && exports[key] === _useGridState[key]) return;
44
- Object.defineProperty(exports, key, {
45
- enumerable: true,
46
- get: function get() {
47
- return _useGridState[key];
48
- }
49
- });
12
+ Object.defineProperty(exports, "useRowId", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _useRowId.useRowId;
16
+ }
50
17
  });
51
- var _useGridPlusColumnState = require("./useGridPlusColumnState");
18
+ var _useGridPlusColumnState = require("./useGridPlusColumnState");
19
+ var _useRowId = require("./useRowId");