@nokecy/qc-ui 1.1.39 → 1.1.41
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.d.ts +15 -1
- package/dist/cjs/array-table/utils.js +48 -20
- 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.d.ts +15 -1
- package/dist/esm/array-table/utils.js +48 -20
- 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
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import { GridApi } from 'ag-grid-community';
|
|
2
|
-
/**
|
|
3
|
-
* 计算类型
|
|
4
|
-
*/
|
|
5
|
-
export type CalculationType = 'sum' | 'avg' | 'standardDeviation' | false;
|
|
6
|
-
/**
|
|
7
|
-
* 计算列配置
|
|
8
|
-
*/
|
|
9
|
-
export interface CalculationColumn {
|
|
10
|
-
field: string;
|
|
11
|
-
calculateType: CalculationType;
|
|
12
|
-
/** 小数位数,默认 2 */
|
|
13
|
-
transactionAmount?: number;
|
|
14
|
-
/** 是否使用千分位格式化 */
|
|
15
|
-
formatWithCommas?: boolean;
|
|
16
|
-
/** 自定义渲染器(如果存在则跳过计算) */
|
|
17
|
-
cellRenderer?: any;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Hook 配置接口
|
|
21
|
-
*/
|
|
22
|
-
export interface UseAgGridCalculationConfig {
|
|
23
|
-
/** Grid API 引用 */
|
|
24
|
-
gridApi?: GridApi;
|
|
25
|
-
/** 所有列定义 */
|
|
26
|
-
allColDefs?: import('../types').ExtendedColDef[];
|
|
27
|
-
/** 行数据 */
|
|
28
|
-
rowData: any[];
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Hook 返回值接口
|
|
32
|
-
*/
|
|
33
|
-
export interface UseAgGridCalculationReturn {
|
|
34
|
-
/** 计算并更新底部固定行 */
|
|
35
|
-
calculateSum: () => void;
|
|
36
|
-
/** 处理筛选变化 */
|
|
37
|
-
onFilterChanged: () => void;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* 验证数值有效性
|
|
41
|
-
*/
|
|
42
|
-
declare function isValidNumber(value: any): boolean;
|
|
43
|
-
/**
|
|
44
|
-
* 格式化数字(添加千分位)
|
|
45
|
-
*/
|
|
46
|
-
declare function formatNumber(value: number, decimalPlaces?: number): string;
|
|
47
|
-
/**
|
|
48
|
-
* 求和函数
|
|
49
|
-
*/
|
|
50
|
-
declare function sumFn(field: string, displayedData: any[]): number;
|
|
51
|
-
/**
|
|
52
|
-
* 平均值函数
|
|
53
|
-
*/
|
|
54
|
-
declare function avgFn(field: string, displayedData: any[]): number;
|
|
55
|
-
/**
|
|
56
|
-
* 标准差函数
|
|
57
|
-
*/
|
|
58
|
-
declare function standardDeviationFn(field: string, displayedData: any[]): number;
|
|
59
|
-
/**
|
|
60
|
-
* AG-Grid 计算列管理 Hook
|
|
61
|
-
*
|
|
62
|
-
* @description
|
|
63
|
-
* 处理 AG-Grid 底部固定行的聚合计算(求和、平均值、标准差)
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```tsx
|
|
67
|
-
* const { calculateSum, onFilterChanged } = useAgGridCalculation({
|
|
68
|
-
* gridApi,
|
|
69
|
-
* allColDefs,
|
|
70
|
-
* rowData
|
|
71
|
-
* });
|
|
72
|
-
*
|
|
73
|
-
* // 在筛选变化时调用
|
|
74
|
-
* <AgGridReact onFilterChanged={onFilterChanged} />
|
|
75
|
-
* ```
|
|
76
|
-
*/
|
|
77
|
-
export declare function useAgGridCalculation(config: UseAgGridCalculationConfig): UseAgGridCalculationReturn;
|
|
78
|
-
/**
|
|
79
|
-
* 导出工具函数供外部使用
|
|
80
|
-
*/
|
|
81
|
-
export declare const calculationUtils: {
|
|
82
|
-
isValidNumber: typeof isValidNumber;
|
|
83
|
-
formatNumber: typeof formatNumber;
|
|
84
|
-
sumFn: typeof sumFn;
|
|
85
|
-
avgFn: typeof avgFn;
|
|
86
|
-
standardDeviationFn: typeof standardDeviationFn;
|
|
87
|
-
};
|
|
88
|
-
export {};
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import _uniqueId from "lodash/uniqueId";
|
|
2
|
-
import _sumBy from "lodash/sumBy";
|
|
3
|
-
import { useCallback, useEffect } from 'react';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* 计算类型
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* 计算列配置
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Hook 配置接口
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Hook 返回值接口
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* 验证数值有效性
|
|
23
|
-
*/
|
|
24
|
-
function isValidNumber(value) {
|
|
25
|
-
return typeof value === 'number' && !isNaN(value);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* 格式化数字(添加千分位)
|
|
30
|
-
*/
|
|
31
|
-
function formatNumber(value) {
|
|
32
|
-
var decimalPlaces = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
33
|
-
return value.toLocaleString(undefined, {
|
|
34
|
-
minimumFractionDigits: decimalPlaces,
|
|
35
|
-
maximumFractionDigits: decimalPlaces
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* 求和函数
|
|
41
|
-
*/
|
|
42
|
-
function sumFn(field, displayedData) {
|
|
43
|
-
return _sumBy(displayedData, function (cur) {
|
|
44
|
-
if (cur && isValidNumber(cur[field])) {
|
|
45
|
-
return cur[field];
|
|
46
|
-
}
|
|
47
|
-
return 0;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* 平均值函数
|
|
53
|
-
*/
|
|
54
|
-
function avgFn(field, displayedData) {
|
|
55
|
-
var validItems = displayedData.filter(function (cur) {
|
|
56
|
-
return cur && cur[field] !== undefined && cur[field] !== null;
|
|
57
|
-
});
|
|
58
|
-
if (validItems.length === 0) return 0;
|
|
59
|
-
var sum = sumFn(field, displayedData);
|
|
60
|
-
return sum / validItems.length;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* 标准差函数
|
|
65
|
-
*/
|
|
66
|
-
function standardDeviationFn(field, displayedData) {
|
|
67
|
-
var validValues = displayedData.filter(function (cur) {
|
|
68
|
-
return isValidNumber(cur[field]);
|
|
69
|
-
});
|
|
70
|
-
var count = validValues.length;
|
|
71
|
-
if (count === 0) return 0;
|
|
72
|
-
var mean = sumFn(field, displayedData) / count;
|
|
73
|
-
var variance = _sumBy(displayedData, function (cur) {
|
|
74
|
-
if (cur && cur[field] !== undefined && cur[field] !== null) {
|
|
75
|
-
var diff = cur[field] - mean;
|
|
76
|
-
return diff * diff;
|
|
77
|
-
}
|
|
78
|
-
return 0;
|
|
79
|
-
}) / count;
|
|
80
|
-
return Math.sqrt(variance);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* 执行计算
|
|
85
|
-
*/
|
|
86
|
-
function calculate(column, displayedData) {
|
|
87
|
-
var field = column.field,
|
|
88
|
-
calculateType = column.calculateType,
|
|
89
|
-
_column$transactionAm = column.transactionAmount,
|
|
90
|
-
transactionAmount = _column$transactionAm === void 0 ? 2 : _column$transactionAm,
|
|
91
|
-
formatWithCommas = column.formatWithCommas;
|
|
92
|
-
var result;
|
|
93
|
-
switch (calculateType) {
|
|
94
|
-
case 'sum':
|
|
95
|
-
result = sumFn(field, displayedData);
|
|
96
|
-
break;
|
|
97
|
-
case 'avg':
|
|
98
|
-
result = avgFn(field, displayedData);
|
|
99
|
-
break;
|
|
100
|
-
case 'standardDeviation':
|
|
101
|
-
result = standardDeviationFn(field, displayedData);
|
|
102
|
-
break;
|
|
103
|
-
default:
|
|
104
|
-
return 0;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// 格式化结果
|
|
108
|
-
var fixedResult = Number(result.toFixed(transactionAmount));
|
|
109
|
-
return formatWithCommas ? formatNumber(fixedResult, transactionAmount) : fixedResult;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* AG-Grid 计算列管理 Hook
|
|
114
|
-
*
|
|
115
|
-
* @description
|
|
116
|
-
* 处理 AG-Grid 底部固定行的聚合计算(求和、平均值、标准差)
|
|
117
|
-
*
|
|
118
|
-
* @example
|
|
119
|
-
* ```tsx
|
|
120
|
-
* const { calculateSum, onFilterChanged } = useAgGridCalculation({
|
|
121
|
-
* gridApi,
|
|
122
|
-
* allColDefs,
|
|
123
|
-
* rowData
|
|
124
|
-
* });
|
|
125
|
-
*
|
|
126
|
-
* // 在筛选变化时调用
|
|
127
|
-
* <AgGridReact onFilterChanged={onFilterChanged} />
|
|
128
|
-
* ```
|
|
129
|
-
*/
|
|
130
|
-
export function useAgGridCalculation(config) {
|
|
131
|
-
var gridApi = config.gridApi,
|
|
132
|
-
allColDefs = config.allColDefs,
|
|
133
|
-
rowData = config.rowData;
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* 计算并更新底部固定行
|
|
137
|
-
*/
|
|
138
|
-
var calculateSum = useCallback(function () {
|
|
139
|
-
if (!gridApi || !allColDefs) {
|
|
140
|
-
gridApi === null || gridApi === void 0 || gridApi.setGridOption('pinnedBottomRowData', undefined);
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// 获取筛选后的数据
|
|
145
|
-
var displayedData = [];
|
|
146
|
-
gridApi.forEachNodeAfterFilter(function (node) {
|
|
147
|
-
displayedData.push(node.data);
|
|
148
|
-
});
|
|
149
|
-
if (displayedData.length === 0) {
|
|
150
|
-
gridApi.setGridOption('pinnedBottomRowData', undefined);
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// 提取需要计算的列
|
|
155
|
-
var calcColumns = allColDefs.filter(function (col) {
|
|
156
|
-
return col.calculateType && col.calculateType !== false;
|
|
157
|
-
}).map(function (col) {
|
|
158
|
-
return {
|
|
159
|
-
field: col.field,
|
|
160
|
-
calculateType: col.calculateType,
|
|
161
|
-
transactionAmount: col.transactionAmount || 2,
|
|
162
|
-
formatWithCommas: col.formatWithCommas,
|
|
163
|
-
cellRenderer: col.cellRenderer
|
|
164
|
-
};
|
|
165
|
-
});
|
|
166
|
-
if (calcColumns.length === 0) {
|
|
167
|
-
gridApi.setGridOption('pinnedBottomRowData', undefined);
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
// 执行计算
|
|
172
|
-
var calculatedData = {
|
|
173
|
-
id: _uniqueId('calc_')
|
|
174
|
-
};
|
|
175
|
-
calcColumns.forEach(function (column) {
|
|
176
|
-
// 如果有自定义渲染器,跳过计算
|
|
177
|
-
if (!column.cellRenderer) {
|
|
178
|
-
calculatedData[column.field] = calculate(column, displayedData);
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
// 更新底部固定行
|
|
183
|
-
if (Object.keys(calculatedData).length > 1) {
|
|
184
|
-
// 除了 id 之外还有其他字段
|
|
185
|
-
gridApi.setGridOption('pinnedBottomRowData', [calculatedData]);
|
|
186
|
-
}
|
|
187
|
-
}, [gridApi, allColDefs]);
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* 处理筛选变化
|
|
191
|
-
*/
|
|
192
|
-
var onFilterChanged = useCallback(function () {
|
|
193
|
-
calculateSum();
|
|
194
|
-
}, [calculateSum]);
|
|
195
|
-
|
|
196
|
-
/**
|
|
197
|
-
* 监听列定义和行数据变化,自动计算
|
|
198
|
-
*/
|
|
199
|
-
useEffect(function () {
|
|
200
|
-
calculateSum();
|
|
201
|
-
}, [allColDefs, rowData, calculateSum]);
|
|
202
|
-
return {
|
|
203
|
-
calculateSum: calculateSum,
|
|
204
|
-
onFilterChanged: onFilterChanged
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* 导出工具函数供外部使用
|
|
210
|
-
*/
|
|
211
|
-
export var calculationUtils = {
|
|
212
|
-
isValidNumber: isValidNumber,
|
|
213
|
-
formatNumber: formatNumber,
|
|
214
|
-
sumFn: sumFn,
|
|
215
|
-
avgFn: avgFn,
|
|
216
|
-
standardDeviationFn: standardDeviationFn
|
|
217
|
-
};
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import { GridApi, ColumnState } from 'ag-grid-community';
|
|
3
|
-
/**
|
|
4
|
-
* 分页状态接口
|
|
5
|
-
*/
|
|
6
|
-
export interface PaginationState {
|
|
7
|
-
pageSize: number;
|
|
8
|
-
current: number;
|
|
9
|
-
total: number;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* 请求参数接口
|
|
13
|
-
*/
|
|
14
|
-
export interface RequestParams {
|
|
15
|
-
filter: any;
|
|
16
|
-
current: number;
|
|
17
|
-
skipCount: number;
|
|
18
|
-
maxResultCount: number;
|
|
19
|
-
sorter: string;
|
|
20
|
-
[key: string]: any;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* 请求响应接口
|
|
24
|
-
*/
|
|
25
|
-
export interface RequestResponse {
|
|
26
|
-
data: any[];
|
|
27
|
-
total: number;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Hook 配置接口
|
|
31
|
-
*/
|
|
32
|
-
export interface UseAgGridDataConfig {
|
|
33
|
-
/** 请求函数 */
|
|
34
|
-
request?: (params: RequestParams, sort: any, filter: any) => Promise<RequestResponse>;
|
|
35
|
-
/** 静态数据源 */
|
|
36
|
-
dataSource?: any[];
|
|
37
|
-
/** 初始分页大小 */
|
|
38
|
-
pageSize?: number;
|
|
39
|
-
/** 是否隐藏分页 */
|
|
40
|
-
hidePagination?: boolean;
|
|
41
|
-
/** 外部 loading 状态 */
|
|
42
|
-
loading?: boolean;
|
|
43
|
-
/** 额外的请求参数 */
|
|
44
|
-
gridParams?: any;
|
|
45
|
-
/** 列过滤模型转换函数 */
|
|
46
|
-
convertFilterModel?: (queryFilter: any, colDefs: import('../types').ExtendedColDef[]) => any;
|
|
47
|
-
/** 所有列定义 */
|
|
48
|
-
allColDefs?: import('../types').ExtendedColDef[];
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Hook 返回值接口
|
|
52
|
-
*/
|
|
53
|
-
export interface UseAgGridDataReturn {
|
|
54
|
-
rowData: any[];
|
|
55
|
-
loading: boolean;
|
|
56
|
-
pagination: PaginationState;
|
|
57
|
-
queryFilter: any;
|
|
58
|
-
sortColumn?: ColumnState;
|
|
59
|
-
ready: boolean;
|
|
60
|
-
setRowData: React.Dispatch<React.SetStateAction<any[]>>;
|
|
61
|
-
setLoading: React.Dispatch<React.SetStateAction<boolean>>;
|
|
62
|
-
setPagination: React.Dispatch<React.SetStateAction<PaginationState>>;
|
|
63
|
-
setQueryFilter: React.Dispatch<React.SetStateAction<any>>;
|
|
64
|
-
setSortColumn: React.Dispatch<React.SetStateAction<ColumnState | undefined>>;
|
|
65
|
-
setReady: React.Dispatch<React.SetStateAction<boolean>>;
|
|
66
|
-
onRequest: (filter: any) => void;
|
|
67
|
-
onRefresh: () => void;
|
|
68
|
-
handleSortChanged: (columnApi: GridApi) => void;
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* AG-Grid 数据获取和分页管理 Hook
|
|
72
|
-
*
|
|
73
|
-
* @description
|
|
74
|
-
* 处理 AG-Grid 的数据请求、分页、排序、筛选等逻辑
|
|
75
|
-
*
|
|
76
|
-
* @example
|
|
77
|
-
* ```tsx
|
|
78
|
-
* const {
|
|
79
|
-
* rowData,
|
|
80
|
-
* loading,
|
|
81
|
-
* pagination,
|
|
82
|
-
* onRequest,
|
|
83
|
-
* onRefresh
|
|
84
|
-
* } = useAgGridData({
|
|
85
|
-
* request: fetchData,
|
|
86
|
-
* pageSize: 50,
|
|
87
|
-
* gridParams: { status: 'active' }
|
|
88
|
-
* });
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
|
-
export declare function useAgGridData(config: UseAgGridDataConfig): UseAgGridDataReturn;
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
|
-
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
|
-
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
5
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
|
|
6
|
-
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
7
|
-
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
8
|
-
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."); }
|
|
9
|
-
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); }
|
|
10
|
-
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; }
|
|
11
|
-
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; } }
|
|
12
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
13
|
-
import { useState, useEffect, useCallback, useRef } from 'react';
|
|
14
|
-
import { message } from 'antd';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* 分页状态接口
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* 请求参数接口
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
* 请求响应接口
|
|
26
|
-
*/
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Hook 配置接口
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Hook 返回值接口
|
|
34
|
-
*/
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* 获取排序字符串
|
|
38
|
-
*/
|
|
39
|
-
function getSort(columnState) {
|
|
40
|
-
return columnState ? "".concat(columnState.colId, " ").concat(columnState.sort) : '';
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* AG-Grid 数据获取和分页管理 Hook
|
|
45
|
-
*
|
|
46
|
-
* @description
|
|
47
|
-
* 处理 AG-Grid 的数据请求、分页、排序、筛选等逻辑
|
|
48
|
-
*
|
|
49
|
-
* @example
|
|
50
|
-
* ```tsx
|
|
51
|
-
* const {
|
|
52
|
-
* rowData,
|
|
53
|
-
* loading,
|
|
54
|
-
* pagination,
|
|
55
|
-
* onRequest,
|
|
56
|
-
* onRefresh
|
|
57
|
-
* } = useAgGridData({
|
|
58
|
-
* request: fetchData,
|
|
59
|
-
* pageSize: 50,
|
|
60
|
-
* gridParams: { status: 'active' }
|
|
61
|
-
* });
|
|
62
|
-
* ```
|
|
63
|
-
*/
|
|
64
|
-
export function useAgGridData(config) {
|
|
65
|
-
var request = config.request,
|
|
66
|
-
dataSource = config.dataSource,
|
|
67
|
-
initialPageSize = config.pageSize,
|
|
68
|
-
hidePagination = config.hidePagination,
|
|
69
|
-
loadingProps = config.loading,
|
|
70
|
-
gridParams = config.gridParams,
|
|
71
|
-
convertFilterModel = config.convertFilterModel,
|
|
72
|
-
allColDefs = config.allColDefs;
|
|
73
|
-
|
|
74
|
-
// 状态管理
|
|
75
|
-
var _useState = useState(false),
|
|
76
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
77
|
-
ready = _useState2[0],
|
|
78
|
-
setReady = _useState2[1];
|
|
79
|
-
var _useState3 = useState(loadingProps !== null && loadingProps !== void 0 ? loadingProps : false),
|
|
80
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
81
|
-
loading = _useState4[0],
|
|
82
|
-
setLoading = _useState4[1];
|
|
83
|
-
var _useState5 = useState([]),
|
|
84
|
-
_useState6 = _slicedToArray(_useState5, 2),
|
|
85
|
-
rowData = _useState6[0],
|
|
86
|
-
setRowData = _useState6[1];
|
|
87
|
-
var _useState7 = useState({}),
|
|
88
|
-
_useState8 = _slicedToArray(_useState7, 2),
|
|
89
|
-
queryFilter = _useState8[0],
|
|
90
|
-
setQueryFilter = _useState8[1];
|
|
91
|
-
var _useState9 = useState(),
|
|
92
|
-
_useState10 = _slicedToArray(_useState9, 2),
|
|
93
|
-
sortColumn = _useState10[0],
|
|
94
|
-
setSortColumn = _useState10[1];
|
|
95
|
-
|
|
96
|
-
// 初始化分页参数
|
|
97
|
-
var _useState11 = useState({
|
|
98
|
-
pageSize: initialPageSize !== null && initialPageSize !== void 0 ? initialPageSize : hidePagination ? 10000 : 200,
|
|
99
|
-
current: 1,
|
|
100
|
-
total: dataSource ? dataSource.length : 0
|
|
101
|
-
}),
|
|
102
|
-
_useState12 = _slicedToArray(_useState11, 2),
|
|
103
|
-
pagination = _useState12[0],
|
|
104
|
-
setPagination = _useState12[1];
|
|
105
|
-
|
|
106
|
-
// 用于防止不必要的请求
|
|
107
|
-
var requestInProgressRef = useRef(false);
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* 发起数据请求
|
|
111
|
-
*/
|
|
112
|
-
var onRequest = useCallback(function (filter) {
|
|
113
|
-
if (!request || requestInProgressRef.current) return;
|
|
114
|
-
requestInProgressRef.current = true;
|
|
115
|
-
setLoading(true);
|
|
116
|
-
|
|
117
|
-
// 转换筛选模型
|
|
118
|
-
var convertedFilter = convertFilterModel && allColDefs ? convertFilterModel(filter, allColDefs) : filter;
|
|
119
|
-
var params = _objectSpread(_objectSpread({
|
|
120
|
-
filter: convertedFilter
|
|
121
|
-
}, gridParams), {}, {
|
|
122
|
-
current: pagination.current,
|
|
123
|
-
skipCount: pagination.current === 1 ? 0 : (pagination.current - 1) * pagination.pageSize,
|
|
124
|
-
maxResultCount: pagination.pageSize,
|
|
125
|
-
sorter: getSort(sortColumn)
|
|
126
|
-
});
|
|
127
|
-
request(params, undefined, filter).then(function (response) {
|
|
128
|
-
var newRowData = response.data;
|
|
129
|
-
var rowCount = response.total;
|
|
130
|
-
setRowData(newRowData);
|
|
131
|
-
setPagination(function (prev) {
|
|
132
|
-
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
133
|
-
total: rowCount
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
}).catch(function (error) {
|
|
137
|
-
console.error('[useAgGridData] 请求失败:', error);
|
|
138
|
-
message.error((error === null || error === void 0 ? void 0 : error.message) || '数据加载失败,请重试');
|
|
139
|
-
}).finally(function () {
|
|
140
|
-
setLoading(false);
|
|
141
|
-
requestInProgressRef.current = false;
|
|
142
|
-
});
|
|
143
|
-
}, [request, gridParams, pagination.current, pagination.pageSize, sortColumn, convertFilterModel, allColDefs]);
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* 刷新数据
|
|
147
|
-
*/
|
|
148
|
-
var onRefresh = useCallback(function () {
|
|
149
|
-
if (request) {
|
|
150
|
-
onRequest(queryFilter);
|
|
151
|
-
}
|
|
152
|
-
}, [request, queryFilter, onRequest]);
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* 处理排序变化
|
|
156
|
-
*/
|
|
157
|
-
var handleSortChanged = useCallback(function (columnApi) {
|
|
158
|
-
var sortedColumn = columnApi.getColumnState().find(function (col) {
|
|
159
|
-
return Boolean(col.sort);
|
|
160
|
-
});
|
|
161
|
-
setSortColumn(sortedColumn);
|
|
162
|
-
}, []);
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* 监听外部 loading 状态变化
|
|
166
|
-
*/
|
|
167
|
-
useEffect(function () {
|
|
168
|
-
if (loadingProps !== undefined) {
|
|
169
|
-
setLoading(loadingProps);
|
|
170
|
-
}
|
|
171
|
-
}, [loadingProps]);
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* 监听静态数据源变化
|
|
175
|
-
*/
|
|
176
|
-
useEffect(function () {
|
|
177
|
-
if (dataSource) {
|
|
178
|
-
setRowData(dataSource);
|
|
179
|
-
setPagination(function (prev) {
|
|
180
|
-
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
181
|
-
total: dataSource.length
|
|
182
|
-
});
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
}, [dataSource]);
|
|
186
|
-
|
|
187
|
-
/**
|
|
188
|
-
* 自动请求数据(当相关参数变化时)
|
|
189
|
-
*/
|
|
190
|
-
useEffect(function () {
|
|
191
|
-
if (ready && request) {
|
|
192
|
-
onRequest(queryFilter);
|
|
193
|
-
}
|
|
194
|
-
}, [ready, pagination.pageSize, pagination.current]);
|
|
195
|
-
|
|
196
|
-
// 监听 gridParams 和 sortColumn 变化(使用 JSON 序列化进行比较)
|
|
197
|
-
var gridParamsRef = useRef(gridParams);
|
|
198
|
-
var sortColumnRef = useRef(sortColumn);
|
|
199
|
-
useEffect(function () {
|
|
200
|
-
var gridParamsChanged = JSON.stringify(gridParams) !== JSON.stringify(gridParamsRef.current);
|
|
201
|
-
var sortColumnChanged = JSON.stringify(sortColumn) !== JSON.stringify(sortColumnRef.current);
|
|
202
|
-
if (ready && request && (gridParamsChanged || sortColumnChanged)) {
|
|
203
|
-
gridParamsRef.current = gridParams;
|
|
204
|
-
sortColumnRef.current = sortColumn;
|
|
205
|
-
onRequest(queryFilter);
|
|
206
|
-
}
|
|
207
|
-
}, [gridParams, sortColumn, ready, request, queryFilter, onRequest]);
|
|
208
|
-
return {
|
|
209
|
-
rowData: rowData,
|
|
210
|
-
loading: loading,
|
|
211
|
-
pagination: pagination,
|
|
212
|
-
queryFilter: queryFilter,
|
|
213
|
-
sortColumn: sortColumn,
|
|
214
|
-
ready: ready,
|
|
215
|
-
setRowData: setRowData,
|
|
216
|
-
setLoading: setLoading,
|
|
217
|
-
setPagination: setPagination,
|
|
218
|
-
setQueryFilter: setQueryFilter,
|
|
219
|
-
setSortColumn: setSortColumn,
|
|
220
|
-
setReady: setReady,
|
|
221
|
-
onRequest: onRequest,
|
|
222
|
-
onRefresh: onRefresh,
|
|
223
|
-
handleSortChanged: handleSortChanged
|
|
224
|
-
};
|
|
225
|
-
}
|