amis 1.3.4 → 1.4.0
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/README.md +2 -1
- package/lib/RootRenderer.js +4 -1
- package/lib/RootRenderer.js.map +2 -2
- package/lib/components/Badge.d.ts +13 -1
- package/lib/components/Badge.js +16 -2
- package/lib/components/Badge.js.map +2 -2
- package/lib/components/Checkbox.d.ts +1 -1
- package/lib/components/Checkbox.js +1 -1
- package/lib/components/Checkbox.js.map +2 -2
- package/lib/components/Drawer.js +1 -1
- package/lib/components/Drawer.js.map +2 -2
- package/lib/components/Modal.js +1 -1
- package/lib/components/Modal.js.map +2 -2
- package/lib/components/RichText.d.ts +0 -3
- package/lib/components/RichText.js +1 -22
- package/lib/components/RichText.js.map +2 -2
- package/lib/components/Select.d.ts +7 -0
- package/lib/components/Select.js.map +2 -2
- package/lib/components/Steps.d.ts +3 -3
- package/lib/components/Steps.js.map +1 -1
- package/lib/components/WithRemoteConfig.d.ts +8 -0
- package/lib/components/WithRemoteConfig.js +28 -2
- package/lib/components/WithRemoteConfig.js.map +2 -2
- package/lib/components/condition-builder/Field.js +0 -1
- package/lib/components/condition-builder/Field.js.map +2 -2
- package/lib/components/condition-builder/Value.js +2 -1
- package/lib/components/condition-builder/Value.js.map +2 -2
- package/lib/components/condition-builder/types.d.ts +5 -0
- package/lib/components/condition-builder/types.js.map +1 -1
- package/lib/env.d.ts +1 -1
- package/lib/env.js.map +1 -1
- package/lib/factory.d.ts +6 -2
- package/lib/factory.js +9 -4
- package/lib/factory.js.map +2 -2
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +2 -2
- package/lib/locale/de-DE.js +1 -0
- package/lib/locale/de-DE.js.map +2 -2
- package/lib/locale/en-US.js +2 -1
- package/lib/locale/en-US.js.map +2 -2
- package/lib/locale/zh-CN.js +2 -1
- package/lib/locale/zh-CN.js.map +2 -2
- package/lib/renderers/Action.d.ts +6 -0
- package/lib/renderers/Action.js +9 -1
- package/lib/renderers/Action.js.map +2 -2
- package/lib/renderers/CRUD.d.ts +2 -2
- package/lib/renderers/CRUD.js +13 -21
- package/lib/renderers/CRUD.js.map +2 -2
- package/lib/renderers/Card.js +11 -11
- package/lib/renderers/Card.js.map +2 -2
- package/lib/renderers/Collapse.d.ts +1 -1
- package/lib/renderers/Collapse.js +5 -1
- package/lib/renderers/Collapse.js.map +2 -2
- package/lib/renderers/Copyable.js +30 -28
- package/lib/renderers/Copyable.js.map +2 -2
- package/lib/renderers/Dialog.d.ts +0 -252
- package/lib/renderers/Dialog.js +3 -2
- package/lib/renderers/Dialog.js.map +2 -2
- package/lib/renderers/Drawer.js +2 -1
- package/lib/renderers/Drawer.js.map +2 -2
- package/lib/renderers/DropDownButton.d.ts +4 -0
- package/lib/renderers/DropDownButton.js +2 -2
- package/lib/renderers/DropDownButton.js.map +2 -2
- package/lib/renderers/Form/ButtonGroupSelect.js +3 -0
- package/lib/renderers/Form/ButtonGroupSelect.js.map +2 -2
- package/lib/renderers/Form/Combo.d.ts +2 -0
- package/lib/renderers/Form/Combo.js +16 -1
- package/lib/renderers/Form/Combo.js.map +2 -2
- package/lib/renderers/Form/DiffEditor.d.ts +0 -2
- package/lib/renderers/Form/Editor.d.ts +0 -2
- package/lib/renderers/Form/Editor.js +1 -1
- package/lib/renderers/Form/Editor.js.map +2 -2
- package/lib/renderers/Form/InputExcel.d.ts +5 -0
- package/lib/renderers/Form/InputExcel.js +24 -3
- package/lib/renderers/Form/InputExcel.js.map +2 -2
- package/lib/renderers/Form/InputImage.d.ts +8 -0
- package/lib/renderers/Form/InputImage.js +2 -1
- package/lib/renderers/Form/InputImage.js.map +2 -2
- package/lib/renderers/Form/InputNumber.d.ts +19 -5
- package/lib/renderers/Form/InputNumber.js +69 -7
- package/lib/renderers/Form/InputNumber.js.map +2 -2
- package/lib/renderers/Form/InputRange.js +7 -2
- package/lib/renderers/Form/InputRange.js.map +2 -2
- package/lib/renderers/Form/InputTable.d.ts +23 -5
- package/lib/renderers/Form/InputTable.js +32 -3
- package/lib/renderers/Form/InputTable.js.map +2 -2
- package/lib/renderers/Form/NestedSelect.js +2 -3
- package/lib/renderers/Form/NestedSelect.js.map +2 -2
- package/lib/renderers/Form/Options.js +3 -1
- package/lib/renderers/Form/Options.js.map +2 -2
- package/lib/renderers/Form/index.js +0 -10
- package/lib/renderers/Form/index.js.map +2 -2
- package/lib/renderers/Form/wrapControl.js +3 -3
- package/lib/renderers/Form/wrapControl.js.map +2 -2
- package/lib/renderers/Json.js +5 -1
- package/lib/renderers/Json.js.map +2 -2
- package/lib/renderers/List.d.ts +5 -0
- package/lib/renderers/List.js +20 -14
- package/lib/renderers/List.js.map +2 -2
- package/lib/renderers/Page.d.ts +6 -0
- package/lib/renderers/Page.js +10 -2
- package/lib/renderers/Page.js.map +2 -2
- package/lib/renderers/Service.d.ts +10 -1
- package/lib/renderers/Service.js +85 -3
- package/lib/renderers/Service.js.map +2 -2
- package/lib/renderers/Steps.d.ts +4 -4
- package/lib/renderers/Steps.js +5 -2
- package/lib/renderers/Steps.js.map +2 -2
- package/lib/renderers/Table/TableBody.d.ts +5 -3
- package/lib/renderers/Table/TableBody.js +17 -11
- package/lib/renderers/Table/TableBody.js.map +2 -2
- package/lib/renderers/Table/TableCell.js +6 -2
- package/lib/renderers/Table/TableCell.js.map +2 -2
- package/lib/renderers/Table/TableContent.d.ts +3 -1
- package/lib/renderers/Table/TableContent.js +6 -2
- package/lib/renderers/Table/TableContent.js.map +2 -2
- package/lib/renderers/Table/TableRow.d.ts +1 -1
- package/lib/renderers/Table/TableRow.js +14 -13
- package/lib/renderers/Table/TableRow.js.map +2 -2
- package/lib/renderers/Table/index.d.ts +28 -3
- package/lib/renderers/Table/index.js +97 -54
- package/lib/renderers/Table/index.js.map +2 -2
- package/lib/schemaExtend.d.ts +1 -0
- package/lib/schemaExtend.js +59 -0
- package/lib/schemaExtend.js.map +13 -0
- package/lib/store/app.d.ts +0 -1
- package/lib/store/combo.d.ts +0 -2
- package/lib/store/crud.d.ts +3 -3
- package/lib/store/crud.js +41 -36
- package/lib/store/crud.js.map +2 -2
- package/lib/store/form.d.ts +0 -1
- package/lib/store/formItem.js +10 -6
- package/lib/store/formItem.js.map +2 -2
- package/lib/store/modal.d.ts +1 -1
- package/lib/store/modal.js +4 -0
- package/lib/store/modal.js.map +2 -2
- package/lib/store/root.d.ts +0 -1
- package/lib/store/service.d.ts +0 -1
- package/lib/store/service.js +0 -13
- package/lib/store/service.js.map +2 -2
- package/lib/store/table.d.ts +1 -2
- package/lib/store/table.js +44 -3
- package/lib/store/table.js.map +2 -2
- package/lib/themes/ang-ie11.css +278 -17
- package/lib/themes/ang.css +278 -17
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +278 -17
- package/lib/themes/antd.css +278 -17
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +278 -17
- package/lib/themes/cxd.css +278 -17
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +278 -17
- package/lib/themes/dark.css +278 -17
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +278 -17
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/api.js +12 -0
- package/lib/utils/api.js.map +2 -2
- package/lib/utils/attachmentAdpator.d.ts +7 -0
- package/lib/utils/attachmentAdpator.js +82 -0
- package/lib/utils/attachmentAdpator.js.map +13 -0
- package/lib/utils/helper.d.ts +2 -0
- package/lib/utils/helper.js +14 -1
- package/lib/utils/helper.js.map +2 -2
- package/lib/utils/resize-sensor.js +6 -0
- package/lib/utils/resize-sensor.js.map +2 -2
- package/lib/utils/tpl-builtin.d.ts +1 -0
- package/lib/utils/tpl-builtin.js +24 -8
- package/lib/utils/tpl-builtin.js.map +2 -2
- package/lib/utils/validations.js +62 -5
- package/lib/utils/validations.js.map +2 -2
- package/package.json +1 -1
- package/schema.json +369 -164
- package/scss/_properties.scss +6 -0
- package/scss/components/_badge.scss +15 -1
- package/scss/components/_list.scss +8 -0
- package/scss/components/_markdown.scss +266 -0
- package/scss/components/_spinner.scss +6 -2
- package/scss/components/_table.scss +4 -0
- package/scss/components/form/_form.scss +3 -17
- package/scss/components/form/_group.scss +4 -0
- package/scss/components/form/_nested-select.scss +4 -0
- package/scss/components/form/_number.scss +12 -1
- package/scss/themes/_common.scss +1 -0
- package/sdk/ang-ie11.css +324 -20
- package/sdk/ang.css +330 -20
- package/sdk/antd-ie11.css +324 -20
- package/sdk/antd.css +330 -20
- package/sdk/charts.js +15 -15
- package/sdk/color-picker.js +65 -69
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +324 -20
- package/sdk/cxd.css +330 -20
- package/sdk/dark-ie11.css +324 -20
- package/sdk/dark.css +330 -20
- package/sdk/exceljs.js +1 -1
- package/sdk/locale/de-DE.js +1 -0
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +27 -23
- package/sdk/rich-text.js +63 -63
- package/sdk/sdk-ie11.css +324 -20
- package/sdk/sdk.css +330 -20
- package/sdk/sdk.js +1146 -1138
- package/sdk/thirds/hls.js/hls.js +1 -1
- package/sdk/thirds/mpegts.js/mpegts.js +1 -1
- package/sdk/tinymce.js +57 -57
- package/src/RootRenderer.tsx +8 -3
- package/src/components/Badge.tsx +41 -6
- package/src/components/Checkbox.tsx +5 -2
- package/src/components/Drawer.tsx +3 -2
- package/src/components/Modal.tsx +3 -2
- package/src/components/RichText.tsx +2 -27
- package/src/components/Select.tsx +1 -0
- package/src/components/Steps.tsx +3 -3
- package/src/components/WithRemoteConfig.tsx +37 -2
- package/src/components/condition-builder/Field.tsx +1 -2
- package/src/components/condition-builder/Value.tsx +3 -0
- package/src/components/condition-builder/types.ts +6 -0
- package/src/env.tsx +1 -1
- package/src/factory.tsx +14 -4
- package/src/index.tsx +2 -0
- package/src/locale/de-DE.ts +1 -0
- package/src/locale/en-US.ts +2 -1
- package/src/locale/zh-CN.ts +2 -1
- package/src/renderers/Action.tsx +19 -1
- package/src/renderers/CRUD.tsx +15 -34
- package/src/renderers/Card.tsx +21 -15
- package/src/renderers/Collapse.tsx +5 -1
- package/src/renderers/Copyable.tsx +46 -44
- package/src/renderers/Dialog.tsx +3 -2
- package/src/renderers/Drawer.tsx +2 -1
- package/src/renderers/DropDownButton.tsx +8 -0
- package/src/renderers/Form/ButtonGroupSelect.tsx +3 -0
- package/src/renderers/Form/Combo.tsx +7 -0
- package/src/renderers/Form/Editor.tsx +19 -20
- package/src/renderers/Form/InputExcel.tsx +28 -3
- package/src/renderers/Form/InputImage.tsx +23 -8
- package/src/renderers/Form/InputNumber.tsx +113 -18
- package/src/renderers/Form/InputRange.tsx +5 -2
- package/src/renderers/Form/InputTable.tsx +88 -9
- package/src/renderers/Form/NestedSelect.tsx +1 -1
- package/src/renderers/Form/Options.tsx +3 -1
- package/src/renderers/Form/index.tsx +0 -15
- package/src/renderers/Form/wrapControl.tsx +2 -2
- package/src/renderers/Json.tsx +10 -1
- package/src/renderers/List.tsx +32 -19
- package/src/renderers/Page.tsx +19 -0
- package/src/renderers/Service.tsx +101 -3
- package/src/renderers/Steps.tsx +12 -9
- package/src/renderers/Table/TableBody.tsx +29 -10
- package/src/renderers/Table/TableCell.tsx +15 -1
- package/src/renderers/Table/TableContent.tsx +7 -1
- package/src/renderers/Table/TableRow.tsx +18 -17
- package/src/renderers/Table/index.tsx +117 -28
- package/src/schemaExtend.ts +66 -0
- package/src/store/crud.ts +34 -38
- package/src/store/formItem.ts +10 -6
- package/src/store/modal.ts +4 -0
- package/src/store/service.ts +0 -19
- package/src/store/table.ts +48 -0
- package/src/utils/api.ts +11 -0
- package/src/utils/attachmentAdpator.ts +90 -0
- package/src/utils/helper.ts +15 -0
- package/src/utils/resize-sensor.ts +7 -0
- package/src/utils/tpl-builtin.ts +36 -17
- package/src/utils/validations.ts +80 -12
@@ -7,7 +7,12 @@ import {filter, evalExpression} from '../utils/tpl';
|
|
7
7
|
import cx from 'classnames';
|
8
8
|
import Scoped, {ScopedContext, IScopedContext} from '../Scoped';
|
9
9
|
import {observer} from 'mobx-react';
|
10
|
-
import {
|
10
|
+
import {
|
11
|
+
buildApi,
|
12
|
+
isApiOutdated,
|
13
|
+
isEffectiveApi,
|
14
|
+
str2AsyncFunction
|
15
|
+
} from '../utils/api';
|
11
16
|
import {Spinner} from '../components';
|
12
17
|
import {autobind, isEmpty, isVisible, qsstringify} from '../utils/helper';
|
13
18
|
import {
|
@@ -40,6 +45,11 @@ export interface ServiceSchema extends BaseSchema {
|
|
40
45
|
*/
|
41
46
|
ws?: string;
|
42
47
|
|
48
|
+
/**
|
49
|
+
* 通过调用外部函数来获取数据
|
50
|
+
*/
|
51
|
+
dataProvider?: string | Function;
|
52
|
+
|
43
53
|
/**
|
44
54
|
* 内容区域
|
45
55
|
*/
|
@@ -111,6 +121,8 @@ export default class Service extends React.Component<ServiceProps> {
|
|
111
121
|
// 主要是用于关闭 socket
|
112
122
|
socket: any;
|
113
123
|
|
124
|
+
dataProviderUnsubscribe?: Function;
|
125
|
+
|
114
126
|
static defaultProps: Partial<ServiceProps> = {
|
115
127
|
messages: {
|
116
128
|
fetchFailed: 'fetchFailed'
|
@@ -130,6 +142,8 @@ export default class Service extends React.Component<ServiceProps> {
|
|
130
142
|
this.initInterval = this.initInterval.bind(this);
|
131
143
|
this.afterDataFetch = this.afterDataFetch.bind(this);
|
132
144
|
this.afterSchemaFetch = this.afterSchemaFetch.bind(this);
|
145
|
+
this.runDataProvider = this.runDataProvider.bind(this);
|
146
|
+
this.dataProviderSetData = this.dataProviderSetData.bind(this);
|
133
147
|
}
|
134
148
|
|
135
149
|
componentDidMount() {
|
@@ -168,12 +182,21 @@ export default class Service extends React.Component<ServiceProps> {
|
|
168
182
|
if (this.socket) {
|
169
183
|
this.socket.close();
|
170
184
|
}
|
171
|
-
this.socket =
|
185
|
+
this.socket = this.fetchWSData(props.ws, store.data);
|
186
|
+
}
|
187
|
+
|
188
|
+
if (props.defaultData !== prevProps.defaultData) {
|
189
|
+
store.reInitData(props.defaultData);
|
190
|
+
}
|
191
|
+
|
192
|
+
if (props.dataProvider !== prevProps.dataProvider) {
|
193
|
+
this.runDataProvider();
|
172
194
|
}
|
173
195
|
}
|
174
196
|
|
175
197
|
componentWillUnmount() {
|
176
198
|
this.mounted = false;
|
199
|
+
this.runDataProviderUnsubscribe();
|
177
200
|
clearTimeout(this.timer);
|
178
201
|
if (this.socket && this.socket.close) {
|
179
202
|
this.socket.close();
|
@@ -189,6 +212,7 @@ export default class Service extends React.Component<ServiceProps> {
|
|
189
212
|
ws,
|
190
213
|
initFetch,
|
191
214
|
initFetchOn,
|
215
|
+
dataProvider,
|
192
216
|
store,
|
193
217
|
messages: {fetchSuccess, fetchFailed}
|
194
218
|
} = this.props;
|
@@ -212,8 +236,82 @@ export default class Service extends React.Component<ServiceProps> {
|
|
212
236
|
}
|
213
237
|
|
214
238
|
if (ws) {
|
215
|
-
this.socket =
|
239
|
+
this.socket = this.fetchWSData(ws, store.data);
|
216
240
|
}
|
241
|
+
|
242
|
+
if (dataProvider) {
|
243
|
+
this.runDataProvider();
|
244
|
+
}
|
245
|
+
}
|
246
|
+
|
247
|
+
// 使用外部函数获取数据
|
248
|
+
async runDataProvider() {
|
249
|
+
this.runDataProviderUnsubscribe();
|
250
|
+
const {dataProvider, store} = this.props;
|
251
|
+
let dataProviderFunc = dataProvider;
|
252
|
+
|
253
|
+
if (typeof dataProvider === 'string' && dataProvider) {
|
254
|
+
dataProviderFunc = str2AsyncFunction(dataProvider, 'data', 'setData')!;
|
255
|
+
}
|
256
|
+
if (typeof dataProviderFunc === 'function') {
|
257
|
+
const unsubscribe = await dataProviderFunc(
|
258
|
+
store.data,
|
259
|
+
this.dataProviderSetData
|
260
|
+
);
|
261
|
+
if (typeof unsubscribe === 'function') {
|
262
|
+
this.dataProviderUnsubscribe = unsubscribe;
|
263
|
+
}
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
// 运行销毁外部函数的方法
|
268
|
+
runDataProviderUnsubscribe() {
|
269
|
+
if (typeof this.dataProviderUnsubscribe === 'function') {
|
270
|
+
try {
|
271
|
+
this.dataProviderUnsubscribe();
|
272
|
+
} catch (error) {
|
273
|
+
console.error(error);
|
274
|
+
}
|
275
|
+
}
|
276
|
+
}
|
277
|
+
|
278
|
+
// 外部函数回调更新数据
|
279
|
+
dataProviderSetData(data: any) {
|
280
|
+
if (!this.mounted) {
|
281
|
+
return;
|
282
|
+
}
|
283
|
+
const {store} = this.props;
|
284
|
+
store.updateData(data, undefined, false);
|
285
|
+
store.setHasRemoteData();
|
286
|
+
}
|
287
|
+
|
288
|
+
// 使用 websocket 获取使用,因为有异步所以放这里而不是 store 实现
|
289
|
+
fetchWSData(ws: string | Api, data: any) {
|
290
|
+
const {env, store} = this.props;
|
291
|
+
const wsApi = buildApi(ws, data);
|
292
|
+
|
293
|
+
env.wsFetcher(
|
294
|
+
wsApi,
|
295
|
+
(data: any) => {
|
296
|
+
let returndata = data;
|
297
|
+
if ('status' in data && 'data' in data) {
|
298
|
+
returndata = data.data;
|
299
|
+
if (data.status !== 0) {
|
300
|
+
store.updateMessage(data.msg, true);
|
301
|
+
env.notify('error', data.msg);
|
302
|
+
return;
|
303
|
+
}
|
304
|
+
}
|
305
|
+
store.updateData(returndata, undefined, false);
|
306
|
+
store.setHasRemoteData();
|
307
|
+
// 因为 WebSocket 只会获取纯数据,所以没有 msg 之类的
|
308
|
+
this.afterDataFetch({ok: true, data: returndata});
|
309
|
+
},
|
310
|
+
(error: any) => {
|
311
|
+
store.updateMessage(error, true);
|
312
|
+
env.notify('error', error);
|
313
|
+
}
|
314
|
+
);
|
217
315
|
}
|
218
316
|
|
219
317
|
afterDataFetch(result: any) {
|
package/src/renderers/Steps.tsx
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import {Renderer, RendererProps} from '../factory';
|
3
|
-
import {BaseSchema} from '../Schema';
|
3
|
+
import {BaseSchema, SchemaCollection} from '../Schema';
|
4
4
|
import Steps, {StepStatus} from '../components/Steps';
|
5
5
|
import {
|
6
6
|
RemoteOptionsProps,
|
@@ -14,12 +14,12 @@ export type StepSchema = {
|
|
14
14
|
/**
|
15
15
|
* 标题
|
16
16
|
*/
|
17
|
-
title: string;
|
17
|
+
title: string | SchemaCollection;
|
18
18
|
|
19
19
|
/**
|
20
20
|
* 子标题
|
21
21
|
*/
|
22
|
-
subTitle?: string;
|
22
|
+
subTitle?: string | SchemaCollection;
|
23
23
|
|
24
24
|
/**
|
25
25
|
* 图标
|
@@ -31,7 +31,7 @@ export type StepSchema = {
|
|
31
31
|
/**
|
32
32
|
* 描述
|
33
33
|
*/
|
34
|
-
description?: string;
|
34
|
+
description?: string | SchemaCollection;
|
35
35
|
} & Omit<BaseSchema, 'type'>;
|
36
36
|
|
37
37
|
export interface StepsSchema extends BaseSchema {
|
@@ -82,7 +82,8 @@ export function StepsCmpt(props: StepsProps) {
|
|
82
82
|
mode,
|
83
83
|
data,
|
84
84
|
source,
|
85
|
-
config
|
85
|
+
config,
|
86
|
+
render
|
86
87
|
} = props;
|
87
88
|
|
88
89
|
const stepsRow =
|
@@ -90,7 +91,9 @@ export function StepsCmpt(props: StepsProps) {
|
|
90
91
|
config ||
|
91
92
|
steps ||
|
92
93
|
[];
|
93
|
-
|
94
|
+
const resolveRender = (val?: string | SchemaCollection) => typeof val === 'string'
|
95
|
+
? filter(val, data)
|
96
|
+
: val && render('inner', val);
|
94
97
|
const value = getPropValue(props) ?? 0;
|
95
98
|
const resolveValue =
|
96
99
|
typeof value === 'string' && isNaN(+value)
|
@@ -105,9 +108,9 @@ export function StepsCmpt(props: StepsProps) {
|
|
105
108
|
return {
|
106
109
|
...step,
|
107
110
|
status: stepStatus,
|
108
|
-
title:
|
109
|
-
subTitle:
|
110
|
-
description:
|
111
|
+
title: resolveRender(step.title),
|
112
|
+
subTitle: resolveRender(step.subTitle),
|
113
|
+
description: resolveRender(step.description)
|
111
114
|
}
|
112
115
|
});
|
113
116
|
|
@@ -8,6 +8,7 @@ import {observer} from 'mobx-react';
|
|
8
8
|
import {trace, reaction} from 'mobx';
|
9
9
|
import {createObject, flattenTree} from '../../utils/helper';
|
10
10
|
import {LocaleProps} from '../../locale';
|
11
|
+
import {ActionSchema} from '../Action';
|
11
12
|
|
12
13
|
export interface TableBodyProps extends LocaleProps {
|
13
14
|
className?: string;
|
@@ -23,7 +24,7 @@ export interface TableBodyProps extends LocaleProps {
|
|
23
24
|
item: IRow,
|
24
25
|
props: any
|
25
26
|
) => React.ReactNode;
|
26
|
-
onCheck: (item: IRow) => void;
|
27
|
+
onCheck: (item: IRow, value: boolean, shift?: boolean) => void;
|
27
28
|
onQuickChange?: (
|
28
29
|
item: IRow,
|
29
30
|
values: object,
|
@@ -41,8 +42,10 @@ export interface TableBodyProps extends LocaleProps {
|
|
41
42
|
data?: any;
|
42
43
|
prefixRow?: Array<any>;
|
43
44
|
affixRow?: Array<any>;
|
45
|
+
itemAction?: ActionSchema;
|
44
46
|
}
|
45
47
|
|
48
|
+
@observer
|
46
49
|
export class TableBody extends React.Component<TableBodyProps> {
|
47
50
|
renderRows(
|
48
51
|
rows: Array<any>,
|
@@ -62,7 +65,8 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
62
65
|
onQuickChange,
|
63
66
|
footable,
|
64
67
|
ignoreFootableContent,
|
65
|
-
footableColumns
|
68
|
+
footableColumns,
|
69
|
+
itemAction
|
66
70
|
} = this.props;
|
67
71
|
|
68
72
|
return rows.map((item: IRow, rowIndex: number) => {
|
@@ -71,6 +75,7 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
71
75
|
const doms = [
|
72
76
|
<TableRow
|
73
77
|
{...itemProps}
|
78
|
+
itemAction={itemAction}
|
74
79
|
classnames={cx}
|
75
80
|
checkOnItemClick={checkOnItemClick}
|
76
81
|
key={item.id}
|
@@ -100,6 +105,7 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
100
105
|
doms.push(
|
101
106
|
<TableRow
|
102
107
|
{...itemProps}
|
108
|
+
itemAction={itemAction}
|
103
109
|
classnames={cx}
|
104
110
|
checkOnItemClick={checkOnItemClick}
|
105
111
|
key={`foot-${item.id}`}
|
@@ -123,7 +129,7 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
123
129
|
/>
|
124
130
|
);
|
125
131
|
}
|
126
|
-
} else if (item.children.length) {
|
132
|
+
} else if (item.children.length && item.expanded) {
|
127
133
|
// 嵌套表格
|
128
134
|
doms.push(
|
129
135
|
...this.renderRows(item.children, columns, {
|
@@ -136,7 +142,11 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
136
142
|
});
|
137
143
|
}
|
138
144
|
|
139
|
-
renderSummaryRow(
|
145
|
+
renderSummaryRow(
|
146
|
+
position: 'prefix' | 'affix',
|
147
|
+
items?: Array<any>,
|
148
|
+
rowIndex?: number
|
149
|
+
) {
|
140
150
|
const {columns, render, data, classnames: cx, rows} = this.props;
|
141
151
|
|
142
152
|
if (!(Array.isArray(items) && items.length)) {
|
@@ -177,7 +187,10 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
177
187
|
});
|
178
188
|
|
179
189
|
return (
|
180
|
-
<tr
|
190
|
+
<tr
|
191
|
+
className={cx('Table-tr', 'is-summary')}
|
192
|
+
key={`summary-${position}-${rowIndex || 0}`}
|
193
|
+
>
|
181
194
|
{result.map((item, index) => {
|
182
195
|
const Com = item.isHead ? 'th' : 'td';
|
183
196
|
return (
|
@@ -196,11 +209,17 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
196
209
|
);
|
197
210
|
}
|
198
211
|
|
199
|
-
renderSummary(items?: Array<any>) {
|
212
|
+
renderSummary(position: 'prefix' | 'affix', items?: Array<any>) {
|
200
213
|
return Array.isArray(items)
|
201
214
|
? items.some(i => Array.isArray(i))
|
202
|
-
? items.map(i
|
203
|
-
|
215
|
+
? items.map((i, rowIndex) =>
|
216
|
+
this.renderSummaryRow(
|
217
|
+
position,
|
218
|
+
Array.isArray(i) ? i : [i],
|
219
|
+
rowIndex
|
220
|
+
)
|
221
|
+
)
|
222
|
+
: this.renderSummaryRow(position, items)
|
204
223
|
: null;
|
205
224
|
}
|
206
225
|
|
@@ -221,9 +240,9 @@ export class TableBody extends React.Component<TableBodyProps> {
|
|
221
240
|
<tbody className={className}>
|
222
241
|
{rows.length ? (
|
223
242
|
<>
|
224
|
-
{this.renderSummary(prefixRow)}
|
243
|
+
{this.renderSummary('prefix', prefixRow)}
|
225
244
|
{this.renderRows(rows, columns, rowsProps)}
|
226
|
-
{this.renderSummary(affixRow)}
|
245
|
+
{this.renderSummary('affix', affixRow)}
|
227
246
|
</>
|
228
247
|
) : null}
|
229
248
|
</tbody>
|
@@ -5,6 +5,7 @@ import Copyable from '../Copyable';
|
|
5
5
|
import PopOverable from '../PopOver';
|
6
6
|
import {observer} from 'mobx-react';
|
7
7
|
import omit = require('lodash/omit');
|
8
|
+
import {filter} from '../../utils/tpl';
|
8
9
|
|
9
10
|
export interface TableCellProps extends RendererProps {
|
10
11
|
wrapperComponent?: React.ReactType;
|
@@ -27,7 +28,9 @@ export class TableCell extends React.Component<RendererProps> {
|
|
27
28
|
|
28
29
|
render() {
|
29
30
|
let {
|
31
|
+
classnames: cx,
|
30
32
|
className,
|
33
|
+
classNameExpr,
|
31
34
|
render,
|
32
35
|
style,
|
33
36
|
wrapperComponent: Component,
|
@@ -36,6 +39,7 @@ export class TableCell extends React.Component<RendererProps> {
|
|
36
39
|
data,
|
37
40
|
children,
|
38
41
|
width,
|
42
|
+
align,
|
39
43
|
innerClassName,
|
40
44
|
label,
|
41
45
|
tabIndex,
|
@@ -90,6 +94,13 @@ export class TableCell extends React.Component<RendererProps> {
|
|
90
94
|
}
|
91
95
|
}
|
92
96
|
|
97
|
+
if (align) {
|
98
|
+
style = {
|
99
|
+
...style,
|
100
|
+
textAlign: align
|
101
|
+
};
|
102
|
+
}
|
103
|
+
|
93
104
|
if (!Component) {
|
94
105
|
return body as JSX.Element;
|
95
106
|
}
|
@@ -102,7 +113,10 @@ export class TableCell extends React.Component<RendererProps> {
|
|
102
113
|
<Component
|
103
114
|
rowSpan={rowSpan > 1 ? rowSpan : undefined}
|
104
115
|
style={style}
|
105
|
-
className={
|
116
|
+
className={cx(
|
117
|
+
className,
|
118
|
+
column.classNameExpr ? filter(column.classNameExpr, data) : null
|
119
|
+
)}
|
106
120
|
tabIndex={tabIndex}
|
107
121
|
onKeyUp={onKeyUp}
|
108
122
|
>
|
@@ -4,6 +4,8 @@ import {IColumn, IRow} from '../../store/table';
|
|
4
4
|
import {SchemaNode, Action} from '../../types';
|
5
5
|
import {TableBody} from './TableBody';
|
6
6
|
import {LocaleProps} from '../../locale';
|
7
|
+
import {observer} from 'mobx-react';
|
8
|
+
import {ActionSchema} from '../Action';
|
7
9
|
|
8
10
|
export interface TableContentProps extends LocaleProps {
|
9
11
|
className?: string;
|
@@ -30,7 +32,7 @@ export interface TableContentProps extends LocaleProps {
|
|
30
32
|
item: IRow,
|
31
33
|
props: any
|
32
34
|
) => React.ReactNode;
|
33
|
-
onCheck: (item: IRow) => void;
|
35
|
+
onCheck: (item: IRow, value: boolean, shift?: boolean) => void;
|
34
36
|
onQuickChange?: (
|
35
37
|
item: IRow,
|
36
38
|
values: object,
|
@@ -47,8 +49,10 @@ export interface TableContentProps extends LocaleProps {
|
|
47
49
|
data?: any;
|
48
50
|
prefixRow?: Array<any>;
|
49
51
|
affixRow?: Array<any>;
|
52
|
+
itemAction?: ActionSchema;
|
50
53
|
}
|
51
54
|
|
55
|
+
@observer
|
52
56
|
export class TableContent extends React.Component<TableContentProps> {
|
53
57
|
render() {
|
54
58
|
const {
|
@@ -77,6 +81,7 @@ export class TableContent extends React.Component<TableContentProps> {
|
|
77
81
|
prefixRow,
|
78
82
|
locale,
|
79
83
|
translate,
|
84
|
+
itemAction,
|
80
85
|
affixRow
|
81
86
|
} = this.props;
|
82
87
|
|
@@ -130,6 +135,7 @@ export class TableContent extends React.Component<TableContentProps> {
|
|
130
135
|
</tbody>
|
131
136
|
) : (
|
132
137
|
<TableBody
|
138
|
+
itemAction={itemAction}
|
133
139
|
classnames={cx}
|
134
140
|
render={render}
|
135
141
|
renderCell={renderCell}
|
@@ -4,6 +4,7 @@ import {IRow, IColumn} from '../../store/table';
|
|
4
4
|
import {RendererProps} from '../../factory';
|
5
5
|
import {Action} from '../Action';
|
6
6
|
import {reaction} from 'mobx';
|
7
|
+
import {isClickOnInput} from '../../utils/helper';
|
7
8
|
|
8
9
|
interface TableRowProps extends Pick<RendererProps, 'render'> {
|
9
10
|
onCheck: (item: IRow) => void;
|
@@ -33,23 +34,18 @@ export class TableRow extends React.Component<TableRowProps> {
|
|
33
34
|
this.handleAction = this.handleAction.bind(this);
|
34
35
|
this.handleQuickChange = this.handleQuickChange.bind(this);
|
35
36
|
this.handleChange = this.handleChange.bind(this);
|
36
|
-
this.
|
37
|
+
this.handleItemClick = this.handleItemClick.bind(this);
|
37
38
|
}
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
let formItem;
|
43
|
-
|
44
|
-
if (
|
45
|
-
!e.currentTarget.contains(target) ||
|
46
|
-
~['INPUT', 'TEXTAREA'].indexOf(target.tagName) ||
|
47
|
-
((formItem = target.closest(`button, a, [data-role="form-item"]`)) &&
|
48
|
-
e.currentTarget.contains(formItem))
|
49
|
-
) {
|
40
|
+
// 定义点击一行的行为,通过 itemAction配置
|
41
|
+
handleItemClick(e: React.MouseEvent<HTMLTableRowElement>) {
|
42
|
+
if (isClickOnInput(e)) {
|
50
43
|
return;
|
51
44
|
}
|
52
|
-
|
45
|
+
const {itemAction, onAction, item} = this.props;
|
46
|
+
if (itemAction) {
|
47
|
+
onAction && onAction(e, itemAction, item?.data);
|
48
|
+
}
|
53
49
|
this.props.onCheck(this.props.item);
|
54
50
|
}
|
55
51
|
|
@@ -108,11 +104,10 @@ export class TableRow extends React.Component<TableRowProps> {
|
|
108
104
|
render,
|
109
105
|
classnames: cx,
|
110
106
|
parent,
|
107
|
+
itemAction,
|
111
108
|
...rest
|
112
109
|
} = this.props;
|
113
110
|
|
114
|
-
// console.log('TableRow');
|
115
|
-
|
116
111
|
if (footableMode) {
|
117
112
|
if (!item.expanded) {
|
118
113
|
return null;
|
@@ -122,12 +117,15 @@ export class TableRow extends React.Component<TableRowProps> {
|
|
122
117
|
<tr
|
123
118
|
data-id={item.id}
|
124
119
|
data-index={item.newIndex}
|
125
|
-
onClick={
|
120
|
+
onClick={
|
121
|
+
checkOnItemClick || itemAction ? this.handleItemClick : undefined
|
122
|
+
}
|
126
123
|
className={cx(itemClassName, {
|
127
124
|
'is-hovered': item.isHover,
|
128
125
|
'is-checked': item.checked,
|
129
126
|
'is-modified': item.modified,
|
130
127
|
'is-moved': item.moved,
|
128
|
+
[`Table-tr--hasItemAction`]: itemAction, // 就是为了加鼠标效果
|
131
129
|
[`Table-tr--odd`]: itemIndex % 2 === 0,
|
132
130
|
[`Table-tr--even`]: itemIndex % 2 === 1
|
133
131
|
})}
|
@@ -183,7 +181,9 @@ export class TableRow extends React.Component<TableRowProps> {
|
|
183
181
|
|
184
182
|
return (
|
185
183
|
<tr
|
186
|
-
onClick={
|
184
|
+
onClick={
|
185
|
+
checkOnItemClick || itemAction ? this.handleItemClick : undefined
|
186
|
+
}
|
187
187
|
data-index={item.depth === 1 ? item.newIndex : undefined}
|
188
188
|
data-id={item.id}
|
189
189
|
className={cx(
|
@@ -195,6 +195,7 @@ export class TableRow extends React.Component<TableRowProps> {
|
|
195
195
|
'is-moved': item.moved,
|
196
196
|
'is-expanded': item.expanded,
|
197
197
|
'is-expandable': item.expandable,
|
198
|
+
[`Table-tr--hasItemAction`]: itemAction,
|
198
199
|
[`Table-tr--odd`]: itemIndex % 2 === 0,
|
199
200
|
[`Table-tr--even`]: itemIndex % 2 === 1
|
200
201
|
},
|