@nokecy/qc-ui 1.1.39 → 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 (119) 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.js +22 -4
  34. package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.js +2 -3
  35. package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.js +1 -0
  36. package/dist/cjs/components/RegexEditor/validation/types.d.ts +1 -3
  37. package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -2
  38. package/dist/cjs/dashboard/dashboard/index.js +8 -11
  39. package/dist/cjs/dashboard/dashboard/utils.js +3 -6
  40. package/dist/cjs/dashboard/widget/index.js +3 -3
  41. package/dist/cjs/dashboard/widget/selector/index.js +5 -7
  42. package/dist/cjs/dashboard/widget/utils.js +3 -4
  43. package/dist/cjs/dialogSelect/index.d.ts +3 -0
  44. package/dist/cjs/dialogSelect/index.js +16 -13
  45. package/dist/cjs/generatedListPage/GeneratedListPage.js +20 -19
  46. package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
  47. package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.js +26 -0
  48. package/dist/cjs/generatedListPage/types.d.ts +3 -0
  49. package/dist/cjs/index.d.ts +1 -0
  50. package/dist/cjs/index.js +57 -0
  51. package/dist/cjs/standardFormDialog/types.d.ts +7 -0
  52. package/dist/cjs/standardFormDialog/useStandardFormSchema.d.ts +1 -1
  53. package/dist/cjs/standardFormDialog/withStandardForm.js +5 -4
  54. package/dist/esm/adapters/abpPagedApiAdapter.d.ts +8 -0
  55. package/dist/esm/adapters/abpPagedApiAdapter.js +29 -0
  56. package/dist/esm/adapters/index.d.ts +6 -0
  57. package/dist/esm/adapters/index.js +6 -0
  58. package/dist/esm/adapters/pagedApiAdapter.d.ts +25 -0
  59. package/dist/esm/adapters/pagedApiAdapter.js +1 -0
  60. package/dist/esm/ag-grid-plus/ag-gridPlus.js +49 -203
  61. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +3 -0
  62. package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +20 -0
  63. package/dist/esm/ag-grid-plus/context/queryFormContext.js +19 -0
  64. package/dist/esm/ag-grid-plus/hooks/index.d.ts +1 -3
  65. package/dist/esm/ag-grid-plus/hooks/index.js +2 -6
  66. package/dist/esm/ag-grid-plus/hooks/useRowId.d.ts +13 -0
  67. package/dist/esm/ag-grid-plus/hooks/useRowId.js +52 -0
  68. package/dist/esm/ag-grid-plus/interface.d.ts +9 -0
  69. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +6 -6
  70. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +7 -6
  71. package/dist/esm/ag-grid-plus/types.d.ts +9 -0
  72. package/dist/esm/ag-grid-plus/utils/aggregation.d.ts +17 -0
  73. package/dist/esm/ag-grid-plus/utils/aggregation.js +93 -0
  74. package/dist/esm/ag-grid-plus/utils/columnProcessors.js +2 -2
  75. package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.d.ts +12 -3
  76. package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.js +20 -5
  77. package/dist/esm/ag-grid-plus/utils/queryFormDerivation.d.ts +19 -0
  78. package/dist/esm/ag-grid-plus/utils/queryFormDerivation.js +42 -0
  79. package/dist/esm/ag-grid-plus/utils/requestParams.d.ts +15 -0
  80. package/dist/esm/ag-grid-plus/utils/requestParams.js +24 -0
  81. package/dist/esm/ag-grid-plus/utils/rowSelection.d.ts +9 -0
  82. package/dist/esm/ag-grid-plus/utils/rowSelection.js +18 -0
  83. package/dist/esm/ag-grid-plus/utils.js +2 -2
  84. package/dist/esm/array-table/arrayBase.js +2 -0
  85. package/dist/esm/array-table/utils.js +22 -4
  86. package/dist/esm/components/RegexEditor/hooks/useRegexValidation.js +2 -2
  87. package/dist/esm/components/RegexEditor/hooks/useTemplateManager.js +1 -0
  88. package/dist/esm/components/RegexEditor/validation/types.d.ts +0 -1
  89. package/dist/esm/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -1
  90. package/dist/esm/dashboard/dashboard/index.js +8 -11
  91. package/dist/esm/dashboard/dashboard/utils.js +3 -2
  92. package/dist/esm/dashboard/widget/index.js +3 -3
  93. package/dist/esm/dashboard/widget/selector/index.js +5 -7
  94. package/dist/esm/dashboard/widget/utils.js +3 -3
  95. package/dist/esm/dialogSelect/index.d.ts +3 -0
  96. package/dist/esm/dialogSelect/index.js +16 -13
  97. package/dist/esm/generatedListPage/GeneratedListPage.js +20 -19
  98. package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
  99. package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.js +20 -0
  100. package/dist/esm/generatedListPage/types.d.ts +3 -0
  101. package/dist/esm/index.d.ts +1 -0
  102. package/dist/esm/index.js +3 -0
  103. package/dist/esm/standardFormDialog/types.d.ts +7 -0
  104. package/dist/esm/standardFormDialog/withStandardForm.js +5 -4
  105. package/dist/umd/qc-ui.min.css +1 -1
  106. package/dist/umd/qc-ui.min.js +1 -1
  107. package/package.json +52 -13
  108. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
  109. package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.js +0 -224
  110. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
  111. package/dist/cjs/ag-grid-plus/hooks/useAgGridData.js +0 -230
  112. package/dist/cjs/ag-grid-plus/hooks/useGridState.d.ts +0 -153
  113. package/dist/cjs/ag-grid-plus/hooks/useGridState.js +0 -258
  114. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
  115. package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.js +0 -217
  116. package/dist/esm/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
  117. package/dist/esm/ag-grid-plus/hooks/useAgGridData.js +0 -225
  118. package/dist/esm/ag-grid-plus/hooks/useGridState.d.ts +0 -153
  119. package/dist/esm/ag-grid-plus/hooks/useGridState.js +0 -258
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 行唯一 ID 生成 Hook(从 ag-gridPlus.tsx 抽出,逻辑原样)。
3
+ *
4
+ * 策略(按优先级):
5
+ * 1. 常见 ID 字段 id/_id/key/uid/uuid(基本类型直取;对象取 value 或 id 属性)
6
+ * 2. WeakMap 缓存命中
7
+ * 3. 生成 `${gridKey|grid}-row-{counter}-{timestamp}` 并缓存
8
+ *
9
+ * @author nokecy
10
+ */
11
+ export declare function useRowId(gridKey?: string): {
12
+ generateUniqueRowId: (data: any) => string;
13
+ };
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useRowId = useRowId;
7
+ var _react = require("react");
8
+ 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); }
9
+ /**
10
+ * 行唯一 ID 生成 Hook(从 ag-gridPlus.tsx 抽出,逻辑原样)。
11
+ *
12
+ * 策略(按优先级):
13
+ * 1. 常见 ID 字段 id/_id/key/uid/uuid(基本类型直取;对象取 value 或 id 属性)
14
+ * 2. WeakMap 缓存命中
15
+ * 3. 生成 `${gridKey|grid}-row-{counter}-{timestamp}` 并缓存
16
+ *
17
+ * @author nokecy
18
+ */
19
+ function useRowId(gridKey) {
20
+ var rowIdCacheRef = (0, _react.useRef)(new WeakMap());
21
+ var rowIdCounterRef = (0, _react.useRef)(0);
22
+ var generateUniqueRowId = (0, _react.useCallback)(function (data) {
23
+ if (!data || _typeof(data) !== 'object') {
24
+ return "row-empty-".concat(rowIdCounterRef.current++);
25
+ }
26
+ var commonIdFields = ['id', '_id', 'key', 'uid', 'uuid'];
27
+ for (var _i = 0, _commonIdFields = commonIdFields; _i < _commonIdFields.length; _i++) {
28
+ var field = _commonIdFields[_i];
29
+ var value = data[field];
30
+ if (value !== undefined && value !== null && value !== '') {
31
+ var fieldId = void 0;
32
+ if (_typeof(value) === 'object' && value !== null) {
33
+ if (value.value !== undefined) {
34
+ fieldId = String(value.value);
35
+ } else if (value.id !== undefined) {
36
+ fieldId = String(value.id);
37
+ } else {
38
+ fieldId = "".concat(field, "-").concat(JSON.stringify(value));
39
+ }
40
+ } else {
41
+ fieldId = String(value);
42
+ }
43
+ return fieldId;
44
+ }
45
+ }
46
+ var cachedId = rowIdCacheRef.current.get(data);
47
+ if (cachedId) {
48
+ return cachedId;
49
+ }
50
+ var uniqueId = "".concat(gridKey || 'grid', "-row-").concat(rowIdCounterRef.current++, "-").concat(Date.now());
51
+ rowIdCacheRef.current.set(data, uniqueId);
52
+ return uniqueId;
53
+ }, [gridKey]);
54
+ return {
55
+ generateUniqueRowId: generateUniqueRowId
56
+ };
57
+ }
@@ -19,9 +19,18 @@ interface GridProps extends AgGridReactProps {
19
19
  headerTitle?: React.ReactNode;
20
20
  columnDefs?: (AgGridColumnPropsClone | ColGroupDef<any>)[] | null;
21
21
  toolBarRender?: (gridApi?: GridApi, filter?: string, queryFilter?: any, paginationInfo?: {
22
+ /** @deprecated 改用 page */
22
23
  current: number;
24
+ /** @deprecated 改用 page/pageSize */
23
25
  skipCount: number;
26
+ /** @deprecated 改用 page/pageSize */
24
27
  maxResultCount: number;
28
+ /** 当前页码(1-based)
29
+ * @author nokecy */
30
+ page?: number;
31
+ /** 每页条数
32
+ * @author nokecy */
33
+ pageSize?: number;
25
34
  }) => React.ReactNode[];
26
35
  defaultSearchExpand?: Boolean;
27
36
  /**
@@ -11,7 +11,7 @@ var _draggableModal = _interopRequireDefault(require("../../draggableModal"));
11
11
  var _icons = require("@ant-design/icons");
12
12
  var _agGridReact = require("ag-grid-react");
13
13
  var _useSchemeManager = require("../context/useSchemeManager");
14
- var _gridContext = require("../context/gridContext");
14
+ var _queryFormContext = require("../context/queryFormContext");
15
15
  var _uuid = require("uuid");
16
16
  var _schemeDataMigration = require("../shared/utils/schemeDataMigration");
17
17
  var _theme = require("../theme");
@@ -66,11 +66,11 @@ var QuerySchemeManager = function QuerySchemeManager(_ref) {
66
66
  deleteQueryScheme = _useGridSchemes.deleteQueryScheme,
67
67
  setCurrentQueryScheme = _useGridSchemes.setCurrentQueryScheme;
68
68
 
69
- // 从 Context 获取查询表单项和当前顺序
70
- var _React$useContext = _react.default.useContext(_gridContext.GridPlusContext),
71
- queryFormItems = _React$useContext.queryFormItems,
72
- currentQueryOrder = _React$useContext.currentQueryOrder,
73
- updateQueryOrder = _React$useContext.updateQueryOrder;
69
+ // 从查询表单 Context 获取查询表单项和当前顺序(已从 GridPlusContext 拆出)
70
+ var _useQueryForm = (0, _queryFormContext.useQueryForm)(),
71
+ queryFormItems = _useQueryForm.queryFormItems,
72
+ currentQueryOrder = _useQueryForm.currentQueryOrder,
73
+ updateQueryOrder = _useQueryForm.updateQueryOrder;
74
74
 
75
75
  // 获取当前表格的查询方案列表
76
76
  var schemes = (querySchemes === null || querySchemes === void 0 ? void 0 : querySchemes[gridKey]) || [];
@@ -13,9 +13,8 @@ exports.gridStateToFlatConfig = gridStateToFlatConfig;
13
13
  exports.isOldSchemeData = isOldSchemeData;
14
14
  exports.migrateOldScheme = migrateOldScheme;
15
15
  exports.reorderItems = reorderItems;
16
- var _uniqueId2 = _interopRequireDefault(require("lodash/uniqueId"));
16
+ var _lodash = require("lodash");
17
17
  var _logger = require("../utils/logger");
18
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
18
  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; }
20
19
  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; }
21
20
  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; }
@@ -35,7 +34,7 @@ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len
35
34
  * 生成唯一 ID
36
35
  */
37
36
  var generateId = exports.generateId = function generateId() {
38
- return (0, _uniqueId2.default)('col_');
37
+ return (0, _lodash.uniqueId)('col_');
39
38
  };
40
39
 
41
40
  /**
@@ -176,9 +176,18 @@ export interface ToolBarRenderParams {
176
176
  queryFilter?: QueryFilterState;
177
177
  /** 分页信息 */
178
178
  paginationInfo?: {
179
+ /** @deprecated 改用 page */
179
180
  current: number;
181
+ /** @deprecated 改用 page/pageSize */
180
182
  skipCount: number;
183
+ /** @deprecated 改用 page/pageSize */
181
184
  maxResultCount: number;
185
+ /** 当前页码(1-based)
186
+ * @author nokecy */
187
+ page?: number;
188
+ /** 每页条数
189
+ * @author nokecy */
190
+ pageSize?: number;
182
191
  };
183
192
  }
184
193
  /**
@@ -0,0 +1,17 @@
1
+ /**
2
+ * AG-Grid 底部汇总聚合纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
3
+ * @author nokecy
4
+ */
5
+ export interface CalculationColumnConfig {
6
+ field: string;
7
+ calculateType: 'sum' | 'avg' | 'standardDeviation';
8
+ transactionAmount: number;
9
+ formatWithCommas?: boolean;
10
+ cellRenderer?: any;
11
+ }
12
+ export declare const isValidNumber: (value: any) => boolean;
13
+ export declare const sumField: (field: string, data: any[]) => number;
14
+ export declare const avgField: (field: string, data: any[]) => number;
15
+ export declare const stdDevField: (field: string, data: any[]) => number;
16
+ export declare const formatWithCommas: (value: number) => string;
17
+ export declare const computeAggregationRow: (calcColFields: CalculationColumnConfig[], data: any[]) => any[];
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+
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); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.sumField = exports.stdDevField = exports.isValidNumber = exports.formatWithCommas = exports.computeAggregationRow = exports.avgField = void 0;
8
+ var _lodash = _interopRequireWildcard(require("lodash"));
9
+ 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); }
10
+ 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; }
11
+ /**
12
+ * AG-Grid 底部汇总聚合纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
13
+ * @author nokecy
14
+ */
15
+
16
+ var isValidNumber = exports.isValidNumber = function isValidNumber(value) {
17
+ return typeof value === 'number' && !isNaN(value);
18
+ };
19
+ var sumField = exports.sumField = function sumField(field, data) {
20
+ return _lodash.default.sumBy(data, function (cur) {
21
+ if (cur && isValidNumber(cur[field])) {
22
+ return cur[field];
23
+ }
24
+ return 0;
25
+ });
26
+ };
27
+ var avgField = exports.avgField = function avgField(field, data) {
28
+ // 分子分母口径统一为「有效数字」,避免除零得 NaN
29
+ var validValues = data.filter(function (cur) {
30
+ return cur && isValidNumber(cur[field]);
31
+ });
32
+ if (validValues.length === 0) return 0;
33
+ var sum = _lodash.default.sumBy(validValues, function (cur) {
34
+ return cur[field];
35
+ });
36
+ return sum / validValues.length;
37
+ };
38
+
39
+ // 注:现存口径小瑕疵——mean 的分母用有效值数,sumField 对全部行求和(无效计 0);
40
+ // variance 遍历全部行且判定用 !== undefined/null(非 isValidNumber)。首刀只保持原行为,不修正。
41
+ var stdDevField = exports.stdDevField = function stdDevField(field, data) {
42
+ var validValues = data.filter(function (cur) {
43
+ return isValidNumber(cur[field]);
44
+ });
45
+ var count = validValues.length;
46
+ if (count === 0) return 0;
47
+ var mean = sumField(field, data) / count;
48
+ var variance = _lodash.default.sumBy(data, function (cur) {
49
+ if (cur && cur[field] !== undefined && cur[field] !== null) {
50
+ var diff = cur[field] - mean;
51
+ return diff * diff;
52
+ }
53
+ return 0;
54
+ }) / count;
55
+ return Math.sqrt(variance);
56
+ };
57
+ var formatWithCommas = exports.formatWithCommas = function formatWithCommas(value) {
58
+ return (value / 1).toLocaleString(undefined, {
59
+ minimumFractionDigits: 2,
60
+ maximumFractionDigits: 2
61
+ });
62
+ };
63
+
64
+ // sum 求和 / avg 平均值 / standardDeviation 标准差
65
+ var computeAggregationRow = exports.computeAggregationRow = function computeAggregationRow(calcColFields, data) {
66
+ var calculateArrCopy = [];
67
+ var calculateData = {
68
+ id: (0, _lodash.uniqueId)()
69
+ };
70
+ calcColFields.forEach(function (i) {
71
+ if (!i.cellRenderer) {
72
+ switch (i.calculateType) {
73
+ case 'sum':
74
+ {
75
+ var sumPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
76
+ var sumValue = Number(sumField(i.field, data).toFixed(sumPrecision));
77
+ calculateData[i.field] = i.formatWithCommas ? formatWithCommas(sumValue) : sumValue;
78
+ break;
79
+ }
80
+ case 'avg':
81
+ {
82
+ var avgPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
83
+ calculateData[i.field] = Number(avgField(i.field, data).toFixed(avgPrecision));
84
+ break;
85
+ }
86
+ case 'standardDeviation':
87
+ {
88
+ var stdPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
89
+ calculateData[i.field] = Number(stdDevField(i.field, data).toFixed(stdPrecision));
90
+ break;
91
+ }
92
+ default:
93
+ break;
94
+ }
95
+ }
96
+ });
97
+ if (Object.keys(calculateData).length > 0) {
98
+ calculateArrCopy.push(calculateData);
99
+ }
100
+ return calculateArrCopy;
101
+ };
@@ -11,10 +11,10 @@ exports.handleGridPlusColumnState = handleGridPlusColumnState;
11
11
  exports.inferDataType = inferDataType;
12
12
  exports.processEllipsisColumn = processEllipsisColumn;
13
13
  exports.processEnumColumn = processEnumColumn;
14
- var _isArray2 = _interopRequireDefault(require("lodash/isArray"));
15
14
  var _react = _interopRequireDefault(require("react"));
16
15
  var _antd = require("antd");
17
16
  var _antdV = require("@formily/antd-v5");
17
+ var _lodash = require("lodash");
18
18
  var _constants = require("./constants");
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
20
  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); }
@@ -49,7 +49,7 @@ var Text = _antd.Typography.Text;
49
49
  */
50
50
  function handleGridPlusColumnState(columnState) {
51
51
  var cellConfigMap = {};
52
- if ((0, _isArray2.default)(columnState)) {
52
+ if ((0, _lodash.isArray)(columnState)) {
53
53
  columnState.forEach(function (item) {
54
54
  if (item.field && (item.cellClass || item.suppressHeaderFilterButton !== undefined || item.groupName)) {
55
55
  cellConfigMap[item.field] = {
@@ -7,17 +7,26 @@
7
7
  import type { ExtendedColDef, EntityExtensionField, HostEntityExtensions } from '../types';
8
8
  /**
9
9
  * 将单个扩展字段转换为列定义
10
- * 使用 extraProperties.xxx 嵌套路径访问数据
10
+ * 使用 {extraPropertiesPath}.xxx 嵌套路径访问数据
11
11
  *
12
12
  * @param field 扩展字段定义
13
+ * @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
13
14
  * @returns AG-Grid 列定义
15
+ * @author nokecy
16
+ *
17
+ * @warning 请勿将此函数直接传给 Array.prototype.map()。
18
+ * Array.map 会将 (element, index, array) 全部传入,index(数字)会绑定到
19
+ * extraPropertiesPath,导致 field 路径变为 '0.foo'、'1.bar' 等非法值。
20
+ * 请始终用箭头函数包装:someArray.map((f) => fieldToColumnDef(f, path))
14
21
  */
15
- export declare function fieldToColumnDef(field: EntityExtensionField): ExtendedColDef;
22
+ export declare function fieldToColumnDef(field: EntityExtensionField, extraPropertiesPath?: string): ExtendedColDef;
16
23
  /**
17
24
  * 获取指定实体的扩展列定义
18
25
  *
19
26
  * @param entityType 实体类型全名 (如 "Burn.Product.Domain.Product")
20
27
  * @param extensions 实体扩展配置映射
28
+ * @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
21
29
  * @returns 扩展列定义数组,按 sortOrder 排序
30
+ * @author nokecy
22
31
  */
23
- export declare function getEntityExtensionColumns(entityType: string | undefined, extensions?: HostEntityExtensions): ExtendedColDef[];
32
+ export declare function getEntityExtensionColumns(entityType: string | undefined, extensions?: HostEntityExtensions, extraPropertiesPath?: string): ExtendedColDef[];
@@ -93,19 +93,29 @@ var dataTypeColumnConfig = {
93
93
 
94
94
  /**
95
95
  * 将单个扩展字段转换为列定义
96
- * 使用 extraProperties.xxx 嵌套路径访问数据
96
+ * 使用 {extraPropertiesPath}.xxx 嵌套路径访问数据
97
97
  *
98
98
  * @param field 扩展字段定义
99
+ * @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
99
100
  * @returns AG-Grid 列定义
101
+ * @author nokecy
102
+ *
103
+ * @warning 请勿将此函数直接传给 Array.prototype.map()。
104
+ * Array.map 会将 (element, index, array) 全部传入,index(数字)会绑定到
105
+ * extraPropertiesPath,导致 field 路径变为 '0.foo'、'1.bar' 等非法值。
106
+ * 请始终用箭头函数包装:someArray.map((f) => fieldToColumnDef(f, path))
100
107
  */
101
108
  function fieldToColumnDef(field) {
109
+ var extraPropertiesPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'extraProperties';
110
+ // 防御 Array.map 将 index(number)传入第二参数的情况,回退到默认路径
111
+ var resolvedPath = typeof extraPropertiesPath === 'string' ? extraPropertiesPath : 'extraProperties';
102
112
  var config = dataTypeColumnConfig[field.dataType] || {
103
113
  width: 150,
104
114
  hideInSearch: false
105
115
  };
106
116
  var colDef = _objectSpread(_objectSpread({
107
- // 使用嵌套路径访问 extraProperties 中的数据 @author nokecy
108
- field: "extraProperties.".concat(field.name),
117
+ // 使用可配置前缀的嵌套路径访问扩展属性数据
118
+ field: "".concat(resolvedPath, ".").concat(field.name),
109
119
  headerName: field.displayName,
110
120
  width: config.width,
111
121
  hideInSearch: config.hideInSearch
@@ -122,9 +132,12 @@ function fieldToColumnDef(field) {
122
132
  *
123
133
  * @param entityType 实体类型全名 (如 "Burn.Product.Domain.Product")
124
134
  * @param extensions 实体扩展配置映射
135
+ * @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
125
136
  * @returns 扩展列定义数组,按 sortOrder 排序
137
+ * @author nokecy
126
138
  */
127
139
  function getEntityExtensionColumns(entityType, extensions) {
140
+ var extraPropertiesPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'extraProperties';
128
141
  // 边界情况处理:无效输入直接返回空数组
129
142
  var entityConfig = entityType ? extensions === null || extensions === void 0 ? void 0 : extensions[entityType] : undefined;
130
143
  var fields = entityConfig === null || entityConfig === void 0 ? void 0 : entityConfig.fields;
@@ -132,9 +145,11 @@ function getEntityExtensionColumns(entityType, extensions) {
132
145
  return [];
133
146
  }
134
147
 
135
- // 按 sortOrder 排序后转换为列定义
148
+ // 按 sortOrder 排序后转换为列定义,透传路径前缀
136
149
  return _toConsumableArray(fields).sort(function (a, b) {
137
150
  var _a$sortOrder, _b$sortOrder;
138
151
  return ((_a$sortOrder = a.sortOrder) !== null && _a$sortOrder !== void 0 ? _a$sortOrder : 0) - ((_b$sortOrder = b.sortOrder) !== null && _b$sortOrder !== void 0 ? _b$sortOrder : 0);
139
- }).map(fieldToColumnDef);
152
+ }).map(function (f) {
153
+ return fieldToColumnDef(f, extraPropertiesPath);
154
+ });
140
155
  }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 查询表单项派生纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
3
+ * @author nokecy
4
+ */
5
+ /**
6
+ * 按 itemsOrder 数组对查询表单项排序。
7
+ * - itemsOrder 为空/未传:原样返回(同一引用,memo 友好)。
8
+ * - 未在 itemsOrder 中的项排到末尾,两者都不在则保持相对顺序。
9
+ */
10
+ export declare function sortFormItemsByOrder<T extends {
11
+ field: string;
12
+ }>(items: T[], itemsOrder?: string[]): T[];
13
+ /**
14
+ * 过滤掉 hiddenFields 中的查询表单项。
15
+ * - hiddenFields 为空:原样返回(同一引用,memo 友好)。
16
+ */
17
+ export declare function filterHiddenFormItems<T extends {
18
+ field: string;
19
+ }>(items: T[], hiddenFields: string[]): T[];
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.filterHiddenFormItems = filterHiddenFormItems;
7
+ exports.sortFormItemsByOrder = sortFormItemsByOrder;
8
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
9
+ 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."); }
10
+ 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); }
11
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
12
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
13
+ 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; }
14
+ /**
15
+ * 查询表单项派生纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
16
+ * @author nokecy
17
+ */
18
+
19
+ /**
20
+ * 按 itemsOrder 数组对查询表单项排序。
21
+ * - itemsOrder 为空/未传:原样返回(同一引用,memo 友好)。
22
+ * - 未在 itemsOrder 中的项排到末尾,两者都不在则保持相对顺序。
23
+ */
24
+ function sortFormItemsByOrder(items, itemsOrder) {
25
+ if (!itemsOrder || itemsOrder.length === 0) {
26
+ return items;
27
+ }
28
+ return _toConsumableArray(items).sort(function (a, b) {
29
+ var indexA = itemsOrder.indexOf(a.field);
30
+ var indexB = itemsOrder.indexOf(b.field);
31
+ if (indexA === -1 && indexB === -1) return 0;
32
+ if (indexA === -1) return 1;
33
+ if (indexB === -1) return -1;
34
+ return indexA - indexB;
35
+ });
36
+ }
37
+
38
+ /**
39
+ * 过滤掉 hiddenFields 中的查询表单项。
40
+ * - hiddenFields 为空:原样返回(同一引用,memo 友好)。
41
+ */
42
+ function filterHiddenFormItems(items, hiddenFields) {
43
+ if (hiddenFields.length === 0) {
44
+ return items;
45
+ }
46
+ return items.filter(function (item) {
47
+ return !hiddenFields.includes(item.field);
48
+ });
49
+ }
@@ -0,0 +1,15 @@
1
+ import type { QueryFilterState, ExtendedColDef } from '../types';
2
+ /**
3
+ * 请求参数构建纯函数(从 ag-gridPlus.tsx onRequest 抽出,行为原样)。
4
+ * @author nokecy
5
+ */
6
+ /**
7
+ * 根据查询模式构建过滤字符串:
8
+ * - 高级模式(__advancedMode__ 且有 __rules__):走规则转换 convertRulesToFilterString。
9
+ * - 简单模式:走 convertFilterModel。
10
+ */
11
+ export declare function buildFilterString(queryFilter: QueryFilterState, columnDefs: ExtendedColDef[]): string;
12
+ /**
13
+ * 页码 → ABP skipCount。第 1 页为 0,其余为 (current-1)*pageSize。
14
+ */
15
+ export declare function pageToSkipCount(current: number, pageSize: number): number;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.buildFilterString = buildFilterString;
7
+ exports.pageToSkipCount = pageToSkipCount;
8
+ var _utils = require("../utils");
9
+ /**
10
+ * 请求参数构建纯函数(从 ag-gridPlus.tsx onRequest 抽出,行为原样)。
11
+ * @author nokecy
12
+ */
13
+
14
+ /**
15
+ * 根据查询模式构建过滤字符串:
16
+ * - 高级模式(__advancedMode__ 且有 __rules__):走规则转换 convertRulesToFilterString。
17
+ * - 简单模式:走 convertFilterModel。
18
+ */
19
+ function buildFilterString(queryFilter, columnDefs) {
20
+ if (queryFilter.__advancedMode__ && queryFilter.__rules__) {
21
+ return (0, _utils.convertRulesToFilterString)(queryFilter.__rules__, columnDefs);
22
+ }
23
+ return (0, _utils.convertFilterModel)(queryFilter, columnDefs);
24
+ }
25
+
26
+ /**
27
+ * 页码 → ABP skipCount。第 1 页为 0,其余为 (current-1)*pageSize。
28
+ */
29
+ function pageToSkipCount(current, pageSize) {
30
+ return current === 1 ? 0 : (current - 1) * pageSize;
31
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * 行选择纯逻辑(从 ag-gridPlus.tsx 抽出,行为原样)。
3
+ * @author nokecy
4
+ */
5
+ /**
6
+ * 只保留「既被选中、又在当前显示行中」的行(按 getId 计算的行 ID 比对)。
7
+ * id 为空(falsy)的行不计入匹配。
8
+ */
9
+ export declare function filterVisibleSelectedRows<T>(selectedRows: T[], displayedRows: T[], getId: (row: T) => string): T[];
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.filterVisibleSelectedRows = filterVisibleSelectedRows;
7
+ /**
8
+ * 行选择纯逻辑(从 ag-gridPlus.tsx 抽出,行为原样)。
9
+ * @author nokecy
10
+ */
11
+
12
+ /**
13
+ * 只保留「既被选中、又在当前显示行中」的行(按 getId 计算的行 ID 比对)。
14
+ * id 为空(falsy)的行不计入匹配。
15
+ */
16
+ function filterVisibleSelectedRows(selectedRows, displayedRows, getId) {
17
+ return selectedRows.filter(function (selectedRow) {
18
+ return displayedRows.some(function (displayedRow) {
19
+ var selectedRowId = getId(selectedRow);
20
+ var displayedRowId = getId(displayedRow);
21
+ return selectedRowId && displayedRowId && selectedRowId === displayedRowId;
22
+ });
23
+ });
24
+ }
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.toTree = exports.flattenTreeDeep = exports.flatten = exports.dateValueFormatter = exports.dateTimeValueFormatter = exports.convertSortModel = exports.convertRulesToFilterString = exports.convertFilterModel = void 0;
8
- var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
9
8
  var _dayjs = _interopRequireDefault(require("dayjs"));
9
+ var _lodash = require("lodash");
10
10
  var _gridifyClient = require("gridify-client");
11
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
12
  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; }
@@ -255,7 +255,7 @@ var flattenTreeDeep = exports.flattenTreeDeep = function flattenTreeDeep(treeDat
255
255
  });
256
256
  return res;
257
257
  };
258
- var data = (0, _cloneDeep2.default)(treeData);
258
+ var data = (0, _lodash.cloneDeep)(treeData);
259
259
  var res = [];
260
260
  flattenData(data, res, null, childrenName);
261
261
  return res;
@@ -60,7 +60,9 @@ ArrayBase.Item = function (_ref) {
60
60
  }, children);
61
61
  };
62
62
  ArrayBase.Index = function (props) {
63
+ // eslint-disable-next-line react-hooks/rules-of-hooks -- Formily 复合组件,ArrayBase.Index 实为函数组件,误报
63
64
  var index = useIndex();
65
+ // eslint-disable-next-line react-hooks/rules-of-hooks -- 同上
64
66
  var prefixCls = (0, _builtins__.usePrefixCls)('formily-array-base');
65
67
  return /*#__PURE__*/_react.default.createElement("span", _extends({}, props, {
66
68
  className: "".concat(prefixCls, "-index")
@@ -279,10 +279,26 @@ var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArra
279
279
  var readOnly = isColumnReadOnlyEligible(arrayPattern, dataField, columnProps);
280
280
  var hasReactions = !!(dataField && dataField['x-reactions']);
281
281
  var forceEager = (columnProps === null || columnProps === void 0 ? void 0 : columnProps.forceAgField) === true;
282
+ // Switch/Checkbox 是「单击直控」组件:可编辑态本就该常驻渲染真控件(优化前即如此)。
283
+ // 懒挂载会把它降成「是/否」纯文本(点击才挂出开关),用户会以为开关消失。故可编辑态强制 eager。
284
+ // 只读态(下方 ① 路径)仍走「是/否」文本快路径不受影响。@author nokecy
285
+ var isInlineToggle = component === 'Switch' || component === 'Checkbox';
286
+
287
+ // formatter 路径(只读快路径/懒挂载)经 AG-Grid params.value 取值,而 params.value 由 colDef.field(=name)驱动。
288
+ // 但设计器生成的 schema 里 Column key 多为随机 designable-id 且无 dataIndex,真实数据键在内层字段 name 上,
289
+ // 两者不一致时 record[name] 恒为 undefined → 单元格空白(点击挂 AgField 才按内层字段名显真值)。
290
+ // 故按内层字段名补 valueGetter(仅在与 name 不一致时,保持 name===字段名 的现状)。@author nokecy
291
+ var dataFieldName = dataField === null || dataField === void 0 ? void 0 : dataField.name;
292
+ var valueGetter = dataFieldName && dataFieldName !== name ? function (params) {
293
+ var _params$data;
294
+ return params === null || params === void 0 || (_params$data = params.data) === null || _params$data === void 0 ? void 0 : _params$data[dataFieldName];
295
+ } : undefined;
282
296
 
283
297
  // ① 只读纯文本
284
298
  if (readOnly && formatter) {
285
- return buf.concat(_objectSpread(_objectSpread({}, base), {}, {
299
+ return buf.concat(_objectSpread(_objectSpread(_objectSpread({}, base), valueGetter ? {
300
+ valueGetter: valueGetter
301
+ } : {}), {}, {
286
302
  // 显式清掉可能从 safeColumnProps 漏带的 cellRenderer(AG-Grid 中 renderer 优先级高于 formatter)
287
303
  cellRenderer: undefined,
288
304
  valueFormatter: function valueFormatter(params) {
@@ -294,9 +310,11 @@ var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArra
294
310
  }));
295
311
  }
296
312
 
297
- // ② 可编辑懒挂载
298
- if (!readOnly && formatter && !hasReactions && !forceEager) {
299
- return buf.concat(_objectSpread(_objectSpread({}, base), {}, {
313
+ // ② 可编辑懒挂载(排除单击直控的 Switch/Checkbox:须 eager 出真控件)
314
+ if (!readOnly && formatter && !hasReactions && !forceEager && !isInlineToggle) {
315
+ return buf.concat(_objectSpread(_objectSpread(_objectSpread({}, base), valueGetter ? {
316
+ valueGetter: valueGetter
317
+ } : {}), {}, {
300
318
  cellRenderer: LazyAgField,
301
319
  cellRendererParams: {
302
320
  dataSource: dataSource,