@nokecy/qc-ui-components 2.0.0-beta.0 → 2.0.0-beta.1
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 +422 -156
- 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.less +36 -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/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 +2 -0
- package/dist/cjs/index.js +15 -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 +423 -156
- 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.less +36 -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/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 +2 -0
- package/dist/esm/index.js +1 -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
|
@@ -20,19 +20,23 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
20
20
|
*
|
|
21
21
|
* @author nokecy
|
|
22
22
|
*/
|
|
23
|
+
import { STATUS_PILL } from "./statusPill";
|
|
23
24
|
import { contrastRatio, darkenUntilContrast, lightenUntilContrast, relativeLuminance } from "../../shared/contrast";
|
|
24
25
|
|
|
25
26
|
/** antd Tag 语义档名。 */
|
|
26
27
|
|
|
27
28
|
var WHITE = '#ffffff';
|
|
28
29
|
|
|
29
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* 语义档名 → 表格文字色,取状态胶囊六态的文字色(statusPill.ts,对各自底色 ≥4.5:1,白底同样达标),
|
|
32
|
+
* 没配 `status` 的枚举与配了 `status` 的列在同一页上色值一致(DESIGN.md §3.2)。
|
|
33
|
+
*/
|
|
30
34
|
export var semanticTextColors = {
|
|
31
|
-
default:
|
|
32
|
-
processing:
|
|
33
|
-
success:
|
|
34
|
-
warning:
|
|
35
|
-
error:
|
|
35
|
+
default: STATUS_PILL.wait.fg,
|
|
36
|
+
processing: STATUS_PILL.running.fg,
|
|
37
|
+
success: STATUS_PILL.done.fg,
|
|
38
|
+
warning: STATUS_PILL.warning.fg,
|
|
39
|
+
error: STATUS_PILL.alarm.fg
|
|
36
40
|
};
|
|
37
41
|
|
|
38
42
|
/** antd Tag 预设名 / 常见 CSS 色名 → 起始 hex,再交给对比度压色。 */
|
|
@@ -62,8 +66,8 @@ var parseHex = function parseHex(color) {
|
|
|
62
66
|
};
|
|
63
67
|
|
|
64
68
|
/** 底色是否为深色表面。 */
|
|
65
|
-
var isDarkSurface = function isDarkSurface(background) {
|
|
66
|
-
return relativeLuminance(background) < 0.18;
|
|
69
|
+
export var isDarkSurface = function isDarkSurface(background) {
|
|
70
|
+
return !!background && !!parseHex(background) && relativeLuminance(background) < 0.18;
|
|
67
71
|
};
|
|
68
72
|
|
|
69
73
|
/**
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 表格数据格式出厂默认(DESIGN.md §7.7):数字千分位、空值 `—`;页面自己写 valueFormatter 即覆盖。
|
|
3
|
+
* @author nokecy
|
|
4
|
+
*/
|
|
5
|
+
export declare const EMPTY_PLACEHOLDER = "\u2014";
|
|
6
|
+
/** 空值统一为 `—`;0 是有效值,原样保留。 */
|
|
7
|
+
export declare const isEmptyValue: (value: unknown) => boolean;
|
|
8
|
+
/**
|
|
9
|
+
* 千分位,只动整数部分,小数位原样保留(字符串数值不经过浮点,不丢精度)。
|
|
10
|
+
* 不是纯数字的值(科学计数法、带单位的文本)原样返回。
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatThousands(value: unknown): string;
|
|
13
|
+
/** 只补空值占位。 */
|
|
14
|
+
export declare function formatEmpty(value: unknown): string;
|
|
15
|
+
/**
|
|
16
|
+
* 给没有自己 valueFormatter 的叶子列补默认格式。已有 valueFormatter、枚举列、日期/布尔列类型一律不动。
|
|
17
|
+
* @param inferredNumber 该列由首行数据推断为数值
|
|
18
|
+
*/
|
|
19
|
+
export declare function withDefaultValueFormat<T extends Record<string, any>>(col: T, inferredNumber: boolean): T;
|
|
@@ -0,0 +1,63 @@
|
|
|
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
|
+
/**
|
|
8
|
+
* 表格数据格式出厂默认(DESIGN.md §7.7):数字千分位、空值 `—`;页面自己写 valueFormatter 即覆盖。
|
|
9
|
+
* @author nokecy
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
export var EMPTY_PLACEHOLDER = '—';
|
|
13
|
+
var PLAIN_NUMBER = /^(-?)(\d+)(\.\d+)?$/;
|
|
14
|
+
|
|
15
|
+
/** 空值统一为 `—`;0 是有效值,原样保留。 */
|
|
16
|
+
export var isEmptyValue = function isEmptyValue(value) {
|
|
17
|
+
return value === null || value === undefined || value === '';
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* 千分位,只动整数部分,小数位原样保留(字符串数值不经过浮点,不丢精度)。
|
|
22
|
+
* 不是纯数字的值(科学计数法、带单位的文本)原样返回。
|
|
23
|
+
*/
|
|
24
|
+
export function formatThousands(value) {
|
|
25
|
+
var _m$;
|
|
26
|
+
if (isEmptyValue(value)) return EMPTY_PLACEHOLDER;
|
|
27
|
+
var text = String(value).trim();
|
|
28
|
+
var m = PLAIN_NUMBER.exec(text);
|
|
29
|
+
if (!m) return String(value);
|
|
30
|
+
return "".concat(m[1]).concat(m[2].replace(/\B(?=(\d{3})+(?!\d))/g, ',')).concat((_m$ = m[3]) !== null && _m$ !== void 0 ? _m$ : '');
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** 只补空值占位。 */
|
|
34
|
+
export function formatEmpty(value) {
|
|
35
|
+
return isEmptyValue(value) ? EMPTY_PLACEHOLDER : String(value);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** 字段名像编码、年份、序号的数值列不加千分位(订单号、年份加逗号是错的)。 */
|
|
39
|
+
var IDENTIFIER_LIKE = /(?:^|[a-z])(?:id|code|no|number|year|seq|sequence|sort|order|index)$/i;
|
|
40
|
+
var EXPLICIT_NUMERIC = new Set(['numericColumn', 'numberColumn']);
|
|
41
|
+
var SKIP_TYPES = new Set(['dateColumn', 'dateTimeColumn', 'bool']);
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 给没有自己 valueFormatter 的叶子列补默认格式。已有 valueFormatter、枚举列、日期/布尔列类型一律不动。
|
|
45
|
+
* @param inferredNumber 该列由首行数据推断为数值
|
|
46
|
+
*/
|
|
47
|
+
export function withDefaultValueFormat(col, inferredNumber) {
|
|
48
|
+
var _col$field;
|
|
49
|
+
if (col.valueFormatter || col.valueEnum) return col;
|
|
50
|
+
var types = (Array.isArray(col.type) ? col.type : [col.type]).filter(Boolean).map(String);
|
|
51
|
+
if (types.some(function (t) {
|
|
52
|
+
return SKIP_TYPES.has(t);
|
|
53
|
+
})) return col;
|
|
54
|
+
var field = String((_col$field = col.field) !== null && _col$field !== void 0 ? _col$field : '');
|
|
55
|
+
var numeric = types.some(function (t) {
|
|
56
|
+
return EXPLICIT_NUMERIC.has(t);
|
|
57
|
+
}) || inferredNumber && !IDENTIFIER_LIKE.test(field);
|
|
58
|
+
return _objectSpread(_objectSpread({}, col), {}, {
|
|
59
|
+
valueFormatter: function valueFormatter(p) {
|
|
60
|
+
return numeric ? formatThousands(p.value) : formatEmpty(p.value);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
@@ -198,10 +198,11 @@ var convertSortModel = function convertSortModel(sortModel) {
|
|
|
198
198
|
return sorter;
|
|
199
199
|
};
|
|
200
200
|
var dateValueFormatter = function dateValueFormatter(params) {
|
|
201
|
-
return params.value ? dayjs(params.value).format("YYYY-MM-DD") : "";
|
|
201
|
+
return params.value ? dayjs(params.value).format("YYYY-MM-DD") : "—";
|
|
202
202
|
};
|
|
203
203
|
var dateTimeValueFormatter = function dateTimeValueFormatter(params) {
|
|
204
|
-
|
|
204
|
+
// 列表到分钟,日志与审计到秒由页面自己传 valueFormatter(DESIGN.md §7.7)
|
|
205
|
+
return params.value ? dayjs(params.value).format("YYYY-MM-DD HH:mm") : "—";
|
|
205
206
|
};
|
|
206
207
|
|
|
207
208
|
//@ts-ignore
|
|
@@ -25,7 +25,7 @@ var getSchemaDefaultValue = function getSchemaDefaultValue(schema) {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
};
|
|
28
|
-
var getDefaultValue = function getDefaultValue(defaultValue, schema) {
|
|
28
|
+
export var getDefaultValue = function getDefaultValue(defaultValue, schema) {
|
|
29
29
|
if (isValid(defaultValue)) return clone(defaultValue);
|
|
30
30
|
if (Array.isArray(schema === null || schema === void 0 ? void 0 : schema.items)) return getSchemaDefaultValue(schema === null || schema === void 0 ? void 0 : schema.items[0]);
|
|
31
31
|
return getSchemaDefaultValue(schema === null || schema === void 0 ? void 0 : schema.items);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** height="auto" 时明细区最多显示的行数,超出后表格内部滚动 */
|
|
2
|
+
export declare const ARRAY_TABLE_AUTO_MAX_ROWS = 10;
|
|
3
|
+
export interface AutoHeightInput {
|
|
4
|
+
rowCount: number;
|
|
5
|
+
rowHeight: number;
|
|
6
|
+
headerHeight: number;
|
|
7
|
+
/** 合计行(固定在底部,占一行高度) */
|
|
8
|
+
hasSummary?: boolean;
|
|
9
|
+
/** 带行内错误文字、被撑高的行数 */
|
|
10
|
+
feedbackRows?: number;
|
|
11
|
+
minRows?: number;
|
|
12
|
+
maxRows?: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* height="auto":按行数算出网格高度,免得空表留大片空白、行少时不必手算像素。
|
|
16
|
+
* AG Grid 的 domLayout=autoHeight 会让合计行与滚动行为失效,这里改为按密度三档的行高直接计算。
|
|
17
|
+
*/
|
|
18
|
+
export declare const calcAutoGridHeight: ({ rowCount, rowHeight, headerHeight, hasSummary, feedbackRows, minRows, maxRows, }: AutoHeightInput) => number;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ROW_FEEDBACK_EXTRA_HEIGHT } from "./rowFeedback";
|
|
2
|
+
|
|
3
|
+
/** height="auto" 时明细区最多显示的行数,超出后表格内部滚动 */
|
|
4
|
+
export var ARRAY_TABLE_AUTO_MAX_ROWS = 10;
|
|
5
|
+
|
|
6
|
+
/** 表格外框上下各 1px 边线 */
|
|
7
|
+
var BORDER = 2;
|
|
8
|
+
/**
|
|
9
|
+
* height="auto":按行数算出网格高度,免得空表留大片空白、行少时不必手算像素。
|
|
10
|
+
* AG Grid 的 domLayout=autoHeight 会让合计行与滚动行为失效,这里改为按密度三档的行高直接计算。
|
|
11
|
+
*/
|
|
12
|
+
export var calcAutoGridHeight = function calcAutoGridHeight(_ref) {
|
|
13
|
+
var rowCount = _ref.rowCount,
|
|
14
|
+
rowHeight = _ref.rowHeight,
|
|
15
|
+
headerHeight = _ref.headerHeight,
|
|
16
|
+
hasSummary = _ref.hasSummary,
|
|
17
|
+
_ref$feedbackRows = _ref.feedbackRows,
|
|
18
|
+
feedbackRows = _ref$feedbackRows === void 0 ? 0 : _ref$feedbackRows,
|
|
19
|
+
_ref$minRows = _ref.minRows,
|
|
20
|
+
minRows = _ref$minRows === void 0 ? 1 : _ref$minRows,
|
|
21
|
+
_ref$maxRows = _ref.maxRows,
|
|
22
|
+
maxRows = _ref$maxRows === void 0 ? ARRAY_TABLE_AUTO_MAX_ROWS : _ref$maxRows;
|
|
23
|
+
var rows = Math.min(Math.max(rowCount, minRows), Math.max(maxRows, minRows));
|
|
24
|
+
return headerHeight + rows * rowHeight + (hasSummary ? rowHeight : 0) + Math.min(feedbackRows, rows) * ROW_FEEDBACK_EXTRA_HEIGHT + BORDER;
|
|
25
|
+
};
|
|
@@ -22,11 +22,11 @@ export declare function findRemovalAction(field: ArrayField, index: number, acti
|
|
|
22
22
|
export declare function removeSelectedRows(field: ArrayField, ids: string[], actions: RemovalAction[], getId: (row: any) => string, onRemove?: (index: number) => void, event?: React.MouseEvent): boolean;
|
|
23
23
|
/** 公共明细表格的勾选及批量删除,沿用业务行权限、行标识与删除通知。@author nokecy */
|
|
24
24
|
export declare function useArrayTableBatchRemove(field: ArrayField, sources: ObservableColumnSource[], props: ArrayTableProps, apiRef: React.MutableRefObject<GridApi | undefined>, getId: (row: any) => string): {
|
|
25
|
-
rowSelection: "
|
|
25
|
+
rowSelection: "single" | "multiple" | import("ag-grid-community/dist/types/src/entities/gridOptions").SingleRowSelectionOptions<any, any> | import("ag-grid-community/dist/types/src/entities/gridOptions").MultiRowSelectionOptions<any, any> | {
|
|
26
26
|
isRowSelectable: (node: IRowNode) => boolean;
|
|
27
27
|
headerCheckbox?: boolean | undefined;
|
|
28
28
|
selectAll?: "filtered" | undefined;
|
|
29
|
-
mode: "
|
|
29
|
+
mode: "multiRow" | "singleRow";
|
|
30
30
|
checkboxes: boolean;
|
|
31
31
|
enableClickSelection: boolean;
|
|
32
32
|
} | undefined;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/** 格内控件的稳定标记值,键盘与浏览器测试按它定位,不依赖 antd 的内部类名。 */
|
|
3
|
+
export type CellEditorKind = 'select' | 'date' | 'number' | 'text';
|
|
4
|
+
/** 按 x-component 判定控件类别;开关、业务自定义组件等不在表内,不打标记(避免误导)。 */
|
|
5
|
+
export declare const resolveCellEditorKind: (component: unknown) => CellEditorKind | undefined;
|
|
6
|
+
/**
|
|
7
|
+
* 面板是否展开:下拉看 antd 的 open 类;日期面板挂在 body 下,只能「控件聚焦且存在可见面板」近似判断。
|
|
8
|
+
* 直接读 DOM 而不进 React 状态,避免每次开合让整格重渲。
|
|
9
|
+
*/
|
|
10
|
+
export declare const isCellEditorOpen: (root: Element, kind: CellEditorKind) => boolean;
|
|
11
|
+
/**
|
|
12
|
+
* 给格内控件加 data-array-cell-editor / data-open 标记。display:contents 不产生盒子,不改变格内布局。
|
|
13
|
+
* 没有类别(不认识的组件)时原样返回子节点。@author nokecy
|
|
14
|
+
*/
|
|
15
|
+
export declare const CellEditorMarker: ({ kind, children }: {
|
|
16
|
+
kind?: CellEditorKind | undefined;
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}) => React.JSX.Element;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import React, { useEffect, useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
/** 格内控件的稳定标记值,键盘与浏览器测试按它定位,不依赖 antd 的内部类名。 */
|
|
4
|
+
import { Fragment as _Fragment } from "react/jsx-runtime";
|
|
5
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
6
|
+
var KIND_BY_COMPONENT = {
|
|
7
|
+
Select: 'select',
|
|
8
|
+
TreeSelect: 'select',
|
|
9
|
+
Cascader: 'select',
|
|
10
|
+
DatePicker: 'date',
|
|
11
|
+
'DatePicker.RangePicker': 'date',
|
|
12
|
+
TimePicker: 'date',
|
|
13
|
+
'TimePicker.RangePicker': 'date',
|
|
14
|
+
InputNumber: 'number',
|
|
15
|
+
NumberPicker: 'number',
|
|
16
|
+
Input: 'text',
|
|
17
|
+
'Input.TextArea': 'text',
|
|
18
|
+
Password: 'text'
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/** 按 x-component 判定控件类别;开关、业务自定义组件等不在表内,不打标记(避免误导)。 */
|
|
22
|
+
export var resolveCellEditorKind = function resolveCellEditorKind(component) {
|
|
23
|
+
return typeof component === 'string' ? KIND_BY_COMPONENT[component] : undefined;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* 面板是否展开:下拉看 antd 的 open 类;日期面板挂在 body 下,只能「控件聚焦且存在可见面板」近似判断。
|
|
28
|
+
* 直接读 DOM 而不进 React 状态,避免每次开合让整格重渲。
|
|
29
|
+
*/
|
|
30
|
+
export var isCellEditorOpen = function isCellEditorOpen(root, kind) {
|
|
31
|
+
if (kind === 'select') return !!root.querySelector('.ant-select-open');
|
|
32
|
+
if (kind === 'date') {
|
|
33
|
+
return !!root.querySelector('.ant-picker-focused') && !!document.querySelector('.ant-picker-dropdown:not(.ant-picker-dropdown-hidden)');
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 给格内控件加 data-array-cell-editor / data-open 标记。display:contents 不产生盒子,不改变格内布局。
|
|
40
|
+
* 没有类别(不认识的组件)时原样返回子节点。@author nokecy
|
|
41
|
+
*/
|
|
42
|
+
export var CellEditorMarker = function CellEditorMarker(_ref) {
|
|
43
|
+
var kind = _ref.kind,
|
|
44
|
+
children = _ref.children;
|
|
45
|
+
var ref = useRef(null);
|
|
46
|
+
useEffect(function () {
|
|
47
|
+
var root = ref.current;
|
|
48
|
+
if (!root || !kind || kind !== 'select' && kind !== 'date') return;
|
|
49
|
+
var sync = function sync() {
|
|
50
|
+
if (isCellEditorOpen(root, kind)) root.setAttribute('data-open', '1');else root.removeAttribute('data-open');
|
|
51
|
+
};
|
|
52
|
+
// 弹层开合发生在 antd 内部,类名变化与聚焦/点击/按键之后下一拍再读一次。
|
|
53
|
+
var later = function later() {
|
|
54
|
+
window.setTimeout(sync, 0);
|
|
55
|
+
};
|
|
56
|
+
var observer = new MutationObserver(sync);
|
|
57
|
+
observer.observe(root, {
|
|
58
|
+
subtree: true,
|
|
59
|
+
attributes: true,
|
|
60
|
+
attributeFilter: ['class']
|
|
61
|
+
});
|
|
62
|
+
var events = ['focusin', 'focusout', 'click', 'keyup'];
|
|
63
|
+
events.forEach(function (name) {
|
|
64
|
+
return root.addEventListener(name, later);
|
|
65
|
+
});
|
|
66
|
+
return function () {
|
|
67
|
+
observer.disconnect();
|
|
68
|
+
events.forEach(function (name) {
|
|
69
|
+
return root.removeEventListener(name, later);
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
}, [kind]);
|
|
73
|
+
if (!kind) return /*#__PURE__*/_jsx(_Fragment, {
|
|
74
|
+
children: children
|
|
75
|
+
});
|
|
76
|
+
return /*#__PURE__*/_jsx("div", {
|
|
77
|
+
ref: ref,
|
|
78
|
+
"data-array-cell-editor": kind,
|
|
79
|
+
style: {
|
|
80
|
+
display: 'contents'
|
|
81
|
+
},
|
|
82
|
+
children: children
|
|
83
|
+
});
|
|
84
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { GridApi } from 'ag-grid-community';
|
|
2
|
+
import type { ErrorLocator } from '@nokecy/formily-antd';
|
|
3
|
+
/** ArrayTable 的一列:AG-Grid 列 id 与它承载的内层数据字段名(Column key 与字段名可能不同,如设计器形态)。 */
|
|
4
|
+
export type ErrorLocatorColumn = {
|
|
5
|
+
colId: string;
|
|
6
|
+
dataName?: string;
|
|
7
|
+
title?: string;
|
|
8
|
+
};
|
|
9
|
+
type Deps = {
|
|
10
|
+
field: any;
|
|
11
|
+
getContainer: () => HTMLElement | null | undefined;
|
|
12
|
+
getApi: () => GridApi | undefined;
|
|
13
|
+
getColumns: () => ErrorLocatorColumn[];
|
|
14
|
+
/** 行数据 -> AG-Grid 行 id(与 getRowId 同一套) */
|
|
15
|
+
getRowId: (row: any) => string;
|
|
16
|
+
focus: (params: {
|
|
17
|
+
rowIndex: number;
|
|
18
|
+
colId: string;
|
|
19
|
+
}) => Promise<HTMLElement | undefined>;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* 提交校验失败时 ArrayTable 的错误定位器(注册到 adapters 的 form-error-focus,见 registerErrorLocator)。
|
|
23
|
+
*
|
|
24
|
+
* 错误格可能不在 DOM 里(行被虚拟化、懒挂载格卸回了文本),按 DOM 找不到,所以按 Formily 的错误列表定位:
|
|
25
|
+
* 取表内最靠前的(先行后列,行按当前显示顺序、列按当前列序),ensureIndexVisible / ensureColumnVisible 滚到位,
|
|
26
|
+
* 再激活该格并聚焦输入。@author nokecy
|
|
27
|
+
*/
|
|
28
|
+
export declare const createArrayTableErrorLocator: (deps: Deps) => ErrorLocator;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,95 @@
|
|
|
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 _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
/** ArrayTable 的一列:AG-Grid 列 id 与它承载的内层数据字段名(Column key 与字段名可能不同,如设计器形态)。 */
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 提交校验失败时 ArrayTable 的错误定位器(注册到 adapters 的 form-error-focus,见 registerErrorLocator)。
|
|
9
|
+
*
|
|
10
|
+
* 错误格可能不在 DOM 里(行被虚拟化、懒挂载格卸回了文本),按 DOM 找不到,所以按 Formily 的错误列表定位:
|
|
11
|
+
* 取表内最靠前的(先行后列,行按当前显示顺序、列按当前列序),ensureIndexVisible / ensureColumnVisible 滚到位,
|
|
12
|
+
* 再激活该格并聚焦输入。@author nokecy
|
|
13
|
+
*/
|
|
14
|
+
export var createArrayTableErrorLocator = function createArrayTableErrorLocator(deps) {
|
|
15
|
+
return function (form, root) {
|
|
16
|
+
var _api$isDestroyed, _api$getAllDisplayedC, _api$getAllDisplayedC2, _first$feedback$messa, _first$feedback$addre;
|
|
17
|
+
var field = deps.field;
|
|
18
|
+
var container = deps.getContainer();
|
|
19
|
+
var api = deps.getApi();
|
|
20
|
+
if (!container || !api || (_api$isDestroyed = api.isDestroyed) !== null && _api$isDestroyed !== void 0 && _api$isDestroyed.call(api) || field.form !== form || !root.contains(container)) return undefined;
|
|
21
|
+
var rows = Array.isArray(field.value) ? field.value : [];
|
|
22
|
+
var baseLength = field.path.length;
|
|
23
|
+
var displayed = ((_api$getAllDisplayedC = (_api$getAllDisplayedC2 = api.getAllDisplayedColumns) === null || _api$getAllDisplayedC2 === void 0 ? void 0 : _api$getAllDisplayedC2.call(api)) !== null && _api$getAllDisplayedC !== void 0 ? _api$getAllDisplayedC : []).map(function (c) {
|
|
24
|
+
return c.getColId();
|
|
25
|
+
});
|
|
26
|
+
var columns = deps.getColumns();
|
|
27
|
+
var candidates = [];
|
|
28
|
+
var _iterator = _createForOfIteratorHelper(form.queryFeedbacks({
|
|
29
|
+
type: 'error',
|
|
30
|
+
address: "".concat(field.address.toString(), ".*")
|
|
31
|
+
})),
|
|
32
|
+
_step;
|
|
33
|
+
try {
|
|
34
|
+
var _loop = function _loop() {
|
|
35
|
+
var _feedback$path, _feedback$address, _columns$find, _api$getRowNode;
|
|
36
|
+
var feedback = _step.value;
|
|
37
|
+
var segments = String((_feedback$path = feedback.path) !== null && _feedback$path !== void 0 ? _feedback$path : '').split('.');
|
|
38
|
+
var dataIndex = Number(segments[baseLength]);
|
|
39
|
+
var row = rows[dataIndex];
|
|
40
|
+
if (!Number.isInteger(dataIndex) || row == null || _typeof(row) !== 'object') return 0; // continue
|
|
41
|
+
var dataName = segments.slice(baseLength + 1).join('.');
|
|
42
|
+
// 地址里含 Column 的 void 段(`items.2.column1.qty`),先按内层字段名匹配,其次按 Column key。
|
|
43
|
+
var addressSegments = String((_feedback$address = feedback.address) !== null && _feedback$address !== void 0 ? _feedback$address : '').split('.');
|
|
44
|
+
var column = (_columns$find = columns.find(function (c) {
|
|
45
|
+
return c.dataName === dataName;
|
|
46
|
+
})) !== null && _columns$find !== void 0 ? _columns$find : columns.find(function (c) {
|
|
47
|
+
return addressSegments.includes(c.colId);
|
|
48
|
+
});
|
|
49
|
+
if (!column) return 0; // continue
|
|
50
|
+
var node = (_api$getRowNode = api.getRowNode) === null || _api$getRowNode === void 0 ? void 0 : _api$getRowNode.call(api, deps.getRowId(row));
|
|
51
|
+
var rowIndex = node === null || node === void 0 ? void 0 : node.rowIndex;
|
|
52
|
+
// 行被过滤掉了(不在显示列表里)无法定位。
|
|
53
|
+
if (typeof rowIndex !== 'number') return 0; // continue
|
|
54
|
+
var colOrder = displayed.indexOf(column.colId);
|
|
55
|
+
candidates.push({
|
|
56
|
+
rowOrder: rowIndex,
|
|
57
|
+
colOrder: colOrder < 0 ? Number.MAX_SAFE_INTEGER : colOrder,
|
|
58
|
+
rowIndex: rowIndex,
|
|
59
|
+
colId: column.colId,
|
|
60
|
+
feedback: feedback,
|
|
61
|
+
title: column.title
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
_ret;
|
|
65
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
66
|
+
_ret = _loop();
|
|
67
|
+
if (_ret === 0) continue;
|
|
68
|
+
}
|
|
69
|
+
} catch (err) {
|
|
70
|
+
_iterator.e(err);
|
|
71
|
+
} finally {
|
|
72
|
+
_iterator.f();
|
|
73
|
+
}
|
|
74
|
+
if (candidates.length === 0) return undefined;
|
|
75
|
+
candidates.sort(function (a, b) {
|
|
76
|
+
return a.rowOrder - b.rowOrder || a.colOrder - b.colOrder;
|
|
77
|
+
});
|
|
78
|
+
var first = candidates[0];
|
|
79
|
+
var reason = (_first$feedback$messa = first.feedback.messages) === null || _first$feedback$messa === void 0 ? void 0 : _first$feedback$messa[0];
|
|
80
|
+
var location = {
|
|
81
|
+
container: container,
|
|
82
|
+
addressPrefix: field.address.toString(),
|
|
83
|
+
address: (_first$feedback$addre = first.feedback.address) === null || _first$feedback$addre === void 0 ? void 0 : _first$feedback$addre.toString(),
|
|
84
|
+
title: first.title,
|
|
85
|
+
reason: typeof reason === 'string' ? reason : undefined,
|
|
86
|
+
reveal: function reveal() {
|
|
87
|
+
return deps.focus({
|
|
88
|
+
rowIndex: first.rowIndex,
|
|
89
|
+
colId: first.colId
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
return location;
|
|
94
|
+
};
|
|
95
|
+
};
|
|
@@ -7,16 +7,23 @@ type CellFocusRequest = {
|
|
|
7
7
|
};
|
|
8
8
|
type BeginCellFocusRequest = (resolveCell: () => Element | null | undefined, isTargetCurrent?: () => boolean) => CellFocusRequest;
|
|
9
9
|
/** 单元格聚焦;已获得焦点的控件保留用户光标,等待挂载的请求可被新操作取消。@author nokecy */
|
|
10
|
-
export
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
export type CellFocusSource = 'keyboard' | 'pointer' | 'pointer-activated';
|
|
11
|
+
/**
|
|
12
|
+
* @param options.openDateOnKeyboard 键盘到达日期格时是否自动展开面板,默认 false:与演示一致——
|
|
13
|
+
* 鼠标点击由 antd 自己展开,键盘到达保持收起、直接键入覆盖。传 true 才在键盘落焦那一次展开。
|
|
14
|
+
*/
|
|
15
|
+
export declare const useCellFocus: (options?: {
|
|
16
|
+
openDateOnKeyboard?: boolean | undefined;
|
|
17
|
+
}) => {
|
|
18
|
+
focusInputInCell: (cell: Element, isTargetCurrent?: () => boolean, source?: CellFocusSource) => void;
|
|
19
|
+
scheduleCellFocus: (resolveCell: () => Element | null | undefined, delay: number, isTargetCurrent?: () => boolean, source?: CellFocusSource) => void;
|
|
13
20
|
beginFocusRequest: BeginCellFocusRequest;
|
|
14
21
|
};
|
|
15
22
|
/**
|
|
16
23
|
* 键盘导航 Hook
|
|
17
24
|
* 处理方向键在表格单元格间的导航
|
|
18
25
|
*/
|
|
19
|
-
export declare const useKeyboardNavigation: (ref: RefObject<any>, dataSource: any[], focusInputInCell: (cell: Element, isTargetCurrent?: () => boolean) => void, activateCell?: ((api: GridApi, node: any, colId: string) => boolean) | undefined, beginSharedFocusRequest?: BeginCellFocusRequest) => {
|
|
26
|
+
export declare const useKeyboardNavigation: (ref: RefObject<any>, dataSource: any[], focusInputInCell: (cell: Element, isTargetCurrent?: () => boolean, source?: CellFocusSource) => void, activateCell?: ((api: GridApi, node: any, colId: string) => boolean) | undefined, beginSharedFocusRequest?: BeginCellFocusRequest, isTabFocusDeferred?: () => boolean) => {
|
|
20
27
|
handleCellKeyDown: (event: any) => void;
|
|
21
28
|
};
|
|
22
29
|
/**
|
|
@@ -43,4 +50,45 @@ export declare const isNativeInputKey: (event: KeyboardEvent) => boolean;
|
|
|
43
50
|
export declare const suppressNativeInputKeys: ({ event }: {
|
|
44
51
|
event: KeyboardEvent;
|
|
45
52
|
}) => boolean;
|
|
53
|
+
type GridCellFocusParams = {
|
|
54
|
+
api: GridApi;
|
|
55
|
+
root: RefObject<HTMLElement | null | undefined>;
|
|
56
|
+
rowIndex: number;
|
|
57
|
+
colId: string;
|
|
58
|
+
beginFocusRequest: BeginCellFocusRequest;
|
|
59
|
+
focusInputInCell: (cell: Element, isTargetCurrent?: () => boolean, source?: CellFocusSource) => void;
|
|
60
|
+
activateCell?: (api: GridApi, node: any, colId: string) => boolean;
|
|
61
|
+
/** 列不在可视区时也滚到可见(横向滚动),错误定位用 */
|
|
62
|
+
ensureColumnVisible?: boolean;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* 行已在行模型里:滚到可见、设焦点格、必要时激活懒挂载格,等格子渲染出来后把焦点落进输入控件。
|
|
66
|
+
* 行进入模型后 DOM 还要再渲染一拍(懒挂载格还要挂载),所以分多次轮询,直到格子出现;
|
|
67
|
+
* 返回的 Promise 在落焦完成(返回获得焦点的控件)、或请求被用户操作取消 / 超时(返回 undefined)时结束。@author nokecy
|
|
68
|
+
*/
|
|
69
|
+
export declare const focusGridCell: (params: GridCellFocusParams) => Promise<HTMLElement | undefined>;
|
|
70
|
+
export type PendingAddedRowFocus = {
|
|
71
|
+
rowId: string;
|
|
72
|
+
colId: string;
|
|
73
|
+
};
|
|
74
|
+
/**
|
|
75
|
+
* 新增行进入 AG-Grid 行模型之后,把焦点落到它的首个可编辑格。
|
|
76
|
+
*
|
|
77
|
+
* 新行是 field.push 之后经 React 重渲、rowData 更新才进入行模型的,push 当下 getDisplayedRowAtIndex 还取不到它,
|
|
78
|
+
* 所以由 onRowDataUpdated 调用本函数;行模型里还没有该行时返回 false,调用方保留待办等下一次。@author nokecy
|
|
79
|
+
*/
|
|
80
|
+
export declare const focusAddedRow: (params: Omit<GridCellFocusParams, "colId" | "rowIndex"> & {
|
|
81
|
+
pending: PendingAddedRowFocus;
|
|
82
|
+
}) => boolean;
|
|
83
|
+
/**
|
|
84
|
+
* AG-Grid `tabToNextCell`:跳过序号列/勾选列;末行末格再按 Tab 时,传了 `onTabPastEnd` 就由它新增一行并落焦,
|
|
85
|
+
* 否则保持默认(焦点离开表格)。返回值语义见 AG-Grid:位置=去那格,true=留在原格,false=交浏览器。@author nokecy
|
|
86
|
+
*/
|
|
87
|
+
export declare const createTabToNextCell: (onTabPastEnd?: () => void) => (params: any) => any;
|
|
88
|
+
/**
|
|
89
|
+
* Esc 放弃本格修改(规范 §7.6.3):Formily 受控值是实时写入的,没有「进入时的值」,
|
|
90
|
+
* 所以在输入框获得焦点时记下当时的文本,Esc 时用原生 setter + input 事件写回,值照常经 Formily 回流。
|
|
91
|
+
* 下拉/日期等自带 Esc 语义的控件不处理。@author nokecy
|
|
92
|
+
*/
|
|
93
|
+
export declare const useCellEscapeRevert: (ref: RefObject<HTMLElement | null | undefined>) => void;
|
|
46
94
|
export {};
|