@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.
- package/dist/cjs/ConfirmPro/index.d.ts +12 -9
- package/dist/cjs/ConfirmPro/index.js +11 -34
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +425 -157
- package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +12 -1
- package/dist/cjs/ag-grid-plus/context/queryFormContext.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
- package/dist/cjs/ag-grid-plus/density.d.ts +25 -0
- package/dist/cjs/ag-grid-plus/density.js +52 -0
- package/dist/cjs/ag-grid-plus/index.d.ts +1 -0
- package/dist/cjs/ag-grid-plus/index.js +7 -0
- package/dist/cjs/ag-grid-plus/index.less +43 -0
- package/dist/cjs/ag-grid-plus/interface.d.ts +58 -1
- package/dist/cjs/ag-grid-plus/interface.js +1 -1
- package/dist/cjs/ag-grid-plus/queryForm/index.d.ts +11 -0
- package/dist/cjs/ag-grid-plus/queryForm/index.js +62 -10
- package/dist/cjs/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
- package/dist/cjs/ag-grid-plus/queryForm/queryForm.js +63 -26
- package/dist/cjs/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
- package/dist/cjs/ag-grid-plus/queryForm/queryValues.js +61 -0
- package/dist/cjs/ag-grid-plus/rowColors.d.ts +12 -0
- package/dist/cjs/ag-grid-plus/rowColors.js +58 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +108 -76
- package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
- package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
- package/dist/cjs/ag-grid-plus/setting/autoColumnMemory.js +206 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +19 -1
- package/dist/cjs/ag-grid-plus/setting/index.js +5 -14
- package/dist/cjs/ag-grid-plus/settingItem/index.d.ts +11 -1
- package/dist/cjs/ag-grid-plus/settingItem/index.js +34 -12
- package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
- package/dist/cjs/ag-grid-plus/shared/EmptyIllustration.js +87 -0
- package/dist/cjs/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
- package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
- package/dist/cjs/ag-grid-plus/shared/SkeletonOverlay.js +40 -0
- package/dist/cjs/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
- package/dist/cjs/ag-grid-plus/theme.d.ts +7 -1
- package/dist/cjs/ag-grid-plus/theme.js +31 -6
- package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
- package/dist/cjs/ag-grid-plus/toolBar/OverflowActions.js +128 -0
- package/dist/cjs/ag-grid-plus/toolBar/index.d.ts +3 -1
- package/dist/cjs/ag-grid-plus/toolBar/index.js +43 -35
- package/dist/cjs/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
- package/dist/cjs/ag-grid-plus/toolBar/leftContent.js +2 -2
- package/dist/cjs/ag-grid-plus/toolBar/overflow.d.ts +20 -0
- package/dist/cjs/ag-grid-plus/toolBar/overflow.js +48 -0
- package/dist/cjs/ag-grid-plus/toolBar/style.js +71 -15
- package/dist/cjs/ag-grid-plus/types.d.ts +6 -0
- package/dist/cjs/ag-grid-plus/utils/agGridCompat.js +12 -3
- package/dist/cjs/ag-grid-plus/utils/agGridLicenseNotice.d.ts +7 -0
- package/dist/cjs/ag-grid-plus/utils/agGridLicenseNotice.js +105 -0
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +13 -2
- package/dist/cjs/ag-grid-plus/utils/constants.d.ts +3 -2
- package/dist/cjs/ag-grid-plus/utils/constants.js +3 -2
- package/dist/cjs/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
- package/dist/cjs/ag-grid-plus/utils/crossPageSelection.js +58 -0
- package/dist/cjs/ag-grid-plus/utils/emptyState.d.ts +2 -0
- package/dist/cjs/ag-grid-plus/utils/emptyState.js +9 -5
- package/dist/cjs/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
- package/dist/cjs/ag-grid-plus/utils/listKeyboard.js +83 -0
- package/dist/cjs/ag-grid-plus/utils/pagination.d.ts +26 -0
- package/dist/cjs/ag-grid-plus/utils/pagination.js +69 -0
- package/dist/cjs/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
- package/dist/cjs/ag-grid-plus/utils/queryDispatch.js +17 -0
- package/dist/cjs/ag-grid-plus/utils/statusPill.d.ts +25 -0
- package/dist/cjs/ag-grid-plus/utils/statusPill.js +196 -0
- package/dist/cjs/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
- package/dist/cjs/ag-grid-plus/utils/valueEnumColor.js +13 -9
- package/dist/cjs/ag-grid-plus/utils/valueFormat.d.ts +19 -0
- package/dist/cjs/ag-grid-plus/utils/valueFormat.js +73 -0
- package/dist/cjs/ag-grid-plus/utils.js +3 -2
- package/dist/cjs/array-table/arrayAddBtn.d.ts +1 -0
- package/dist/cjs/array-table/arrayAddBtn.js +2 -2
- package/dist/cjs/array-table/autoHeight.d.ts +18 -0
- package/dist/cjs/array-table/autoHeight.js +30 -0
- package/dist/cjs/array-table/batchRemove.d.ts +2 -2
- package/dist/cjs/array-table/cellEditorMarker.d.ts +18 -0
- package/dist/cjs/array-table/cellEditorMarker.js +92 -0
- package/dist/cjs/array-table/errorLocator.d.ts +29 -0
- package/dist/cjs/array-table/errorLocator.js +101 -0
- package/dist/cjs/array-table/hooks.d.ts +52 -4
- package/dist/cjs/array-table/hooks.js +251 -18
- package/dist/cjs/array-table/index.d.ts +6 -0
- package/dist/cjs/array-table/index.js +167 -23
- package/dist/cjs/array-table/interface.d.ts +22 -0
- package/dist/cjs/array-table/preview.js +39 -5
- package/dist/cjs/array-table/rowFeedback.d.ts +2 -2
- package/dist/cjs/array-table/rowFeedback.js +8 -8
- package/dist/cjs/array-table/summary.d.ts +25 -0
- package/dist/cjs/array-table/summary.js +70 -0
- package/dist/cjs/array-table/theme.d.ts +35 -5
- package/dist/cjs/array-table/theme.js +49 -12
- package/dist/cjs/array-table/title.d.ts +3 -0
- package/dist/cjs/array-table/title.js +29 -0
- package/dist/cjs/array-table/utils.d.ts +2 -1
- package/dist/cjs/array-table/utils.js +94 -23
- package/dist/cjs/card/pro-card/Card/useLegacyItems.d.ts +1 -1
- package/dist/cjs/dateCellEditor/DateCellEditor.d.ts +5 -0
- package/dist/cjs/dateCellEditor/DateCellEditor.js +42 -17
- package/dist/cjs/deleteConfirm/index.d.ts +14 -0
- package/dist/cjs/deleteConfirm/index.js +73 -12
- package/dist/cjs/dialogSelect/index.d.ts +19 -0
- package/dist/cjs/dialogSelect/index.js +189 -15
- package/dist/cjs/dialogSelect/index.less +18 -0
- package/dist/cjs/documentPage/documentPage.d.ts +6 -3
- package/dist/cjs/documentPage/documentPage.js +23 -8
- package/dist/cjs/documentPage/index.d.ts +2 -0
- package/dist/cjs/documentPage/index.js +19 -0
- package/dist/cjs/documentPage/leaveGuard.d.ts +31 -0
- package/dist/cjs/documentPage/leaveGuard.js +91 -0
- package/dist/cjs/draggableModal/index.d.ts +24 -1
- package/dist/cjs/draggableModal/index.js +36 -6
- package/dist/cjs/fullScreenAlert/index.less +10 -10
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/readPretty/arrayTable.js +5 -1
- package/dist/cjs/scanCollect/ScanFeedbackInput.d.ts +26 -0
- package/dist/cjs/scanCollect/ScanFeedbackInput.js +113 -0
- package/dist/cjs/scanCollect/index.d.ts +4 -0
- package/dist/cjs/scanCollect/index.js +14 -0
- package/dist/cjs/scanCollect/scanSound.d.ts +15 -0
- package/dist/cjs/scanCollect/scanSound.js +91 -0
- package/dist/esm/ConfirmPro/index.d.ts +12 -9
- package/dist/esm/ConfirmPro/index.js +11 -34
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +426 -157
- package/dist/esm/ag-grid-plus/context/gridContext.d.ts +12 -1
- package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +2 -0
- package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +8 -0
- package/dist/esm/ag-grid-plus/density.d.ts +25 -0
- package/dist/esm/ag-grid-plus/density.js +45 -0
- package/dist/esm/ag-grid-plus/index.d.ts +1 -0
- package/dist/esm/ag-grid-plus/index.js +3 -0
- package/dist/esm/ag-grid-plus/index.less +43 -0
- package/dist/esm/ag-grid-plus/interface.d.ts +58 -1
- package/dist/esm/ag-grid-plus/interface.js +2 -0
- package/dist/esm/ag-grid-plus/queryForm/index.d.ts +11 -0
- package/dist/esm/ag-grid-plus/queryForm/index.js +62 -10
- package/dist/esm/ag-grid-plus/queryForm/queryForm.d.ts +10 -0
- package/dist/esm/ag-grid-plus/queryForm/queryForm.js +64 -26
- package/dist/esm/ag-grid-plus/queryForm/queryValues.d.ts +9 -0
- package/dist/esm/ag-grid-plus/queryForm/queryValues.js +54 -0
- package/dist/esm/ag-grid-plus/rowColors.d.ts +12 -0
- package/dist/esm/ag-grid-plus/rowColors.js +50 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.d.ts +5 -0
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +14 -5
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +110 -78
- package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +10 -9
- package/dist/esm/ag-grid-plus/setting/autoColumnMemory.d.ts +37 -0
- package/dist/esm/ag-grid-plus/setting/autoColumnMemory.js +198 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.d.ts +2 -0
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +18 -1
- package/dist/esm/ag-grid-plus/setting/index.js +6 -15
- package/dist/esm/ag-grid-plus/settingItem/index.d.ts +11 -1
- package/dist/esm/ag-grid-plus/settingItem/index.js +35 -13
- package/dist/esm/ag-grid-plus/shared/EmptyIllustration.d.ts +16 -0
- package/dist/esm/ag-grid-plus/shared/EmptyIllustration.js +82 -0
- package/dist/esm/ag-grid-plus/shared/NoRowsOverlay.js +9 -1
- package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.d.ts +11 -0
- package/dist/esm/ag-grid-plus/shared/SkeletonOverlay.js +34 -0
- package/dist/esm/ag-grid-plus/shared/storage/schemeStorageAdapter.d.ts +1 -1
- package/dist/esm/ag-grid-plus/theme.d.ts +7 -1
- package/dist/esm/ag-grid-plus/theme.js +31 -6
- package/dist/esm/ag-grid-plus/toolBar/OverflowActions.d.ts +16 -0
- package/dist/esm/ag-grid-plus/toolBar/OverflowActions.js +120 -0
- package/dist/esm/ag-grid-plus/toolBar/index.d.ts +3 -1
- package/dist/esm/ag-grid-plus/toolBar/index.js +43 -35
- package/dist/esm/ag-grid-plus/toolBar/leftContent.d.ts +2 -2
- package/dist/esm/ag-grid-plus/toolBar/leftContent.js +2 -2
- package/dist/esm/ag-grid-plus/toolBar/overflow.d.ts +20 -0
- package/dist/esm/ag-grid-plus/toolBar/overflow.js +41 -0
- package/dist/esm/ag-grid-plus/toolBar/style.js +71 -15
- package/dist/esm/ag-grid-plus/types.d.ts +6 -0
- package/dist/esm/ag-grid-plus/utils/agGridCompat.js +12 -3
- package/dist/esm/ag-grid-plus/utils/agGridLicenseNotice.d.ts +7 -0
- package/dist/esm/ag-grid-plus/utils/agGridLicenseNotice.js +97 -0
- package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +3 -0
- package/dist/esm/ag-grid-plus/utils/columnProcessors.js +14 -3
- package/dist/esm/ag-grid-plus/utils/constants.d.ts +3 -2
- package/dist/esm/ag-grid-plus/utils/constants.js +3 -2
- package/dist/esm/ag-grid-plus/utils/crossPageSelection.d.ts +21 -0
- package/dist/esm/ag-grid-plus/utils/crossPageSelection.js +52 -0
- package/dist/esm/ag-grid-plus/utils/emptyState.d.ts +2 -0
- package/dist/esm/ag-grid-plus/utils/emptyState.js +9 -5
- package/dist/esm/ag-grid-plus/utils/listKeyboard.d.ts +24 -0
- package/dist/esm/ag-grid-plus/utils/listKeyboard.js +77 -0
- package/dist/esm/ag-grid-plus/utils/pagination.d.ts +26 -0
- package/dist/esm/ag-grid-plus/utils/pagination.js +60 -0
- package/dist/esm/ag-grid-plus/utils/queryDispatch.d.ts +7 -0
- package/dist/esm/ag-grid-plus/utils/queryDispatch.js +11 -0
- package/dist/esm/ag-grid-plus/utils/statusPill.d.ts +25 -0
- package/dist/esm/ag-grid-plus/utils/statusPill.js +192 -0
- package/dist/esm/ag-grid-plus/utils/valueEnumColor.d.ts +6 -1
- package/dist/esm/ag-grid-plus/utils/valueEnumColor.js +12 -8
- package/dist/esm/ag-grid-plus/utils/valueFormat.d.ts +19 -0
- package/dist/esm/ag-grid-plus/utils/valueFormat.js +63 -0
- package/dist/esm/ag-grid-plus/utils.js +3 -2
- package/dist/esm/array-table/arrayAddBtn.d.ts +1 -0
- package/dist/esm/array-table/arrayAddBtn.js +1 -1
- package/dist/esm/array-table/autoHeight.d.ts +18 -0
- package/dist/esm/array-table/autoHeight.js +25 -0
- package/dist/esm/array-table/batchRemove.d.ts +2 -2
- package/dist/esm/array-table/cellEditorMarker.d.ts +18 -0
- package/dist/esm/array-table/cellEditorMarker.js +84 -0
- package/dist/esm/array-table/errorLocator.d.ts +29 -0
- package/dist/esm/array-table/errorLocator.js +95 -0
- package/dist/esm/array-table/hooks.d.ts +52 -4
- package/dist/esm/array-table/hooks.js +251 -17
- package/dist/esm/array-table/index.d.ts +6 -0
- package/dist/esm/array-table/index.js +170 -25
- package/dist/esm/array-table/interface.d.ts +22 -0
- package/dist/esm/array-table/preview.js +43 -7
- package/dist/esm/array-table/rowFeedback.d.ts +2 -2
- package/dist/esm/array-table/rowFeedback.js +8 -8
- package/dist/esm/array-table/summary.d.ts +25 -0
- package/dist/esm/array-table/summary.js +66 -0
- package/dist/esm/array-table/theme.d.ts +35 -5
- package/dist/esm/array-table/theme.js +47 -12
- package/dist/esm/array-table/title.d.ts +3 -0
- package/dist/esm/array-table/title.js +24 -0
- package/dist/esm/array-table/utils.d.ts +2 -1
- package/dist/esm/array-table/utils.js +93 -22
- package/dist/esm/card/pro-card/Card/useLegacyItems.d.ts +1 -1
- package/dist/esm/dateCellEditor/DateCellEditor.d.ts +5 -0
- package/dist/esm/dateCellEditor/DateCellEditor.js +42 -17
- package/dist/esm/deleteConfirm/index.d.ts +14 -0
- package/dist/esm/deleteConfirm/index.js +72 -12
- package/dist/esm/dialogSelect/index.d.ts +19 -0
- package/dist/esm/dialogSelect/index.js +190 -16
- package/dist/esm/dialogSelect/index.less +18 -0
- package/dist/esm/documentPage/documentPage.d.ts +6 -3
- package/dist/esm/documentPage/documentPage.js +23 -8
- package/dist/esm/documentPage/index.d.ts +2 -0
- package/dist/esm/documentPage/index.js +1 -0
- package/dist/esm/documentPage/leaveGuard.d.ts +31 -0
- package/dist/esm/documentPage/leaveGuard.js +86 -0
- package/dist/esm/draggableModal/index.d.ts +24 -1
- package/dist/esm/draggableModal/index.js +35 -5
- package/dist/esm/fullScreenAlert/index.less +10 -10
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/readPretty/arrayTable.js +6 -2
- package/dist/esm/scanCollect/ScanFeedbackInput.d.ts +26 -0
- package/dist/esm/scanCollect/ScanFeedbackInput.js +107 -0
- package/dist/esm/scanCollect/index.d.ts +4 -0
- package/dist/esm/scanCollect/index.js +2 -0
- package/dist/esm/scanCollect/scanSound.d.ts +15 -0
- package/dist/esm/scanCollect/scanSound.js +84 -0
- 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 {
|
|
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,
|
|
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,
|
|
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) ?
|
|
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
|
|
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: [
|
|
412
|
-
|
|
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(
|
|
571
|
-
var 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:
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
32
|
+
var title = props.title;
|
|
33
|
+
var grid = /*#__PURE__*/_jsx("div", {
|
|
24
34
|
style: {
|
|
25
|
-
height: height ?
|
|
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:
|
|
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
|
-
|
|
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
|
+
};
|