amis 1.5.3 → 1.5.6-beta.4
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 +5 -0
- package/lib/Root.js +1 -1
- package/lib/Root.js.map +2 -2
- package/lib/RootRenderer.d.ts +1 -1
- package/lib/RootRenderer.js +4 -3
- package/lib/RootRenderer.js.map +2 -2
- package/lib/SchemaRenderer.js +4 -4
- package/lib/SchemaRenderer.js.map +2 -2
- package/lib/components/Card.d.ts +96 -0
- package/lib/components/Card.js +85 -0
- package/lib/components/Card.js.map +13 -0
- package/lib/components/Collapse.js +4 -6
- package/lib/components/Collapse.js.map +2 -2
- package/lib/components/CollapseGroup.d.ts +20 -20
- package/lib/components/CollapseGroup.js +5 -3
- package/lib/components/CollapseGroup.js.map +2 -2
- package/lib/components/ColorPicker.d.ts +84 -84
- package/lib/components/DatePicker.d.ts +85 -84
- package/lib/components/DatePicker.js.map +2 -2
- package/lib/components/DateRangePicker.d.ts +84 -84
- package/lib/components/LocationPicker.d.ts +84 -84
- package/lib/components/MonthRangePicker.d.ts +84 -84
- package/lib/components/Picker.d.ts +503 -0
- package/lib/components/Picker.js +65 -0
- package/lib/components/Picker.js.map +13 -0
- package/lib/components/PickerColumn.d.ts +29 -459
- package/lib/components/PickerColumn.js +35 -44
- package/lib/components/PickerColumn.js.map +2 -2
- package/lib/components/Progress.js +1 -1
- package/lib/components/Progress.js.map +2 -2
- package/lib/components/Select.d.ts +238 -238
- package/lib/components/Select.js +9 -2
- package/lib/components/Select.js.map +2 -2
- package/lib/components/Selection.js +1 -4
- package/lib/components/Selection.js.map +2 -2
- package/lib/components/Switch.d.ts +6 -6
- package/lib/components/Switch.js.map +2 -2
- package/lib/components/Tabs.d.ts +20 -20
- package/lib/components/calendar/Calendar.js +15 -0
- package/lib/components/calendar/Calendar.js.map +2 -2
- package/lib/components/calendar/DaysView.js +4 -4
- package/lib/components/calendar/DaysView.js.map +2 -2
- package/lib/components/calendar/TimeView.d.ts +10 -0
- package/lib/components/calendar/TimeView.js +55 -2
- package/lib/components/calendar/TimeView.js.map +2 -2
- package/lib/components/calendar/YearsView.d.ts +9 -0
- package/lib/components/calendar/YearsView.js +19 -0
- package/lib/components/calendar/YearsView.js.map +2 -2
- package/lib/components/index.d.ts +2 -1
- package/lib/components/index.js +4 -2
- package/lib/components/index.js.map +2 -2
- package/lib/index.js +1 -1
- package/lib/renderers/CRUD.d.ts +1 -1
- package/lib/renderers/CRUD.js +4 -3
- package/lib/renderers/CRUD.js.map +2 -2
- package/lib/renderers/Card.d.ts +81 -13
- package/lib/renderers/Card.js +178 -81
- package/lib/renderers/Card.js.map +2 -2
- package/lib/renderers/Collapse.js +8 -2
- package/lib/renderers/Collapse.js.map +2 -2
- package/lib/renderers/CollapseGroup.js.map +2 -2
- package/lib/renderers/Dialog.d.ts +2 -2
- package/lib/renderers/Dialog.js +7 -7
- package/lib/renderers/Dialog.js.map +2 -2
- package/lib/renderers/Drawer.js +2 -2
- package/lib/renderers/Drawer.js.map +2 -2
- package/lib/renderers/Form/DiffEditor.d.ts +145 -37
- package/lib/renderers/Form/Editor.d.ts +144 -36
- package/lib/renderers/Form/Formula.js +5 -5
- package/lib/renderers/Form/Formula.js.map +2 -2
- package/lib/renderers/Form/InputCity.d.ts +84 -84
- package/lib/renderers/Form/InputColor.d.ts +84 -84
- package/lib/renderers/Form/InputFile.js +3 -3
- package/lib/renderers/Form/InputFile.js.map +2 -2
- package/lib/renderers/Form/InputImage.js +1 -1
- package/lib/renderers/Form/InputImage.js.map +2 -2
- package/lib/renderers/Form/Item.d.ts +1 -1
- package/lib/renderers/Form/Item.js +4 -3
- package/lib/renderers/Form/Item.js.map +2 -2
- package/lib/renderers/Form/index.d.ts +1 -1
- package/lib/renderers/Form/index.js +13 -2
- package/lib/renderers/Form/index.js.map +2 -2
- package/lib/renderers/Form/wrapControl.js +3 -2
- package/lib/renderers/Form/wrapControl.js.map +2 -2
- package/lib/renderers/Page.d.ts +3 -3
- package/lib/renderers/Page.js +4 -3
- package/lib/renderers/Page.js.map +2 -2
- package/lib/renderers/Wizard.d.ts +1 -1
- package/lib/renderers/Wizard.js +93 -36
- package/lib/renderers/Wizard.js.map +2 -2
- package/lib/store/combo.d.ts +160 -40
- package/lib/store/form.d.ts +64 -16
- package/lib/store/formItem.d.ts +4 -2
- package/lib/store/formItem.js +22 -7
- package/lib/store/formItem.js.map +2 -2
- package/lib/store/table.d.ts +128 -32
- package/lib/themes/ang-ie11.css +177 -30
- package/lib/themes/ang.css +177 -30
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +177 -30
- package/lib/themes/antd.css +177 -30
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +177 -30
- package/lib/themes/cxd.css +177 -30
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +177 -30
- package/lib/themes/dark.css +177 -30
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default.css +177 -30
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/helper.d.ts +7 -0
- package/lib/utils/helper.js +34 -7
- package/lib/utils/helper.js.map +2 -2
- package/package.json +2 -2
- package/schema.json +157 -13
- package/scss/_properties.scss +13 -2
- package/scss/components/_card.scss +155 -15
- package/scss/components/_nav.scss +1 -1
- package/scss/components/_picker-columns.scss +20 -14
- package/scss/components/form/_file.scss +2 -2
- package/scss/components/form/_selection.scss +4 -0
- package/scss/components/form/_switch.scss +6 -0
- package/sdk/ang-ie11.css +214 -40
- package/sdk/ang.css +216 -32
- package/sdk/antd-ie11.css +214 -40
- package/sdk/antd.css +216 -32
- package/sdk/charts.js +17 -17
- package/sdk/color-picker.js +65 -65
- package/sdk/cropperjs.js +3 -3
- package/sdk/cxd-ie11.css +206 -32
- package/sdk/cxd.css +216 -32
- package/sdk/dark-ie11.css +214 -40
- package/sdk/dark.css +216 -32
- package/sdk/exceljs.js +1 -1
- package/sdk/markdown.js +69 -69
- package/sdk/papaparse.js +1 -1
- package/sdk/renderers/Form/CityDB.js +1 -1
- package/sdk/rest.js +18 -18
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +206 -32
- package/sdk/sdk.css +216 -32
- package/sdk/sdk.js +1302 -1208
- package/sdk/thirds/hls.js/hls.js +18 -18
- package/sdk/thirds/mpegts.js/mpegts.js +2 -2
- package/sdk/tinymce.js +57 -57
- package/src/Root.tsx +1 -0
- package/src/RootRenderer.tsx +3 -3
- package/src/SchemaRenderer.tsx +4 -0
- package/src/components/Card.tsx +203 -0
- package/src/components/Collapse.tsx +19 -12
- package/src/components/CollapseGroup.tsx +9 -11
- package/src/components/DatePicker.tsx +3 -0
- package/src/components/Picker.tsx +145 -0
- package/src/components/PickerColumn.tsx +58 -95
- package/src/components/Progress.tsx +1 -1
- package/src/components/Select.tsx +17 -12
- package/src/components/Selection.tsx +1 -4
- package/src/components/Switch.tsx +7 -7
- package/src/components/calendar/Calendar.tsx +18 -0
- package/src/components/calendar/DaysView.tsx +6 -4
- package/src/components/calendar/TimeView.tsx +80 -5
- package/src/components/calendar/YearsView.tsx +44 -1
- package/src/components/index.tsx +2 -0
- package/src/renderers/CRUD.tsx +3 -3
- package/src/renderers/Card.tsx +299 -191
- package/src/renderers/Collapse.tsx +27 -27
- package/src/renderers/CollapseGroup.tsx +13 -12
- package/src/renderers/Dialog.tsx +8 -8
- package/src/renderers/Drawer.tsx +2 -2
- package/src/renderers/Form/Formula.tsx +7 -5
- package/src/renderers/Form/InputFile.tsx +7 -3
- package/src/renderers/Form/InputImage.tsx +1 -1
- package/src/renderers/Form/Item.tsx +2 -2
- package/src/renderers/Form/index.tsx +14 -2
- package/src/renderers/Form/wrapControl.tsx +5 -2
- package/src/renderers/Page.tsx +11 -10
- package/src/renderers/Wizard.tsx +52 -12
- package/src/store/formItem.ts +27 -6
- package/src/utils/helper.ts +35 -10
@@ -1,12 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import {Renderer, RendererProps} from '../factory';
|
3
3
|
import {Collapse as BasicCollapse} from '../components/Collapse';
|
4
|
-
import {
|
5
|
-
BaseSchema,
|
6
|
-
SchemaCollection,
|
7
|
-
SchemaTpl,
|
8
|
-
SchemaObject
|
9
|
-
} from '../Schema';
|
4
|
+
import {BaseSchema, SchemaCollection, SchemaTpl, SchemaObject} from '../Schema';
|
10
5
|
|
11
6
|
/**
|
12
7
|
* Collapse 折叠渲染器,格式说明。
|
@@ -63,9 +58,9 @@ export interface CollapseSchema extends BaseSchema {
|
|
63
58
|
*/
|
64
59
|
showArrow?: boolean;
|
65
60
|
|
66
|
-
|
67
|
-
|
68
|
-
|
61
|
+
/**
|
62
|
+
* 自定义切换图标
|
63
|
+
*/
|
69
64
|
expandIcon?: SchemaObject;
|
70
65
|
|
71
66
|
/**
|
@@ -104,14 +99,9 @@ export interface CollapseProps
|
|
104
99
|
children?: JSX.Element | ((props?: any) => JSX.Element);
|
105
100
|
}
|
106
101
|
|
107
|
-
export default class Collapse extends React.Component<
|
108
|
-
CollapseProps,
|
109
|
-
{}
|
110
|
-
> {
|
111
|
-
|
102
|
+
export default class Collapse extends React.Component<CollapseProps, {}> {
|
112
103
|
render() {
|
113
104
|
const {
|
114
|
-
key,
|
115
105
|
id,
|
116
106
|
classPrefix: ns,
|
117
107
|
classnames: cx,
|
@@ -144,7 +134,6 @@ export default class Collapse extends React.Component<
|
|
144
134
|
|
145
135
|
return (
|
146
136
|
<BasicCollapse
|
147
|
-
key={key}
|
148
137
|
id={id}
|
149
138
|
classnames={cx}
|
150
139
|
classPrefix={ns}
|
@@ -162,19 +151,30 @@ export default class Collapse extends React.Component<
|
|
162
151
|
showArrow={showArrow}
|
163
152
|
disabled={disabled}
|
164
153
|
propsUpdate={propsUpdate}
|
165
|
-
expandIcon={
|
166
|
-
|
154
|
+
expandIcon={
|
155
|
+
expandIcon
|
156
|
+
? render('arrow-icon', expandIcon || '', {
|
157
|
+
className: cx('Collapse-icon-tranform')
|
158
|
+
})
|
159
|
+
: null
|
160
|
+
}
|
161
|
+
collapseHeader={
|
162
|
+
collapseTitle || collapseHeader
|
163
|
+
? render('heading', collapseTitle || collapseHeader)
|
164
|
+
: null
|
165
|
+
}
|
167
166
|
header={render('heading', title || header || '')}
|
168
|
-
body={
|
169
|
-
|
170
|
-
? children
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
167
|
+
body={
|
168
|
+
children
|
169
|
+
? typeof children === 'function'
|
170
|
+
? children(this.props)
|
171
|
+
: children
|
172
|
+
: body
|
173
|
+
? render('body', body)
|
174
|
+
: null
|
175
|
+
}
|
175
176
|
onCollapse={onCollapse}
|
176
|
-
>
|
177
|
-
</BasicCollapse>
|
177
|
+
></BasicCollapse>
|
178
178
|
);
|
179
179
|
}
|
180
180
|
}
|
@@ -41,11 +41,13 @@ export interface CollapseGroupSchema extends BaseSchema {
|
|
41
41
|
export interface CollapseGroupProps
|
42
42
|
extends RendererProps,
|
43
43
|
Omit<CollapseGroupSchema, 'type' | 'className'> {
|
44
|
-
|
45
44
|
children?: JSX.Element | ((props?: any) => JSX.Element);
|
46
45
|
}
|
47
46
|
|
48
|
-
export class CollapseGroupRender extends React.Component<
|
47
|
+
export class CollapseGroupRender extends React.Component<
|
48
|
+
CollapseGroupProps,
|
49
|
+
{}
|
50
|
+
> {
|
49
51
|
constructor(props: CollapseGroupProps) {
|
50
52
|
super(props);
|
51
53
|
}
|
@@ -61,19 +63,18 @@ export class CollapseGroupRender extends React.Component<CollapseGroupProps, {}>
|
|
61
63
|
} = this.props;
|
62
64
|
return (
|
63
65
|
<CollapseGroup
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
)
|
66
|
+
defaultActiveKey={defaultActiveKey}
|
67
|
+
accordion={accordion}
|
68
|
+
expandIcon={expandIcon}
|
69
|
+
expandIconPosition={expandIconPosition}
|
70
|
+
className={className}
|
71
|
+
>
|
72
|
+
{render('body', body || '')}
|
73
|
+
</CollapseGroup>
|
74
|
+
);
|
73
75
|
}
|
74
76
|
}
|
75
77
|
|
76
|
-
|
77
78
|
@Renderer({
|
78
79
|
type: 'collapse-group'
|
79
80
|
})
|
package/src/renderers/Dialog.tsx
CHANGED
@@ -97,7 +97,7 @@ export type DialogSchemaBase = Omit<DialogSchema, 'type'>;
|
|
97
97
|
export interface DialogProps
|
98
98
|
extends RendererProps,
|
99
99
|
Omit<DialogSchema, 'className'> {
|
100
|
-
onClose: () => void;
|
100
|
+
onClose: (confirmed?: boolean) => void;
|
101
101
|
onConfirm: (
|
102
102
|
values: Array<object>,
|
103
103
|
action: Action,
|
@@ -214,12 +214,12 @@ export default class Dialog extends React.Component<DialogProps> {
|
|
214
214
|
return ret;
|
215
215
|
}
|
216
216
|
|
217
|
-
handleSelfClose() {
|
217
|
+
handleSelfClose(e?: any, confirmed?: boolean) {
|
218
218
|
const {onClose, store} = this.props;
|
219
219
|
|
220
220
|
// clear error
|
221
221
|
store.updateMessage();
|
222
|
-
onClose();
|
222
|
+
onClose(confirmed);
|
223
223
|
}
|
224
224
|
|
225
225
|
handleAction(e: React.UIEvent<any>, action: Action, data: object) {
|
@@ -251,7 +251,7 @@ export default class Dialog extends React.Component<DialogProps> {
|
|
251
251
|
return;
|
252
252
|
}
|
253
253
|
|
254
|
-
store.closeDialog();
|
254
|
+
store.closeDialog(true);
|
255
255
|
}
|
256
256
|
|
257
257
|
handleDialogClose(...args: Array<any>) {
|
@@ -264,7 +264,7 @@ export default class Dialog extends React.Component<DialogProps> {
|
|
264
264
|
return;
|
265
265
|
}
|
266
266
|
|
267
|
-
store.closeDialog();
|
267
|
+
store.closeDialog(args[1]);
|
268
268
|
}
|
269
269
|
|
270
270
|
handleDrawerConfirm(values: object[], action: Action, ...args: Array<any>) {
|
@@ -743,7 +743,7 @@ export class DialogRenderer extends Dialog {
|
|
743
743
|
},
|
744
744
|
data,
|
745
745
|
action
|
746
|
-
) || this.handleSelfClose();
|
746
|
+
) || this.handleSelfClose(undefined, true);
|
747
747
|
} else if (action.actionType === 'next' || action.actionType === 'prev') {
|
748
748
|
store.setCurrentAction(action);
|
749
749
|
if (action.type === 'submit') {
|
@@ -755,7 +755,7 @@ export class DialogRenderer extends Dialog {
|
|
755
755
|
},
|
756
756
|
data,
|
757
757
|
action
|
758
|
-
) || this.handleSelfClose();
|
758
|
+
) || this.handleSelfClose(undefined, true);
|
759
759
|
} else {
|
760
760
|
onConfirm([data], action, data, []);
|
761
761
|
}
|
@@ -769,7 +769,7 @@ export class DialogRenderer extends Dialog {
|
|
769
769
|
store.setCurrentAction(action);
|
770
770
|
action.target && scoped.reload(action.target, data);
|
771
771
|
if (action.close || action.type === 'submit') {
|
772
|
-
this.handleSelfClose();
|
772
|
+
this.handleSelfClose(undefined, action.type === 'submit');
|
773
773
|
this.closeTarget(action.close);
|
774
774
|
}
|
775
775
|
} else if (this.tryChildrenToHandle(action, data)) {
|
package/src/renderers/Drawer.tsx
CHANGED
@@ -304,7 +304,7 @@ export default class Drawer extends React.Component<DrawerProps> {
|
|
304
304
|
return;
|
305
305
|
}
|
306
306
|
|
307
|
-
store.closeDialog();
|
307
|
+
store.closeDialog(true);
|
308
308
|
}
|
309
309
|
|
310
310
|
handleDialogClose(...args: Array<any>) {
|
@@ -317,7 +317,7 @@ export default class Drawer extends React.Component<DrawerProps> {
|
|
317
317
|
return;
|
318
318
|
}
|
319
319
|
|
320
|
-
store.closeDialog();
|
320
|
+
store.closeDialog(args[1]);
|
321
321
|
}
|
322
322
|
|
323
323
|
handleChildFinished(value: any, action: Action) {
|
@@ -65,10 +65,7 @@ export default class FormulaControl extends React.Component<
|
|
65
65
|
componentDidMount() {
|
66
66
|
const {formInited, initSet, addHook} = this.props;
|
67
67
|
|
68
|
-
this.unHook =
|
69
|
-
initSet !== false && addHook
|
70
|
-
? addHook(this.handleFormInit, 'init')
|
71
|
-
: undefined;
|
68
|
+
this.unHook = addHook ? addHook(this.handleFormInit, 'init') : undefined;
|
72
69
|
|
73
70
|
// 如果在表单中,还是等初始化数据过来才算
|
74
71
|
if (formInited === false) {
|
@@ -97,7 +94,12 @@ export default class FormulaControl extends React.Component<
|
|
97
94
|
@autobind
|
98
95
|
handleFormInit(data: any) {
|
99
96
|
this.inited = true;
|
100
|
-
const {name} = this.props;
|
97
|
+
const {name, initSet} = this.props;
|
98
|
+
|
99
|
+
if (initSet === false) {
|
100
|
+
return;
|
101
|
+
}
|
102
|
+
|
101
103
|
const result = this.initSet();
|
102
104
|
|
103
105
|
if (typeof name === 'string' && typeof result !== 'undefined') {
|
@@ -790,7 +790,7 @@ export default class FileControl extends React.Component<FileProps, FileState> {
|
|
790
790
|
onProgress
|
791
791
|
)
|
792
792
|
.then(ret => {
|
793
|
-
if (ret.status || !ret.data) {
|
793
|
+
if ((ret.status && (ret as any).status !== '0') || !ret.data) {
|
794
794
|
throw new Error(ret.msg || __('File.errorRetry'));
|
795
795
|
}
|
796
796
|
|
@@ -1185,6 +1185,7 @@ export default class FileControl extends React.Component<FileProps, FileState> {
|
|
1185
1185
|
multiple,
|
1186
1186
|
autoUpload,
|
1187
1187
|
description,
|
1188
|
+
descriptionClassName,
|
1188
1189
|
hideUploadButton,
|
1189
1190
|
className,
|
1190
1191
|
btnClassName,
|
@@ -1224,7 +1225,7 @@ export default class FileControl extends React.Component<FileProps, FileState> {
|
|
1224
1225
|
<Icon icon="download" className="icon" />
|
1225
1226
|
<span>{__('File.downloadTpl')}</span>
|
1226
1227
|
</a>
|
1227
|
-
|
1228
|
+
) : null}
|
1228
1229
|
|
1229
1230
|
<DropZone
|
1230
1231
|
disabled={disabled}
|
@@ -1277,7 +1278,10 @@ export default class FileControl extends React.Component<FileProps, FileState> {
|
|
1277
1278
|
|
1278
1279
|
{description
|
1279
1280
|
? render('desc', description!, {
|
1280
|
-
className: cx(
|
1281
|
+
className: cx(
|
1282
|
+
'FileControl-description',
|
1283
|
+
descriptionClassName
|
1284
|
+
)
|
1281
1285
|
})
|
1282
1286
|
: null}
|
1283
1287
|
|
@@ -1035,7 +1035,7 @@ export default class ImageControl extends React.Component<
|
|
1035
1035
|
const __ = this.props.translate;
|
1036
1036
|
this._send(file, this.props.receiver as string, {}, onProgress)
|
1037
1037
|
.then((ret: Payload) => {
|
1038
|
-
if (ret.status) {
|
1038
|
+
if (ret.status && (ret as any).status !== '0') {
|
1039
1039
|
throw new Error(ret.msg || __('File.errorRetry'));
|
1040
1040
|
}
|
1041
1041
|
|
@@ -436,12 +436,12 @@ export class FormItemWrap extends React.Component<FormItemProps> {
|
|
436
436
|
}
|
437
437
|
|
438
438
|
@autobind
|
439
|
-
handleDialogClose() {
|
439
|
+
handleDialogClose(confirmed = false) {
|
440
440
|
const {formItem: model} = this.props;
|
441
441
|
if (!model) {
|
442
442
|
return;
|
443
443
|
}
|
444
|
-
model.closeDialog();
|
444
|
+
model.closeDialog(confirmed);
|
445
445
|
}
|
446
446
|
|
447
447
|
renderControl(): JSX.Element | null {
|
@@ -866,6 +866,18 @@ export default class Form extends React.Component<FormProps, object> {
|
|
866
866
|
|
867
867
|
store.updateData(values);
|
868
868
|
|
869
|
+
store.items.forEach(formItem => {
|
870
|
+
const updatedValue = getVariable(values, formItem.name, false);
|
871
|
+
|
872
|
+
if (updatedValue !== undefined) {
|
873
|
+
// 更新验证状态但保留错误信息
|
874
|
+
formItem.reset(true);
|
875
|
+
// 这里需要更新value,否则提交时不会使用新的字段值校验
|
876
|
+
formItem.changeTmpValue(updatedValue);
|
877
|
+
formItem.validateOnChange && formItem.validate(values);
|
878
|
+
}
|
879
|
+
});
|
880
|
+
|
869
881
|
(formLazyChange === false ? this.emitChange : this.lazyEmitChange)(submit);
|
870
882
|
}
|
871
883
|
|
@@ -1155,9 +1167,9 @@ export default class Form extends React.Component<FormProps, object> {
|
|
1155
1167
|
store.closeDialog(true);
|
1156
1168
|
}
|
1157
1169
|
|
1158
|
-
handleDialogClose() {
|
1170
|
+
handleDialogClose(confirmed = false) {
|
1159
1171
|
const {store} = this.props;
|
1160
|
-
store.closeDialog(
|
1172
|
+
store.closeDialog(confirmed);
|
1161
1173
|
}
|
1162
1174
|
|
1163
1175
|
handleDrawerConfirm(
|
@@ -129,7 +129,8 @@ export function wrapControl<
|
|
129
129
|
clearValueOnHidden,
|
130
130
|
validateApi,
|
131
131
|
minLength,
|
132
|
-
maxLength
|
132
|
+
maxLength,
|
133
|
+
validateOnChange
|
133
134
|
}
|
134
135
|
} = this.props;
|
135
136
|
|
@@ -174,7 +175,8 @@ export function wrapControl<
|
|
174
175
|
clearValueOnHidden,
|
175
176
|
validateApi,
|
176
177
|
minLength,
|
177
|
-
maxLength
|
178
|
+
maxLength,
|
179
|
+
validateOnChange
|
178
180
|
});
|
179
181
|
|
180
182
|
// issue 这个逻辑应该在 combo 里面自己实现。
|
@@ -465,6 +467,7 @@ export function wrapControl<
|
|
465
467
|
}
|
466
468
|
|
467
469
|
this.model.changeTmpValue(value);
|
470
|
+
|
468
471
|
if (changeImmediately || conrolChangeImmediately || !formInited) {
|
469
472
|
this.emitChange(submitOnChange);
|
470
473
|
} else {
|
package/src/renderers/Page.tsx
CHANGED
@@ -95,7 +95,7 @@ export interface PageSchema extends BaseSchema {
|
|
95
95
|
*/
|
96
96
|
asideMinWidth?: number;
|
97
97
|
|
98
|
-
|
98
|
+
/**
|
99
99
|
* 边栏最小宽度
|
100
100
|
*/
|
101
101
|
asideMaxWidth?: number;
|
@@ -471,12 +471,12 @@ export default class Page extends React.Component<PageProps> {
|
|
471
471
|
return;
|
472
472
|
}
|
473
473
|
|
474
|
-
store.closeDialog();
|
474
|
+
store.closeDialog(true);
|
475
475
|
}
|
476
476
|
|
477
|
-
handleDialogClose() {
|
477
|
+
handleDialogClose(confirmed = false) {
|
478
478
|
const {store} = this.props;
|
479
|
-
store.closeDialog();
|
479
|
+
store.closeDialog(confirmed);
|
480
480
|
}
|
481
481
|
|
482
482
|
handleDrawerConfirm(values: object[], action: Action, ...args: Array<any>) {
|
@@ -734,11 +734,13 @@ export default class Page extends React.Component<PageProps> {
|
|
734
734
|
style={styleVar}
|
735
735
|
>
|
736
736
|
{hasAside ? (
|
737
|
-
<div
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
737
|
+
<div
|
738
|
+
className={cx(
|
739
|
+
`Page-aside`,
|
740
|
+
asideResizor ? 'relative' : 'Page-aside--withWidth',
|
741
|
+
asideClassName
|
742
|
+
)}
|
743
|
+
>
|
742
744
|
{render('aside', aside || '', {
|
743
745
|
...subProps,
|
744
746
|
...(typeof aside === 'string'
|
@@ -754,7 +756,6 @@ export default class Page extends React.Component<PageProps> {
|
|
754
756
|
className={cx(`Page-asideResizor`)}
|
755
757
|
></div>
|
756
758
|
) : null}
|
757
|
-
|
758
759
|
</div>
|
759
760
|
) : null}
|
760
761
|
|
package/src/renderers/Wizard.tsx
CHANGED
@@ -9,7 +9,8 @@ import {
|
|
9
9
|
until,
|
10
10
|
isVisible,
|
11
11
|
getScrollParent,
|
12
|
-
autobind
|
12
|
+
autobind,
|
13
|
+
SkipOperation
|
13
14
|
} from '../utils/helper';
|
14
15
|
import {isApiOutdated, isEffectiveApi} from '../utils/api';
|
15
16
|
import {IFormStore} from '../store/form';
|
@@ -546,8 +547,16 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
|
546
547
|
.then(async () => {
|
547
548
|
this.form && this.form.isValidated() && this.form.validate(true);
|
548
549
|
|
549
|
-
|
550
|
-
|
550
|
+
const feedback = action.feedback;
|
551
|
+
if (feedback && isVisible(feedback, store.data)) {
|
552
|
+
const confirmed = await this.openFeedback(feedback, store.data);
|
553
|
+
|
554
|
+
// 如果 feedback 配置了,取消就跳过原有逻辑。
|
555
|
+
if (feedback.skipRestOnCancel && !confirmed) {
|
556
|
+
throw new SkipOperation();
|
557
|
+
} else if (feedback.skipRestOnConfirm && confirmed) {
|
558
|
+
throw new SkipOperation();
|
559
|
+
}
|
551
560
|
}
|
552
561
|
|
553
562
|
const reidrect =
|
@@ -556,7 +565,11 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
|
556
565
|
|
557
566
|
action.reload && this.reloadTarget(action.reload, store.data);
|
558
567
|
})
|
559
|
-
.catch(
|
568
|
+
.catch(reason => {
|
569
|
+
if (reason instanceof SkipOperation) {
|
570
|
+
return;
|
571
|
+
}
|
572
|
+
});
|
560
573
|
} else if (action.actionType === 'reload') {
|
561
574
|
action.target && this.reloadTarget(action.target, data);
|
562
575
|
} else if (onAction) {
|
@@ -667,14 +680,29 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
|
667
680
|
}
|
668
681
|
}
|
669
682
|
})
|
670
|
-
.then((value: any) =>
|
683
|
+
.then(async (value: any) => {
|
684
|
+
const feedback = action.feedback;
|
685
|
+
if (feedback && isVisible(feedback, value)) {
|
686
|
+
const confirmed = await this.openFeedback(feedback, value);
|
687
|
+
|
688
|
+
// 如果 feedback 配置了,取消就跳过原有逻辑。
|
689
|
+
if (feedback.skipRestOnCancel && !confirmed) {
|
690
|
+
throw new SkipOperation();
|
691
|
+
} else if (feedback.skipRestOnConfirm && confirmed) {
|
692
|
+
throw new SkipOperation();
|
693
|
+
}
|
694
|
+
}
|
695
|
+
|
671
696
|
this.gotoStep(
|
672
697
|
value && typeof value.step === 'number'
|
673
698
|
? value.step
|
674
699
|
: this.state.currentStep + 1
|
675
|
-
)
|
676
|
-
)
|
677
|
-
.catch(
|
700
|
+
);
|
701
|
+
})
|
702
|
+
.catch(reason => {
|
703
|
+
if (reason instanceof SkipOperation) {
|
704
|
+
return;
|
705
|
+
}
|
678
706
|
// do nothing
|
679
707
|
});
|
680
708
|
} else {
|
@@ -715,7 +743,19 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
|
715
743
|
);
|
716
744
|
}
|
717
745
|
})
|
718
|
-
.then(value => {
|
746
|
+
.then(async value => {
|
747
|
+
const feedback = action.feedback;
|
748
|
+
if (feedback && isVisible(feedback, value)) {
|
749
|
+
const confirmed = await this.openFeedback(feedback, value);
|
750
|
+
|
751
|
+
// 如果 feedback 配置了,取消就跳过原有逻辑。
|
752
|
+
if (feedback.skipRestOnCancel && !confirmed) {
|
753
|
+
throw new SkipOperation();
|
754
|
+
} else if (feedback.skipRestOnConfirm && confirmed) {
|
755
|
+
throw new SkipOperation();
|
756
|
+
}
|
757
|
+
}
|
758
|
+
|
719
759
|
this.setState({completeStep: steps.length});
|
720
760
|
store.updateData({
|
721
761
|
...store.data,
|
@@ -771,13 +811,13 @@ export default class Wizard extends React.Component<WizardProps, WizardState> {
|
|
771
811
|
store.updateData(values[0]);
|
772
812
|
}
|
773
813
|
|
774
|
-
store.closeDialog();
|
814
|
+
store.closeDialog(true);
|
775
815
|
}
|
776
816
|
|
777
817
|
@autobind
|
778
|
-
handleDialogClose() {
|
818
|
+
handleDialogClose(confirmed = false) {
|
779
819
|
const {store} = this.props;
|
780
|
-
store.closeDialog();
|
820
|
+
store.closeDialog(confirmed);
|
781
821
|
}
|
782
822
|
|
783
823
|
renderSteps() {
|
package/src/store/formItem.ts
CHANGED
@@ -14,6 +14,7 @@ import {str2rules, validate as doValidate} from '../utils/validations';
|
|
14
14
|
import {Api, Payload, fetchOptions} from '../types';
|
15
15
|
import {ComboStore, IComboStore, IUniqueGroup} from './combo';
|
16
16
|
import {evalExpression} from '../utils/tpl';
|
17
|
+
import {isEffectiveApi} from '../utils/api';
|
17
18
|
import findIndex from 'lodash/findIndex';
|
18
19
|
import {
|
19
20
|
isArrayChildrenModified,
|
@@ -88,7 +89,8 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
88
89
|
dialogSchema: types.frozen(),
|
89
90
|
dialogOpen: false,
|
90
91
|
dialogData: types.frozen(),
|
91
|
-
resetValue: types.optional(types.frozen(), '')
|
92
|
+
resetValue: types.optional(types.frozen(), ''),
|
93
|
+
validateOnChange: false
|
92
94
|
})
|
93
95
|
.views(self => {
|
94
96
|
function getForm(): any {
|
@@ -233,7 +235,8 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
233
235
|
clearValueOnHidden,
|
234
236
|
validateApi,
|
235
237
|
maxLength,
|
236
|
-
minLength
|
238
|
+
minLength,
|
239
|
+
validateOnChange
|
237
240
|
}: {
|
238
241
|
required?: boolean;
|
239
242
|
unique?: boolean;
|
@@ -254,6 +257,7 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
254
257
|
validateApi?: boolean;
|
255
258
|
minLength?: number;
|
256
259
|
maxLength?: number;
|
260
|
+
validateOnChange?: boolean;
|
257
261
|
}) {
|
258
262
|
if (typeof rules === 'string') {
|
259
263
|
rules = str2rules(rules);
|
@@ -279,6 +283,8 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
279
283
|
typeof clearValueOnHidden !== 'undefined' &&
|
280
284
|
(self.clearValueOnHidden = !!clearValueOnHidden);
|
281
285
|
typeof validateApi !== 'undefined' && (self.validateApi = validateApi);
|
286
|
+
typeof validateOnChange !== 'undefined' &&
|
287
|
+
(self.validateOnChange = !!validateOnChange);
|
282
288
|
|
283
289
|
rules = {
|
284
290
|
...rules,
|
@@ -315,7 +321,7 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
315
321
|
let validateCancel: Function | null = null;
|
316
322
|
const validate: (data: Object, hook?: any) => Promise<boolean> = flow(
|
317
323
|
function* validate(data: Object, hook?: any) {
|
318
|
-
if (self.validating && !self.validateApi) {
|
324
|
+
if (self.validating && !isEffectiveApi(self.validateApi, data)) {
|
319
325
|
return self.valid;
|
320
326
|
}
|
321
327
|
|
@@ -329,7 +335,7 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
329
335
|
doValidate(self.tmpValue, data, self.rules, self.messages, self.__)
|
330
336
|
);
|
331
337
|
|
332
|
-
if (!self.errors.length && self.validateApi) {
|
338
|
+
if (!self.errors.length && isEffectiveApi(self.validateApi, data)) {
|
333
339
|
if (validateCancel) {
|
334
340
|
validateCancel();
|
335
341
|
validateCancel = null;
|
@@ -706,6 +712,21 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
706
712
|
data
|
707
713
|
);
|
708
714
|
|
715
|
+
// 插入新的子节点,用于之后BaseSelection.resolveSelected查找
|
716
|
+
if (Array.isArray(self.options[0].children)) {
|
717
|
+
const children = self.options[0].children.concat();
|
718
|
+
|
719
|
+
flattenTree(self.options[0].leftOptions).forEach(item => {
|
720
|
+
if (
|
721
|
+
!findTree(self.options[0].children, node => node.ref === item.value)
|
722
|
+
) {
|
723
|
+
children.push({ref: item.value, defer: true});
|
724
|
+
}
|
725
|
+
});
|
726
|
+
|
727
|
+
setOptions([{...self.options[0], children}], undefined, data);
|
728
|
+
}
|
729
|
+
|
709
730
|
return json;
|
710
731
|
});
|
711
732
|
|
@@ -1029,7 +1050,7 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
1029
1050
|
subStore = store;
|
1030
1051
|
}
|
1031
1052
|
|
1032
|
-
function reset() {
|
1053
|
+
function reset(keepErrors: boolean = false) {
|
1033
1054
|
self.validated = false;
|
1034
1055
|
|
1035
1056
|
if (subStore && subStore.storeType === 'ComboStore') {
|
@@ -1037,7 +1058,7 @@ export const FormItemStore = StoreNode.named('FormItemStore')
|
|
1037
1058
|
combo.forms.forEach(form => form.reset());
|
1038
1059
|
}
|
1039
1060
|
|
1040
|
-
clearError();
|
1061
|
+
!keepErrors && clearError();
|
1041
1062
|
}
|
1042
1063
|
|
1043
1064
|
function openDialog(
|