@nokecy/qc-ui 1.1.39 → 1.1.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +51 -205
- 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/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/QuerySchemeManager.js +6 -6
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +2 -3
- 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/arrayBase.js +2 -0
- package/dist/cjs/array-table/utils.js +22 -4
- 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/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 +49 -203
- 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/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/QuerySchemeManager.js +6 -6
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +7 -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/arrayBase.js +2 -0
- package/dist/esm/array-table/utils.js +22 -4
- 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/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/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
|
@@ -19,9 +19,18 @@ interface GridProps extends AgGridReactProps {
|
|
|
19
19
|
headerTitle?: React.ReactNode;
|
|
20
20
|
columnDefs?: (AgGridColumnPropsClone | ColGroupDef<any>)[] | null;
|
|
21
21
|
toolBarRender?: (gridApi?: GridApi, filter?: string, queryFilter?: any, paginationInfo?: {
|
|
22
|
+
/** @deprecated 改用 page */
|
|
22
23
|
current: number;
|
|
24
|
+
/** @deprecated 改用 page/pageSize */
|
|
23
25
|
skipCount: number;
|
|
26
|
+
/** @deprecated 改用 page/pageSize */
|
|
24
27
|
maxResultCount: number;
|
|
28
|
+
/** 当前页码(1-based)
|
|
29
|
+
* @author nokecy */
|
|
30
|
+
page?: number;
|
|
31
|
+
/** 每页条数
|
|
32
|
+
* @author nokecy */
|
|
33
|
+
pageSize?: number;
|
|
25
34
|
}) => React.ReactNode[];
|
|
26
35
|
defaultSearchExpand?: Boolean;
|
|
27
36
|
/**
|
|
@@ -30,7 +30,7 @@ import DraggableModal from "../../draggableModal";
|
|
|
30
30
|
import { EditOutlined, DeleteOutlined, StarOutlined, StarFilled } from '@ant-design/icons';
|
|
31
31
|
import { AgGridReact } from 'ag-grid-react';
|
|
32
32
|
import { useGridSchemes } from "../context/useSchemeManager";
|
|
33
|
-
import {
|
|
33
|
+
import { useQueryForm } from "../context/queryFormContext";
|
|
34
34
|
import { v4 as uuidv4 } from 'uuid';
|
|
35
35
|
import { extractItemsOrder, extractHiddenFields, buildQueryConfig } from "../shared/utils/schemeDataMigration";
|
|
36
36
|
import { agGridTheme } from "../theme";
|
|
@@ -58,11 +58,11 @@ var QuerySchemeManager = function QuerySchemeManager(_ref) {
|
|
|
58
58
|
deleteQueryScheme = _useGridSchemes.deleteQueryScheme,
|
|
59
59
|
setCurrentQueryScheme = _useGridSchemes.setCurrentQueryScheme;
|
|
60
60
|
|
|
61
|
-
//
|
|
62
|
-
var
|
|
63
|
-
queryFormItems =
|
|
64
|
-
currentQueryOrder =
|
|
65
|
-
updateQueryOrder =
|
|
61
|
+
// 从查询表单 Context 获取查询表单项和当前顺序(已从 GridPlusContext 拆出)
|
|
62
|
+
var _useQueryForm = useQueryForm(),
|
|
63
|
+
queryFormItems = _useQueryForm.queryFormItems,
|
|
64
|
+
currentQueryOrder = _useQueryForm.currentQueryOrder,
|
|
65
|
+
updateQueryOrder = _useQueryForm.updateQueryOrder;
|
|
66
66
|
|
|
67
67
|
// 获取当前表格的查询方案列表
|
|
68
68
|
var schemes = (querySchemes === null || querySchemes === void 0 ? void 0 : querySchemes[gridKey]) || [];
|
|
@@ -1,9 +1,4 @@
|
|
|
1
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
|
-
import _uniqueId from "lodash/uniqueId";
|
|
3
|
-
/**
|
|
4
|
-
* 表头分组配置工具函数
|
|
5
|
-
* 负责 Grid State 与扁平化配置之间的转换
|
|
6
|
-
*/
|
|
7
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; }
|
|
8
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; }
|
|
9
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; }
|
|
@@ -16,12 +11,18 @@ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToAr
|
|
|
16
11
|
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; } } }; }
|
|
17
12
|
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); }
|
|
18
13
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
|
+
/**
|
|
15
|
+
* 表头分组配置工具函数
|
|
16
|
+
* 负责 Grid State 与扁平化配置之间的转换
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { uniqueId } from 'lodash';
|
|
19
20
|
import { logger } from "../utils/logger";
|
|
20
21
|
/**
|
|
21
22
|
* 生成唯一 ID
|
|
22
23
|
*/
|
|
23
24
|
export var generateId = function generateId() {
|
|
24
|
-
return
|
|
25
|
+
return uniqueId('col_');
|
|
25
26
|
};
|
|
26
27
|
|
|
27
28
|
/**
|
|
@@ -176,9 +176,18 @@ export interface ToolBarRenderParams {
|
|
|
176
176
|
queryFilter?: QueryFilterState;
|
|
177
177
|
/** 分页信息 */
|
|
178
178
|
paginationInfo?: {
|
|
179
|
+
/** @deprecated 改用 page */
|
|
179
180
|
current: number;
|
|
181
|
+
/** @deprecated 改用 page/pageSize */
|
|
180
182
|
skipCount: number;
|
|
183
|
+
/** @deprecated 改用 page/pageSize */
|
|
181
184
|
maxResultCount: number;
|
|
185
|
+
/** 当前页码(1-based)
|
|
186
|
+
* @author nokecy */
|
|
187
|
+
page?: number;
|
|
188
|
+
/** 每页条数
|
|
189
|
+
* @author nokecy */
|
|
190
|
+
pageSize?: number;
|
|
182
191
|
};
|
|
183
192
|
}
|
|
184
193
|
/**
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AG-Grid 底部汇总聚合纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
|
|
3
|
+
* @author nokecy
|
|
4
|
+
*/
|
|
5
|
+
export interface CalculationColumnConfig {
|
|
6
|
+
field: string;
|
|
7
|
+
calculateType: 'sum' | 'avg' | 'standardDeviation';
|
|
8
|
+
transactionAmount: number;
|
|
9
|
+
formatWithCommas?: boolean;
|
|
10
|
+
cellRenderer?: any;
|
|
11
|
+
}
|
|
12
|
+
export declare const isValidNumber: (value: any) => boolean;
|
|
13
|
+
export declare const sumField: (field: string, data: any[]) => number;
|
|
14
|
+
export declare const avgField: (field: string, data: any[]) => number;
|
|
15
|
+
export declare const stdDevField: (field: string, data: any[]) => number;
|
|
16
|
+
export declare const formatWithCommas: (value: number) => string;
|
|
17
|
+
export declare const computeAggregationRow: (calcColFields: CalculationColumnConfig[], data: any[]) => any[];
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import _, { uniqueId } from 'lodash';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AG-Grid 底部汇总聚合纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
|
|
5
|
+
* @author nokecy
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export var isValidNumber = function isValidNumber(value) {
|
|
9
|
+
return typeof value === 'number' && !isNaN(value);
|
|
10
|
+
};
|
|
11
|
+
export var sumField = function sumField(field, data) {
|
|
12
|
+
return _.sumBy(data, function (cur) {
|
|
13
|
+
if (cur && isValidNumber(cur[field])) {
|
|
14
|
+
return cur[field];
|
|
15
|
+
}
|
|
16
|
+
return 0;
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
export var avgField = function avgField(field, data) {
|
|
20
|
+
// 分子分母口径统一为「有效数字」,避免除零得 NaN
|
|
21
|
+
var validValues = data.filter(function (cur) {
|
|
22
|
+
return cur && isValidNumber(cur[field]);
|
|
23
|
+
});
|
|
24
|
+
if (validValues.length === 0) return 0;
|
|
25
|
+
var sum = _.sumBy(validValues, function (cur) {
|
|
26
|
+
return cur[field];
|
|
27
|
+
});
|
|
28
|
+
return sum / validValues.length;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// 注:现存口径小瑕疵——mean 的分母用有效值数,sumField 对全部行求和(无效计 0);
|
|
32
|
+
// variance 遍历全部行且判定用 !== undefined/null(非 isValidNumber)。首刀只保持原行为,不修正。
|
|
33
|
+
export var stdDevField = function stdDevField(field, data) {
|
|
34
|
+
var validValues = data.filter(function (cur) {
|
|
35
|
+
return isValidNumber(cur[field]);
|
|
36
|
+
});
|
|
37
|
+
var count = validValues.length;
|
|
38
|
+
if (count === 0) return 0;
|
|
39
|
+
var mean = sumField(field, data) / count;
|
|
40
|
+
var variance = _.sumBy(data, function (cur) {
|
|
41
|
+
if (cur && cur[field] !== undefined && cur[field] !== null) {
|
|
42
|
+
var diff = cur[field] - mean;
|
|
43
|
+
return diff * diff;
|
|
44
|
+
}
|
|
45
|
+
return 0;
|
|
46
|
+
}) / count;
|
|
47
|
+
return Math.sqrt(variance);
|
|
48
|
+
};
|
|
49
|
+
export var formatWithCommas = function formatWithCommas(value) {
|
|
50
|
+
return (value / 1).toLocaleString(undefined, {
|
|
51
|
+
minimumFractionDigits: 2,
|
|
52
|
+
maximumFractionDigits: 2
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// sum 求和 / avg 平均值 / standardDeviation 标准差
|
|
57
|
+
export var computeAggregationRow = function computeAggregationRow(calcColFields, data) {
|
|
58
|
+
var calculateArrCopy = [];
|
|
59
|
+
var calculateData = {
|
|
60
|
+
id: uniqueId()
|
|
61
|
+
};
|
|
62
|
+
calcColFields.forEach(function (i) {
|
|
63
|
+
if (!i.cellRenderer) {
|
|
64
|
+
switch (i.calculateType) {
|
|
65
|
+
case 'sum':
|
|
66
|
+
{
|
|
67
|
+
var sumPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
|
|
68
|
+
var sumValue = Number(sumField(i.field, data).toFixed(sumPrecision));
|
|
69
|
+
calculateData[i.field] = i.formatWithCommas ? formatWithCommas(sumValue) : sumValue;
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
case 'avg':
|
|
73
|
+
{
|
|
74
|
+
var avgPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
|
|
75
|
+
calculateData[i.field] = Number(avgField(i.field, data).toFixed(avgPrecision));
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case 'standardDeviation':
|
|
79
|
+
{
|
|
80
|
+
var stdPrecision = typeof i.transactionAmount === 'number' ? i.transactionAmount : 2;
|
|
81
|
+
calculateData[i.field] = Number(stdDevField(i.field, data).toFixed(stdPrecision));
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
default:
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
if (Object.keys(calculateData).length > 0) {
|
|
90
|
+
calculateArrCopy.push(calculateData);
|
|
91
|
+
}
|
|
92
|
+
return calculateArrCopy;
|
|
93
|
+
};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _isArray from "lodash/isArray";
|
|
2
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); }
|
|
3
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; }
|
|
4
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; }
|
|
@@ -8,6 +7,7 @@ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e
|
|
|
8
7
|
import React from 'react';
|
|
9
8
|
import { Typography } from 'antd';
|
|
10
9
|
import { Select } from '@formily/antd-v5';
|
|
10
|
+
import { isArray } from 'lodash';
|
|
11
11
|
import { DEFAULT_SEARCH_SORT_ORDER } from "./constants";
|
|
12
12
|
var Text = Typography.Text;
|
|
13
13
|
|
|
@@ -35,7 +35,7 @@ var Text = Typography.Text;
|
|
|
35
35
|
*/
|
|
36
36
|
export function handleGridPlusColumnState(columnState) {
|
|
37
37
|
var cellConfigMap = {};
|
|
38
|
-
if (
|
|
38
|
+
if (isArray(columnState)) {
|
|
39
39
|
columnState.forEach(function (item) {
|
|
40
40
|
if (item.field && (item.cellClass || item.suppressHeaderFilterButton !== undefined || item.groupName)) {
|
|
41
41
|
cellConfigMap[item.field] = {
|
|
@@ -7,17 +7,26 @@
|
|
|
7
7
|
import type { ExtendedColDef, EntityExtensionField, HostEntityExtensions } from '../types';
|
|
8
8
|
/**
|
|
9
9
|
* 将单个扩展字段转换为列定义
|
|
10
|
-
* 使用
|
|
10
|
+
* 使用 {extraPropertiesPath}.xxx 嵌套路径访问数据
|
|
11
11
|
*
|
|
12
12
|
* @param field 扩展字段定义
|
|
13
|
+
* @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
|
|
13
14
|
* @returns AG-Grid 列定义
|
|
15
|
+
* @author nokecy
|
|
16
|
+
*
|
|
17
|
+
* @warning 请勿将此函数直接传给 Array.prototype.map()。
|
|
18
|
+
* Array.map 会将 (element, index, array) 全部传入,index(数字)会绑定到
|
|
19
|
+
* extraPropertiesPath,导致 field 路径变为 '0.foo'、'1.bar' 等非法值。
|
|
20
|
+
* 请始终用箭头函数包装:someArray.map((f) => fieldToColumnDef(f, path))
|
|
14
21
|
*/
|
|
15
|
-
export declare function fieldToColumnDef(field: EntityExtensionField): ExtendedColDef;
|
|
22
|
+
export declare function fieldToColumnDef(field: EntityExtensionField, extraPropertiesPath?: string): ExtendedColDef;
|
|
16
23
|
/**
|
|
17
24
|
* 获取指定实体的扩展列定义
|
|
18
25
|
*
|
|
19
26
|
* @param entityType 实体类型全名 (如 "Burn.Product.Domain.Product")
|
|
20
27
|
* @param extensions 实体扩展配置映射
|
|
28
|
+
* @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
|
|
21
29
|
* @returns 扩展列定义数组,按 sortOrder 排序
|
|
30
|
+
* @author nokecy
|
|
22
31
|
*/
|
|
23
|
-
export declare function getEntityExtensionColumns(entityType: string | undefined, extensions?: HostEntityExtensions): ExtendedColDef[];
|
|
32
|
+
export declare function getEntityExtensionColumns(entityType: string | undefined, extensions?: HostEntityExtensions, extraPropertiesPath?: string): ExtendedColDef[];
|
|
@@ -86,19 +86,29 @@ var dataTypeColumnConfig = {
|
|
|
86
86
|
|
|
87
87
|
/**
|
|
88
88
|
* 将单个扩展字段转换为列定义
|
|
89
|
-
* 使用
|
|
89
|
+
* 使用 {extraPropertiesPath}.xxx 嵌套路径访问数据
|
|
90
90
|
*
|
|
91
91
|
* @param field 扩展字段定义
|
|
92
|
+
* @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
|
|
92
93
|
* @returns AG-Grid 列定义
|
|
94
|
+
* @author nokecy
|
|
95
|
+
*
|
|
96
|
+
* @warning 请勿将此函数直接传给 Array.prototype.map()。
|
|
97
|
+
* Array.map 会将 (element, index, array) 全部传入,index(数字)会绑定到
|
|
98
|
+
* extraPropertiesPath,导致 field 路径变为 '0.foo'、'1.bar' 等非法值。
|
|
99
|
+
* 请始终用箭头函数包装:someArray.map((f) => fieldToColumnDef(f, path))
|
|
93
100
|
*/
|
|
94
101
|
export function fieldToColumnDef(field) {
|
|
102
|
+
var extraPropertiesPath = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'extraProperties';
|
|
103
|
+
// 防御 Array.map 将 index(number)传入第二参数的情况,回退到默认路径
|
|
104
|
+
var resolvedPath = typeof extraPropertiesPath === 'string' ? extraPropertiesPath : 'extraProperties';
|
|
95
105
|
var config = dataTypeColumnConfig[field.dataType] || {
|
|
96
106
|
width: 150,
|
|
97
107
|
hideInSearch: false
|
|
98
108
|
};
|
|
99
109
|
var colDef = _objectSpread(_objectSpread({
|
|
100
|
-
//
|
|
101
|
-
field: "
|
|
110
|
+
// 使用可配置前缀的嵌套路径访问扩展属性数据
|
|
111
|
+
field: "".concat(resolvedPath, ".").concat(field.name),
|
|
102
112
|
headerName: field.displayName,
|
|
103
113
|
width: config.width,
|
|
104
114
|
hideInSearch: config.hideInSearch
|
|
@@ -115,9 +125,12 @@ export function fieldToColumnDef(field) {
|
|
|
115
125
|
*
|
|
116
126
|
* @param entityType 实体类型全名 (如 "Burn.Product.Domain.Product")
|
|
117
127
|
* @param extensions 实体扩展配置映射
|
|
128
|
+
* @param extraPropertiesPath 扩展属性的路径前缀,默认 'extraProperties'(保持向后兼容)
|
|
118
129
|
* @returns 扩展列定义数组,按 sortOrder 排序
|
|
130
|
+
* @author nokecy
|
|
119
131
|
*/
|
|
120
132
|
export function getEntityExtensionColumns(entityType, extensions) {
|
|
133
|
+
var extraPropertiesPath = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'extraProperties';
|
|
121
134
|
// 边界情况处理:无效输入直接返回空数组
|
|
122
135
|
var entityConfig = entityType ? extensions === null || extensions === void 0 ? void 0 : extensions[entityType] : undefined;
|
|
123
136
|
var fields = entityConfig === null || entityConfig === void 0 ? void 0 : entityConfig.fields;
|
|
@@ -125,9 +138,11 @@ export function getEntityExtensionColumns(entityType, extensions) {
|
|
|
125
138
|
return [];
|
|
126
139
|
}
|
|
127
140
|
|
|
128
|
-
// 按 sortOrder
|
|
141
|
+
// 按 sortOrder 排序后转换为列定义,透传路径前缀
|
|
129
142
|
return _toConsumableArray(fields).sort(function (a, b) {
|
|
130
143
|
var _a$sortOrder, _b$sortOrder;
|
|
131
144
|
return ((_a$sortOrder = a.sortOrder) !== null && _a$sortOrder !== void 0 ? _a$sortOrder : 0) - ((_b$sortOrder = b.sortOrder) !== null && _b$sortOrder !== void 0 ? _b$sortOrder : 0);
|
|
132
|
-
}).map(
|
|
145
|
+
}).map(function (f) {
|
|
146
|
+
return fieldToColumnDef(f, extraPropertiesPath);
|
|
147
|
+
});
|
|
133
148
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 查询表单项派生纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
|
|
3
|
+
* @author nokecy
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* 按 itemsOrder 数组对查询表单项排序。
|
|
7
|
+
* - itemsOrder 为空/未传:原样返回(同一引用,memo 友好)。
|
|
8
|
+
* - 未在 itemsOrder 中的项排到末尾,两者都不在则保持相对顺序。
|
|
9
|
+
*/
|
|
10
|
+
export declare function sortFormItemsByOrder<T extends {
|
|
11
|
+
field: string;
|
|
12
|
+
}>(items: T[], itemsOrder?: string[]): T[];
|
|
13
|
+
/**
|
|
14
|
+
* 过滤掉 hiddenFields 中的查询表单项。
|
|
15
|
+
* - hiddenFields 为空:原样返回(同一引用,memo 友好)。
|
|
16
|
+
*/
|
|
17
|
+
export declare function filterHiddenFormItems<T extends {
|
|
18
|
+
field: string;
|
|
19
|
+
}>(items: T[], hiddenFields: string[]): T[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
2
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
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 _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
5
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
6
|
+
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; }
|
|
7
|
+
/**
|
|
8
|
+
* 查询表单项派生纯函数(从 ag-gridPlus.tsx 抽出,行为原样)。
|
|
9
|
+
* @author nokecy
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 按 itemsOrder 数组对查询表单项排序。
|
|
14
|
+
* - itemsOrder 为空/未传:原样返回(同一引用,memo 友好)。
|
|
15
|
+
* - 未在 itemsOrder 中的项排到末尾,两者都不在则保持相对顺序。
|
|
16
|
+
*/
|
|
17
|
+
export function sortFormItemsByOrder(items, itemsOrder) {
|
|
18
|
+
if (!itemsOrder || itemsOrder.length === 0) {
|
|
19
|
+
return items;
|
|
20
|
+
}
|
|
21
|
+
return _toConsumableArray(items).sort(function (a, b) {
|
|
22
|
+
var indexA = itemsOrder.indexOf(a.field);
|
|
23
|
+
var indexB = itemsOrder.indexOf(b.field);
|
|
24
|
+
if (indexA === -1 && indexB === -1) return 0;
|
|
25
|
+
if (indexA === -1) return 1;
|
|
26
|
+
if (indexB === -1) return -1;
|
|
27
|
+
return indexA - indexB;
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* 过滤掉 hiddenFields 中的查询表单项。
|
|
33
|
+
* - hiddenFields 为空:原样返回(同一引用,memo 友好)。
|
|
34
|
+
*/
|
|
35
|
+
export function filterHiddenFormItems(items, hiddenFields) {
|
|
36
|
+
if (hiddenFields.length === 0) {
|
|
37
|
+
return items;
|
|
38
|
+
}
|
|
39
|
+
return items.filter(function (item) {
|
|
40
|
+
return !hiddenFields.includes(item.field);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
@@ -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,24 @@
|
|
|
1
|
+
import { convertFilterModel, convertRulesToFilterString } from "../utils";
|
|
2
|
+
/**
|
|
3
|
+
* 请求参数构建纯函数(从 ag-gridPlus.tsx onRequest 抽出,行为原样)。
|
|
4
|
+
* @author nokecy
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 根据查询模式构建过滤字符串:
|
|
9
|
+
* - 高级模式(__advancedMode__ 且有 __rules__):走规则转换 convertRulesToFilterString。
|
|
10
|
+
* - 简单模式:走 convertFilterModel。
|
|
11
|
+
*/
|
|
12
|
+
export function buildFilterString(queryFilter, columnDefs) {
|
|
13
|
+
if (queryFilter.__advancedMode__ && queryFilter.__rules__) {
|
|
14
|
+
return convertRulesToFilterString(queryFilter.__rules__, columnDefs);
|
|
15
|
+
}
|
|
16
|
+
return convertFilterModel(queryFilter, columnDefs);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* 页码 → ABP skipCount。第 1 页为 0,其余为 (current-1)*pageSize。
|
|
21
|
+
*/
|
|
22
|
+
export function pageToSkipCount(current, pageSize) {
|
|
23
|
+
return current === 1 ? 0 : (current - 1) * pageSize;
|
|
24
|
+
}
|
|
@@ -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,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 行选择纯逻辑(从 ag-gridPlus.tsx 抽出,行为原样)。
|
|
3
|
+
* @author nokecy
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* 只保留「既被选中、又在当前显示行中」的行(按 getId 计算的行 ID 比对)。
|
|
8
|
+
* id 为空(falsy)的行不计入匹配。
|
|
9
|
+
*/
|
|
10
|
+
export function filterVisibleSelectedRows(selectedRows, displayedRows, getId) {
|
|
11
|
+
return selectedRows.filter(function (selectedRow) {
|
|
12
|
+
return displayedRows.some(function (displayedRow) {
|
|
13
|
+
var selectedRowId = getId(selectedRow);
|
|
14
|
+
var displayedRowId = getId(displayedRow);
|
|
15
|
+
return selectedRowId && displayedRowId && selectedRowId === displayedRowId;
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
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
|
-
import _cloneDeep from "lodash/cloneDeep";
|
|
3
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; }
|
|
4
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; }
|
|
5
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; }
|
|
@@ -12,6 +11,7 @@ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symb
|
|
|
12
11
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
13
12
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
14
13
|
import dayjs from 'dayjs';
|
|
14
|
+
import { cloneDeep } from 'lodash';
|
|
15
15
|
import { GridifyQueryBuilder, ConditionalOperator as GridifyOp } from 'gridify-client';
|
|
16
16
|
|
|
17
17
|
// Gridify 值转义函数
|
|
@@ -249,7 +249,7 @@ var flattenTreeDeep = function flattenTreeDeep(treeData) {
|
|
|
249
249
|
});
|
|
250
250
|
return res;
|
|
251
251
|
};
|
|
252
|
-
var data =
|
|
252
|
+
var data = cloneDeep(treeData);
|
|
253
253
|
var res = [];
|
|
254
254
|
flattenData(data, res, null, childrenName);
|
|
255
255
|
return res;
|
|
@@ -51,7 +51,9 @@ ArrayBase.Item = function (_ref) {
|
|
|
51
51
|
}, children);
|
|
52
52
|
};
|
|
53
53
|
ArrayBase.Index = function (props) {
|
|
54
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks -- Formily 复合组件,ArrayBase.Index 实为函数组件,误报
|
|
54
55
|
var index = useIndex();
|
|
56
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks -- 同上
|
|
55
57
|
var prefixCls = usePrefixCls('formily-array-base');
|
|
56
58
|
return /*#__PURE__*/React.createElement("span", _extends({}, props, {
|
|
57
59
|
className: "".concat(prefixCls, "-index")
|
|
@@ -272,10 +272,26 @@ var buildArrayTableColumns = function buildArrayTableColumns(dataSource, field,
|
|
|
272
272
|
var readOnly = isColumnReadOnlyEligible(arrayPattern, dataField, columnProps);
|
|
273
273
|
var hasReactions = !!(dataField && dataField['x-reactions']);
|
|
274
274
|
var forceEager = (columnProps === null || columnProps === void 0 ? void 0 : columnProps.forceAgField) === true;
|
|
275
|
+
// Switch/Checkbox 是「单击直控」组件:可编辑态本就该常驻渲染真控件(优化前即如此)。
|
|
276
|
+
// 懒挂载会把它降成「是/否」纯文本(点击才挂出开关),用户会以为开关消失。故可编辑态强制 eager。
|
|
277
|
+
// 只读态(下方 ① 路径)仍走「是/否」文本快路径不受影响。@author nokecy
|
|
278
|
+
var isInlineToggle = component === 'Switch' || component === 'Checkbox';
|
|
279
|
+
|
|
280
|
+
// formatter 路径(只读快路径/懒挂载)经 AG-Grid params.value 取值,而 params.value 由 colDef.field(=name)驱动。
|
|
281
|
+
// 但设计器生成的 schema 里 Column key 多为随机 designable-id 且无 dataIndex,真实数据键在内层字段 name 上,
|
|
282
|
+
// 两者不一致时 record[name] 恒为 undefined → 单元格空白(点击挂 AgField 才按内层字段名显真值)。
|
|
283
|
+
// 故按内层字段名补 valueGetter(仅在与 name 不一致时,保持 name===字段名 的现状)。@author nokecy
|
|
284
|
+
var dataFieldName = dataField === null || dataField === void 0 ? void 0 : dataField.name;
|
|
285
|
+
var valueGetter = dataFieldName && dataFieldName !== name ? function (params) {
|
|
286
|
+
var _params$data;
|
|
287
|
+
return params === null || params === void 0 || (_params$data = params.data) === null || _params$data === void 0 ? void 0 : _params$data[dataFieldName];
|
|
288
|
+
} : undefined;
|
|
275
289
|
|
|
276
290
|
// ① 只读纯文本
|
|
277
291
|
if (readOnly && formatter) {
|
|
278
|
-
return buf.concat(_objectSpread(_objectSpread({}, base),
|
|
292
|
+
return buf.concat(_objectSpread(_objectSpread(_objectSpread({}, base), valueGetter ? {
|
|
293
|
+
valueGetter: valueGetter
|
|
294
|
+
} : {}), {}, {
|
|
279
295
|
// 显式清掉可能从 safeColumnProps 漏带的 cellRenderer(AG-Grid 中 renderer 优先级高于 formatter)
|
|
280
296
|
cellRenderer: undefined,
|
|
281
297
|
valueFormatter: function valueFormatter(params) {
|
|
@@ -287,9 +303,11 @@ var buildArrayTableColumns = function buildArrayTableColumns(dataSource, field,
|
|
|
287
303
|
}));
|
|
288
304
|
}
|
|
289
305
|
|
|
290
|
-
// ② 可编辑懒挂载
|
|
291
|
-
if (!readOnly && formatter && !hasReactions && !forceEager) {
|
|
292
|
-
return buf.concat(_objectSpread(_objectSpread({}, base),
|
|
306
|
+
// ② 可编辑懒挂载(排除单击直控的 Switch/Checkbox:须 eager 出真控件)
|
|
307
|
+
if (!readOnly && formatter && !hasReactions && !forceEager && !isInlineToggle) {
|
|
308
|
+
return buf.concat(_objectSpread(_objectSpread(_objectSpread({}, base), valueGetter ? {
|
|
309
|
+
valueGetter: valueGetter
|
|
310
|
+
} : {}), {}, {
|
|
293
311
|
cellRenderer: LazyAgField,
|
|
294
312
|
cellRendererParams: {
|
|
295
313
|
dataSource: dataSource,
|
|
@@ -1,5 +1,4 @@
|
|
|
1
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
|
-
import _debounce from "lodash-es/debounce";
|
|
3
2
|
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
4
3
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
5
4
|
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
@@ -33,6 +32,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
|
33
32
|
*/
|
|
34
33
|
|
|
35
34
|
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
35
|
+
import { debounce } from 'lodash-es';
|
|
36
36
|
import { parseRegex } from "../validation/parser";
|
|
37
37
|
import { validateRegex } from "../validation/validator";
|
|
38
38
|
import { analyzeComplexity } from "../validation/complexity";
|
|
@@ -187,7 +187,7 @@ export var useRegexValidation = function useRegexValidation(pattern) {
|
|
|
187
187
|
|
|
188
188
|
// 防抖验证函数
|
|
189
189
|
// 使用 useRef 保存防抖函数,避免在每次渲染时重新创建
|
|
190
|
-
var debouncedValidateRef = useRef(
|
|
190
|
+
var debouncedValidateRef = useRef(debounce(function (value) {
|
|
191
191
|
validate(value);
|
|
192
192
|
}, debounceMs));
|
|
193
193
|
|
|
@@ -140,6 +140,7 @@ export var useTemplateManager = function useTemplateManager() {
|
|
|
140
140
|
|
|
141
141
|
// 使用模板
|
|
142
142
|
var useTemplateCallback = useCallback(function (id) {
|
|
143
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks -- useTemplate 是纯函数(读/更新存储),非 React hook,误名 use* 前缀
|
|
143
144
|
var template = useTemplateUtil(id);
|
|
144
145
|
if (template) {
|
|
145
146
|
// 刷新模板列表以更新使用统计
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* @module RegexEditor/visualizer/astToRailroad
|
|
5
5
|
* @description 将 regexp-tree 的 AST 转换为 railroad-diagrams 格式
|
|
6
6
|
*/
|
|
7
|
-
/// <reference types="dist/esm/types/railroad-diagrams" />
|
|
8
7
|
/// <reference types="src/types/railroad-diagrams" />
|
|
9
8
|
import { Diagram, type DiagramNode } from 'railroad-diagrams';
|
|
10
9
|
import type { ASTNode } from '../validation/types';
|