@nokecy/qc-ui-components 2.0.0-beta.0 → 2.0.0-beta.2

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 (251) hide show
  1. package/dist/cjs/ConfirmPro/index.d.ts +12 -9
  2. package/dist/cjs/ConfirmPro/index.js +11 -34
  3. package/dist/cjs/ag-grid-plus/ag-gridPlus.js +425 -157
  4. package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +12 -1
  5. package/dist/cjs/ag-grid-plus/context/queryFormContext.d.ts +2 -0
  6. package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
  7. package/dist/cjs/ag-grid-plus/density.d.ts +25 -0
  8. package/dist/cjs/ag-grid-plus/density.js +52 -0
  9. package/dist/cjs/ag-grid-plus/index.d.ts +1 -0
  10. package/dist/cjs/ag-grid-plus/index.js +7 -0
  11. package/dist/cjs/ag-grid-plus/index.less +43 -0
  12. package/dist/cjs/ag-grid-plus/interface.d.ts +58 -1
  13. package/dist/cjs/ag-grid-plus/interface.js +1 -1
  14. package/dist/cjs/ag-grid-plus/queryForm/index.d.ts +11 -0
  15. package/dist/cjs/ag-grid-plus/queryForm/index.js +62 -10
  16. package/dist/cjs/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
  17. package/dist/cjs/ag-grid-plus/queryForm/queryForm.js +63 -26
  18. package/dist/cjs/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
  19. package/dist/cjs/ag-grid-plus/queryForm/queryValues.js +61 -0
  20. package/dist/cjs/ag-grid-plus/rowColors.d.ts +12 -0
  21. package/dist/cjs/ag-grid-plus/rowColors.js +58 -0
  22. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
  23. package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
  24. package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +108 -76
  25. package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
  26. package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
  27. package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.js +206 -0
  28. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
  29. package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +19 -1
  30. package/dist/cjs/ag-grid-plus/setting/index.js +5 -14
  31. package/dist/cjs/ag-grid-plus/settingItem/index.d.ts +11 -1
  32. package/dist/cjs/ag-grid-plus/settingItem/index.js +34 -12
  33. package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
  34. package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.js +87 -0
  35. package/dist/cjs/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
  36. package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
  37. package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.js +40 -0
  38. package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
  39. package/dist/cjs/ag-grid-plus/theme.d.ts +7 -1
  40. package/dist/cjs/ag-grid-plus/theme.js +31 -6
  41. package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
  42. package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.js +128 -0
  43. package/dist/cjs/ag-grid-plus/toolBar/index.d.ts +3 -1
  44. package/dist/cjs/ag-grid-plus/toolBar/index.js +43 -35
  45. package/dist/cjs/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
  46. package/dist/cjs/ag-grid-plus/toolBar/leftContent.js +2 -2
  47. package/dist/cjs/ag-grid-plus/toolBar/overflow.d.ts +20 -0
  48. package/dist/cjs/ag-grid-plus/toolBar/overflow.js +48 -0
  49. package/dist/cjs/ag-grid-plus/toolBar/style.js +71 -15
  50. package/dist/cjs/ag-grid-plus/types.d.ts +6 -0
  51. package/dist/cjs/ag-grid-plus/utils/agGridCompat.js +12 -3
  52. package/dist/cjs/ag-grid-plus/utils/agGridLicenseNotice.d.ts +7 -0
  53. package/dist/cjs/ag-grid-plus/utils/agGridLicenseNotice.js +105 -0
  54. package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
  55. package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +13 -2
  56. package/dist/cjs/ag-grid-plus/utils/constants.d.ts +3 -2
  57. package/dist/cjs/ag-grid-plus/utils/constants.js +3 -2
  58. package/dist/cjs/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
  59. package/dist/cjs/ag-grid-plus/utils/crossPageSelection.js +58 -0
  60. package/dist/cjs/ag-grid-plus/utils/emptyState.d.ts +2 -0
  61. package/dist/cjs/ag-grid-plus/utils/emptyState.js +9 -5
  62. package/dist/cjs/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
  63. package/dist/cjs/ag-grid-plus/utils/listKeyboard.js +83 -0
  64. package/dist/cjs/ag-grid-plus/utils/pagination.d.ts +26 -0
  65. package/dist/cjs/ag-grid-plus/utils/pagination.js +69 -0
  66. package/dist/cjs/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
  67. package/dist/cjs/ag-grid-plus/utils/queryDispatch.js +17 -0
  68. package/dist/cjs/ag-grid-plus/utils/statusPill.d.ts +25 -0
  69. package/dist/cjs/ag-grid-plus/utils/statusPill.js +196 -0
  70. package/dist/cjs/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
  71. package/dist/cjs/ag-grid-plus/utils/valueEnumColor.js +13 -9
  72. package/dist/cjs/ag-grid-plus/utils/valueFormat.d.ts +19 -0
  73. package/dist/cjs/ag-grid-plus/utils/valueFormat.js +73 -0
  74. package/dist/cjs/ag-grid-plus/utils.js +3 -2
  75. package/dist/cjs/array-table/arrayAddBtn.d.ts +1 -0
  76. package/dist/cjs/array-table/arrayAddBtn.js +2 -2
  77. package/dist/cjs/array-table/autoHeight.d.ts +18 -0
  78. package/dist/cjs/array-table/autoHeight.js +30 -0
  79. package/dist/cjs/array-table/batchRemove.d.ts +2 -2
  80. package/dist/cjs/array-table/cellEditorMarker.d.ts +18 -0
  81. package/dist/cjs/array-table/cellEditorMarker.js +92 -0
  82. package/dist/cjs/array-table/errorLocator.d.ts +29 -0
  83. package/dist/cjs/array-table/errorLocator.js +101 -0
  84. package/dist/cjs/array-table/hooks.d.ts +52 -4
  85. package/dist/cjs/array-table/hooks.js +251 -18
  86. package/dist/cjs/array-table/index.d.ts +6 -0
  87. package/dist/cjs/array-table/index.js +167 -23
  88. package/dist/cjs/array-table/interface.d.ts +22 -0
  89. package/dist/cjs/array-table/preview.js +39 -5
  90. package/dist/cjs/array-table/rowFeedback.d.ts +2 -2
  91. package/dist/cjs/array-table/rowFeedback.js +8 -8
  92. package/dist/cjs/array-table/summary.d.ts +25 -0
  93. package/dist/cjs/array-table/summary.js +70 -0
  94. package/dist/cjs/array-table/theme.d.ts +35 -5
  95. package/dist/cjs/array-table/theme.js +49 -12
  96. package/dist/cjs/array-table/title.d.ts +3 -0
  97. package/dist/cjs/array-table/title.js +29 -0
  98. package/dist/cjs/array-table/utils.d.ts +2 -1
  99. package/dist/cjs/array-table/utils.js +94 -23
  100. package/dist/cjs/card/pro-card/Card/useLegacyItems.d.ts +1 -1
  101. package/dist/cjs/dateCellEditor/DateCellEditor.d.ts +5 -0
  102. package/dist/cjs/dateCellEditor/DateCellEditor.js +42 -17
  103. package/dist/cjs/deleteConfirm/index.d.ts +14 -0
  104. package/dist/cjs/deleteConfirm/index.js +73 -12
  105. package/dist/cjs/dialogSelect/index.d.ts +19 -0
  106. package/dist/cjs/dialogSelect/index.js +189 -15
  107. package/dist/cjs/dialogSelect/index.less +18 -0
  108. package/dist/cjs/documentPage/documentPage.d.ts +6 -3
  109. package/dist/cjs/documentPage/documentPage.js +23 -8
  110. package/dist/cjs/documentPage/index.d.ts +2 -0
  111. package/dist/cjs/documentPage/index.js +19 -0
  112. package/dist/cjs/documentPage/leaveGuard.d.ts +31 -0
  113. package/dist/cjs/documentPage/leaveGuard.js +91 -0
  114. package/dist/cjs/draggableModal/index.d.ts +24 -1
  115. package/dist/cjs/draggableModal/index.js +36 -6
  116. package/dist/cjs/fullScreenAlert/index.less +10 -10
  117. package/dist/cjs/index.d.ts +3 -0
  118. package/dist/cjs/index.js +22 -0
  119. package/dist/cjs/readPretty/arrayTable.js +5 -1
  120. package/dist/cjs/scanCollect/ScanFeedbackInput.d.ts +26 -0
  121. package/dist/cjs/scanCollect/ScanFeedbackInput.js +113 -0
  122. package/dist/cjs/scanCollect/index.d.ts +4 -0
  123. package/dist/cjs/scanCollect/index.js +14 -0
  124. package/dist/cjs/scanCollect/scanSound.d.ts +15 -0
  125. package/dist/cjs/scanCollect/scanSound.js +91 -0
  126. package/dist/esm/ConfirmPro/index.d.ts +12 -9
  127. package/dist/esm/ConfirmPro/index.js +11 -34
  128. package/dist/esm/ag-grid-plus/ag-gridPlus.js +426 -157
  129. package/dist/esm/ag-grid-plus/context/gridContext.d.ts +12 -1
  130. package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +2 -0
  131. package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
  132. package/dist/esm/ag-grid-plus/density.d.ts +25 -0
  133. package/dist/esm/ag-grid-plus/density.js +45 -0
  134. package/dist/esm/ag-grid-plus/index.d.ts +1 -0
  135. package/dist/esm/ag-grid-plus/index.js +3 -0
  136. package/dist/esm/ag-grid-plus/index.less +43 -0
  137. package/dist/esm/ag-grid-plus/interface.d.ts +58 -1
  138. package/dist/esm/ag-grid-plus/interface.js +2 -0
  139. package/dist/esm/ag-grid-plus/queryForm/index.d.ts +11 -0
  140. package/dist/esm/ag-grid-plus/queryForm/index.js +62 -10
  141. package/dist/esm/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
  142. package/dist/esm/ag-grid-plus/queryForm/queryForm.js +64 -26
  143. package/dist/esm/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
  144. package/dist/esm/ag-grid-plus/queryForm/queryValues.js +54 -0
  145. package/dist/esm/ag-grid-plus/rowColors.d.ts +12 -0
  146. package/dist/esm/ag-grid-plus/rowColors.js +50 -0
  147. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
  148. package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
  149. package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +110 -78
  150. package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
  151. package/dist/esm/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
  152. package/dist/esm/ag-grid-plus/setting/autoColumnMemory.js +198 -0
  153. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
  154. package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +18 -1
  155. package/dist/esm/ag-grid-plus/setting/index.js +6 -15
  156. package/dist/esm/ag-grid-plus/settingItem/index.d.ts +11 -1
  157. package/dist/esm/ag-grid-plus/settingItem/index.js +35 -13
  158. package/dist/esm/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
  159. package/dist/esm/ag-grid-plus/shared/EmptyIllustration.js +82 -0
  160. package/dist/esm/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
  161. package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
  162. package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.js +34 -0
  163. package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
  164. package/dist/esm/ag-grid-plus/theme.d.ts +7 -1
  165. package/dist/esm/ag-grid-plus/theme.js +31 -6
  166. package/dist/esm/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
  167. package/dist/esm/ag-grid-plus/toolBar/OverflowActions.js +120 -0
  168. package/dist/esm/ag-grid-plus/toolBar/index.d.ts +3 -1
  169. package/dist/esm/ag-grid-plus/toolBar/index.js +43 -35
  170. package/dist/esm/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
  171. package/dist/esm/ag-grid-plus/toolBar/leftContent.js +2 -2
  172. package/dist/esm/ag-grid-plus/toolBar/overflow.d.ts +20 -0
  173. package/dist/esm/ag-grid-plus/toolBar/overflow.js +41 -0
  174. package/dist/esm/ag-grid-plus/toolBar/style.js +71 -15
  175. package/dist/esm/ag-grid-plus/types.d.ts +6 -0
  176. package/dist/esm/ag-grid-plus/utils/agGridCompat.js +12 -3
  177. package/dist/esm/ag-grid-plus/utils/agGridLicenseNotice.d.ts +7 -0
  178. package/dist/esm/ag-grid-plus/utils/agGridLicenseNotice.js +97 -0
  179. package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
  180. package/dist/esm/ag-grid-plus/utils/columnProcessors.js +14 -3
  181. package/dist/esm/ag-grid-plus/utils/constants.d.ts +3 -2
  182. package/dist/esm/ag-grid-plus/utils/constants.js +3 -2
  183. package/dist/esm/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
  184. package/dist/esm/ag-grid-plus/utils/crossPageSelection.js +52 -0
  185. package/dist/esm/ag-grid-plus/utils/emptyState.d.ts +2 -0
  186. package/dist/esm/ag-grid-plus/utils/emptyState.js +9 -5
  187. package/dist/esm/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
  188. package/dist/esm/ag-grid-plus/utils/listKeyboard.js +77 -0
  189. package/dist/esm/ag-grid-plus/utils/pagination.d.ts +26 -0
  190. package/dist/esm/ag-grid-plus/utils/pagination.js +60 -0
  191. package/dist/esm/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
  192. package/dist/esm/ag-grid-plus/utils/queryDispatch.js +11 -0
  193. package/dist/esm/ag-grid-plus/utils/statusPill.d.ts +25 -0
  194. package/dist/esm/ag-grid-plus/utils/statusPill.js +192 -0
  195. package/dist/esm/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
  196. package/dist/esm/ag-grid-plus/utils/valueEnumColor.js +12 -8
  197. package/dist/esm/ag-grid-plus/utils/valueFormat.d.ts +19 -0
  198. package/dist/esm/ag-grid-plus/utils/valueFormat.js +63 -0
  199. package/dist/esm/ag-grid-plus/utils.js +3 -2
  200. package/dist/esm/array-table/arrayAddBtn.d.ts +1 -0
  201. package/dist/esm/array-table/arrayAddBtn.js +1 -1
  202. package/dist/esm/array-table/autoHeight.d.ts +18 -0
  203. package/dist/esm/array-table/autoHeight.js +25 -0
  204. package/dist/esm/array-table/batchRemove.d.ts +2 -2
  205. package/dist/esm/array-table/cellEditorMarker.d.ts +18 -0
  206. package/dist/esm/array-table/cellEditorMarker.js +84 -0
  207. package/dist/esm/array-table/errorLocator.d.ts +29 -0
  208. package/dist/esm/array-table/errorLocator.js +95 -0
  209. package/dist/esm/array-table/hooks.d.ts +52 -4
  210. package/dist/esm/array-table/hooks.js +251 -17
  211. package/dist/esm/array-table/index.d.ts +6 -0
  212. package/dist/esm/array-table/index.js +170 -25
  213. package/dist/esm/array-table/interface.d.ts +22 -0
  214. package/dist/esm/array-table/preview.js +43 -7
  215. package/dist/esm/array-table/rowFeedback.d.ts +2 -2
  216. package/dist/esm/array-table/rowFeedback.js +8 -8
  217. package/dist/esm/array-table/summary.d.ts +25 -0
  218. package/dist/esm/array-table/summary.js +66 -0
  219. package/dist/esm/array-table/theme.d.ts +35 -5
  220. package/dist/esm/array-table/theme.js +47 -12
  221. package/dist/esm/array-table/title.d.ts +3 -0
  222. package/dist/esm/array-table/title.js +24 -0
  223. package/dist/esm/array-table/utils.d.ts +2 -1
  224. package/dist/esm/array-table/utils.js +93 -22
  225. package/dist/esm/card/pro-card/Card/useLegacyItems.d.ts +1 -1
  226. package/dist/esm/dateCellEditor/DateCellEditor.d.ts +5 -0
  227. package/dist/esm/dateCellEditor/DateCellEditor.js +42 -17
  228. package/dist/esm/deleteConfirm/index.d.ts +14 -0
  229. package/dist/esm/deleteConfirm/index.js +72 -12
  230. package/dist/esm/dialogSelect/index.d.ts +19 -0
  231. package/dist/esm/dialogSelect/index.js +190 -16
  232. package/dist/esm/dialogSelect/index.less +18 -0
  233. package/dist/esm/documentPage/documentPage.d.ts +6 -3
  234. package/dist/esm/documentPage/documentPage.js +23 -8
  235. package/dist/esm/documentPage/index.d.ts +2 -0
  236. package/dist/esm/documentPage/index.js +1 -0
  237. package/dist/esm/documentPage/leaveGuard.d.ts +31 -0
  238. package/dist/esm/documentPage/leaveGuard.js +86 -0
  239. package/dist/esm/draggableModal/index.d.ts +24 -1
  240. package/dist/esm/draggableModal/index.js +35 -5
  241. package/dist/esm/fullScreenAlert/index.less +10 -10
  242. package/dist/esm/index.d.ts +3 -0
  243. package/dist/esm/index.js +2 -0
  244. package/dist/esm/readPretty/arrayTable.js +6 -2
  245. package/dist/esm/scanCollect/ScanFeedbackInput.d.ts +26 -0
  246. package/dist/esm/scanCollect/ScanFeedbackInput.js +107 -0
  247. package/dist/esm/scanCollect/index.d.ts +4 -0
  248. package/dist/esm/scanCollect/index.js +2 -0
  249. package/dist/esm/scanCollect/scanSound.d.ts +15 -0
  250. package/dist/esm/scanCollect/scanSound.js +84 -0
  251. package/package.json +2 -2
@@ -18,12 +18,14 @@ import { connect, mapProps, mapReadPretty } from "@nokecy/formily-react";
18
18
  import uniqueId from "lodash/uniqueId";
19
19
  import { localeText } from "../ag-grid-plus/locale";
20
20
  import { useArrayTableBatchRemove } from "./batchRemove";
21
- import { useAddition, buildArrayTableColumns, useArrayTableSources, useArrayTableActions, isColumnComponent, collectLazyDefaults, applyLazyDefaults } from "./utils";
21
+ import { useAddition, buildArrayTableColumns, useArrayTableSources, useArrayTableActions, isColumnComponent, collectLazyDefaults, applyLazyDefaults, LazyReadOnlyText, findDataFieldSchema } from "./utils";
22
22
  import { groupColumnDefs } from "./columnGroup";
23
23
  import { ARRAY_TABLE_INDEX_FIELD, hasOwnIndexColumn, makeIndexColumn } from "./indexColumn";
24
24
  import { installDisplaySequenceOrder } from "../shared/gridSequence";
25
25
  import { ensureArrayTableRowIds, getArrayTableRowId } from "./rowIdentity";
26
- import { useCellFocus, useKeyboardNavigation, useRowDrag, suppressNativeInputKeys } from "./hooks";
26
+ import { ARRAY_TABLE_SUMMARY_ROW, withSummaryCells } from "./summary";
27
+ import { useCellFocus, useKeyboardNavigation, useRowDrag, suppressNativeInputKeys, createTabToNextCell, useCellEscapeRevert, focusAddedRow, focusGridCell } from "./hooks";
28
+ import { getDefaultValue } from "./arrayAddBtn";
27
29
  import ArrayBase from "./arrayBase";
28
30
  import ArrayAddBtn from "./arrayAddBtn";
29
31
  import PreviewArrayTable from "./preview";
@@ -32,10 +34,14 @@ import Setting from "../ag-grid-plus/setting/index";
32
34
  import { flatConfigToColumnState, flatConfigToGridState } from "../ag-grid-plus/setting/columnGroupUtils";
33
35
 
34
36
  // AG-Grid v33 主题:行高、单元格居中、去聚焦/选区视觉(编辑态与阅读态共用一份,见 theme.ts)
35
- import { useArrayTableTheme, ARRAY_TABLE_ROW_HEIGHT, ARRAY_TABLE_FEEDBACK_CLASS } from "./theme";
37
+ import { useArrayTableTheme, useArrayTableMetrics, ARRAY_TABLE_FEEDBACK_CLASS } from "./theme";
36
38
  import { DEFAULT_FIXED_COLUMNS_MAX_RATIO, getFixedDerivedSide, reconcileFixedColumns } from "./fixedGuard";
39
+ import { calcAutoGridHeight } from "./autoHeight";
40
+ import { ArrayTableTitle } from "./title";
37
41
  import { useFeedbackRows, ROW_FEEDBACK_EXTRA_HEIGHT } from "./rowFeedback";
38
42
  import { useGridSchemes } from "../ag-grid-plus/index";
43
+ import { FormLayout, registerErrorLocator } from "@nokecy/formily-antd";
44
+ import { createArrayTableErrorLocator } from "./errorLocator";
39
45
 
40
46
  /** Addition 配置的 defaultValue 只接受普通对象,其余形态按空对象处理。@author nokecy */
41
47
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -47,10 +53,13 @@ var additionRowDefaults = function additionRowDefaults(value) {
47
53
 
48
54
  //@ts-ignore
49
55
  var ArrayTableInner = observer(function (props) {
50
- var _props$fixedColumnsMa, _ref, _addition$props$title, _addition$props, _addition$schema, _addition$props$metho, _addition$props3, _addition$props4;
56
+ var _props$fixedColumnsMa, _ref3, _addition$props$title, _addition$props, _addition$schema, _addition$props$metho, _addition$props3, _addition$props4;
51
57
  var height = props.height,
52
58
  gridKey = props.gridKey;
53
59
  var arrayTableTheme = useArrayTableTheme(true);
60
+ var _useArrayTableMetrics = useArrayTableMetrics(),
61
+ rowHeight = _useArrayTableMetrics.rowHeight,
62
+ headerHeight = _useArrayTableMetrics.headerHeight;
54
63
 
55
64
  // 【新增】运行时验证 gridKey
56
65
  if (!gridKey) {
@@ -115,18 +124,31 @@ var ArrayTableInner = observer(function (props) {
115
124
 
116
125
  // 有行内错误文字的行撑高,错误文字完整显示在输入框下方(任意行,含最后一行)。
117
126
  // 错误行集合由 Formily 事件驱动更新(不在渲染期读错误,避免订阅整张字段表);行集合变化后让 AG-Grid 重算行高。@author nokecy
118
- var _useFeedbackRows = useFeedbackRows(field),
127
+ var _useFeedbackRows = useFeedbackRows(field, FormLayout.useFormLayout().feedbackLayout),
119
128
  feedbackRowsRef = _useFeedbackRows.rowsRef,
120
129
  feedbackSignature = _useFeedbackRows.signature;
121
130
  var getRowHeight = useCallback(function (params) {
122
- return params.data && feedbackRowsRef.current.has(params.data) ? ARRAY_TABLE_ROW_HEIGHT + ROW_FEEDBACK_EXTRA_HEIGHT : ARRAY_TABLE_ROW_HEIGHT;
123
- }, []);
131
+ return params.data && feedbackRowsRef.current.has(params.data) ? rowHeight + ROW_FEEDBACK_EXTRA_HEIGHT : rowHeight;
132
+ }, [rowHeight]);
133
+ var isAutoHeight = height === 'auto';
134
+ var autoGridHeight = isAutoHeight ? calcAutoGridHeight({
135
+ rowCount: dataSource.length,
136
+ rowHeight: rowHeight,
137
+ headerHeight: headerHeight,
138
+ hasSummary: !!props.summary,
139
+ feedbackRows: feedbackSignature ? feedbackSignature.split(',').length : 0,
140
+ minRows: props.minRows,
141
+ maxRows: props.maxRows
142
+ }) : undefined;
143
+ // 密度切换时行高基数变了,AG-Grid 不会自己重算已布局的行。
124
144
  useEffect(function () {
125
145
  gridApiState === null || gridApiState === void 0 || gridApiState.resetRowHeights();
126
- }, [feedbackSignature, gridApiState]);
146
+ }, [feedbackSignature, gridApiState, rowHeight]);
127
147
 
128
148
  // 使用自定义 hooks
129
- var _useCellFocus = useCellFocus(),
149
+ var _useCellFocus = useCellFocus({
150
+ openDateOnKeyboard: props.openDateOnKeyboard
151
+ }),
130
152
  focusInputInCell = _useCellFocus.focusInputInCell,
131
153
  scheduleCellFocus = _useCellFocus.scheduleCellFocus,
132
154
  beginFocusRequest = _useCellFocus.beginFocusRequest;
@@ -194,9 +216,21 @@ var ArrayTableInner = observer(function (props) {
194
216
 
195
217
  // 交给 AgGridReact 的列定义:按 x-component-props.headerGroup 把相邻同组的列合并成列组(多级表头)。
196
218
  // stableColumnDefs 保持扁平,懒列识别、列方案还原等内部逻辑仍用它;只有喂给 AG-Grid 的这一份带分组。@author nokecy
197
- var gridColumnDefs = useMemo(function () {
219
+ var groupedColumnDefs = useMemo(function () {
198
220
  return groupColumnDefs(stableColumnDefs);
199
221
  }, [stableColumnDefs]);
222
+ // 合计行:渲染所需的 summary / 行数据经 ref 取最新值,列定义只在是否启用合计变化时重建。@author nokecy
223
+ var summaryRef = useRef(props.summary);
224
+ summaryRef.current = props.summary;
225
+ var hasSummary = !!props.summary;
226
+ var gridColumnDefs = useMemo(function () {
227
+ return hasSummary ? withSummaryCells(groupedColumnDefs, function () {
228
+ return summaryRef.current;
229
+ }, function () {
230
+ var _ref;
231
+ return (_ref = field.value) !== null && _ref !== void 0 ? _ref : [];
232
+ }) : groupedColumnDefs;
233
+ }, [groupedColumnDefs, hasSummary, field]);
200
234
 
201
235
  // 懒挂载:把激活态 Set 通过 AG-Grid context 暴露给 LazyAgField(引用稳定,原地 mutate)。@author nokecy
202
236
  var gridContext = useMemo(function () {
@@ -278,9 +312,116 @@ var ArrayTableInner = observer(function (props) {
278
312
  applyFixedGuard(gridApiState);
279
313
  }, [applyFixedGuard, gridApiState]);
280
314
 
315
+ // 末格 Tab 新增行:新行要等 rowData 更新进入 AG 行模型后才能聚焦,待办存在 ref 里由 onRowDataUpdated 兑现。
316
+ // 不能在 push 之后按定时器猜时机,也不能让同一次 Tab 的 onCellKeyDown 再发起落焦(会取消这里的请求)。@author nokecy
317
+ var pendingAddFocusRef = useRef(null);
318
+ var flushPendingAddFocus = function flushPendingAddFocus(api) {
319
+ var pending = pendingAddFocusRef.current;
320
+ if (!pending || !api) return;
321
+ if (focusAddedRow({
322
+ api: api,
323
+ root: ref,
324
+ pending: pending,
325
+ beginFocusRequest: beginFocusRequest,
326
+ focusInputInCell: focusInputInCell,
327
+ activateCell: activateCell
328
+ })) {
329
+ pendingAddFocusRef.current = null;
330
+ }
331
+ };
281
332
  // 键盘导航 hook 需要 activateCell(导航进懒列时先挂载再聚焦),故置于其后。@author nokecy
282
- var _useKeyboardNavigatio = useKeyboardNavigation(ref, dataSource, focusInputInCell, activateCell, beginFocusRequest),
333
+ var _useKeyboardNavigatio = useKeyboardNavigation(ref, dataSource, focusInputInCell, activateCell, beginFocusRequest, function () {
334
+ return pendingAddFocusRef.current != null;
335
+ }),
283
336
  handleCellKeyDown = _useKeyboardNavigatio.handleCellKeyDown;
337
+ useCellEscapeRevert(ref);
338
+ // Tab 跳过序号/勾选列;开启 tabAddsRow 时,末格 Tab 新增一行并落焦到新行首个可编辑格。@author nokecy
339
+ var tabAddsRow = props.tabAddsRow !== false;
340
+ var tabAddRowRef = useRef(function () {});
341
+ tabAddRowRef.current = function () {
342
+ var _api$getAllDisplayedC, _api$getAllDisplayedC2;
343
+ if (field.pattern !== 'editable' || field.disabled) return;
344
+ var api = apiRef.current;
345
+ // 新行的首个可编辑格:跳过序号/勾选列、只读展示列、拖拽手柄列。
346
+ var colId = ((_api$getAllDisplayedC = api === null || api === void 0 || (_api$getAllDisplayedC2 = api.getAllDisplayedColumns) === null || _api$getAllDisplayedC2 === void 0 ? void 0 : _api$getAllDisplayedC2.call(api)) !== null && _api$getAllDisplayedC !== void 0 ? _api$getAllDisplayedC : []).filter(function (c) {
347
+ var _c$getColDef, _c$getColDef2;
348
+ var def = (_c$getColDef = (_c$getColDef2 = c.getColDef) === null || _c$getColDef2 === void 0 ? void 0 : _c$getColDef2.call(c)) !== null && _c$getColDef !== void 0 ? _c$getColDef : {};
349
+ return c.getColId() !== ARRAY_TABLE_INDEX_FIELD && c.getColId() !== 'ag-Grid-SelectionColumn' && def.cellRenderer !== LazyReadOnlyText && def.rowDrag !== true;
350
+ }).map(function (c) {
351
+ return c.getColId();
352
+ })[0];
353
+ field.push(getDefaultValue(undefined, schema));
354
+ var newIndex = (Array.isArray(field.value) ? field.value.length : 1) - 1;
355
+ addedIndexRef.current = newIndex;
356
+ setIsAdd(true);
357
+ if (!api || !colId) return;
358
+ var addedRow = Array.isArray(field.value) ? field.value[newIndex] : undefined;
359
+ if (addedRow == null || _typeof(addedRow) !== 'object') return;
360
+ var pending = {
361
+ rowId: getArrayTableRowId(addedRow, rowIdMapRef.current),
362
+ colId: colId
363
+ };
364
+ pendingAddFocusRef.current = pending;
365
+ // 兜底:行更新事件之外再试一次,并保证待办不会一直挂着屏蔽 Tab 落焦。
366
+ setTimeout(function () {
367
+ if (pendingAddFocusRef.current !== pending) return;
368
+ flushPendingAddFocus(apiRef.current);
369
+ if (pendingAddFocusRef.current === pending) pendingAddFocusRef.current = null;
370
+ }, 300);
371
+ };
372
+ // 提交校验失败时,把表内最靠前的错误格滚到可见、激活并聚焦(定位器注册到 form-error-focus,与表外错误一起按页面位置排序)。
373
+ // 定位器只注册一次,用到的最新状态经 ref 读取。@author nokecy
374
+ var errorLocatorColumns = function errorLocatorColumns() {
375
+ return sources.filter(function (s) {
376
+ return (!s.display || s.display === 'visible') && isColumnComponent(s.schema);
377
+ }).map(function (s) {
378
+ var _findDataFieldSchema, _s$columnProps$header2, _s$columnProps4, _s$columnProps5;
379
+ return {
380
+ colId: s.name,
381
+ dataName: (_findDataFieldSchema = findDataFieldSchema(s.schema, s.name)) === null || _findDataFieldSchema === void 0 ? void 0 : _findDataFieldSchema.name,
382
+ title: (_s$columnProps$header2 = (_s$columnProps4 = s.columnProps) === null || _s$columnProps4 === void 0 ? void 0 : _s$columnProps4.headerName) !== null && _s$columnProps$header2 !== void 0 ? _s$columnProps$header2 : (_s$columnProps5 = s.columnProps) === null || _s$columnProps5 === void 0 ? void 0 : _s$columnProps5.title
383
+ };
384
+ });
385
+ };
386
+ var errorLocatorDepsRef = useRef(null);
387
+ errorLocatorDepsRef.current = {
388
+ field: field,
389
+ getContainer: function getContainer() {
390
+ return ref.current;
391
+ },
392
+ getApi: function getApi() {
393
+ return apiRef.current;
394
+ },
395
+ getColumns: errorLocatorColumns,
396
+ getRowId: function getRowId(row) {
397
+ return getArrayTableRowId(row, rowIdMapRef.current);
398
+ },
399
+ focus: function focus(_ref2) {
400
+ var rowIndex = _ref2.rowIndex,
401
+ colId = _ref2.colId;
402
+ return apiRef.current ? focusGridCell({
403
+ api: apiRef.current,
404
+ root: ref,
405
+ rowIndex: rowIndex,
406
+ colId: colId,
407
+ beginFocusRequest: beginFocusRequest,
408
+ focusInputInCell: focusInputInCell,
409
+ activateCell: activateCell,
410
+ ensureColumnVisible: true
411
+ }) : Promise.resolve(undefined);
412
+ }
413
+ };
414
+ useEffect(function () {
415
+ return registerErrorLocator(function (form, root) {
416
+ var deps = errorLocatorDepsRef.current;
417
+ return deps ? createArrayTableErrorLocator(deps)(form, root) : undefined;
418
+ });
419
+ }, [field]);
420
+ var tabToNextCell = useMemo(function () {
421
+ return createTabToNextCell(tabAddsRow ? function () {
422
+ return tabAddRowRef.current();
423
+ } : undefined);
424
+ }, [tabAddsRow]);
284
425
 
285
426
  /**
286
427
  * 方案自动加载
@@ -361,11 +502,6 @@ var ArrayTableInner = observer(function (props) {
361
502
  }).then(function () {
362
503
  if (cancelled || !gridApiState) return;
363
504
 
364
- // 3. 应用过滤器(在列状态稳定后执行)
365
- if (currentScheme.filterModel) {
366
- gridApiState.setFilterModel(currentScheme.filterModel);
367
- }
368
-
369
505
  // 【关键修复】记录已应用的方案状态(ID + updatedAt)
370
506
  lastAppliedSchemeRef.current = {
371
507
  id: currentScheme.id,
@@ -386,7 +522,7 @@ var ArrayTableInner = observer(function (props) {
386
522
  children: /*#__PURE__*/_jsx("div", {
387
523
  ref: ref,
388
524
  style: {
389
- height: height ? height : 400,
525
+ height: isAutoHeight ? undefined : height ? height : 400,
390
526
  display: 'flex',
391
527
  flexDirection: 'column'
392
528
  },
@@ -408,8 +544,10 @@ var ArrayTableInner = observer(function (props) {
408
544
  style: {
409
545
  marginBottom: 5
410
546
  },
411
- children: [addition ? /*#__PURE__*/_jsx(ArrayAddBtn, _objectSpread(_objectSpread({}, addition.props), {}, {
412
- title: (_ref = (_addition$props$title = (_addition$props = addition.props) === null || _addition$props === void 0 ? void 0 : _addition$props.title) !== null && _addition$props$title !== void 0 ? _addition$props$title : (_addition$schema = addition.schema) === null || _addition$schema === void 0 ? void 0 : _addition$schema.title) !== null && _ref !== void 0 ? _ref : '新增'
547
+ children: [props.title ? /*#__PURE__*/_jsx(ArrayTableTitle, {
548
+ children: props.title
549
+ }) : null, addition ? /*#__PURE__*/_jsx(ArrayAddBtn, _objectSpread(_objectSpread({}, addition.props), {}, {
550
+ title: (_ref3 = (_addition$props$title = (_addition$props = addition.props) === null || _addition$props === void 0 ? void 0 : _addition$props.title) !== null && _addition$props$title !== void 0 ? _addition$props$title : (_addition$schema = addition.schema) === null || _addition$schema === void 0 ? void 0 : _addition$schema.title) !== null && _ref3 !== void 0 ? _ref3 : '新增'
413
551
  // 新增行总是回到数组顺序,避免当前列排序把空白新行插到旧明细前面;
414
552
  // 先让表格滚到新行,再调用 Addition 节点上自己写的 onAdd,两者都生效。@author nokecy
415
553
  ,
@@ -455,7 +593,10 @@ var ArrayTableInner = observer(function (props) {
455
593
  })]
456
594
  })]
457
595
  }), /*#__PURE__*/_jsx("div", {
458
- style: {
596
+ style: isAutoHeight ? {
597
+ flex: 'none',
598
+ height: autoGridHeight
599
+ } : {
459
600
  flex: 1,
460
601
  minHeight: 0
461
602
  }
@@ -504,6 +645,7 @@ var ArrayTableInner = observer(function (props) {
504
645
  maintainColumnOrder: true
505
646
  },
506
647
  onCellKeyDown: handleCellKeyDown,
648
+ tabToNextCell: tabToNextCell,
507
649
  onCellClicked: function onCellClicked(event) {
508
650
  var _event$column$getColI, _event$column, _event$colDef, _event$event;
509
651
  // 懒挂载:点击懒列存量格时先激活挂树,等挂载完成再聚焦进编辑;否则沿用原即时聚焦。@author nokecy
@@ -524,7 +666,7 @@ var ArrayTableInner = observer(function (props) {
524
666
  if (event.api.getDisplayedRowAtIndex(rowIndex) !== node) return false;
525
667
  var focused = event.api.getFocusedCell();
526
668
  return (focused === null || focused === void 0 ? void 0 : focused.rowIndex) === rowIndex && (focused === null || focused === void 0 ? void 0 : focused.column.getColId()) === colId;
527
- });
669
+ }, justActivated ? 'pointer-activated' : 'pointer');
528
670
  },
529
671
  onRowDragMove: handleRowDragMove,
530
672
  onRowDataUpdated: function onRowDataUpdated(e) {
@@ -544,6 +686,7 @@ var ArrayTableInner = observer(function (props) {
544
686
  addedIndexRef.current = undefined;
545
687
  setIsAdd(false);
546
688
  }
689
+ flushPendingAddFocus(e.api);
547
690
  (_props$onRowDataUpdat = props.onRowDataUpdated) === null || _props$onRowDataUpdat === void 0 || _props$onRowDataUpdat.call(props, e);
548
691
  },
549
692
  rowDragManaged: true,
@@ -567,8 +710,8 @@ var ArrayTableInner = observer(function (props) {
567
710
  ' <span data-ref="eSortAsc" class="ag-header-icon ag-sort-ascending-icon"></span>' + ' <span data-ref="eSortDesc" class="ag-header-icon ag-sort-descending-icon"></span>' + ' <span data-ref="eSortNone" class="ag-header-icon ag-sort-none-icon"></span>' + " </div>" + "</div>"
568
711
  }
569
712
  },
570
- getRowId: function getRowId(_ref2) {
571
- var data = _ref2.data;
713
+ getRowId: function getRowId(_ref4) {
714
+ var data = _ref4.data;
572
715
  return getArrayTableRowId(data, rowIdMapRef.current);
573
716
  }
574
717
  // rowDragEntireRow={true}
@@ -588,11 +731,13 @@ var ArrayTableInner = observer(function (props) {
588
731
  });
589
732
  (_props$onSortChanged = props.onSortChanged) === null || _props$onSortChanged === void 0 || _props$onSortChanged.call(props, event);
590
733
  },
591
- rowHeight: ARRAY_TABLE_ROW_HEIGHT,
734
+ rowHeight: rowHeight,
735
+ headerHeight: headerHeight,
592
736
  getRowHeight: getRowHeight,
593
737
  pagination: false,
594
738
  columnDefs: gridColumnDefs,
595
- rowData: dataSource
739
+ rowData: dataSource,
740
+ pinnedBottomRowData: hasSummary ? ARRAY_TABLE_SUMMARY_ROW : undefined
596
741
  })
597
742
  }), sources.map(function (column, key) {
598
743
  //专门用来承接对Column的状态管理
@@ -3,6 +3,7 @@ import { FieldDisplayTypes, GeneralField } from "@nokecy/formily-core";
3
3
  import { Schema } from "@nokecy/formily-json-schema";
4
4
  import { AgGridReactProps } from "ag-grid-react";
5
5
  import React from "react";
6
+ import type { ArrayTableSummary } from "./summary";
6
7
  /**
7
8
  * ArrayTable.Column 的 x-component-props 里 qc-ui 自己认的扩展属性;
8
9
  * 其余属性(width、headerName、pinned 等)按 AG-Grid 列定义处理。
@@ -42,8 +43,15 @@ interface ObservableColumnSource {
42
43
  }
43
44
  /** 公共明细表格的业务属性。@author nokecy */
44
45
  export type ArrayTableProps = AgGridReactProps & {
46
+ /** 数字为固定高度;'auto' 按行数自适应(受 minRows / maxRows 限制),默认 400 */
45
47
  height?: number | string;
48
+ /** height='auto' 时至少显示的行数,默认 1 */
49
+ minRows?: number;
50
+ /** height='auto' 时最多显示的行数,超出后内部滚动,默认 10 */
51
+ maxRows?: number;
46
52
  gridKey: string;
53
+ /** 工具栏左侧的区域标题(带主色竖条),与「新增」同一行,不再另起一行占空间 */
54
+ title?: React.ReactNode;
47
55
  onRowDrag?: boolean;
48
56
  disabled?: boolean;
49
57
  /** 默认对配置标准删除入口的可编辑明细开放批量删除;false 可显式关闭。 */
@@ -55,6 +63,20 @@ export type ArrayTableProps = AgGridReactProps & {
55
63
  * 显式写的 pinned 不受影响。传 1 或 Infinity 关闭保护。
56
64
  */
57
65
  fixedColumnsMaxRatio?: number;
66
+ /**
67
+ * 末行最后一格按 Tab 时新增一行并把焦点落到新行首个可编辑格(规范 §7.6.3),默认 true。
68
+ * 传 `false` 保持旧行为(焦点离开表格)。Shift+Tab、非末格不受影响。
69
+ */
70
+ tabAddsRow?: boolean;
71
+ /**
72
+ * 键盘(Tab/Enter/方向键)到达日期格时自动展开日期面板,默认 false:与演示一致,鼠标点击展开、键盘到达保持收起。
73
+ */
74
+ openDateOnKeyboard?: boolean;
75
+ /**
76
+ * 合计行:固定在表尾,键为列的 field,值为固定内容或 `(rows) => 内容`。
77
+ * 明细变化时自动重算;序号、勾选列和未列出的列该格留空。
78
+ */
79
+ summary?: ArrayTableSummary;
58
80
  };
59
81
  /** ArrayTable 自己认的属性(其余按 AgGridReact 属性处理) */
60
82
  type ArrayTableOwnProps = Omit<ArrayTableProps, keyof AgGridReactProps>;
@@ -1,16 +1,25 @@
1
+ import { calcAutoGridHeight } from "./autoHeight";
2
+ import { ArrayTableTitle } from "./title";
1
3
  import React from "react";
2
4
  import { useField } from "@nokecy/formily-react";
3
5
  import { buildArrayTableColumns, useArrayTableSources } from "./utils";
4
6
  import { AgGridPlus } from "../ag-grid-plus/index";
5
- import { useArrayTableTheme, ARRAY_TABLE_ROW_HEIGHT } from "./theme";
7
+ import { useArrayTableTheme, useArrayTableMetrics } from "./theme";
8
+ import { ARRAY_TABLE_SUMMARY_ROW, withSummaryCells } from "./summary";
6
9
  import { ARRAY_TABLE_INDEX_FIELD, hasOwnIndexColumn, makeIndexColumn } from "./indexColumn";
7
10
  import { installDisplaySequenceOrder } from "../shared/gridSequence";
8
- //@ts-ignore
11
+ /** AgGridPlus 外层卡片的内边距与间隙(实测 24px),自适应高度要把它算进外框,否则最后一行被裁掉 */
9
12
  import { jsx as _jsx } from "react/jsx-runtime";
13
+ import { jsxs as _jsxs } from "react/jsx-runtime";
14
+ var PREVIEW_CHROME_HEIGHT = 24;
15
+ //@ts-ignore
10
16
  var ArrayTable = function ArrayTable(props) {
11
17
  var _buildArrayTableColum;
12
18
  var height = props.height;
13
19
  var arrayTablePreviewTheme = useArrayTableTheme();
20
+ var _useArrayTableMetrics = useArrayTableMetrics(),
21
+ rowHeight = _useArrayTableMetrics.rowHeight,
22
+ headerHeight = _useArrayTableMetrics.headerHeight;
14
23
  var field = useField();
15
24
  var dataSource = Array.isArray(field.value) ? field.value.slice() : [];
16
25
  var sources = useArrayTableSources();
@@ -20,9 +29,17 @@ var ArrayTable = function ArrayTable(props) {
20
29
  if (showDefaultIndex) {
21
30
  columns.unshift(makeIndexColumn());
22
31
  }
23
- return /*#__PURE__*/_jsx("div", {
32
+ var title = props.title;
33
+ var grid = /*#__PURE__*/_jsx("div", {
24
34
  style: {
25
- height: height ? height : 400
35
+ height: height === 'auto' ? PREVIEW_CHROME_HEIGHT + calcAutoGridHeight({
36
+ rowCount: dataSource.length,
37
+ rowHeight: rowHeight,
38
+ headerHeight: headerHeight,
39
+ hasSummary: !!props.summary,
40
+ minRows: props.minRows,
41
+ maxRows: props.maxRows
42
+ }) : height ? height : 400
26
43
  },
27
44
  children: /*#__PURE__*/_jsx(AgGridPlus, {
28
45
  gridOptions: {
@@ -34,9 +51,12 @@ var ArrayTable = function ArrayTable(props) {
34
51
  return data._id || data.id;
35
52
  },
36
53
  hideTool: true,
54
+ hidePagination: true,
55
+ headerFilter: false,
37
56
  search: false,
38
57
  theme: arrayTablePreviewTheme,
39
- rowHeight: ARRAY_TABLE_ROW_HEIGHT,
58
+ rowHeight: rowHeight,
59
+ headerHeight: headerHeight,
40
60
  onGridReady: function onGridReady(event) {
41
61
  var _props$onGridReady;
42
62
  installDisplaySequenceOrder(event.api);
@@ -60,9 +80,25 @@ var ArrayTable = function ArrayTable(props) {
60
80
  });
61
81
  }
62
82
  },
63
- columnDefs: columns,
64
- rowData: dataSource
83
+ columnDefs: props.summary ? withSummaryCells(columns, function () {
84
+ return props.summary;
85
+ }, function () {
86
+ return dataSource;
87
+ }) : columns,
88
+ rowData: dataSource,
89
+ pinnedBottomRowData: props.summary ? ARRAY_TABLE_SUMMARY_ROW : undefined
65
90
  })
66
91
  });
92
+ // 预览态没有工具栏,标题单独占一行;标题行高度不算进网格高度
93
+ return title ? /*#__PURE__*/_jsxs("div", {
94
+ children: [/*#__PURE__*/_jsx("div", {
95
+ style: {
96
+ marginBottom: 5
97
+ },
98
+ children: /*#__PURE__*/_jsx(ArrayTableTitle, {
99
+ children: title
100
+ })
101
+ }), grid]
102
+ }) : grid;
67
103
  };
68
104
  export default ArrayTable;
@@ -12,7 +12,7 @@ export declare const ROW_FEEDBACK_EXTRA_HEIGHT = 24;
12
12
  * 这里读的是整张字段表(queryFeedbacks 会遍历数组下所有字段),不要在组件渲染期间调用——
13
13
  * 渲染期读它会让组件订阅字段表,每创建一个字段就重渲一次。请用 useFeedbackRows。@author nokecy
14
14
  */
15
- export declare const collectFeedbackRows: (arrayField: ArrayField) => Set<object>;
15
+ export declare const collectFeedbackRows: (arrayField: ArrayField, defaultLayout?: string) => Set<object>;
16
16
  /**
17
17
  * 订阅数组下字段的校验反馈,返回「有行内错误文字的行」。
18
18
  *
@@ -20,7 +20,7 @@ export declare const collectFeedbackRows: (arrayField: ArrayField) => Set<object
20
20
  * 合并成一次(下一个宏任务)重算;行集合变化才触发重渲。rows 供 AG-Grid 的 getRowHeight 同步读取,
21
21
  * signature(有错误的行下标)变化时调用方让网格重算行高。@author nokecy
22
22
  */
23
- export declare const useFeedbackRows: (arrayField: ArrayField) => {
23
+ export declare const useFeedbackRows: (arrayField: ArrayField, defaultLayout?: string) => {
24
24
  rowsRef: import("react").RefObject<Set<object>>;
25
25
  signature: string;
26
26
  };
@@ -16,8 +16,8 @@ import uniqueId from 'lodash/uniqueId';
16
16
  */
17
17
  export var ROW_FEEDBACK_EXTRA_HEIGHT = 24;
18
18
 
19
- /** 这些反馈布局的错误不占行内位置(浮层 / 不显示),不需要撑高行 */
20
- var OUT_OF_FLOW_LAYOUTS = new Set(['popover', 'none']);
19
+ /** 这些反馈布局的错误不占行内位置(浮层 / 不显示 / terse 紧凑浮层),不需要撑高行 */
20
+ var OUT_OF_FLOW_LAYOUTS = new Set(['popover', 'none', 'terse']);
21
21
 
22
22
  /**
23
23
  * 找出当前有「行内错误文字」的行:返回这些行的数据对象(与 AG-Grid rowData 里的元素同一引用)。
@@ -26,7 +26,7 @@ var OUT_OF_FLOW_LAYOUTS = new Set(['popover', 'none']);
26
26
  * 这里读的是整张字段表(queryFeedbacks 会遍历数组下所有字段),不要在组件渲染期间调用——
27
27
  * 渲染期读它会让组件订阅字段表,每创建一个字段就重渲一次。请用 useFeedbackRows。@author nokecy
28
28
  */
29
- export var collectFeedbackRows = function collectFeedbackRows(arrayField) {
29
+ export var collectFeedbackRows = function collectFeedbackRows(arrayField, defaultLayout) {
30
30
  var rows = new Set();
31
31
  var form = arrayField === null || arrayField === void 0 ? void 0 : arrayField.form;
32
32
  var value = arrayField === null || arrayField === void 0 ? void 0 : arrayField.value;
@@ -40,12 +40,12 @@ export var collectFeedbackRows = function collectFeedbackRows(arrayField) {
40
40
  _step;
41
41
  try {
42
42
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
43
- var _feedback$path$segmen, _feedback$path, _feedback$path2, _feedback$path2$toStr, _feedback$path3, _form$query$take;
43
+ var _feedback$path$segmen, _feedback$path, _feedback$path2, _feedback$path2$toStr, _feedback$path3, _form$query$take$deco, _form$query$take;
44
44
  var feedback = _step.value;
45
45
  var index = Number((_feedback$path$segmen = (_feedback$path = feedback.path) === null || _feedback$path === void 0 || (_feedback$path = _feedback$path.segments) === null || _feedback$path === void 0 ? void 0 : _feedback$path[baseLength]) !== null && _feedback$path$segmen !== void 0 ? _feedback$path$segmen : (_feedback$path2 = feedback.path) === null || _feedback$path2 === void 0 || (_feedback$path2$toStr = (_feedback$path3 = _feedback$path2).toString) === null || _feedback$path2$toStr === void 0 ? void 0 : _feedback$path2$toStr.call(_feedback$path3).split('.')[baseLength]);
46
46
  var row = value[index];
47
47
  if (!Number.isInteger(index) || row == null || _typeof(row) !== 'object') continue;
48
- var layout = (_form$query$take = form.query(feedback.address).take()) === null || _form$query$take === void 0 || (_form$query$take = _form$query$take.decoratorProps) === null || _form$query$take === void 0 ? void 0 : _form$query$take.feedbackLayout;
48
+ var layout = (_form$query$take$deco = (_form$query$take = form.query(feedback.address).take()) === null || _form$query$take === void 0 || (_form$query$take = _form$query$take.decoratorProps) === null || _form$query$take === void 0 ? void 0 : _form$query$take.feedbackLayout) !== null && _form$query$take$deco !== void 0 ? _form$query$take$deco : defaultLayout;
49
49
  if (OUT_OF_FLOW_LAYOUTS.has(layout)) continue;
50
50
  rows.add(row);
51
51
  }
@@ -64,7 +64,7 @@ export var collectFeedbackRows = function collectFeedbackRows(arrayField) {
64
64
  * 合并成一次(下一个宏任务)重算;行集合变化才触发重渲。rows 供 AG-Grid 的 getRowHeight 同步读取,
65
65
  * signature(有错误的行下标)变化时调用方让网格重算行高。@author nokecy
66
66
  */
67
- export var useFeedbackRows = function useFeedbackRows(arrayField) {
67
+ export var useFeedbackRows = function useFeedbackRows(arrayField, defaultLayout) {
68
68
  var rowsRef = useRef(new Set());
69
69
  var _useState = useState(''),
70
70
  _useState2 = _slicedToArray(_useState, 2),
@@ -80,7 +80,7 @@ export var useFeedbackRows = function useFeedbackRows(arrayField) {
80
80
  if (timer !== undefined) clearTimeout(timer);
81
81
  timer = setTimeout(function () {
82
82
  timer = undefined;
83
- var rows = collectFeedbackRows(arrayField);
83
+ var rows = collectFeedbackRows(arrayField, defaultLayout);
84
84
  rowsRef.current = rows;
85
85
  var value = Array.isArray(arrayField.value) ? arrayField.value : [];
86
86
  var next = value.flatMap(function (row, index) {
@@ -101,7 +101,7 @@ export var useFeedbackRows = function useFeedbackRows(arrayField) {
101
101
  if (timer !== undefined) clearTimeout(timer);
102
102
  form.removeEffects(id);
103
103
  };
104
- }, [arrayField]);
104
+ }, [arrayField, defaultLayout]);
105
105
  return {
106
106
  rowsRef: rowsRef,
107
107
  signature: signature
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import type { ColDef } from 'ag-grid-community';
3
+ /**
4
+ * 合计行(固定在表尾,不随滚动,不参与排序、勾选、序号)。
5
+ * 键是列的 field(ArrayTable.Column 的 dataIndex / 内层字段名),值是固定内容,或由当前全部明细行算出内容的函数;
6
+ * 函数在 Observer 里执行,明细任何字段变化都会重算。没有写到的列该格留空。
7
+ *
8
+ * @author nokecy
9
+ */
10
+ export type ArrayTableSummary = Record<string, React.ReactNode | ((rows: any[]) => React.ReactNode)>;
11
+ /** 合计行的承载数据;AG-Grid 要求固定行有数据对象才会渲染单元格 */
12
+ export declare const ARRAY_TABLE_SUMMARY_ROW: {
13
+ __arrayTableSummary: boolean;
14
+ }[];
15
+ type SummaryCellParams = {
16
+ colDef?: ColDef;
17
+ getSummary: () => ArrayTableSummary | undefined;
18
+ getRows: () => any[];
19
+ };
20
+ /**
21
+ * 给列定义补上「固定行用合计渲染」的选择器,普通行仍走列原有的渲染器。
22
+ * 用 cellRendererSelector 而不是替换 cellRenderer:列上依赖 cellRenderer 身份的逻辑(懒挂载识别等)不受影响。
23
+ */
24
+ export declare const withSummaryCells: (columns: ColDef[], getSummary: SummaryCellParams['getSummary'], getRows: SummaryCellParams['getRows']) => ColDef[];
25
+ export {};
@@ -0,0 +1,66 @@
1
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
2
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
5
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
6
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
7
+ import React from 'react';
8
+ import { Observer } from '@nokecy/formily-react';
9
+
10
+ /**
11
+ * 合计行(固定在表尾,不随滚动,不参与排序、勾选、序号)。
12
+ * 键是列的 field(ArrayTable.Column 的 dataIndex / 内层字段名),值是固定内容,或由当前全部明细行算出内容的函数;
13
+ * 函数在 Observer 里执行,明细任何字段变化都会重算。没有写到的列该格留空。
14
+ *
15
+ * @author nokecy
16
+ */
17
+ import { jsx as _jsx } from "react/jsx-runtime";
18
+ import { Fragment as _Fragment } from "react/jsx-runtime";
19
+ /** 合计行的承载数据;AG-Grid 要求固定行有数据对象才会渲染单元格 */
20
+ export var ARRAY_TABLE_SUMMARY_ROW = [{
21
+ __arrayTableSummary: true
22
+ }];
23
+ var SummaryCell = function SummaryCell(_ref) {
24
+ var colDef = _ref.colDef,
25
+ getSummary = _ref.getSummary,
26
+ getRows = _ref.getRows;
27
+ var key = colDef === null || colDef === void 0 ? void 0 : colDef.field;
28
+ if (!key) return null;
29
+ return /*#__PURE__*/_jsx(Observer, {
30
+ children: function children() {
31
+ var _getSummary;
32
+ var item = (_getSummary = getSummary()) === null || _getSummary === void 0 ? void 0 : _getSummary[key];
33
+ var content = typeof item === 'function' ? item(getRows()) : item;
34
+ return /*#__PURE__*/_jsx(_Fragment, {
35
+ children: content == null ? null : /*#__PURE__*/_jsx("span", {
36
+ "data-array-table-summary": key,
37
+ children: content
38
+ })
39
+ });
40
+ }
41
+ });
42
+ };
43
+
44
+ /**
45
+ * 给列定义补上「固定行用合计渲染」的选择器,普通行仍走列原有的渲染器。
46
+ * 用 cellRendererSelector 而不是替换 cellRenderer:列上依赖 cellRenderer 身份的逻辑(懒挂载识别等)不受影响。
47
+ */
48
+ export var withSummaryCells = function withSummaryCells(columns, getSummary, getRows) {
49
+ return columns.map(function (col) {
50
+ if (Array.isArray(col.children)) return _objectSpread(_objectSpread({}, col), {}, {
51
+ children: withSummaryCells(col.children, getSummary, getRows)
52
+ });
53
+ return _objectSpread(_objectSpread({}, col), {}, {
54
+ cellRendererSelector: function cellRendererSelector(params) {
55
+ var _params$node, _col$cellRendererSele;
56
+ return (_params$node = params.node) !== null && _params$node !== void 0 && _params$node.rowPinned ? {
57
+ component: SummaryCell,
58
+ params: {
59
+ getSummary: getSummary,
60
+ getRows: getRows
61
+ }
62
+ } : (_col$cellRendererSele = col.cellRendererSelector) === null || _col$cellRendererSele === void 0 ? void 0 : _col$cellRendererSele.call(col, params);
63
+ }
64
+ });
65
+ });
66
+ };