@nokecy/qc-ui 1.1.79 → 1.1.81
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/ag-grid-plus/ag-gridPlus.js +2 -12
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.d.ts +13 -2
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +26 -15
- package/dist/cjs/array-table/readOnlyFormatters.d.ts +26 -0
- package/dist/cjs/array-table/readOnlyFormatters.js +69 -1
- package/dist/cjs/array-table/utils.js +38 -3
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +22 -0
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +3 -13
- package/dist/esm/ag-grid-plus/utils/columnProcessors.d.ts +13 -2
- package/dist/esm/ag-grid-plus/utils/columnProcessors.js +25 -15
- package/dist/esm/array-table/readOnlyFormatters.d.ts +26 -0
- package/dist/esm/array-table/readOnlyFormatters.js +68 -0
- package/dist/esm/array-table/utils.js +39 -4
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +3 -0
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +1 -1
|
@@ -453,18 +453,8 @@ function AgGridPlus(props) {
|
|
|
453
453
|
return undefined;
|
|
454
454
|
};
|
|
455
455
|
|
|
456
|
-
// 辅助函数:
|
|
457
|
-
var cellRenderer =
|
|
458
|
-
var value = params.value,
|
|
459
|
-
node = params.node,
|
|
460
|
-
colDef = params.colDef;
|
|
461
|
-
//@ts-ignore
|
|
462
|
-
if (node.isRowPinned() || !colDef.customCellRenderer) {
|
|
463
|
-
return value;
|
|
464
|
-
}
|
|
465
|
-
//@ts-ignore
|
|
466
|
-
return colDef.customCellRenderer(params);
|
|
467
|
-
};
|
|
456
|
+
// 辅助函数: 自定义单元格渲染器(无自定义渲染器时显示 valueFormatter 的结果,见 renderDefaultCell)
|
|
457
|
+
var cellRenderer = _columnProcessors.renderDefaultCell;
|
|
468
458
|
|
|
469
459
|
// 辅助函数: 处理单个列配置
|
|
470
460
|
var processColumnConfig = function processColumnConfig(col, data) {
|
|
@@ -95,13 +95,24 @@ export declare function processEnumColumn(col: any, dataType?: DataTypeInference
|
|
|
95
95
|
* @returns 处理后的列定义
|
|
96
96
|
*/
|
|
97
97
|
export declare function processEllipsisColumn(col: any): ColDef;
|
|
98
|
+
/**
|
|
99
|
+
* 默认单元格渲染:固定行(合计等)显示原值;数据行有自定义渲染器(`customCellRenderer`)时交给它;
|
|
100
|
+
* 否则显示 `valueFormatted`(列上配了 `valueFormatter` 时由 AG Grid 算好),没配则显示原值。
|
|
101
|
+
*
|
|
102
|
+
* 以前这里直接返回 `params.value`,普通列(没有 `type`、没有自定义渲染器)上写的 `valueFormatter`
|
|
103
|
+
* 被绕过:状态码列显示原码、「0/1」列显示 0/1,而不是格式化后的文字。
|
|
104
|
+
* 固定行保持原行为:格式化函数多按数据行写,空值常被格式化成「—」,不能让合计行冒出占位符。
|
|
105
|
+
*
|
|
106
|
+
* @author nokecy
|
|
107
|
+
*/
|
|
108
|
+
export declare function renderDefaultCell(params: ICellRendererParams): any;
|
|
98
109
|
/**
|
|
99
110
|
* 创建自定义单元格渲染器包装
|
|
100
111
|
*
|
|
101
|
-
* @param
|
|
112
|
+
* @param _customRenderer 保留参数,实际取列上的 `customCellRenderer`
|
|
102
113
|
* @returns 包装后的渲染器
|
|
103
114
|
*/
|
|
104
|
-
export declare function createCellRenderer(
|
|
115
|
+
export declare function createCellRenderer(_customRenderer?: any): typeof renderDefaultCell;
|
|
105
116
|
/**
|
|
106
117
|
* 构建查询表单项
|
|
107
118
|
*
|
|
@@ -12,6 +12,7 @@ exports.inferDataType = inferDataType;
|
|
|
12
12
|
exports.mergeInferredColumnType = mergeInferredColumnType;
|
|
13
13
|
exports.processEllipsisColumn = processEllipsisColumn;
|
|
14
14
|
exports.processEnumColumn = processEnumColumn;
|
|
15
|
+
exports.renderDefaultCell = renderDefaultCell;
|
|
15
16
|
exports.toColumnType = toColumnType;
|
|
16
17
|
var _react = _interopRequireDefault(require("react"));
|
|
17
18
|
var _antd = require("antd");
|
|
@@ -245,26 +246,36 @@ function processEllipsisColumn(col) {
|
|
|
245
246
|
});
|
|
246
247
|
}
|
|
247
248
|
|
|
249
|
+
/**
|
|
250
|
+
* 默认单元格渲染:固定行(合计等)显示原值;数据行有自定义渲染器(`customCellRenderer`)时交给它;
|
|
251
|
+
* 否则显示 `valueFormatted`(列上配了 `valueFormatter` 时由 AG Grid 算好),没配则显示原值。
|
|
252
|
+
*
|
|
253
|
+
* 以前这里直接返回 `params.value`,普通列(没有 `type`、没有自定义渲染器)上写的 `valueFormatter`
|
|
254
|
+
* 被绕过:状态码列显示原码、「0/1」列显示 0/1,而不是格式化后的文字。
|
|
255
|
+
* 固定行保持原行为:格式化函数多按数据行写,空值常被格式化成「—」,不能让合计行冒出占位符。
|
|
256
|
+
*
|
|
257
|
+
* @author nokecy
|
|
258
|
+
*/
|
|
259
|
+
function renderDefaultCell(params) {
|
|
260
|
+
var _node$isRowPinned;
|
|
261
|
+
var value = params.value,
|
|
262
|
+
valueFormatted = params.valueFormatted,
|
|
263
|
+
node = params.node,
|
|
264
|
+
colDef = params.colDef;
|
|
265
|
+
if (node !== null && node !== void 0 && (_node$isRowPinned = node.isRowPinned) !== null && _node$isRowPinned !== void 0 && _node$isRowPinned.call(node)) return value;
|
|
266
|
+
var customRenderer = colDef === null || colDef === void 0 ? void 0 : colDef.customCellRenderer;
|
|
267
|
+
if (!customRenderer) return valueFormatted !== null && valueFormatted !== void 0 ? valueFormatted : value;
|
|
268
|
+
return customRenderer(params);
|
|
269
|
+
}
|
|
270
|
+
|
|
248
271
|
/**
|
|
249
272
|
* 创建自定义单元格渲染器包装
|
|
250
273
|
*
|
|
251
|
-
* @param
|
|
274
|
+
* @param _customRenderer 保留参数,实际取列上的 `customCellRenderer`
|
|
252
275
|
* @returns 包装后的渲染器
|
|
253
276
|
*/
|
|
254
|
-
function createCellRenderer(
|
|
255
|
-
return
|
|
256
|
-
var value = params.value,
|
|
257
|
-
node = params.node,
|
|
258
|
-
colDef = params.colDef;
|
|
259
|
-
|
|
260
|
-
// 固定行或没有自定义渲染器时,直接返回值
|
|
261
|
-
if (node.isRowPinned() || !colDef.customCellRenderer) {
|
|
262
|
-
return value;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
// 使用自定义渲染器
|
|
266
|
-
return colDef.customCellRenderer(params);
|
|
267
|
-
};
|
|
277
|
+
function createCellRenderer(_customRenderer) {
|
|
278
|
+
return renderDefaultCell;
|
|
268
279
|
}
|
|
269
280
|
|
|
270
281
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
1
2
|
export type ReadOnlyFormatterCtx = {
|
|
2
3
|
/** 列的 x-component-props(headerName/width/options/format 等) */
|
|
3
4
|
columnProps: any;
|
|
@@ -15,6 +16,31 @@ export type ReadOnlyFormatter = (value: any, ctx: ReadOnlyFormatterCtx) => strin
|
|
|
15
16
|
export declare const fallbackFormatter: ReadOnlyFormatter;
|
|
16
17
|
/** 消费方扩展自定义只读列的显示逻辑 */
|
|
17
18
|
export declare const registerReadOnlyFormatter: (component: string, formatter: ReadOnlyFormatter) => void;
|
|
19
|
+
/** 值 -> 名称表:对象 `{ '10': '参与' }`,或与 Select 同形的选项数组 `[{ label, value }]` */
|
|
20
|
+
export type ReadOnlyLabels = Record<string, string> | Array<{
|
|
21
|
+
label?: any;
|
|
22
|
+
value?: any;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* 给业务自定义选择器登记「值 -> 名称」,ArrayTable 未激活的格子与只读列按名称出文本。
|
|
26
|
+
*
|
|
27
|
+
* 业务组件(如「执行动作」「是否参与校验」这类固定选项的选择器)不在内置注册表里,
|
|
28
|
+
* 格子文本会走兜底格式化器把原值原样显示(10、00 这类编码)。在组件模块里调用一次即可,
|
|
29
|
+
* 所有用到该 x-component 的列都生效;同一组件在不同 Schema 里注册名不同时传名字数组。
|
|
30
|
+
* 按 String 宽松比对(容忍后端返回数字/字符串漂移);labelInValue 对象显示其 label;
|
|
31
|
+
* 数组逐个映射后逗号拼接;表里没有的值原样显示。@author nokecy
|
|
32
|
+
*/
|
|
33
|
+
export declare const registerReadOnlyLabels: (component: string | string[], labels: ReadOnlyLabels) => void;
|
|
34
|
+
/** 只读渲染器:按值出一段 React 内容(如组件自己的阅读态 Tag),格子未激活和只读列都用它显示 */
|
|
35
|
+
export type ReadOnlyRenderer = (value: any, ctx: ReadOnlyFormatterCtx) => ReactNode;
|
|
36
|
+
/**
|
|
37
|
+
* 给业务自定义组件登记只读渲染器。登记后 ArrayTable 可编辑列未激活的格子、只读列都渲染它的返回内容,
|
|
38
|
+
* 与组件自己的阅读态一致(例如带颜色的 Tag),仍不挂 Formily 字段树。空值不调用渲染器(出占位/留空)。
|
|
39
|
+
* 只要文字时用 registerReadOnlyLabels;两者都登记时显示走渲染器。@author nokecy
|
|
40
|
+
*/
|
|
41
|
+
export declare const registerReadOnlyRenderer: (component: string | string[], renderer: ReadOnlyRenderer) => void;
|
|
42
|
+
/** 取某组件类型的只读渲染器,未登记返回 null */
|
|
43
|
+
export declare const getReadOnlyRenderer: (component: string | undefined) => ReadOnlyRenderer | null;
|
|
18
44
|
/**
|
|
19
45
|
* 取某组件类型的只读格式化器。命中返回函数,未命中返回 null(调用方回退 AgField)。
|
|
20
46
|
*/
|
|
@@ -3,9 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.registerReadOnlyFormatter = exports.getReadOnlyFormatter = exports.fallbackFormatter = void 0;
|
|
6
|
+
exports.registerReadOnlyRenderer = exports.registerReadOnlyLabels = exports.registerReadOnlyFormatter = exports.getReadOnlyRenderer = exports.getReadOnlyFormatter = exports.fallbackFormatter = void 0;
|
|
7
7
|
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
8
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
10
|
+
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."); }
|
|
11
|
+
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); }
|
|
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; }
|
|
13
|
+
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; } }
|
|
14
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
9
15
|
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); } /**
|
|
10
16
|
* 只读列「纯文本快路径」格式化器注册表
|
|
11
17
|
*
|
|
@@ -127,6 +133,68 @@ var registerReadOnlyFormatter = exports.registerReadOnlyFormatter = function reg
|
|
|
127
133
|
registry[component] = formatter;
|
|
128
134
|
};
|
|
129
135
|
|
|
136
|
+
/** 值 -> 名称表:对象 `{ '10': '参与' }`,或与 Select 同形的选项数组 `[{ label, value }]` */
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* 给业务自定义选择器登记「值 -> 名称」,ArrayTable 未激活的格子与只读列按名称出文本。
|
|
140
|
+
*
|
|
141
|
+
* 业务组件(如「执行动作」「是否参与校验」这类固定选项的选择器)不在内置注册表里,
|
|
142
|
+
* 格子文本会走兜底格式化器把原值原样显示(10、00 这类编码)。在组件模块里调用一次即可,
|
|
143
|
+
* 所有用到该 x-component 的列都生效;同一组件在不同 Schema 里注册名不同时传名字数组。
|
|
144
|
+
* 按 String 宽松比对(容忍后端返回数字/字符串漂移);labelInValue 对象显示其 label;
|
|
145
|
+
* 数组逐个映射后逗号拼接;表里没有的值原样显示。@author nokecy
|
|
146
|
+
*/
|
|
147
|
+
var registerReadOnlyLabels = exports.registerReadOnlyLabels = function registerReadOnlyLabels(component, labels) {
|
|
148
|
+
var map = new Map();
|
|
149
|
+
if (Array.isArray(labels)) {
|
|
150
|
+
labels.forEach(function (o) {
|
|
151
|
+
var _o$label;
|
|
152
|
+
if (o && o.value != null) map.set(String(o.value), String((_o$label = o.label) !== null && _o$label !== void 0 ? _o$label : o.value));
|
|
153
|
+
});
|
|
154
|
+
} else {
|
|
155
|
+
Object.entries(labels !== null && labels !== void 0 ? labels : {}).forEach(function (_ref7) {
|
|
156
|
+
var _ref8 = _slicedToArray(_ref7, 2),
|
|
157
|
+
k = _ref8[0],
|
|
158
|
+
v = _ref8[1];
|
|
159
|
+
return map.set(String(k), String(v));
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
var toText = function toText(v) {
|
|
163
|
+
var _ref9, _v$label, _map$get;
|
|
164
|
+
if (v == null || v === '') return '';
|
|
165
|
+
if (_typeof(v) === 'object') return String((_ref9 = (_v$label = v.label) !== null && _v$label !== void 0 ? _v$label : v.value) !== null && _ref9 !== void 0 ? _ref9 : '');
|
|
166
|
+
return (_map$get = map.get(String(v))) !== null && _map$get !== void 0 ? _map$get : String(v);
|
|
167
|
+
};
|
|
168
|
+
var formatter = function formatter(value) {
|
|
169
|
+
return Array.isArray(value) ? value.map(toText).filter(Boolean).join(', ') : toText(value);
|
|
170
|
+
};
|
|
171
|
+
(Array.isArray(component) ? component : [component]).forEach(function (name) {
|
|
172
|
+
return registerReadOnlyFormatter(name, formatter);
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/** 只读渲染器:按值出一段 React 内容(如组件自己的阅读态 Tag),格子未激活和只读列都用它显示 */
|
|
177
|
+
|
|
178
|
+
var renderers = {};
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* 给业务自定义组件登记只读渲染器。登记后 ArrayTable 可编辑列未激活的格子、只读列都渲染它的返回内容,
|
|
182
|
+
* 与组件自己的阅读态一致(例如带颜色的 Tag),仍不挂 Formily 字段树。空值不调用渲染器(出占位/留空)。
|
|
183
|
+
* 只要文字时用 registerReadOnlyLabels;两者都登记时显示走渲染器。@author nokecy
|
|
184
|
+
*/
|
|
185
|
+
var registerReadOnlyRenderer = exports.registerReadOnlyRenderer = function registerReadOnlyRenderer(component, renderer) {
|
|
186
|
+
(Array.isArray(component) ? component : [component]).forEach(function (name) {
|
|
187
|
+
renderers[name] = renderer;
|
|
188
|
+
});
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/** 取某组件类型的只读渲染器,未登记返回 null */
|
|
192
|
+
var getReadOnlyRenderer = exports.getReadOnlyRenderer = function getReadOnlyRenderer(component) {
|
|
193
|
+
var _renderers$component;
|
|
194
|
+
if (!component) return null;
|
|
195
|
+
return (_renderers$component = renderers[component]) !== null && _renderers$component !== void 0 ? _renderers$component : null;
|
|
196
|
+
};
|
|
197
|
+
|
|
130
198
|
/**
|
|
131
199
|
* 取某组件类型的只读格式化器。命中返回函数,未命中返回 null(调用方回退 AgField)。
|
|
132
200
|
*/
|
|
@@ -351,6 +351,7 @@ var LazyAgField = exports.LazyAgField = function LazyAgField(params) {
|
|
|
351
351
|
colDef = params.colDef,
|
|
352
352
|
context = params.context,
|
|
353
353
|
formatter = params.formatter,
|
|
354
|
+
renderer = params.renderer,
|
|
354
355
|
columnProps = params.columnProps,
|
|
355
356
|
fieldSchema = params.fieldSchema,
|
|
356
357
|
required = params.required;
|
|
@@ -470,6 +471,11 @@ var LazyAgField = exports.LazyAgField = function LazyAgField(params) {
|
|
|
470
471
|
}
|
|
471
472
|
}, resolveEmptyPlaceholder(fieldSchema));
|
|
472
473
|
}
|
|
474
|
+
// 登记了只读渲染器的组件(如带颜色的 Tag)按渲染器出内容,与组件自己的阅读态一致
|
|
475
|
+
var shown = renderer && text !== '' ? renderer(liveValue, {
|
|
476
|
+
columnProps: columnProps,
|
|
477
|
+
fieldSchema: fieldSchema
|
|
478
|
+
}) : text;
|
|
473
479
|
return /*#__PURE__*/_react.default.createElement("span", {
|
|
474
480
|
className: "ag-array-table-lazy-text",
|
|
475
481
|
style: {
|
|
@@ -477,7 +483,7 @@ var LazyAgField = exports.LazyAgField = function LazyAgField(params) {
|
|
|
477
483
|
width: '100%',
|
|
478
484
|
cursor: 'text'
|
|
479
485
|
}
|
|
480
|
-
},
|
|
486
|
+
}, shown);
|
|
481
487
|
});
|
|
482
488
|
};
|
|
483
489
|
|
|
@@ -497,6 +503,7 @@ var LazyReadOnlyText = exports.LazyReadOnlyText = function LazyReadOnlyText(para
|
|
|
497
503
|
record = params.data,
|
|
498
504
|
colDef = params.colDef,
|
|
499
505
|
formatter = params.formatter,
|
|
506
|
+
renderer = params.renderer,
|
|
500
507
|
columnProps = params.columnProps,
|
|
501
508
|
fieldSchema = params.fieldSchema;
|
|
502
509
|
var dataKey = (_fieldSchema$name2 = fieldSchema === null || fieldSchema === void 0 ? void 0 : fieldSchema.name) !== null && _fieldSchema$name2 !== void 0 ? _fieldSchema$name2 : colDef === null || colDef === void 0 ? void 0 : colDef.field;
|
|
@@ -506,13 +513,17 @@ var LazyReadOnlyText = exports.LazyReadOnlyText = function LazyReadOnlyText(para
|
|
|
506
513
|
columnProps: columnProps,
|
|
507
514
|
fieldSchema: fieldSchema
|
|
508
515
|
}) : liveValue == null ? '' : String(liveValue);
|
|
516
|
+
var shown = renderer && text !== '' ? renderer(liveValue, {
|
|
517
|
+
columnProps: columnProps,
|
|
518
|
+
fieldSchema: fieldSchema
|
|
519
|
+
}) : text;
|
|
509
520
|
return /*#__PURE__*/_react.default.createElement("span", {
|
|
510
521
|
className: "ag-array-table-readonly-text",
|
|
511
522
|
style: {
|
|
512
523
|
display: 'inline-block',
|
|
513
524
|
width: '100%'
|
|
514
525
|
}
|
|
515
|
-
},
|
|
526
|
+
}, shown);
|
|
516
527
|
});
|
|
517
528
|
};
|
|
518
529
|
|
|
@@ -632,7 +643,9 @@ var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArra
|
|
|
632
643
|
var readOnly = isColumnReadOnlyEligible(arrayPattern, dataField, columnProps);
|
|
633
644
|
// 可编辑的数据字段(非 void 操作按钮)即使是业务自定义组件,也按兜底格式化器出懒挂载文本,默认阅读态;
|
|
634
645
|
// 只读列不兜底:自定义只读组件常显示别的字段(如 SiblingText),按自身值出文本会错。@author nokecy
|
|
635
|
-
|
|
646
|
+
// 登记了只读渲染器的组件只读列也走快路径(渲染器出内容,兜底格式化器只用于判空)。@author nokecy
|
|
647
|
+
var renderer = (0, _readOnlyFormatters.getReadOnlyRenderer)(component);
|
|
648
|
+
var formatter = (_getReadOnlyFormatter = (0, _readOnlyFormatters.getReadOnlyFormatter)(component)) !== null && _getReadOnlyFormatter !== void 0 ? _getReadOnlyFormatter : (!readOnly || renderer) && component && (dataField === null || dataField === void 0 ? void 0 : dataField.type) !== 'void' ? _readOnlyFormatters.fallbackFormatter : null;
|
|
636
649
|
var hasReactions = !!(dataField && dataField['x-reactions']);
|
|
637
650
|
if (!readOnly) applyNumberInputDefaults(dataField);
|
|
638
651
|
var forceEager = (columnProps === null || columnProps === void 0 ? void 0 : columnProps.forceAgField) === true;
|
|
@@ -665,11 +678,32 @@ var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArra
|
|
|
665
678
|
cellRenderer: LazyReadOnlyText,
|
|
666
679
|
cellRendererParams: {
|
|
667
680
|
formatter: formatter,
|
|
681
|
+
renderer: renderer,
|
|
668
682
|
columnProps: columnProps,
|
|
669
683
|
fieldSchema: dataField
|
|
670
684
|
}
|
|
671
685
|
}));
|
|
672
686
|
}
|
|
687
|
+
if (renderer) {
|
|
688
|
+
// 登记了渲染器:整表阅读态也出渲染器内容(如 Tag),不退化成纯文字
|
|
689
|
+
return emit(_objectSpread(_objectSpread(_objectSpread({}, base), valueGetter ? {
|
|
690
|
+
valueGetter: valueGetter
|
|
691
|
+
} : {}), {}, {
|
|
692
|
+
cellRenderer: function cellRenderer(params) {
|
|
693
|
+
var ctx = {
|
|
694
|
+
columnProps: columnProps,
|
|
695
|
+
fieldSchema: dataField
|
|
696
|
+
};
|
|
697
|
+
return formatter(params.value, ctx) === '' ? '' : renderer(params.value, ctx);
|
|
698
|
+
},
|
|
699
|
+
valueFormatter: function valueFormatter(params) {
|
|
700
|
+
return formatter(params.value, {
|
|
701
|
+
columnProps: columnProps,
|
|
702
|
+
fieldSchema: dataField
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
}));
|
|
706
|
+
}
|
|
673
707
|
return emit(_objectSpread(_objectSpread(_objectSpread({}, base), valueGetter ? {
|
|
674
708
|
valueGetter: valueGetter
|
|
675
709
|
} : {}), {}, {
|
|
@@ -695,6 +729,7 @@ var buildArrayTableColumns = exports.buildArrayTableColumns = function buildArra
|
|
|
695
729
|
schema: schema,
|
|
696
730
|
field: field,
|
|
697
731
|
formatter: formatter,
|
|
732
|
+
renderer: renderer,
|
|
698
733
|
columnProps: columnProps,
|
|
699
734
|
fieldSchema: dataField,
|
|
700
735
|
lazyEditable: true,
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -29,6 +29,8 @@ export type * from "./importModal";
|
|
|
29
29
|
export type * from "./fullScreenAlert";
|
|
30
30
|
export type * from "./RuleBuilder";
|
|
31
31
|
export type { ColumnConfig } from "./array-table/columnHelper";
|
|
32
|
+
export { registerReadOnlyFormatter, registerReadOnlyLabels, registerReadOnlyRenderer } from "./array-table/readOnlyFormatters";
|
|
33
|
+
export type { ReadOnlyFormatter, ReadOnlyFormatterCtx, ReadOnlyLabels, ReadOnlyRenderer } from "./array-table/readOnlyFormatters";
|
|
32
34
|
export type { CentralizedColumnScheme, QueryScheme, SchemeStorageAdapter, SchemeSyncDataDto, CurrentSchemeDto, SchemeStorageConfig, LocalStorageAdapterConfig, BackendApiAdapterConfig, UseSchemeManagerConfig, GridPlusContextValue, GlobalConfigPermissions, } from "./ag-grid-plus";
|
|
33
35
|
export * from './adapters';
|
|
34
36
|
export * from "./readPretty";
|
package/dist/cjs/index.js
CHANGED
|
@@ -48,6 +48,9 @@ var _exportNames = {
|
|
|
48
48
|
FlagsSelector: true,
|
|
49
49
|
MatchItem: true,
|
|
50
50
|
RegexRailroadDiagram: true,
|
|
51
|
+
registerReadOnlyFormatter: true,
|
|
52
|
+
registerReadOnlyLabels: true,
|
|
53
|
+
registerReadOnlyRenderer: true,
|
|
51
54
|
createEntitySelect: true,
|
|
52
55
|
ExportButton: true,
|
|
53
56
|
buildExportUrl: true,
|
|
@@ -380,6 +383,24 @@ Object.defineProperty(exports, "nonNegativeDecimal", {
|
|
|
380
383
|
return _businessDecimal.nonNegativeDecimal;
|
|
381
384
|
}
|
|
382
385
|
});
|
|
386
|
+
Object.defineProperty(exports, "registerReadOnlyFormatter", {
|
|
387
|
+
enumerable: true,
|
|
388
|
+
get: function get() {
|
|
389
|
+
return _readOnlyFormatters.registerReadOnlyFormatter;
|
|
390
|
+
}
|
|
391
|
+
});
|
|
392
|
+
Object.defineProperty(exports, "registerReadOnlyLabels", {
|
|
393
|
+
enumerable: true,
|
|
394
|
+
get: function get() {
|
|
395
|
+
return _readOnlyFormatters.registerReadOnlyLabels;
|
|
396
|
+
}
|
|
397
|
+
});
|
|
398
|
+
Object.defineProperty(exports, "registerReadOnlyRenderer", {
|
|
399
|
+
enumerable: true,
|
|
400
|
+
get: function get() {
|
|
401
|
+
return _readOnlyFormatters.registerReadOnlyRenderer;
|
|
402
|
+
}
|
|
403
|
+
});
|
|
383
404
|
Object.defineProperty(exports, "relativeLuminance", {
|
|
384
405
|
enumerable: true,
|
|
385
406
|
get: function get() {
|
|
@@ -505,6 +526,7 @@ var _standardFormDialog = require("./standardFormDialog");
|
|
|
505
526
|
var _deleteConfirm = _interopRequireDefault(require("./deleteConfirm"));
|
|
506
527
|
var _RuleBuilder = require("./RuleBuilder");
|
|
507
528
|
var _RegexEditor = require("./components/RegexEditor");
|
|
529
|
+
var _readOnlyFormatters = require("./array-table/readOnlyFormatters");
|
|
508
530
|
var _adapters = require("./adapters");
|
|
509
531
|
Object.keys(_adapters).forEach(function (key) {
|
|
510
532
|
if (key === "default" || key === "__esModule") return;
|
|
@@ -36,7 +36,7 @@ import ToolBar from "./toolBar";
|
|
|
36
36
|
import SettingItem from "./settingItem";
|
|
37
37
|
import { RedoOutlined, FilterOutlined } from '@ant-design/icons';
|
|
38
38
|
import { convertFilterModel, dateTimeValueFormatter, dateValueFormatter, flatten, toTree } from "./utils";
|
|
39
|
-
import { mergeInferredColumnType, processEllipsisColumn, processEnumColumn } from "./utils/columnProcessors";
|
|
39
|
+
import { mergeInferredColumnType, processEllipsisColumn, processEnumColumn, renderDefaultCell } from "./utils/columnProcessors";
|
|
40
40
|
import AdvancedQueryBuilder from "./queryForm/AdvancedQueryBuilder";
|
|
41
41
|
import { v4 as uuidv4 } from 'uuid';
|
|
42
42
|
import Setting from "./setting";
|
|
@@ -445,18 +445,8 @@ function AgGridPlus(props) {
|
|
|
445
445
|
return undefined;
|
|
446
446
|
};
|
|
447
447
|
|
|
448
|
-
// 辅助函数:
|
|
449
|
-
var cellRenderer =
|
|
450
|
-
var value = params.value,
|
|
451
|
-
node = params.node,
|
|
452
|
-
colDef = params.colDef;
|
|
453
|
-
//@ts-ignore
|
|
454
|
-
if (node.isRowPinned() || !colDef.customCellRenderer) {
|
|
455
|
-
return value;
|
|
456
|
-
}
|
|
457
|
-
//@ts-ignore
|
|
458
|
-
return colDef.customCellRenderer(params);
|
|
459
|
-
};
|
|
448
|
+
// 辅助函数: 自定义单元格渲染器(无自定义渲染器时显示 valueFormatter 的结果,见 renderDefaultCell)
|
|
449
|
+
var cellRenderer = renderDefaultCell;
|
|
460
450
|
|
|
461
451
|
// 辅助函数: 处理单个列配置
|
|
462
452
|
var processColumnConfig = function processColumnConfig(col, data) {
|
|
@@ -95,13 +95,24 @@ export declare function processEnumColumn(col: any, dataType?: DataTypeInference
|
|
|
95
95
|
* @returns 处理后的列定义
|
|
96
96
|
*/
|
|
97
97
|
export declare function processEllipsisColumn(col: any): ColDef;
|
|
98
|
+
/**
|
|
99
|
+
* 默认单元格渲染:固定行(合计等)显示原值;数据行有自定义渲染器(`customCellRenderer`)时交给它;
|
|
100
|
+
* 否则显示 `valueFormatted`(列上配了 `valueFormatter` 时由 AG Grid 算好),没配则显示原值。
|
|
101
|
+
*
|
|
102
|
+
* 以前这里直接返回 `params.value`,普通列(没有 `type`、没有自定义渲染器)上写的 `valueFormatter`
|
|
103
|
+
* 被绕过:状态码列显示原码、「0/1」列显示 0/1,而不是格式化后的文字。
|
|
104
|
+
* 固定行保持原行为:格式化函数多按数据行写,空值常被格式化成「—」,不能让合计行冒出占位符。
|
|
105
|
+
*
|
|
106
|
+
* @author nokecy
|
|
107
|
+
*/
|
|
108
|
+
export declare function renderDefaultCell(params: ICellRendererParams): any;
|
|
98
109
|
/**
|
|
99
110
|
* 创建自定义单元格渲染器包装
|
|
100
111
|
*
|
|
101
|
-
* @param
|
|
112
|
+
* @param _customRenderer 保留参数,实际取列上的 `customCellRenderer`
|
|
102
113
|
* @returns 包装后的渲染器
|
|
103
114
|
*/
|
|
104
|
-
export declare function createCellRenderer(
|
|
115
|
+
export declare function createCellRenderer(_customRenderer?: any): typeof renderDefaultCell;
|
|
105
116
|
/**
|
|
106
117
|
* 构建查询表单项
|
|
107
118
|
*
|
|
@@ -229,26 +229,36 @@ export function processEllipsisColumn(col) {
|
|
|
229
229
|
});
|
|
230
230
|
}
|
|
231
231
|
|
|
232
|
+
/**
|
|
233
|
+
* 默认单元格渲染:固定行(合计等)显示原值;数据行有自定义渲染器(`customCellRenderer`)时交给它;
|
|
234
|
+
* 否则显示 `valueFormatted`(列上配了 `valueFormatter` 时由 AG Grid 算好),没配则显示原值。
|
|
235
|
+
*
|
|
236
|
+
* 以前这里直接返回 `params.value`,普通列(没有 `type`、没有自定义渲染器)上写的 `valueFormatter`
|
|
237
|
+
* 被绕过:状态码列显示原码、「0/1」列显示 0/1,而不是格式化后的文字。
|
|
238
|
+
* 固定行保持原行为:格式化函数多按数据行写,空值常被格式化成「—」,不能让合计行冒出占位符。
|
|
239
|
+
*
|
|
240
|
+
* @author nokecy
|
|
241
|
+
*/
|
|
242
|
+
export function renderDefaultCell(params) {
|
|
243
|
+
var _node$isRowPinned;
|
|
244
|
+
var value = params.value,
|
|
245
|
+
valueFormatted = params.valueFormatted,
|
|
246
|
+
node = params.node,
|
|
247
|
+
colDef = params.colDef;
|
|
248
|
+
if (node !== null && node !== void 0 && (_node$isRowPinned = node.isRowPinned) !== null && _node$isRowPinned !== void 0 && _node$isRowPinned.call(node)) return value;
|
|
249
|
+
var customRenderer = colDef === null || colDef === void 0 ? void 0 : colDef.customCellRenderer;
|
|
250
|
+
if (!customRenderer) return valueFormatted !== null && valueFormatted !== void 0 ? valueFormatted : value;
|
|
251
|
+
return customRenderer(params);
|
|
252
|
+
}
|
|
253
|
+
|
|
232
254
|
/**
|
|
233
255
|
* 创建自定义单元格渲染器包装
|
|
234
256
|
*
|
|
235
|
-
* @param
|
|
257
|
+
* @param _customRenderer 保留参数,实际取列上的 `customCellRenderer`
|
|
236
258
|
* @returns 包装后的渲染器
|
|
237
259
|
*/
|
|
238
|
-
export function createCellRenderer(
|
|
239
|
-
return
|
|
240
|
-
var value = params.value,
|
|
241
|
-
node = params.node,
|
|
242
|
-
colDef = params.colDef;
|
|
243
|
-
|
|
244
|
-
// 固定行或没有自定义渲染器时,直接返回值
|
|
245
|
-
if (node.isRowPinned() || !colDef.customCellRenderer) {
|
|
246
|
-
return value;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
// 使用自定义渲染器
|
|
250
|
-
return colDef.customCellRenderer(params);
|
|
251
|
-
};
|
|
260
|
+
export function createCellRenderer(_customRenderer) {
|
|
261
|
+
return renderDefaultCell;
|
|
252
262
|
}
|
|
253
263
|
|
|
254
264
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ReactNode } from 'react';
|
|
1
2
|
export type ReadOnlyFormatterCtx = {
|
|
2
3
|
/** 列的 x-component-props(headerName/width/options/format 等) */
|
|
3
4
|
columnProps: any;
|
|
@@ -15,6 +16,31 @@ export type ReadOnlyFormatter = (value: any, ctx: ReadOnlyFormatterCtx) => strin
|
|
|
15
16
|
export declare const fallbackFormatter: ReadOnlyFormatter;
|
|
16
17
|
/** 消费方扩展自定义只读列的显示逻辑 */
|
|
17
18
|
export declare const registerReadOnlyFormatter: (component: string, formatter: ReadOnlyFormatter) => void;
|
|
19
|
+
/** 值 -> 名称表:对象 `{ '10': '参与' }`,或与 Select 同形的选项数组 `[{ label, value }]` */
|
|
20
|
+
export type ReadOnlyLabels = Record<string, string> | Array<{
|
|
21
|
+
label?: any;
|
|
22
|
+
value?: any;
|
|
23
|
+
}>;
|
|
24
|
+
/**
|
|
25
|
+
* 给业务自定义选择器登记「值 -> 名称」,ArrayTable 未激活的格子与只读列按名称出文本。
|
|
26
|
+
*
|
|
27
|
+
* 业务组件(如「执行动作」「是否参与校验」这类固定选项的选择器)不在内置注册表里,
|
|
28
|
+
* 格子文本会走兜底格式化器把原值原样显示(10、00 这类编码)。在组件模块里调用一次即可,
|
|
29
|
+
* 所有用到该 x-component 的列都生效;同一组件在不同 Schema 里注册名不同时传名字数组。
|
|
30
|
+
* 按 String 宽松比对(容忍后端返回数字/字符串漂移);labelInValue 对象显示其 label;
|
|
31
|
+
* 数组逐个映射后逗号拼接;表里没有的值原样显示。@author nokecy
|
|
32
|
+
*/
|
|
33
|
+
export declare const registerReadOnlyLabels: (component: string | string[], labels: ReadOnlyLabels) => void;
|
|
34
|
+
/** 只读渲染器:按值出一段 React 内容(如组件自己的阅读态 Tag),格子未激活和只读列都用它显示 */
|
|
35
|
+
export type ReadOnlyRenderer = (value: any, ctx: ReadOnlyFormatterCtx) => ReactNode;
|
|
36
|
+
/**
|
|
37
|
+
* 给业务自定义组件登记只读渲染器。登记后 ArrayTable 可编辑列未激活的格子、只读列都渲染它的返回内容,
|
|
38
|
+
* 与组件自己的阅读态一致(例如带颜色的 Tag),仍不挂 Formily 字段树。空值不调用渲染器(出占位/留空)。
|
|
39
|
+
* 只要文字时用 registerReadOnlyLabels;两者都登记时显示走渲染器。@author nokecy
|
|
40
|
+
*/
|
|
41
|
+
export declare const registerReadOnlyRenderer: (component: string | string[], renderer: ReadOnlyRenderer) => void;
|
|
42
|
+
/** 取某组件类型的只读渲染器,未登记返回 null */
|
|
43
|
+
export declare const getReadOnlyRenderer: (component: string | undefined) => ReadOnlyRenderer | null;
|
|
18
44
|
/**
|
|
19
45
|
* 取某组件类型的只读格式化器。命中返回函数,未命中返回 null(调用方回退 AgField)。
|
|
20
46
|
*/
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
|
2
|
+
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."); }
|
|
3
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
4
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
5
|
+
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; } }
|
|
6
|
+
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
1
7
|
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
8
|
/**
|
|
3
9
|
* 只读列「纯文本快路径」格式化器注册表
|
|
@@ -121,6 +127,68 @@ export var registerReadOnlyFormatter = function registerReadOnlyFormatter(compon
|
|
|
121
127
|
registry[component] = formatter;
|
|
122
128
|
};
|
|
123
129
|
|
|
130
|
+
/** 值 -> 名称表:对象 `{ '10': '参与' }`,或与 Select 同形的选项数组 `[{ label, value }]` */
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 给业务自定义选择器登记「值 -> 名称」,ArrayTable 未激活的格子与只读列按名称出文本。
|
|
134
|
+
*
|
|
135
|
+
* 业务组件(如「执行动作」「是否参与校验」这类固定选项的选择器)不在内置注册表里,
|
|
136
|
+
* 格子文本会走兜底格式化器把原值原样显示(10、00 这类编码)。在组件模块里调用一次即可,
|
|
137
|
+
* 所有用到该 x-component 的列都生效;同一组件在不同 Schema 里注册名不同时传名字数组。
|
|
138
|
+
* 按 String 宽松比对(容忍后端返回数字/字符串漂移);labelInValue 对象显示其 label;
|
|
139
|
+
* 数组逐个映射后逗号拼接;表里没有的值原样显示。@author nokecy
|
|
140
|
+
*/
|
|
141
|
+
export var registerReadOnlyLabels = function registerReadOnlyLabels(component, labels) {
|
|
142
|
+
var map = new Map();
|
|
143
|
+
if (Array.isArray(labels)) {
|
|
144
|
+
labels.forEach(function (o) {
|
|
145
|
+
var _o$label;
|
|
146
|
+
if (o && o.value != null) map.set(String(o.value), String((_o$label = o.label) !== null && _o$label !== void 0 ? _o$label : o.value));
|
|
147
|
+
});
|
|
148
|
+
} else {
|
|
149
|
+
Object.entries(labels !== null && labels !== void 0 ? labels : {}).forEach(function (_ref7) {
|
|
150
|
+
var _ref8 = _slicedToArray(_ref7, 2),
|
|
151
|
+
k = _ref8[0],
|
|
152
|
+
v = _ref8[1];
|
|
153
|
+
return map.set(String(k), String(v));
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
var toText = function toText(v) {
|
|
157
|
+
var _ref9, _v$label, _map$get;
|
|
158
|
+
if (v == null || v === '') return '';
|
|
159
|
+
if (_typeof(v) === 'object') return String((_ref9 = (_v$label = v.label) !== null && _v$label !== void 0 ? _v$label : v.value) !== null && _ref9 !== void 0 ? _ref9 : '');
|
|
160
|
+
return (_map$get = map.get(String(v))) !== null && _map$get !== void 0 ? _map$get : String(v);
|
|
161
|
+
};
|
|
162
|
+
var formatter = function formatter(value) {
|
|
163
|
+
return Array.isArray(value) ? value.map(toText).filter(Boolean).join(', ') : toText(value);
|
|
164
|
+
};
|
|
165
|
+
(Array.isArray(component) ? component : [component]).forEach(function (name) {
|
|
166
|
+
return registerReadOnlyFormatter(name, formatter);
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
/** 只读渲染器:按值出一段 React 内容(如组件自己的阅读态 Tag),格子未激活和只读列都用它显示 */
|
|
171
|
+
|
|
172
|
+
var renderers = {};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* 给业务自定义组件登记只读渲染器。登记后 ArrayTable 可编辑列未激活的格子、只读列都渲染它的返回内容,
|
|
176
|
+
* 与组件自己的阅读态一致(例如带颜色的 Tag),仍不挂 Formily 字段树。空值不调用渲染器(出占位/留空)。
|
|
177
|
+
* 只要文字时用 registerReadOnlyLabels;两者都登记时显示走渲染器。@author nokecy
|
|
178
|
+
*/
|
|
179
|
+
export var registerReadOnlyRenderer = function registerReadOnlyRenderer(component, renderer) {
|
|
180
|
+
(Array.isArray(component) ? component : [component]).forEach(function (name) {
|
|
181
|
+
renderers[name] = renderer;
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/** 取某组件类型的只读渲染器,未登记返回 null */
|
|
186
|
+
export var getReadOnlyRenderer = function getReadOnlyRenderer(component) {
|
|
187
|
+
var _renderers$component;
|
|
188
|
+
if (!component) return null;
|
|
189
|
+
return (_renderers$component = renderers[component]) !== null && _renderers$component !== void 0 ? _renderers$component : null;
|
|
190
|
+
};
|
|
191
|
+
|
|
124
192
|
/**
|
|
125
193
|
* 取某组件类型的只读格式化器。命中返回函数,未命中返回 null(调用方回退 AgField)。
|
|
126
194
|
*/
|