@nokecy/qc-ui 1.1.38 → 1.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/adapters/abpPagedApiAdapter.d.ts +8 -0
- package/dist/cjs/adapters/abpPagedApiAdapter.js +35 -0
- package/dist/cjs/adapters/index.d.ts +6 -0
- package/dist/cjs/adapters/index.js +12 -0
- package/dist/cjs/adapters/pagedApiAdapter.d.ts +25 -0
- package/dist/cjs/adapters/pagedApiAdapter.js +5 -0
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +81 -222
- package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +3 -0
- package/dist/cjs/ag-grid-plus/context/queryFormContext.d.ts +20 -0
- package/dist/cjs/ag-grid-plus/context/queryFormContext.js +25 -0
- package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +37 -1
- package/dist/cjs/ag-grid-plus/context/useSchemeManager.js +120 -79
- package/dist/cjs/ag-grid-plus/errors/ErrorBoundary.d.ts +1 -1
- package/dist/cjs/ag-grid-plus/hooks/index.d.ts +1 -3
- package/dist/cjs/ag-grid-plus/hooks/index.js +7 -39
- package/dist/cjs/ag-grid-plus/hooks/useRowId.d.ts +13 -0
- package/dist/cjs/ag-grid-plus/hooks/useRowId.js +57 -0
- package/dist/cjs/ag-grid-plus/interface.d.ts +9 -0
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +52 -36
- package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +6 -6
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +16 -6
- package/dist/cjs/ag-grid-plus/types.d.ts +9 -0
- package/dist/cjs/ag-grid-plus/utils/aggregation.d.ts +17 -0
- package/dist/cjs/ag-grid-plus/utils/aggregation.js +101 -0
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +2 -2
- package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.d.ts +12 -3
- package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.js +20 -5
- package/dist/cjs/ag-grid-plus/utils/queryFormDerivation.d.ts +19 -0
- package/dist/cjs/ag-grid-plus/utils/queryFormDerivation.js +49 -0
- package/dist/cjs/ag-grid-plus/utils/requestParams.d.ts +15 -0
- package/dist/cjs/ag-grid-plus/utils/requestParams.js +31 -0
- package/dist/cjs/ag-grid-plus/utils/rowSelection.d.ts +9 -0
- package/dist/cjs/ag-grid-plus/utils/rowSelection.js +24 -0
- package/dist/cjs/ag-grid-plus/utils.js +2 -2
- package/dist/cjs/array-table/arrayAddBtn.js +26 -17
- package/dist/cjs/array-table/arrayBase.js +2 -0
- package/dist/cjs/array-table/hooks.d.ts +2 -1
- package/dist/cjs/array-table/hooks.js +23 -43
- package/dist/cjs/array-table/index.js +105 -25
- package/dist/cjs/array-table/preview.js +1 -1
- package/dist/cjs/array-table/readOnlyFormatters.d.ts +28 -0
- package/dist/cjs/array-table/readOnlyFormatters.js +113 -0
- package/dist/cjs/array-table/utils.d.ts +2 -2
- package/dist/cjs/array-table/utils.js +180 -11
- package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.js +2 -3
- package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.js +1 -0
- package/dist/cjs/components/RegexEditor/validation/types.d.ts +1 -3
- package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -2
- package/dist/cjs/dashboard/dashboard/index.js +8 -11
- package/dist/cjs/dashboard/dashboard/utils.js +3 -6
- package/dist/cjs/dashboard/widget/index.js +3 -3
- package/dist/cjs/dashboard/widget/selector/index.js +5 -7
- package/dist/cjs/dashboard/widget/utils.js +3 -4
- package/dist/cjs/dialogSelect/index.d.ts +3 -0
- package/dist/cjs/dialogSelect/index.js +16 -13
- package/dist/cjs/editable/index.js +3 -1
- package/dist/cjs/formDesigner/FormDesigner.js +3 -2
- package/dist/cjs/formDesigner/preWidgets/index.d.ts +1 -10
- package/dist/cjs/formDesigner/preWidgets/index.js +1 -100
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty.d.ts +11 -0
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty.js +70 -0
- package/dist/cjs/generatedListPage/GeneratedListPage.js +20 -19
- package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
- package/dist/cjs/generatedListPage/_utils/toAbpPagedRequest.js +26 -0
- package/dist/cjs/generatedListPage/types.d.ts +3 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +57 -0
- package/dist/cjs/standardFormDialog/types.d.ts +7 -0
- package/dist/cjs/standardFormDialog/useStandardFormSchema.d.ts +1 -1
- package/dist/cjs/standardFormDialog/withStandardForm.js +5 -4
- package/dist/esm/adapters/abpPagedApiAdapter.d.ts +8 -0
- package/dist/esm/adapters/abpPagedApiAdapter.js +29 -0
- package/dist/esm/adapters/index.d.ts +6 -0
- package/dist/esm/adapters/index.js +6 -0
- package/dist/esm/adapters/pagedApiAdapter.d.ts +25 -0
- package/dist/esm/adapters/pagedApiAdapter.js +1 -0
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +79 -220
- package/dist/esm/ag-grid-plus/context/gridContext.d.ts +3 -0
- package/dist/esm/ag-grid-plus/context/queryFormContext.d.ts +20 -0
- package/dist/esm/ag-grid-plus/context/queryFormContext.js +19 -0
- package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +37 -1
- package/dist/esm/ag-grid-plus/context/useSchemeManager.js +120 -79
- package/dist/esm/ag-grid-plus/hooks/index.d.ts +1 -3
- package/dist/esm/ag-grid-plus/hooks/index.js +2 -6
- package/dist/esm/ag-grid-plus/hooks/useRowId.d.ts +13 -0
- package/dist/esm/ag-grid-plus/hooks/useRowId.js +52 -0
- package/dist/esm/ag-grid-plus/interface.d.ts +9 -0
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +52 -36
- package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +6 -6
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +20 -6
- package/dist/esm/ag-grid-plus/types.d.ts +9 -0
- package/dist/esm/ag-grid-plus/utils/aggregation.d.ts +17 -0
- package/dist/esm/ag-grid-plus/utils/aggregation.js +93 -0
- package/dist/esm/ag-grid-plus/utils/columnProcessors.js +2 -2
- package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.d.ts +12 -3
- package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.js +20 -5
- package/dist/esm/ag-grid-plus/utils/queryFormDerivation.d.ts +19 -0
- package/dist/esm/ag-grid-plus/utils/queryFormDerivation.js +42 -0
- package/dist/esm/ag-grid-plus/utils/requestParams.d.ts +15 -0
- package/dist/esm/ag-grid-plus/utils/requestParams.js +24 -0
- package/dist/esm/ag-grid-plus/utils/rowSelection.d.ts +9 -0
- package/dist/esm/ag-grid-plus/utils/rowSelection.js +18 -0
- package/dist/esm/ag-grid-plus/utils.js +2 -2
- package/dist/esm/array-table/arrayAddBtn.js +26 -17
- package/dist/esm/array-table/arrayBase.js +2 -0
- package/dist/esm/array-table/hooks.d.ts +2 -1
- package/dist/esm/array-table/hooks.js +23 -43
- package/dist/esm/array-table/index.js +107 -27
- package/dist/esm/array-table/preview.js +2 -2
- package/dist/esm/array-table/readOnlyFormatters.d.ts +28 -0
- package/dist/esm/array-table/readOnlyFormatters.js +107 -0
- package/dist/esm/array-table/utils.d.ts +2 -2
- package/dist/esm/array-table/utils.js +180 -11
- package/dist/esm/components/RegexEditor/hooks/useRegexValidation.js +2 -2
- package/dist/esm/components/RegexEditor/hooks/useTemplateManager.js +1 -0
- package/dist/esm/components/RegexEditor/validation/types.d.ts +0 -1
- package/dist/esm/components/RegexEditor/visualizer/astToRailroad.d.ts +0 -1
- package/dist/esm/dashboard/dashboard/index.js +8 -11
- package/dist/esm/dashboard/dashboard/utils.js +3 -2
- package/dist/esm/dashboard/widget/index.js +3 -3
- package/dist/esm/dashboard/widget/selector/index.js +5 -7
- package/dist/esm/dashboard/widget/utils.js +3 -3
- package/dist/esm/dialogSelect/index.d.ts +3 -0
- package/dist/esm/dialogSelect/index.js +16 -13
- package/dist/esm/editable/index.js +3 -1
- package/dist/esm/formDesigner/FormDesigner.js +3 -2
- package/dist/esm/formDesigner/preWidgets/index.d.ts +1 -10
- package/dist/esm/formDesigner/preWidgets/index.js +1 -10
- package/dist/esm/formDesigner/preWidgets/preDefineProperty.d.ts +11 -0
- package/dist/esm/formDesigner/preWidgets/{preDefineProperty1/preview.js → preDefineProperty.js} +49 -30
- package/dist/esm/generatedListPage/GeneratedListPage.js +20 -19
- package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.d.ts +15 -0
- package/dist/esm/generatedListPage/_utils/toAbpPagedRequest.js +20 -0
- package/dist/esm/generatedListPage/types.d.ts +3 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/standardFormDialog/types.d.ts +7 -0
- package/dist/esm/standardFormDialog/withStandardForm.js +5 -4
- package/dist/umd/qc-ui.min.css +1 -1
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +52 -13
- package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
- package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.js +0 -224
- package/dist/cjs/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
- package/dist/cjs/ag-grid-plus/hooks/useAgGridData.js +0 -230
- package/dist/cjs/ag-grid-plus/hooks/useGridState.d.ts +0 -153
- package/dist/cjs/ag-grid-plus/hooks/useGridState.js +0 -258
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty1/preview.js +0 -51
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty10/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty2/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty3/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty4/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty5/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty6/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty7/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty8/preview.js +0 -50
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/index.d.ts +0 -1
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/index.js +0 -16
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/preview.d.ts +0 -5
- package/dist/cjs/formDesigner/preWidgets/preDefineProperty9/preview.js +0 -50
- package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.d.ts +0 -88
- package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.js +0 -217
- package/dist/esm/ag-grid-plus/hooks/useAgGridData.d.ts +0 -91
- package/dist/esm/ag-grid-plus/hooks/useAgGridData.js +0 -225
- package/dist/esm/ag-grid-plus/hooks/useGridState.d.ts +0 -153
- package/dist/esm/ag-grid-plus/hooks/useGridState.js +0 -258
- package/dist/esm/formDesigner/preWidgets/preDefineProperty1/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty1/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty1/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty10/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty10/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty10/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty10/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty2/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty2/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty2/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty2/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty3/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty3/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty3/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty3/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty4/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty4/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty4/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty4/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty5/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty5/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty5/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty5/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty6/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty6/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty6/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty6/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty7/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty7/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty7/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty7/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty8/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty8/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty8/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty8/preview.js +0 -43
- package/dist/esm/formDesigner/preWidgets/preDefineProperty9/index.d.ts +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty9/index.js +0 -1
- package/dist/esm/formDesigner/preWidgets/preDefineProperty9/preview.d.ts +0 -5
- package/dist/esm/formDesigner/preWidgets/preDefineProperty9/preview.js +0 -43
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { QueryFilterState, ExtendedColDef } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* 请求参数构建纯函数(从 ag-gridPlus.tsx onRequest 抽出,行为原样)。
|
|
4
|
+
* @author nokecy
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 根据查询模式构建过滤字符串:
|
|
8
|
+
* - 高级模式(__advancedMode__ 且有 __rules__):走规则转换 convertRulesToFilterString。
|
|
9
|
+
* - 简单模式:走 convertFilterModel。
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildFilterString(queryFilter: QueryFilterState, columnDefs: ExtendedColDef[]): string;
|
|
12
|
+
/**
|
|
13
|
+
* 页码 → ABP skipCount。第 1 页为 0,其余为 (current-1)*pageSize。
|
|
14
|
+
*/
|
|
15
|
+
export declare function pageToSkipCount(current: number, pageSize: number): number;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.buildFilterString = buildFilterString;
|
|
7
|
+
exports.pageToSkipCount = pageToSkipCount;
|
|
8
|
+
var _utils = require("../utils");
|
|
9
|
+
/**
|
|
10
|
+
* 请求参数构建纯函数(从 ag-gridPlus.tsx onRequest 抽出,行为原样)。
|
|
11
|
+
* @author nokecy
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* 根据查询模式构建过滤字符串:
|
|
16
|
+
* - 高级模式(__advancedMode__ 且有 __rules__):走规则转换 convertRulesToFilterString。
|
|
17
|
+
* - 简单模式:走 convertFilterModel。
|
|
18
|
+
*/
|
|
19
|
+
function buildFilterString(queryFilter, columnDefs) {
|
|
20
|
+
if (queryFilter.__advancedMode__ && queryFilter.__rules__) {
|
|
21
|
+
return (0, _utils.convertRulesToFilterString)(queryFilter.__rules__, columnDefs);
|
|
22
|
+
}
|
|
23
|
+
return (0, _utils.convertFilterModel)(queryFilter, columnDefs);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* 页码 → ABP skipCount。第 1 页为 0,其余为 (current-1)*pageSize。
|
|
28
|
+
*/
|
|
29
|
+
function pageToSkipCount(current, pageSize) {
|
|
30
|
+
return current === 1 ? 0 : (current - 1) * pageSize;
|
|
31
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 行选择纯逻辑(从 ag-gridPlus.tsx 抽出,行为原样)。
|
|
3
|
+
* @author nokecy
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 只保留「既被选中、又在当前显示行中」的行(按 getId 计算的行 ID 比对)。
|
|
7
|
+
* id 为空(falsy)的行不计入匹配。
|
|
8
|
+
*/
|
|
9
|
+
export declare function filterVisibleSelectedRows<T>(selectedRows: T[], displayedRows: T[], getId: (row: T) => string): T[];
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.filterVisibleSelectedRows = filterVisibleSelectedRows;
|
|
7
|
+
/**
|
|
8
|
+
* 行选择纯逻辑(从 ag-gridPlus.tsx 抽出,行为原样)。
|
|
9
|
+
* @author nokecy
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 只保留「既被选中、又在当前显示行中」的行(按 getId 计算的行 ID 比对)。
|
|
14
|
+
* id 为空(falsy)的行不计入匹配。
|
|
15
|
+
*/
|
|
16
|
+
function filterVisibleSelectedRows(selectedRows, displayedRows, getId) {
|
|
17
|
+
return selectedRows.filter(function (selectedRow) {
|
|
18
|
+
return displayedRows.some(function (displayedRow) {
|
|
19
|
+
var selectedRowId = getId(selectedRow);
|
|
20
|
+
var displayedRowId = getId(displayedRow);
|
|
21
|
+
return selectedRowId && displayedRowId && selectedRowId === displayedRowId;
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
@@ -5,8 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.toTree = exports.flattenTreeDeep = exports.flatten = exports.dateValueFormatter = exports.dateTimeValueFormatter = exports.convertSortModel = exports.convertRulesToFilterString = exports.convertFilterModel = void 0;
|
|
8
|
-
var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep"));
|
|
9
8
|
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
9
|
+
var _lodash = require("lodash");
|
|
10
10
|
var _gridifyClient = require("gridify-client");
|
|
11
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
12
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
@@ -255,7 +255,7 @@ var flattenTreeDeep = exports.flattenTreeDeep = function flattenTreeDeep(treeDat
|
|
|
255
255
|
});
|
|
256
256
|
return res;
|
|
257
257
|
};
|
|
258
|
-
var data = (0,
|
|
258
|
+
var data = (0, _lodash.cloneDeep)(treeData);
|
|
259
259
|
var res = [];
|
|
260
260
|
flattenData(data, res, null, childrenName);
|
|
261
261
|
return res;
|
|
@@ -11,8 +11,11 @@ var _builtins__ = require("@formily/antd-v5/lib/__builtins__");
|
|
|
11
11
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
12
12
|
var _icons = require("@ant-design/icons");
|
|
13
13
|
var _shared = require("@formily/shared");
|
|
14
|
+
var _excluded = ["arrayField", "schema", "method", "defaultValue", "onAdd", "title", "icon", "className", "onClick"];
|
|
14
15
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
16
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
17
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
18
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
16
19
|
var getSchemaDefaultValue = function getSchemaDefaultValue(schema) {
|
|
17
20
|
if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'array') return [];
|
|
18
21
|
if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'object') return {};
|
|
@@ -30,34 +33,40 @@ var getDefaultValue = function getDefaultValue(defaultValue, schema) {
|
|
|
30
33
|
};
|
|
31
34
|
var ArrayAddBtn = function ArrayAddBtn(props) {
|
|
32
35
|
var self = (0, _react2.useField)();
|
|
36
|
+
// 解构出所有非 DOM 属性,只把 rest 透传给 Button,避免 arrayField/schema/method 等漏到 DOM 触发 React 警告。@author nokecy
|
|
33
37
|
var arrayField = props.arrayField,
|
|
34
|
-
schema = props.schema
|
|
38
|
+
schema = props.schema,
|
|
39
|
+
method = props.method,
|
|
40
|
+
defaultValue = props.defaultValue,
|
|
41
|
+
onAdd = props.onAdd,
|
|
42
|
+
title = props.title,
|
|
43
|
+
icon = props.icon,
|
|
44
|
+
className = props.className,
|
|
45
|
+
_onClick = props.onClick,
|
|
46
|
+
rest = _objectWithoutProperties(props, _excluded);
|
|
35
47
|
var prefixCls = (0, _builtins__.usePrefixCls)("formily-array-base");
|
|
36
48
|
if (!arrayField) return null;
|
|
37
49
|
if (arrayField.pattern !== "editable" && arrayField.pattern !== "disabled") return null;
|
|
38
50
|
return /*#__PURE__*/_react.default.createElement(_antd.Button, _extends({
|
|
39
51
|
type: "primary"
|
|
40
|
-
},
|
|
52
|
+
}, rest, {
|
|
41
53
|
disabled: self === null || self === void 0 ? void 0 : self.disabled,
|
|
42
|
-
className: (0, _classnames.default)("".concat(prefixCls, "-addition"),
|
|
54
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-addition"), className),
|
|
43
55
|
onClick: function onClick(e) {
|
|
44
56
|
if (arrayField !== null && arrayField !== void 0 && arrayField.disabled) return;
|
|
45
|
-
var
|
|
46
|
-
if (
|
|
47
|
-
var _arrayField$unshift
|
|
48
|
-
(_arrayField$unshift = arrayField.unshift) === null || _arrayField$unshift === void 0 || _arrayField$unshift.call(arrayField,
|
|
49
|
-
|
|
57
|
+
var dv = getDefaultValue(defaultValue, schema);
|
|
58
|
+
if (method === "unshift") {
|
|
59
|
+
var _arrayField$unshift;
|
|
60
|
+
(_arrayField$unshift = arrayField.unshift) === null || _arrayField$unshift === void 0 || _arrayField$unshift.call(arrayField, dv);
|
|
61
|
+
onAdd === null || onAdd === void 0 || onAdd(0);
|
|
50
62
|
} else {
|
|
51
|
-
var _arrayField$push,
|
|
52
|
-
(_arrayField$push = arrayField.push) === null || _arrayField$push === void 0 || _arrayField$push.call(arrayField,
|
|
53
|
-
|
|
54
|
-
}
|
|
55
|
-
if (props.onClick) {
|
|
56
|
-
//@ts-ignore
|
|
57
|
-
props.onClick(e);
|
|
63
|
+
var _arrayField$push, _arrayField$value;
|
|
64
|
+
(_arrayField$push = arrayField.push) === null || _arrayField$push === void 0 || _arrayField$push.call(arrayField, dv);
|
|
65
|
+
onAdd === null || onAdd === void 0 || onAdd((arrayField === null || arrayField === void 0 || (_arrayField$value = arrayField.value) === null || _arrayField$value === void 0 ? void 0 : _arrayField$value.length) - 1);
|
|
58
66
|
}
|
|
67
|
+
_onClick === null || _onClick === void 0 || _onClick(e);
|
|
59
68
|
},
|
|
60
|
-
icon: (0, _shared.isUndef)(
|
|
61
|
-
}),
|
|
69
|
+
icon: (0, _shared.isUndef)(icon) ? /*#__PURE__*/_react.default.createElement(_icons.PlusOutlined, null) : icon
|
|
70
|
+
}), title || self.title);
|
|
62
71
|
};
|
|
63
72
|
var _default = exports.default = ArrayAddBtn;
|
|
@@ -60,7 +60,9 @@ ArrayBase.Item = function (_ref) {
|
|
|
60
60
|
}, children);
|
|
61
61
|
};
|
|
62
62
|
ArrayBase.Index = function (props) {
|
|
63
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks -- Formily 复合组件,ArrayBase.Index 实为函数组件,误报
|
|
63
64
|
var index = useIndex();
|
|
65
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks -- 同上
|
|
64
66
|
var prefixCls = (0, _builtins__.usePrefixCls)('formily-array-base');
|
|
65
67
|
return /*#__PURE__*/_react.default.createElement("span", _extends({}, props, {
|
|
66
68
|
className: "".concat(prefixCls, "-index")
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { RefObject } from 'react';
|
|
2
|
+
import { GridApi } from 'ag-grid-community';
|
|
2
3
|
import { ArrayField } from '@formily/core';
|
|
3
4
|
/**
|
|
4
5
|
* 单元格聚焦 Hook
|
|
@@ -11,7 +12,7 @@ export declare const useCellFocus: () => {
|
|
|
11
12
|
* 键盘导航 Hook
|
|
12
13
|
* 处理方向键在表格单元格间的导航
|
|
13
14
|
*/
|
|
14
|
-
export declare const useKeyboardNavigation: (ref: RefObject<any>, dataSource: any[], focusInputInCell: (cell: Element) => void) => {
|
|
15
|
+
export declare const useKeyboardNavigation: (ref: RefObject<any>, dataSource: any[], focusInputInCell: (cell: Element) => void, activateCell?: ((api: GridApi, node: any, colId: string) => boolean) | undefined) => {
|
|
15
16
|
handleCellKeyDown: (event: any) => void;
|
|
16
17
|
};
|
|
17
18
|
/**
|
|
@@ -5,9 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.useRowDrag = exports.useKeyboardNavigation = exports.useCellFocus = void 0;
|
|
7
7
|
var _react = require("react");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
// setSelectionRange 仅 textarea 与 text/search/url/tel/password 类型 input 支持;
|
|
9
|
+
// checkbox/number/date 等调用会抛 InvalidStateError,故用白名单守卫。@author nokecy
|
|
10
|
+
var supportsSelectionRange = function supportsSelectionRange(el) {
|
|
11
|
+
return el.tagName === 'TEXTAREA' || /^(text|search|url|tel|password)$/i.test(el.type || 'text');
|
|
12
|
+
};
|
|
13
|
+
|
|
11
14
|
/**
|
|
12
15
|
* 单元格聚焦 Hook
|
|
13
16
|
* 处理 Editable 包装和普通输入框的聚焦逻辑
|
|
@@ -24,7 +27,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
|
|
|
24
27
|
var existingInput = editableElement.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
|
|
25
28
|
if (existingInput) {
|
|
26
29
|
existingInput.focus();
|
|
27
|
-
if (
|
|
30
|
+
if (supportsSelectionRange(existingInput)) {
|
|
28
31
|
var _existingInput$value;
|
|
29
32
|
var length = ((_existingInput$value = existingInput.value) === null || _existingInput$value === void 0 ? void 0 : _existingInput$value.length) || 0;
|
|
30
33
|
setTimeout(function () {
|
|
@@ -45,7 +48,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
|
|
|
45
48
|
var newInput = editableElement.querySelector('input:not([readonly]):not([disabled]), textarea:not([readonly]):not([disabled])');
|
|
46
49
|
if (newInput) {
|
|
47
50
|
newInput.focus();
|
|
48
|
-
if (
|
|
51
|
+
if (supportsSelectionRange(newInput)) {
|
|
49
52
|
var _newInput$value;
|
|
50
53
|
var _length = ((_newInput$value = newInput.value) === null || _newInput$value === void 0 ? void 0 : _newInput$value.length) || 0;
|
|
51
54
|
setTimeout(function () {
|
|
@@ -74,7 +77,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
|
|
|
74
77
|
inputElement.focus();
|
|
75
78
|
|
|
76
79
|
// 将光标定位到末尾
|
|
77
|
-
if (
|
|
80
|
+
if (supportsSelectionRange(inputElement)) {
|
|
78
81
|
var _inputElement$value;
|
|
79
82
|
var _length2 = ((_inputElement$value = inputElement.value) === null || _inputElement$value === void 0 ? void 0 : _inputElement$value.length) || 0;
|
|
80
83
|
setTimeout(function () {
|
|
@@ -96,7 +99,7 @@ var useCellFocus = exports.useCellFocus = function useCellFocus() {
|
|
|
96
99
|
* 键盘导航 Hook
|
|
97
100
|
* 处理方向键在表格单元格间的导航
|
|
98
101
|
*/
|
|
99
|
-
var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboardNavigation(ref, dataSource, focusInputInCell) {
|
|
102
|
+
var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboardNavigation(ref, dataSource, focusInputInCell, activateCell) {
|
|
100
103
|
var handleCellKeyDown = (0, _react.useCallback)(function (event) {
|
|
101
104
|
var keyEvent = event.event,
|
|
102
105
|
node = event.node,
|
|
@@ -147,46 +150,23 @@ var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboard
|
|
|
147
150
|
if (isValidTarget) {
|
|
148
151
|
// 延迟执行以确保当前编辑完成
|
|
149
152
|
setTimeout(function () {
|
|
153
|
+
var _api$getDisplayedRowA;
|
|
150
154
|
api.setFocusedCell(targetRowIndex, targetColId);
|
|
151
155
|
|
|
156
|
+
// 懒挂载:目标格若是懒列存量格,先激活挂树(refreshCells),下方 150ms 内完成挂载再聚焦 @author nokecy
|
|
157
|
+
var targetNode = (_api$getDisplayedRowA = api.getDisplayedRowAtIndex) === null || _api$getDisplayedRowA === void 0 ? void 0 : _api$getDisplayedRowA.call(api, targetRowIndex);
|
|
158
|
+
if (activateCell && targetNode) {
|
|
159
|
+
activateCell(api, targetNode, targetColId);
|
|
160
|
+
}
|
|
161
|
+
|
|
152
162
|
// 不使用原生startEditingCell,而是手动触发编辑状态
|
|
153
|
-
//
|
|
163
|
+
// v33 themeQuartz 容器不再有 .ag-theme-alpine 类;且行虚拟化下 DOM 顺序与 rowIndex 不一致,
|
|
164
|
+
// 改为直接在 ref 容器内按 row-index + col-id 属性定位目标单元格 @author nokecy
|
|
154
165
|
setTimeout(function () {
|
|
155
166
|
var _ref$current;
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
// 尝试通过行和列分步查找目标单元格
|
|
160
|
-
var rows = gridContainer.querySelectorAll('.ag-row');
|
|
161
|
-
if (rows[targetRowIndex]) {
|
|
162
|
-
var targetRow = rows[targetRowIndex];
|
|
163
|
-
|
|
164
|
-
// 在行内查找指定列的单元格
|
|
165
|
-
var targetCell = targetRow.querySelector(".ag-cell[col-id=\"".concat(targetColId, "\"]"));
|
|
166
|
-
if (!targetCell) {
|
|
167
|
-
// 如果通过col-id找不到,遍历所有单元格查找匹配的列
|
|
168
|
-
var cells = targetRow.querySelectorAll('.ag-cell');
|
|
169
|
-
var _iterator = _createForOfIteratorHelper(cells),
|
|
170
|
-
_step;
|
|
171
|
-
try {
|
|
172
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
173
|
-
var _cell = _step.value;
|
|
174
|
-
var colId = _cell.getAttribute('col-id') || _cell.getAttribute('data-col-id');
|
|
175
|
-
if (colId === targetColId) {
|
|
176
|
-
targetCell = _cell;
|
|
177
|
-
break;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
} catch (err) {
|
|
181
|
-
_iterator.e(err);
|
|
182
|
-
} finally {
|
|
183
|
-
_iterator.f();
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
if (targetCell) {
|
|
187
|
-
focusInputInCell(targetCell);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
167
|
+
var targetCell = (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector(".ag-row[row-index=\"".concat(targetRowIndex, "\"] .ag-cell[col-id=\"").concat(targetColId, "\"]"));
|
|
168
|
+
if (targetCell) {
|
|
169
|
+
focusInputInCell(targetCell);
|
|
190
170
|
}
|
|
191
171
|
}, 150);
|
|
192
172
|
}, 10);
|
|
@@ -194,7 +174,7 @@ var useKeyboardNavigation = exports.useKeyboardNavigation = function useKeyboard
|
|
|
194
174
|
keyEvent.preventDefault();
|
|
195
175
|
keyEvent.stopPropagation();
|
|
196
176
|
}
|
|
197
|
-
}, [dataSource, focusInputInCell, ref]);
|
|
177
|
+
}, [dataSource, focusInputInCell, ref, activateCell]);
|
|
198
178
|
return {
|
|
199
179
|
handleCellKeyDown: handleCellKeyDown
|
|
200
180
|
};
|
|
@@ -22,20 +22,32 @@ var _agGridPlus = require("../ag-grid-plus");
|
|
|
22
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
23
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
24
24
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
25
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
25
26
|
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; }
|
|
26
27
|
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; }
|
|
27
28
|
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; }
|
|
28
29
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
29
30
|
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); }
|
|
30
|
-
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
31
31
|
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
32
32
|
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
33
33
|
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); }
|
|
34
34
|
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; }
|
|
35
35
|
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
36
36
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // 导入 AG-Grid v33 主题
|
|
37
|
+
// array-table 派生主题:去掉单元格聚焦/选区视觉(行内编辑更干净)。
|
|
38
|
+
// focusShadow -> 聚焦光环
|
|
39
|
+
// rangeSelectionBorder -> 单格点击形成的 1×1 选区蓝边
|
|
40
|
+
// rangeSelectionBackground -> 选区淡蓝填充
|
|
41
|
+
// 仅去视觉,不动焦点功能——键盘导航/点击进编辑仍依赖 cell focus。共用主题不受影响。@author nokecy
|
|
42
|
+
var arrayTableTheme = _theme.agGridTheme.withParams({
|
|
43
|
+
focusShadow: 'none',
|
|
44
|
+
rangeSelectionBorderColor: 'transparent',
|
|
45
|
+
rangeSelectionBackgroundColor: 'transparent'
|
|
46
|
+
});
|
|
47
|
+
|
|
37
48
|
//@ts-ignore
|
|
38
49
|
var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
50
|
+
var _addition$props;
|
|
39
51
|
var height = props.height,
|
|
40
52
|
gridKey = props.gridKey;
|
|
41
53
|
|
|
@@ -49,6 +61,10 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
49
61
|
isAdd = _useState2[0],
|
|
50
62
|
setIsAdd = _useState2[1];
|
|
51
63
|
var apiRef = (0, _react.useRef)();
|
|
64
|
+
// 懒挂载激活态:存放已激活(点击/导航进过)的单元格 key(`rowId:colId`),供 LazyAgField 经 context 读取。@author nokecy
|
|
65
|
+
var activeCellsRef = (0, _react.useRef)(new Set());
|
|
66
|
+
// 无 _id/id 的外部数据按对象引用分配稳定 rowId(避免 getRowId 返回 undefined)。@author nokecy
|
|
67
|
+
var rowIdMapRef = (0, _react.useRef)(new WeakMap());
|
|
52
68
|
var ref = (0, _react.useRef)();
|
|
53
69
|
var field = (0, _react2.useField)();
|
|
54
70
|
var _useState3 = (0, _react.useState)(undefined),
|
|
@@ -66,10 +82,14 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
66
82
|
// 通过 JSON.stringify 比较内容,只有内容真正变化时才返回新引用
|
|
67
83
|
var sourcesKey = (0, _react.useMemo)(function () {
|
|
68
84
|
return JSON.stringify(rawSources.map(function (s) {
|
|
85
|
+
var _s$columnProps$header, _s$columnProps, _s$columnProps2;
|
|
69
86
|
return {
|
|
70
87
|
name: s.name,
|
|
71
|
-
display: s.display
|
|
72
|
-
//
|
|
88
|
+
display: s.display,
|
|
89
|
+
// 列标题可由 reactions 运行时改写,纳入 key 才能让 stableColumnDefs 跟着重建。
|
|
90
|
+
// 宽度/隐藏/固定由 applyColumnState(方案)管,故意不纳入,避免行编辑时列状态被重置。
|
|
91
|
+
// 可编辑性:带 x-reactions 的列在 buildArrayTableColumns 里已强制走 AgField 全树(尊重运行时 pattern),无需进 key。@author nokecy
|
|
92
|
+
headerName: (_s$columnProps$header = (_s$columnProps = s.columnProps) === null || _s$columnProps === void 0 ? void 0 : _s$columnProps.headerName) !== null && _s$columnProps$header !== void 0 ? _s$columnProps$header : (_s$columnProps2 = s.columnProps) === null || _s$columnProps2 === void 0 ? void 0 : _s$columnProps2.title
|
|
73
93
|
};
|
|
74
94
|
}));
|
|
75
95
|
}, [rawSources]);
|
|
@@ -87,8 +107,6 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
87
107
|
// 使用自定义 hooks
|
|
88
108
|
var _useCellFocus = (0, _hooks.useCellFocus)(),
|
|
89
109
|
focusInputInCell = _useCellFocus.focusInputInCell;
|
|
90
|
-
var _useKeyboardNavigatio = (0, _hooks.useKeyboardNavigation)(ref, dataSource, focusInputInCell),
|
|
91
|
-
handleCellKeyDown = _useKeyboardNavigatio.handleCellKeyDown;
|
|
92
110
|
var _useRowDrag = (0, _hooks.useRowDrag)(field),
|
|
93
111
|
handleRowDragMove = _useRowDrag.handleRowDragMove;
|
|
94
112
|
|
|
@@ -123,7 +141,7 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
123
141
|
*/
|
|
124
142
|
var stableColumnDefs = (0, _react.useMemo)(function () {
|
|
125
143
|
// 只依赖 sources,不依赖 dataSource 和 field.value
|
|
126
|
-
var cols = (0, _utils.
|
|
144
|
+
var cols = (0, _utils.buildArrayTableColumns)([], field, sources);
|
|
127
145
|
//@ts-ignore
|
|
128
146
|
if (cols.length > 0 && props.onRowDrag) {
|
|
129
147
|
//@ts-ignore
|
|
@@ -132,6 +150,47 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
132
150
|
return cols;
|
|
133
151
|
}, [sources, props.onRowDrag]); // 移除 field 依赖,避免数据变化时重新计算
|
|
134
152
|
|
|
153
|
+
// 懒挂载:把激活态 Set 通过 AG-Grid context 暴露给 LazyAgField(引用稳定,原地 mutate)。@author nokecy
|
|
154
|
+
var gridContext = (0, _react.useMemo)(function () {
|
|
155
|
+
return {
|
|
156
|
+
activeCells: activeCellsRef.current
|
|
157
|
+
};
|
|
158
|
+
}, []);
|
|
159
|
+
|
|
160
|
+
// 走懒挂载渲染器的列 id 集合(供点击/键盘导航判断是否需要激活)。@author nokecy
|
|
161
|
+
var lazyColIds = (0, _react.useMemo)(function () {
|
|
162
|
+
return new Set(stableColumnDefs.filter(function (c) {
|
|
163
|
+
var _c$cellRendererParams;
|
|
164
|
+
return c === null || c === void 0 || (_c$cellRendererParams = c.cellRendererParams) === null || _c$cellRendererParams === void 0 ? void 0 : _c$cellRendererParams.lazyEditable;
|
|
165
|
+
}).map(function (c) {
|
|
166
|
+
return c.field;
|
|
167
|
+
}));
|
|
168
|
+
}, [stableColumnDefs]);
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* 激活某个懒挂载单元格:加入激活集合并强制重渲该格 -> LazyAgField 改挂 AgField 全树。
|
|
172
|
+
* 返回 true 表示「本次新激活」(调用方需等挂载完成再聚焦);false 表示无需激活(非懒列/新增行/已激活)。@author nokecy
|
|
173
|
+
*/
|
|
174
|
+
var activateCell = (0, _react.useCallback)(function (api, node, colId) {
|
|
175
|
+
var _node$data;
|
|
176
|
+
if (!api || !node || !colId) return false;
|
|
177
|
+
if (!lazyColIds.has(colId)) return false; // 非懒列(已是 AgField/纯文本)
|
|
178
|
+
if ((_node$data = node.data) !== null && _node$data !== void 0 && _node$data._isNew) return false; // 新增行本就 eager 挂着
|
|
179
|
+
var key = "".concat(node.id, ":").concat(colId);
|
|
180
|
+
if (activeCellsRef.current.has(key)) return false; // 已激活
|
|
181
|
+
activeCellsRef.current.add(key);
|
|
182
|
+
api.refreshCells({
|
|
183
|
+
rowNodes: [node],
|
|
184
|
+
columns: [colId],
|
|
185
|
+
force: true
|
|
186
|
+
});
|
|
187
|
+
return true;
|
|
188
|
+
}, [lazyColIds]);
|
|
189
|
+
|
|
190
|
+
// 键盘导航 hook 需要 activateCell(导航进懒列时先挂载再聚焦),故置于其后。@author nokecy
|
|
191
|
+
var _useKeyboardNavigatio = (0, _hooks.useKeyboardNavigation)(ref, dataSource, focusInputInCell, activateCell),
|
|
192
|
+
handleCellKeyDown = _useKeyboardNavigatio.handleCellKeyDown;
|
|
193
|
+
|
|
135
194
|
/**
|
|
136
195
|
* 方案自动加载
|
|
137
196
|
*
|
|
@@ -165,7 +224,9 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
165
224
|
|
|
166
225
|
// 如果包含分组,先更新 columnDefs
|
|
167
226
|
if (hasGroups) {
|
|
168
|
-
|
|
227
|
+
// 传入 stableColumnDefs 作为原始定义,保留 cellRenderer(AgField/LazyAgField)及其
|
|
228
|
+
// cellRendererParams——否则分组方案重建出的是裸列,单元格退化为纯文本、编辑失效。@author nokecy
|
|
229
|
+
var gridColumnDefs = (0, _columnGroupUtils.flatConfigToGridState)(currentScheme.columnConfig, stableColumnDefs);
|
|
169
230
|
gridApiState.setGridOption('columnDefs', gridColumnDefs);
|
|
170
231
|
}
|
|
171
232
|
|
|
@@ -239,17 +300,20 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
239
300
|
marginBottom: 5
|
|
240
301
|
}
|
|
241
302
|
}, addition ? /*#__PURE__*/_react.default.createElement(_arrayAddBtn.default, _extends({
|
|
242
|
-
arrayField: field,
|
|
243
|
-
schema: schema,
|
|
244
|
-
defaultValue: {
|
|
245
|
-
_id: (0, _uniqueId.default)(),
|
|
246
|
-
_isNew: true
|
|
247
|
-
},
|
|
248
303
|
title: "新增",
|
|
249
304
|
onAdd: function onAdd() {
|
|
250
305
|
setIsAdd(true);
|
|
251
306
|
}
|
|
252
|
-
}, addition.props
|
|
307
|
+
}, addition.props, {
|
|
308
|
+
// 框架关键属性钉在 spread 之后:不可被 addition.props 覆盖;
|
|
309
|
+
// defaultValue 合并自定义字段但始终携带 _id/_isNew 标记。@author nokecy
|
|
310
|
+
arrayField: field,
|
|
311
|
+
schema: schema,
|
|
312
|
+
defaultValue: _objectSpread({
|
|
313
|
+
_id: (0, _uniqueId.default)(),
|
|
314
|
+
_isNew: true
|
|
315
|
+
}, ((_addition$props = addition.props) === null || _addition$props === void 0 ? void 0 : _addition$props.defaultValue) || {})
|
|
316
|
+
})) : null, actions.map(function (column, key) {
|
|
253
317
|
return /*#__PURE__*/_react.default.createElement(_react2.RecursionField, {
|
|
254
318
|
schema: column.schema,
|
|
255
319
|
name: key,
|
|
@@ -267,7 +331,8 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
267
331
|
minHeight: 0
|
|
268
332
|
}
|
|
269
333
|
}, /*#__PURE__*/_react.default.createElement(_agGridReact.AgGridReact, {
|
|
270
|
-
theme:
|
|
334
|
+
theme: arrayTableTheme,
|
|
335
|
+
context: gridContext,
|
|
271
336
|
onGridReady: function onGridReady(params) {
|
|
272
337
|
params.api.hidePopupMenu();
|
|
273
338
|
apiRef.current = params.api;
|
|
@@ -287,15 +352,20 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
287
352
|
},
|
|
288
353
|
onCellKeyDown: handleCellKeyDown,
|
|
289
354
|
onCellClicked: function onCellClicked(event) {
|
|
290
|
-
var _event$
|
|
291
|
-
//
|
|
292
|
-
var
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
355
|
+
var _event$colDef;
|
|
356
|
+
// 懒挂载:点击懒列存量格时先激活挂树,等挂载完成再聚焦进编辑;否则沿用原即时聚焦。@author nokecy
|
|
357
|
+
var node = event.node;
|
|
358
|
+
var colId = (_event$colDef = event.colDef) === null || _event$colDef === void 0 ? void 0 : _event$colDef.field;
|
|
359
|
+
var justActivated = activateCell(event.api, node, colId);
|
|
360
|
+
var rowIndex = node === null || node === void 0 ? void 0 : node.rowIndex;
|
|
361
|
+
var focus = function focus() {
|
|
362
|
+
var _ref$current, _event$event;
|
|
363
|
+
// 行虚拟化下 DOM 顺序与 rowIndex 不一致,按 row-index + col-id 属性精确定位刚渲染的格 @author nokecy
|
|
364
|
+
var gridCell = justActivated && rowIndex != null ? (_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.querySelector(".ag-row[row-index=\"".concat(rowIndex, "\"] .ag-cell[col-id=\"").concat(colId, "\"]")) : (_event$event = event.event) === null || _event$event === void 0 || (_event$event = _event$event.target) === null || _event$event === void 0 ? void 0 : _event$event.closest('.ag-cell');
|
|
365
|
+
if (gridCell) focusInputInCell(gridCell);
|
|
366
|
+
};
|
|
367
|
+
// 新激活需等 AgField(RecursionField/Editable) 挂载完成,给足时间;否则原 10ms。@author nokecy
|
|
368
|
+
setTimeout(focus, justActivated ? 80 : 10);
|
|
299
369
|
},
|
|
300
370
|
onRowDragMove: handleRowDragMove,
|
|
301
371
|
onRowDataUpdated: function onRowDataUpdated(e) {
|
|
@@ -322,8 +392,18 @@ var ArrayTableInner = (0, _react2.observer)(function (props) {
|
|
|
322
392
|
}
|
|
323
393
|
},
|
|
324
394
|
getRowId: function getRowId(_ref) {
|
|
395
|
+
var _data$_id;
|
|
325
396
|
var data = _ref.data;
|
|
326
|
-
|
|
397
|
+
var id = (_data$_id = data === null || data === void 0 ? void 0 : data._id) !== null && _data$_id !== void 0 ? _data$_id : data === null || data === void 0 ? void 0 : data.id;
|
|
398
|
+
if (id != null) return String(id);
|
|
399
|
+
// 既无 _id 也无 id 的外部数据:按对象引用从 WeakMap 取/分配稳定 id。
|
|
400
|
+
// 不能用 uniqueId 直返(每次调用都变会让 AG-Grid 行身份错乱),也不能改写 data(触发 Formily 反应)。@author nokecy
|
|
401
|
+
var gen = rowIdMapRef.current.get(data);
|
|
402
|
+
if (!gen) {
|
|
403
|
+
gen = (0, _uniqueId.default)('row_');
|
|
404
|
+
rowIdMapRef.current.set(data, gen);
|
|
405
|
+
}
|
|
406
|
+
return gen;
|
|
327
407
|
}
|
|
328
408
|
// rowDragEntireRow={true}
|
|
329
409
|
// onRowDragEnd={(event) => {
|
|
@@ -15,7 +15,7 @@ var ArrayTable = function ArrayTable(props) {
|
|
|
15
15
|
var field = (0, _react2.useField)();
|
|
16
16
|
var dataSource = Array.isArray(field.value) ? field.value.slice() : [];
|
|
17
17
|
var sources = (0, _utils.useArrayTableSources)();
|
|
18
|
-
var columns = (0, _utils.
|
|
18
|
+
var columns = (0, _utils.buildArrayTableColumns)(dataSource, field, sources);
|
|
19
19
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
20
20
|
style: {
|
|
21
21
|
height: height ? height : 400
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 只读列「纯文本快路径」格式化器注册表
|
|
3
|
+
*
|
|
4
|
+
* 背景:ArrayTable 每个可见单元格默认挂一棵完整 Formily 字段树(AgField),
|
|
5
|
+
* 行虚拟化滚动时整行销毁重建,列多必然掉帧。只读列没有编辑/校验/写回,
|
|
6
|
+
* 完全可以不挂 Formily 树、改用 AG-Grid 的 valueFormatter 出纯文本。
|
|
7
|
+
*
|
|
8
|
+
* 本注册表负责「内层组件类型 -> 显示文本」的映射。命中返回格式化器,
|
|
9
|
+
* 未命中返回 null —— 调用方据此安全回退 AgField(正确优先于速度)。
|
|
10
|
+
*
|
|
11
|
+
* 取舍:这是 Formily readPretty 之外的一份精简显示逻辑,可能与定制 readPretty
|
|
12
|
+
* 发散。靠「未命中即回退 + 消费方可 registerReadOnlyFormatter 扩展」控制风险。
|
|
13
|
+
*
|
|
14
|
+
* @author nokecy
|
|
15
|
+
*/
|
|
16
|
+
export type ReadOnlyFormatterCtx = {
|
|
17
|
+
/** 列的 x-component-props(headerName/width/options/format 等) */
|
|
18
|
+
columnProps: any;
|
|
19
|
+
/** 内层数据字段的 schema(可读 enum / x-component-props) */
|
|
20
|
+
fieldSchema: any;
|
|
21
|
+
};
|
|
22
|
+
export type ReadOnlyFormatter = (value: any, ctx: ReadOnlyFormatterCtx) => string;
|
|
23
|
+
/** 消费方扩展自定义只读列的显示逻辑 */
|
|
24
|
+
export declare const registerReadOnlyFormatter: (component: string, formatter: ReadOnlyFormatter) => void;
|
|
25
|
+
/**
|
|
26
|
+
* 取某组件类型的只读格式化器。命中返回函数,未命中返回 null(调用方回退 AgField)。
|
|
27
|
+
*/
|
|
28
|
+
export declare const getReadOnlyFormatter: (component: string | undefined) => ReadOnlyFormatter | null;
|