amis 1.9.0-beta.12 → 1.9.0-beta.15
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/lib/Schema.d.ts +4 -2
- package/lib/Schema.js.map +1 -1
- package/lib/SchemaRenderer.d.ts +2 -2
- package/lib/SchemaRenderer.js +3 -3
- package/lib/SchemaRenderer.js.map +2 -2
- package/lib/actions/Action.d.ts +8 -6
- package/lib/actions/Action.js.map +2 -2
- package/lib/actions/AjaxAction.d.ts +10 -7
- package/lib/actions/AjaxAction.js +27 -21
- package/lib/actions/AjaxAction.js.map +2 -2
- package/lib/actions/BreakAction.d.ts +2 -2
- package/lib/actions/BreakAction.js.map +1 -1
- package/lib/actions/BroadcastAction.d.ts +3 -3
- package/lib/actions/BroadcastAction.js +3 -2
- package/lib/actions/BroadcastAction.js.map +2 -2
- package/lib/actions/CmptAction.d.ts +2 -2
- package/lib/actions/CmptAction.js +7 -9
- package/lib/actions/CmptAction.js.map +2 -2
- package/lib/actions/ContinueAction.d.ts +2 -2
- package/lib/actions/ContinueAction.js.map +1 -1
- package/lib/actions/CopyAction.d.ts +7 -4
- package/lib/actions/CopyAction.js +8 -6
- package/lib/actions/CopyAction.js.map +2 -2
- package/lib/actions/CustomAction.d.ts +2 -2
- package/lib/actions/CustomAction.js.map +1 -1
- package/lib/actions/DialogAction.d.ts +14 -8
- package/lib/actions/DialogAction.js +6 -6
- package/lib/actions/DialogAction.js.map +2 -2
- package/lib/actions/DrawerAction.d.ts +3 -3
- package/lib/actions/DrawerAction.js.map +1 -1
- package/lib/actions/EmailAction.d.ts +10 -7
- package/lib/actions/EmailAction.js +4 -5
- package/lib/actions/EmailAction.js.map +2 -2
- package/lib/actions/LinkAction.d.ts +19 -11
- package/lib/actions/LinkAction.js +6 -5
- package/lib/actions/LinkAction.js.map +2 -2
- package/lib/actions/LoopAction.d.ts +6 -3
- package/lib/actions/LoopAction.js +22 -20
- package/lib/actions/LoopAction.js.map +2 -2
- package/lib/actions/PageAction.d.ts +8 -5
- package/lib/actions/PageAction.js +3 -2
- package/lib/actions/PageAction.js.map +2 -2
- package/lib/actions/ParallelAction.d.ts +2 -2
- package/lib/actions/ParallelAction.js.map +1 -1
- package/lib/actions/SwitchAction.d.ts +2 -2
- package/lib/actions/SwitchAction.js.map +1 -1
- package/lib/actions/ToastAction.d.ts +2 -2
- package/lib/actions/ToastAction.js +6 -4
- package/lib/actions/ToastAction.js.map +2 -2
- package/lib/components/Editor.d.ts +84 -84
- package/lib/components/InputBox.js +1 -1
- package/lib/components/InputBox.js.map +2 -2
- package/lib/components/Pagination.d.ts +1175 -0
- package/lib/components/Pagination.js +274 -0
- package/lib/components/Pagination.js.map +13 -0
- package/lib/components/PickerContainer.d.ts +1 -0
- package/lib/components/PickerContainer.js +3 -2
- package/lib/components/PickerContainer.js.map +2 -2
- package/lib/components/Rating.js +11 -9
- package/lib/components/Rating.js.map +2 -2
- package/lib/components/Select.js +3 -3
- package/lib/components/Select.js.map +2 -2
- package/lib/components/Tag.d.ts +148 -0
- package/lib/components/Tag.js +96 -0
- package/lib/components/Tag.js.map +13 -0
- package/lib/components/TooltipWrapper.d.ts +25 -21
- package/lib/components/TooltipWrapper.js +11 -1
- package/lib/components/TooltipWrapper.js.map +2 -2
- package/lib/components/TransferDropDown.d.ts +85 -84
- package/lib/components/TransferDropDown.js +2 -2
- package/lib/components/TransferDropDown.js.map +2 -2
- package/lib/components/Tree.d.ts +84 -84
- package/lib/components/formula/VariableList.d.ts +1 -0
- package/lib/components/formula/VariableList.js.map +2 -2
- package/lib/components/icons.js +2 -0
- package/lib/components/icons.js.map +2 -2
- package/lib/components/index.d.ts +4 -1
- package/lib/components/index.js +7 -1
- package/lib/components/index.js.map +2 -2
- package/lib/components/schema-editor/Array.d.ts +11 -0
- package/lib/components/schema-editor/Array.js +66 -0
- package/lib/components/schema-editor/Array.js.map +13 -0
- package/lib/components/schema-editor/Common.d.ts +29 -0
- package/lib/components/schema-editor/Common.js +69 -0
- package/lib/components/schema-editor/Common.js.map +13 -0
- package/lib/components/schema-editor/Item.d.ts +9 -0
- package/lib/components/schema-editor/Item.js +31 -0
- package/lib/components/schema-editor/Item.js.map +13 -0
- package/lib/components/schema-editor/Object.d.ts +44 -0
- package/lib/components/schema-editor/Object.js +191 -0
- package/lib/components/schema-editor/Object.js.map +13 -0
- package/lib/components/schema-editor/SchemaVariableList.d.ts +316 -0
- package/lib/components/schema-editor/SchemaVariableList.js +74 -0
- package/lib/components/schema-editor/SchemaVariableList.js.map +13 -0
- package/lib/components/schema-editor/SchemaVariableListPicker.d.ts +305 -0
- package/lib/components/schema-editor/SchemaVariableListPicker.js +32 -0
- package/lib/components/schema-editor/SchemaVariableListPicker.js.map +13 -0
- package/lib/components/schema-editor/index.d.ts +520 -0
- package/lib/components/schema-editor/index.js +118 -0
- package/lib/components/schema-editor/index.js.map +13 -0
- package/lib/components/table/Cell.d.ts +930 -0
- package/lib/components/table/Cell.js +36 -0
- package/lib/components/table/Cell.js.map +13 -0
- package/lib/components/table/HeadCellDropDown.d.ts +514 -0
- package/lib/components/table/HeadCellDropDown.js +52 -0
- package/lib/components/table/HeadCellDropDown.js.map +13 -0
- package/lib/components/table/HeadCellFilter.d.ts +771 -0
- package/lib/components/table/HeadCellFilter.js +106 -0
- package/lib/components/table/HeadCellFilter.js.map +13 -0
- package/lib/components/table/HeadCellSelect.d.ts +672 -0
- package/lib/components/table/HeadCellSelect.js +46 -0
- package/lib/components/table/HeadCellSelect.js.map +13 -0
- package/lib/components/table/HeadCellSort.d.ts +498 -0
- package/lib/components/table/HeadCellSort.js +67 -0
- package/lib/components/table/HeadCellSort.js.map +13 -0
- package/lib/components/table/index.d.ts +1355 -0
- package/lib/components/table/index.js +1095 -0
- package/lib/components/table/index.js.map +13 -0
- package/lib/env.d.ts +2 -4
- package/lib/env.js.map +2 -2
- package/lib/factory.js +0 -95
- package/lib/factory.js.map +2 -2
- package/lib/icons/dot.js +11 -0
- package/lib/index.d.ts +6 -1
- package/lib/index.js +9 -2
- package/lib/index.js.map +2 -2
- package/lib/locale/de-DE.js +18 -1
- package/lib/locale/de-DE.js.map +2 -2
- package/lib/locale/en-US.js +18 -1
- package/lib/locale/en-US.js.map +2 -2
- package/lib/locale/zh-CN.js +20 -1
- package/lib/locale/zh-CN.js.map +2 -2
- package/lib/renderers/Action.js +0 -2
- package/lib/renderers/Action.js.map +2 -2
- package/lib/renderers/Carousel.d.ts +5 -1
- package/lib/renderers/Carousel.js +18 -5
- package/lib/renderers/Carousel.js.map +2 -2
- package/lib/renderers/Form/ButtonGroupSelect.d.ts +2 -0
- package/lib/renderers/Form/ButtonGroupSelect.js +7 -0
- package/lib/renderers/Form/ButtonGroupSelect.js.map +2 -2
- package/lib/renderers/Form/Checkbox.js +3 -4
- package/lib/renderers/Form/Checkbox.js.map +2 -2
- package/lib/renderers/Form/Checkboxes.d.ts +2 -1
- package/lib/renderers/Form/Checkboxes.js +19 -14
- package/lib/renderers/Form/Checkboxes.js.map +2 -2
- package/lib/renderers/Form/Combo.js +23 -4
- package/lib/renderers/Form/Combo.js.map +2 -2
- package/lib/renderers/Form/DiffEditor.d.ts +126 -18
- package/lib/renderers/Form/Editor.d.ts +412 -112
- package/lib/renderers/Form/Editor.js +10 -1
- package/lib/renderers/Form/Editor.js.map +2 -2
- package/lib/renderers/Form/InputExcel.js +6 -1
- package/lib/renderers/Form/InputExcel.js.map +2 -2
- package/lib/renderers/Form/InputFile.js +1 -2
- package/lib/renderers/Form/InputFile.js.map +2 -2
- package/lib/renderers/Form/InputTree.js +1 -1
- package/lib/renderers/Form/InputTree.js.map +2 -2
- package/lib/renderers/Form/Item.d.ts +0 -6
- package/lib/renderers/Form/JSONSchemaEditor.d.ts +41 -0
- package/lib/renderers/Form/JSONSchemaEditor.js +33 -0
- package/lib/renderers/Form/JSONSchemaEditor.js.map +13 -0
- package/lib/renderers/Form/ListSelect.d.ts +2 -0
- package/lib/renderers/Form/ListSelect.js +7 -0
- package/lib/renderers/Form/ListSelect.js.map +2 -2
- package/lib/renderers/Form/Options.js +1 -0
- package/lib/renderers/Form/Options.js.map +2 -2
- package/lib/renderers/Form/Select.js +12 -1
- package/lib/renderers/Form/Select.js.map +2 -2
- package/lib/renderers/Form/TabsTransfer.d.ts +1 -1
- package/lib/renderers/Form/TabsTransfer.js +2 -2
- package/lib/renderers/Form/TabsTransfer.js.map +2 -2
- package/lib/renderers/Form/TreeSelect.d.ts +4 -0
- package/lib/renderers/Form/TreeSelect.js +2 -2
- package/lib/renderers/Form/TreeSelect.js.map +2 -2
- package/lib/renderers/Form/wrapControl.js +10 -5
- package/lib/renderers/Form/wrapControl.js.map +2 -2
- package/lib/renderers/Pagination.d.ts +49 -30
- package/lib/renderers/Pagination.js +3 -132
- package/lib/renderers/Pagination.js.map +2 -2
- package/lib/renderers/Table/HeadCellSearchDropdown.js +0 -1
- package/lib/renderers/Table/HeadCellSearchDropdown.js.map +2 -2
- package/lib/renderers/Table-v2/HeadCellSearchDropdown.d.ts +29 -0
- package/lib/renderers/Table-v2/HeadCellSearchDropdown.js +158 -0
- package/lib/renderers/Table-v2/HeadCellSearchDropdown.js.map +13 -0
- package/lib/renderers/Table-v2/TableCell.d.ts +6 -0
- package/lib/renderers/Table-v2/TableCell.js +28 -0
- package/lib/renderers/Table-v2/TableCell.js.map +13 -0
- package/lib/renderers/Table-v2/index.d.ts +256 -0
- package/lib/renderers/Table-v2/index.js +548 -0
- package/lib/renderers/Table-v2/index.js.map +13 -0
- package/lib/renderers/Tabs.js +1 -1
- package/lib/renderers/Tabs.js.map +2 -2
- package/lib/renderers/Tag.d.ts +66 -0
- package/lib/renderers/Tag.js +53 -0
- package/lib/renderers/Tag.js.map +13 -0
- package/lib/renderers/Wizard.js +3 -3
- package/lib/renderers/Wizard.js.map +2 -2
- package/lib/schemaExtend.js +24 -30
- package/lib/schemaExtend.js.map +2 -2
- package/lib/store/combo.d.ts +140 -20
- package/lib/store/form.d.ts +56 -8
- package/lib/store/formItem.d.ts +3 -1
- package/lib/store/formItem.js +3 -1
- package/lib/store/formItem.js.map +2 -2
- package/lib/store/index.js +2 -0
- package/lib/store/index.js.map +2 -2
- package/lib/store/table-v2.d.ts +308 -0
- package/lib/store/table-v2.js +452 -0
- package/lib/store/table-v2.js.map +13 -0
- package/lib/store/table.d.ts +112 -16
- package/lib/store/table.js +1 -1
- package/lib/store/table.js.map +2 -2
- package/lib/themes/ang-ie11.css +1686 -120
- package/lib/themes/ang.css +1807 -208
- package/lib/themes/ang.css.map +1 -1
- package/lib/themes/antd-ie11.css +1667 -101
- package/lib/themes/antd.css +1789 -201
- package/lib/themes/antd.css.map +1 -1
- package/lib/themes/cxd-ie11.css +1662 -97
- package/lib/themes/cxd.css +1983 -394
- package/lib/themes/cxd.css.map +1 -1
- package/lib/themes/dark-ie11.css +1667 -101
- package/lib/themes/dark.css +1789 -201
- package/lib/themes/dark.css.map +1 -1
- package/lib/themes/default-ie11.css +1662 -97
- package/lib/themes/default.css +1983 -394
- package/lib/themes/default.css.map +1 -1
- package/lib/utils/DataSchema.d.ts +25 -0
- package/lib/utils/DataSchema.js +104 -0
- package/lib/utils/DataSchema.js.map +13 -0
- package/lib/utils/DataScope.d.ts +23 -0
- package/lib/utils/DataScope.js +140 -0
- package/lib/utils/DataScope.js.map +13 -0
- package/lib/utils/handleAction.js +1 -1
- package/lib/utils/handleAction.js.map +2 -2
- package/lib/utils/renderer-event.d.ts +8 -2
- package/lib/utils/renderer-event.js +102 -1
- package/lib/utils/renderer-event.js.map +2 -2
- package/package.json +3 -2
- package/schema.json +1476 -469
- package/scss/_properties.scss +69 -0
- package/scss/components/_button.scss +37 -39
- package/scss/components/_context-menu.scss +3 -18
- package/scss/components/_json-schema-editor.scss +126 -0
- package/scss/components/_pagination.scss +104 -23
- package/scss/components/_result-box.scss +2 -2
- package/scss/components/_table-v2.scss +912 -0
- package/scss/components/_tag.scss +177 -0
- package/scss/components/form/_selection.scss +1 -14
- package/scss/components/form/_text.scss +1 -1
- package/scss/themes/_antd-variables.scss +0 -13
- package/scss/themes/_common.scss +3 -0
- package/scss/themes/_cxd-variables.scss +7 -17
- package/scss/themes/_dark-variables.scss +0 -13
- package/scss/themes/cxd.scss +1 -1
- package/sdk/ang-ie11.css +2240 -227
- package/sdk/ang.css +2905 -859
- package/sdk/antd-ie11.css +2233 -220
- package/sdk/antd.css +2905 -870
- package/sdk/barcode.js +51 -51
- package/sdk/charts.js +14 -14
- package/sdk/codemirror.js +7 -7
- package/sdk/color-picker.js +65 -65
- package/sdk/cropperjs.js +2 -2
- package/sdk/cxd-ie11.css +2223 -211
- package/sdk/cxd.css +2911 -875
- package/sdk/dark-ie11.css +2233 -220
- package/sdk/dark.css +2905 -870
- package/sdk/exceljs.js +1 -1
- package/sdk/locale/de-DE.js +18 -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 +16 -16
- package/sdk/rich-text.js +62 -62
- package/sdk/sdk-ie11.css +2223 -211
- package/sdk/sdk.css +2911 -875
- package/sdk/sdk.js +1326 -1270
- 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/Schema.ts +7 -0
- package/src/SchemaRenderer.tsx +4 -5
- package/src/actions/Action.ts +7 -6
- package/src/actions/AjaxAction.ts +33 -24
- package/src/actions/BreakAction.ts +2 -2
- package/src/actions/BroadcastAction.ts +6 -5
- package/src/actions/CmptAction.ts +5 -6
- package/src/actions/ContinueAction.ts +2 -2
- package/src/actions/CopyAction.ts +14 -8
- package/src/actions/CustomAction.ts +2 -2
- package/src/actions/DialogAction.ts +16 -10
- package/src/actions/DrawerAction.ts +3 -3
- package/src/actions/EmailAction.ts +12 -12
- package/src/actions/LinkAction.ts +34 -14
- package/src/actions/LoopAction.ts +13 -8
- package/src/actions/PageAction.ts +9 -6
- package/src/actions/ParallelAction.ts +2 -2
- package/src/actions/SwitchAction.ts +2 -2
- package/src/actions/ToastAction.ts +9 -5
- package/src/components/InputBox.tsx +1 -0
- package/src/components/Pagination.tsx +446 -0
- package/src/components/PickerContainer.tsx +8 -5
- package/src/components/Rating.tsx +16 -9
- package/src/components/Select.tsx +3 -3
- package/src/components/Tag.tsx +179 -0
- package/src/components/TooltipWrapper.tsx +14 -1
- package/src/components/TransferDropDown.tsx +3 -0
- package/src/components/formula/VariableList.tsx +1 -0
- package/src/components/icons.tsx +2 -0
- package/src/components/index.tsx +7 -1
- package/src/components/schema-editor/Array.tsx +95 -0
- package/src/components/schema-editor/Common.tsx +138 -0
- package/src/components/schema-editor/Item.tsx +36 -0
- package/src/components/schema-editor/Object.tsx +299 -0
- package/src/components/schema-editor/SchemaVariableList.tsx +97 -0
- package/src/components/schema-editor/SchemaVariableListPicker.tsx +66 -0
- package/src/components/schema-editor/index.tsx +211 -0
- package/src/components/table/Cell.tsx +70 -0
- package/src/components/table/HeadCellDropDown.tsx +115 -0
- package/src/components/table/HeadCellFilter.tsx +193 -0
- package/src/components/table/HeadCellSelect.tsx +86 -0
- package/src/components/table/HeadCellSort.tsx +102 -0
- package/src/components/table/index.tsx +1681 -0
- package/src/env.tsx +7 -14
- package/src/factory.tsx +3 -106
- package/src/icons/dot.svg +11 -0
- package/src/index.tsx +8 -1
- package/src/locale/de-DE.ts +18 -1
- package/src/locale/en-US.ts +18 -1
- package/src/locale/zh-CN.ts +20 -1
- package/src/renderers/Action.tsx +1 -1
- package/src/renderers/Carousel.tsx +21 -6
- package/src/renderers/Form/ButtonGroupSelect.tsx +10 -1
- package/src/renderers/Form/Checkbox.tsx +4 -4
- package/src/renderers/Form/Checkboxes.tsx +31 -25
- package/src/renderers/Form/Combo.tsx +20 -4
- package/src/renderers/Form/Editor.tsx +15 -1
- package/src/renderers/Form/InputExcel.tsx +6 -1
- package/src/renderers/Form/InputFile.tsx +1 -2
- package/src/renderers/Form/InputTree.tsx +1 -1
- package/src/renderers/Form/JSONSchemaEditor.tsx +67 -0
- package/src/renderers/Form/ListSelect.tsx +9 -1
- package/src/renderers/Form/Options.tsx +1 -1
- package/src/renderers/Form/Select.tsx +7 -0
- package/src/renderers/Form/TabsTransfer.tsx +2 -2
- package/src/renderers/Form/TreeSelect.tsx +8 -1
- package/src/renderers/Form/wrapControl.tsx +11 -5
- package/src/renderers/Pagination.tsx +65 -253
- package/src/renderers/Table/HeadCellSearchDropdown.tsx +0 -1
- package/src/renderers/Table-v2/HeadCellSearchDropdown.tsx +244 -0
- package/src/renderers/Table-v2/TableCell.tsx +19 -0
- package/src/renderers/Table-v2/index.tsx +1140 -0
- package/src/renderers/Tabs.tsx +1 -1
- package/src/renderers/Tag.tsx +128 -0
- package/src/renderers/Wizard.tsx +3 -3
- package/src/schemaExtend.ts +24 -28
- package/src/store/formItem.ts +5 -1
- package/src/store/index.ts +2 -0
- package/src/store/table-v2.ts +646 -0
- package/src/store/table.ts +1 -1
- package/src/utils/DataSchema.ts +131 -0
- package/src/utils/DataScope.ts +190 -0
- package/src/utils/handleAction.ts +1 -1
- package/src/utils/renderer-event.ts +113 -2
@@ -0,0 +1,299 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import type {JSONSchema} from '../../utils/DataScope';
|
3
|
+
import {autobind, guid} from '../../utils/helper';
|
4
|
+
import Button from '../Button';
|
5
|
+
import {Icon} from '../icons';
|
6
|
+
import InputBox from '../InputBox';
|
7
|
+
import {SchemaEditorItemCommon, SchemaEditorItemCommonProps} from './Common';
|
8
|
+
import {SchemaEditorItem} from './Item';
|
9
|
+
|
10
|
+
export interface SchemaEditorItemObjectState {
|
11
|
+
members: Array<{
|
12
|
+
id: string;
|
13
|
+
key: string;
|
14
|
+
hasError?: boolean;
|
15
|
+
required?: boolean;
|
16
|
+
schema: JSONSchema;
|
17
|
+
}>;
|
18
|
+
collapsed: boolean;
|
19
|
+
}
|
20
|
+
|
21
|
+
export class SchemaEditorItemObject extends SchemaEditorItemCommon<
|
22
|
+
SchemaEditorItemCommonProps,
|
23
|
+
SchemaEditorItemObjectState
|
24
|
+
> {
|
25
|
+
state = {
|
26
|
+
members: this.propsToMembers(this.props),
|
27
|
+
collapsed: false
|
28
|
+
};
|
29
|
+
|
30
|
+
lastValue: any;
|
31
|
+
|
32
|
+
componentDidUpdate(prevProps: SchemaEditorItemCommonProps) {
|
33
|
+
const props = this.props;
|
34
|
+
|
35
|
+
// 外部属性变化,更新 state
|
36
|
+
if (
|
37
|
+
props.value !== prevProps.value &&
|
38
|
+
JSON.stringify(props.value) !== JSON.stringify(this.lastValue)
|
39
|
+
) {
|
40
|
+
this.setState({
|
41
|
+
members: this.propsToMembers(props)
|
42
|
+
});
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
propsToMembers(props: SchemaEditorItemCommonProps) {
|
47
|
+
const members: Array<{
|
48
|
+
id: string;
|
49
|
+
key: string;
|
50
|
+
hasError?: boolean;
|
51
|
+
required?: boolean;
|
52
|
+
schema: JSONSchema;
|
53
|
+
}> = [];
|
54
|
+
const required = Array.isArray(props.value?.required)
|
55
|
+
? props.value!.required
|
56
|
+
: [];
|
57
|
+
|
58
|
+
if (props.value?.properties) {
|
59
|
+
const properties = props.value.properties;
|
60
|
+
Object.keys(properties).forEach(key => {
|
61
|
+
const value = properties[key] as any;
|
62
|
+
|
63
|
+
members.push({
|
64
|
+
id: guid(),
|
65
|
+
key: key || '',
|
66
|
+
hasError: !key || members.some(i => i.key === key),
|
67
|
+
required: !!~required.indexOf(key),
|
68
|
+
schema: value
|
69
|
+
});
|
70
|
+
});
|
71
|
+
}
|
72
|
+
|
73
|
+
return members;
|
74
|
+
}
|
75
|
+
|
76
|
+
@autobind
|
77
|
+
pipeOut() {
|
78
|
+
const members = this.state.members;
|
79
|
+
const {value, onChange} = this.props;
|
80
|
+
const properties: any = {};
|
81
|
+
const required: Array<string> = [];
|
82
|
+
|
83
|
+
members
|
84
|
+
.filter(item => !item.hasError)
|
85
|
+
.forEach(member => {
|
86
|
+
properties[member.key] = member.schema;
|
87
|
+
|
88
|
+
if (member.required) {
|
89
|
+
required.push(member.key);
|
90
|
+
}
|
91
|
+
});
|
92
|
+
|
93
|
+
this.lastValue = {
|
94
|
+
...value,
|
95
|
+
properties,
|
96
|
+
required
|
97
|
+
};
|
98
|
+
onChange?.(this.lastValue);
|
99
|
+
}
|
100
|
+
|
101
|
+
@autobind
|
102
|
+
handleAdd() {
|
103
|
+
const members = this.state.members.concat();
|
104
|
+
members.push({
|
105
|
+
id: guid(),
|
106
|
+
key: '',
|
107
|
+
hasError: true,
|
108
|
+
required: false,
|
109
|
+
schema: {
|
110
|
+
type: 'string'
|
111
|
+
}
|
112
|
+
});
|
113
|
+
|
114
|
+
this.setState(
|
115
|
+
{
|
116
|
+
members
|
117
|
+
},
|
118
|
+
this.pipeOut
|
119
|
+
);
|
120
|
+
}
|
121
|
+
|
122
|
+
@autobind
|
123
|
+
handlePropKeyChange(index: number, key: string) {
|
124
|
+
const members = this.state.members.concat();
|
125
|
+
members[index] = {
|
126
|
+
...members[index],
|
127
|
+
key,
|
128
|
+
hasError: !key || members.some((m, i) => i !== index && m.key === key)
|
129
|
+
};
|
130
|
+
|
131
|
+
this.setState({members}, this.pipeOut);
|
132
|
+
}
|
133
|
+
|
134
|
+
@autobind
|
135
|
+
handlePropTitleChange(index: number, title: string) {
|
136
|
+
const members = this.state.members.concat();
|
137
|
+
members[index] = {
|
138
|
+
...members[index],
|
139
|
+
schema: {
|
140
|
+
...members[index].schema,
|
141
|
+
title
|
142
|
+
}
|
143
|
+
};
|
144
|
+
|
145
|
+
this.setState({members}, this.pipeOut);
|
146
|
+
}
|
147
|
+
|
148
|
+
@autobind
|
149
|
+
handlePropRemove(index: number) {
|
150
|
+
const members = this.state.members.concat();
|
151
|
+
members.splice(index, 1);
|
152
|
+
this.setState({members}, this.pipeOut);
|
153
|
+
}
|
154
|
+
|
155
|
+
@autobind
|
156
|
+
handlePropChange(index: number, item: any) {
|
157
|
+
const members = this.state.members.concat();
|
158
|
+
members[index] = {
|
159
|
+
...members[index],
|
160
|
+
schema: {
|
161
|
+
...item
|
162
|
+
}
|
163
|
+
};
|
164
|
+
|
165
|
+
this.setState({members}, this.pipeOut);
|
166
|
+
}
|
167
|
+
|
168
|
+
@autobind
|
169
|
+
handlePropRequiredChange(index: number, required: boolean) {
|
170
|
+
const members = this.state.members.concat();
|
171
|
+
members[index] = {
|
172
|
+
...members[index],
|
173
|
+
required
|
174
|
+
};
|
175
|
+
|
176
|
+
this.setState({members}, this.pipeOut);
|
177
|
+
}
|
178
|
+
|
179
|
+
@autobind
|
180
|
+
toggleCollapsed() {
|
181
|
+
this.setState({
|
182
|
+
collapsed: !this.state.collapsed
|
183
|
+
});
|
184
|
+
}
|
185
|
+
|
186
|
+
rendererProps() {
|
187
|
+
const {
|
188
|
+
value,
|
189
|
+
translate: __,
|
190
|
+
classnames: cx,
|
191
|
+
renderExtraProps,
|
192
|
+
locale,
|
193
|
+
classPrefix,
|
194
|
+
disabled,
|
195
|
+
showInfo,
|
196
|
+
types,
|
197
|
+
onTypeChange
|
198
|
+
} = this.props;
|
199
|
+
const members = this.state.members;
|
200
|
+
|
201
|
+
return (
|
202
|
+
<div
|
203
|
+
className={cx('SchemaEditorProps', {
|
204
|
+
'SchemaEditorProps--depth': showInfo !== false
|
205
|
+
})}
|
206
|
+
>
|
207
|
+
{members.length ? (
|
208
|
+
members.map((member, index) => (
|
209
|
+
<SchemaEditorItem
|
210
|
+
key={member.id}
|
211
|
+
types={types}
|
212
|
+
onTypeChange={onTypeChange}
|
213
|
+
prefix={
|
214
|
+
<>
|
215
|
+
<InputBox
|
216
|
+
className={cx('SchemaEditor-key')}
|
217
|
+
hasError={member.hasError}
|
218
|
+
value={member.key || ''}
|
219
|
+
onChange={this.handlePropKeyChange.bind(this, index)}
|
220
|
+
placeholder={__('JSONSchema.key')}
|
221
|
+
disabled={disabled || !!value?.$ref}
|
222
|
+
/>
|
223
|
+
|
224
|
+
<InputBox
|
225
|
+
className={cx('SchemaEditor-title')}
|
226
|
+
value={member.schema.title || ''}
|
227
|
+
onChange={this.handlePropTitleChange.bind(this, index)}
|
228
|
+
placeholder={__('JSONSchema.title')}
|
229
|
+
disabled={disabled || !!value?.$ref}
|
230
|
+
/>
|
231
|
+
</>
|
232
|
+
}
|
233
|
+
affix={
|
234
|
+
<Button
|
235
|
+
className={cx('SchemaEditor-btn')}
|
236
|
+
onClick={this.handlePropRemove.bind(this, index)}
|
237
|
+
iconOnly
|
238
|
+
disabled={disabled || !!value?.$ref}
|
239
|
+
>
|
240
|
+
<Icon icon="remove" className="icon" />
|
241
|
+
</Button>
|
242
|
+
}
|
243
|
+
value={member.schema}
|
244
|
+
onChange={this.handlePropChange.bind(this, index)}
|
245
|
+
renderExtraProps={renderExtraProps}
|
246
|
+
locale={locale}
|
247
|
+
translate={__}
|
248
|
+
classnames={cx}
|
249
|
+
classPrefix={classPrefix}
|
250
|
+
disabled={disabled || !!value?.$ref}
|
251
|
+
required={member.required}
|
252
|
+
onRequiredChange={this.handlePropRequiredChange.bind(this, index)}
|
253
|
+
/>
|
254
|
+
))
|
255
|
+
) : (
|
256
|
+
<div className={cx('SchemaEditorProps-placeholder')}>
|
257
|
+
{__('placeholder.empty')}
|
258
|
+
</div>
|
259
|
+
)}
|
260
|
+
|
261
|
+
<Button
|
262
|
+
level="link"
|
263
|
+
onClick={this.handleAdd}
|
264
|
+
size="xs"
|
265
|
+
disabled={disabled || !!value?.$ref}
|
266
|
+
>
|
267
|
+
{__('JSONSchema.add_prop')}
|
268
|
+
</Button>
|
269
|
+
</div>
|
270
|
+
);
|
271
|
+
}
|
272
|
+
|
273
|
+
render() {
|
274
|
+
const {classnames: cx, showInfo, translate: __, disabled} = this.props;
|
275
|
+
|
276
|
+
return (
|
277
|
+
<div
|
278
|
+
className={cx('SchemaEditorItem SchemaEditorObject', {
|
279
|
+
'is-collapsed': this.state.collapsed
|
280
|
+
})}
|
281
|
+
>
|
282
|
+
{showInfo !== false ? (
|
283
|
+
<>
|
284
|
+
<a
|
285
|
+
className={cx('SchemaEditor-caret', {
|
286
|
+
'is-collapsed': this.state.collapsed
|
287
|
+
})}
|
288
|
+
onClick={this.toggleCollapsed}
|
289
|
+
>
|
290
|
+
<Icon icon="caret" className="icon" />
|
291
|
+
</a>
|
292
|
+
{this.renderCommon()}
|
293
|
+
</>
|
294
|
+
) : null}
|
295
|
+
{this.state.collapsed ? null : this.rendererProps()}
|
296
|
+
</div>
|
297
|
+
);
|
298
|
+
}
|
299
|
+
}
|
@@ -0,0 +1,97 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import {localeable, LocaleProps} from '../../locale';
|
3
|
+
import {themeable, ThemeProps} from '../../theme';
|
4
|
+
import {DataSchema} from '../../utils/DataSchema';
|
5
|
+
import type {JSONSchema} from '../../utils/DataScope';
|
6
|
+
import {autobind} from '../../utils/helper';
|
7
|
+
import {VariableItem} from '../formula/Editor';
|
8
|
+
import VariableList from '../formula/VariableList';
|
9
|
+
import TooltipWrapper from '../TooltipWrapper';
|
10
|
+
|
11
|
+
export interface SchemaVariableListProps extends LocaleProps, ThemeProps {
|
12
|
+
schemas?: Array<JSONSchema> | JSONSchema;
|
13
|
+
value?: string;
|
14
|
+
onSelect?: (value: string, schema: JSONSchema) => void;
|
15
|
+
}
|
16
|
+
|
17
|
+
export interface SchemaVariableListState {
|
18
|
+
variables: Array<VariableItem>;
|
19
|
+
}
|
20
|
+
|
21
|
+
export class SchemaVariableList extends React.Component<
|
22
|
+
SchemaVariableListProps,
|
23
|
+
SchemaVariableListState
|
24
|
+
> {
|
25
|
+
state = {
|
26
|
+
variables: this.schemasToVaraibles(this.props)
|
27
|
+
};
|
28
|
+
|
29
|
+
dataSchema?: DataSchema;
|
30
|
+
|
31
|
+
constructor(props: SchemaVariableListProps) {
|
32
|
+
super(props);
|
33
|
+
}
|
34
|
+
|
35
|
+
componentDidUpdate(prevProps: SchemaVariableListProps) {
|
36
|
+
const props = this.props;
|
37
|
+
|
38
|
+
if (props.schemas !== prevProps.schemas) {
|
39
|
+
this.setState({
|
40
|
+
variables: this.schemasToVaraibles(props)
|
41
|
+
});
|
42
|
+
}
|
43
|
+
}
|
44
|
+
|
45
|
+
schemasToVaraibles(props: SchemaVariableListProps) {
|
46
|
+
const schemas = Array.isArray(props.schemas)
|
47
|
+
? props.schemas.concat()
|
48
|
+
: props.schemas
|
49
|
+
? [props.schemas]
|
50
|
+
: [];
|
51
|
+
|
52
|
+
if (!schemas.length) {
|
53
|
+
return [];
|
54
|
+
}
|
55
|
+
const dataSchema = new DataSchema(schemas);
|
56
|
+
this.dataSchema = dataSchema;
|
57
|
+
return dataSchema.getDataPropsAsOptions();
|
58
|
+
}
|
59
|
+
|
60
|
+
@autobind
|
61
|
+
handleSelect(item: any) {
|
62
|
+
const {onSelect} = this.props;
|
63
|
+
const schema = this.dataSchema?.getSchemaByPath(item.value);
|
64
|
+
|
65
|
+
onSelect?.(item.value, schema!);
|
66
|
+
}
|
67
|
+
|
68
|
+
@autobind
|
69
|
+
itemRender(option: any) {
|
70
|
+
const {classnames: cx, translate: __} = this.props;
|
71
|
+
|
72
|
+
return (
|
73
|
+
<span className={cx(`FormulaEditor-VariableList-item`)}>
|
74
|
+
<label>{option.label}</label>
|
75
|
+
<TooltipWrapper tooltip={option.description} tooltipTheme="dark">
|
76
|
+
<span className={cx(`FormulaEditor-VariableList-item-tag`)}>
|
77
|
+
{__(`SchemaType.${option.type || 'any'}`)}
|
78
|
+
</span>
|
79
|
+
</TooltipWrapper>
|
80
|
+
</span>
|
81
|
+
);
|
82
|
+
}
|
83
|
+
|
84
|
+
render() {
|
85
|
+
return (
|
86
|
+
<VariableList
|
87
|
+
data={this.state.variables}
|
88
|
+
value={this.props.value}
|
89
|
+
onSelect={this.handleSelect}
|
90
|
+
selectMode="tree"
|
91
|
+
itemRender={this.itemRender}
|
92
|
+
/>
|
93
|
+
);
|
94
|
+
}
|
95
|
+
}
|
96
|
+
|
97
|
+
export default localeable(themeable(SchemaVariableList));
|
@@ -0,0 +1,66 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import {localeable} from '../../locale';
|
3
|
+
import {themeable} from '../../theme';
|
4
|
+
import {autobind} from '../../utils/helper';
|
5
|
+
import PickerContainer from '../PickerContainer';
|
6
|
+
import SchemaVariableList, {
|
7
|
+
SchemaVariableListProps
|
8
|
+
} from './SchemaVariableList';
|
9
|
+
|
10
|
+
export interface SchemaVariableListPickerProps extends SchemaVariableListProps {
|
11
|
+
children: (props: {
|
12
|
+
onClick: (e: React.MouseEvent) => void;
|
13
|
+
setState: (state: any) => void;
|
14
|
+
isOpened: boolean;
|
15
|
+
}) => JSX.Element;
|
16
|
+
value?: any;
|
17
|
+
onConfirm?: (value?: any) => void;
|
18
|
+
onCancel?: () => void;
|
19
|
+
}
|
20
|
+
|
21
|
+
export class SchemaVariableListPicker extends React.Component<SchemaVariableListPickerProps> {
|
22
|
+
render() {
|
23
|
+
const {
|
24
|
+
translate: __,
|
25
|
+
schemas,
|
26
|
+
value,
|
27
|
+
onConfirm,
|
28
|
+
onCancel,
|
29
|
+
children
|
30
|
+
} = this.props;
|
31
|
+
|
32
|
+
return (
|
33
|
+
<PickerContainer
|
34
|
+
title={__('Select.placeholder')}
|
35
|
+
bodyRender={({
|
36
|
+
onClose,
|
37
|
+
value,
|
38
|
+
onChange,
|
39
|
+
setState,
|
40
|
+
schemas: stateSchemas,
|
41
|
+
...states
|
42
|
+
}) => {
|
43
|
+
return (
|
44
|
+
<SchemaVariableList
|
45
|
+
value={value?.value ?? value}
|
46
|
+
onSelect={(value, schema) =>
|
47
|
+
onChange({
|
48
|
+
value,
|
49
|
+
schema
|
50
|
+
})
|
51
|
+
}
|
52
|
+
schemas={stateSchemas ?? schemas}
|
53
|
+
/>
|
54
|
+
);
|
55
|
+
}}
|
56
|
+
value={value}
|
57
|
+
onConfirm={onConfirm}
|
58
|
+
onCancel={onCancel}
|
59
|
+
>
|
60
|
+
{children}
|
61
|
+
</PickerContainer>
|
62
|
+
);
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
export default localeable(themeable(SchemaVariableListPicker));
|
@@ -0,0 +1,211 @@
|
|
1
|
+
/**
|
2
|
+
* 用来定义数据结构的编辑器
|
3
|
+
*/
|
4
|
+
|
5
|
+
import React from 'react';
|
6
|
+
import {localeable, LocaleProps} from '../../locale';
|
7
|
+
import {themeable, ThemeProps} from '../../theme';
|
8
|
+
import type {JSONSchema} from '../../utils/DataScope';
|
9
|
+
import {uncontrollable} from 'uncontrollable';
|
10
|
+
import {SchemaEditorItem} from './Item';
|
11
|
+
import type {JSONSchema7TypeName} from 'json-schema';
|
12
|
+
import {autobind} from '../../utils/helper';
|
13
|
+
|
14
|
+
export interface SchemaEditorProps extends LocaleProps, ThemeProps {
|
15
|
+
value?: JSONSchema;
|
16
|
+
onChange: (value: JSONSchema) => void;
|
17
|
+
disabled?: boolean;
|
18
|
+
defaultType: JSONSchema7TypeName;
|
19
|
+
renderExtraProps?: (
|
20
|
+
value: JSONSchema,
|
21
|
+
onChange: (value: JSONSchema) => void
|
22
|
+
) => JSX.Element;
|
23
|
+
|
24
|
+
disabledTypes?: Array<string>;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* 预设模板
|
28
|
+
*/
|
29
|
+
definitions?: {
|
30
|
+
[propName: string]: {
|
31
|
+
type:
|
32
|
+
| 'string'
|
33
|
+
| 'number'
|
34
|
+
| 'interger'
|
35
|
+
| 'object'
|
36
|
+
| 'array'
|
37
|
+
| 'boolean'
|
38
|
+
| 'null';
|
39
|
+
title: string;
|
40
|
+
[propName: string]: any;
|
41
|
+
};
|
42
|
+
};
|
43
|
+
|
44
|
+
/**
|
45
|
+
* 顶层是否允许修改类型
|
46
|
+
*/
|
47
|
+
rootTypeMutable: boolean;
|
48
|
+
|
49
|
+
/**
|
50
|
+
* 顶层类型信息是否隐藏
|
51
|
+
*/
|
52
|
+
showRootInfo: boolean;
|
53
|
+
}
|
54
|
+
|
55
|
+
export class SchemaEditor extends React.Component<SchemaEditorProps> {
|
56
|
+
static defaultProps: Pick<
|
57
|
+
SchemaEditorProps,
|
58
|
+
'defaultType' | 'rootTypeMutable' | 'showRootInfo' | 'disabledTypes'
|
59
|
+
> = {
|
60
|
+
defaultType: 'object',
|
61
|
+
rootTypeMutable: false,
|
62
|
+
showRootInfo: false,
|
63
|
+
disabledTypes: ['null']
|
64
|
+
};
|
65
|
+
|
66
|
+
defaultTypes: Array<any>;
|
67
|
+
|
68
|
+
constructor(props: SchemaEditorProps) {
|
69
|
+
super(props);
|
70
|
+
|
71
|
+
const __ = props.translate;
|
72
|
+
this.defaultTypes = [
|
73
|
+
{
|
74
|
+
label: __('SchemaType.string'),
|
75
|
+
value: 'string'
|
76
|
+
},
|
77
|
+
|
78
|
+
{
|
79
|
+
label: __('SchemaType.number'),
|
80
|
+
value: 'number'
|
81
|
+
},
|
82
|
+
|
83
|
+
{
|
84
|
+
label: __('SchemaType.interger'),
|
85
|
+
value: 'interger'
|
86
|
+
},
|
87
|
+
|
88
|
+
{
|
89
|
+
label: __('SchemaType.object'),
|
90
|
+
value: 'object'
|
91
|
+
},
|
92
|
+
|
93
|
+
{
|
94
|
+
label: __('SchemaType.array'),
|
95
|
+
value: 'array'
|
96
|
+
},
|
97
|
+
|
98
|
+
{
|
99
|
+
label: __('SchemaType.boolean'),
|
100
|
+
value: 'boolean'
|
101
|
+
},
|
102
|
+
|
103
|
+
{
|
104
|
+
label: __('SchemaType.null'),
|
105
|
+
value: 'null'
|
106
|
+
}
|
107
|
+
];
|
108
|
+
}
|
109
|
+
|
110
|
+
@autobind
|
111
|
+
handleTypeChange(type: string, value: any, origin: any) {
|
112
|
+
const {definitions} = this.props;
|
113
|
+
|
114
|
+
if (type === 'array') {
|
115
|
+
value.items = {
|
116
|
+
type: 'string'
|
117
|
+
};
|
118
|
+
}
|
119
|
+
|
120
|
+
if (definitions?.[type]) {
|
121
|
+
value = {
|
122
|
+
...value,
|
123
|
+
...definitions[type],
|
124
|
+
$ref: type
|
125
|
+
};
|
126
|
+
}
|
127
|
+
|
128
|
+
return value;
|
129
|
+
}
|
130
|
+
|
131
|
+
render() {
|
132
|
+
const {
|
133
|
+
defaultType,
|
134
|
+
classnames: cx,
|
135
|
+
onChange,
|
136
|
+
renderExtraProps,
|
137
|
+
translate,
|
138
|
+
locale,
|
139
|
+
classPrefix,
|
140
|
+
rootTypeMutable,
|
141
|
+
showRootInfo,
|
142
|
+
disabled,
|
143
|
+
definitions
|
144
|
+
} = this.props;
|
145
|
+
const value: JSONSchema = this.props.value || {
|
146
|
+
type: defaultType || 'object'
|
147
|
+
};
|
148
|
+
|
149
|
+
const disabledTypes = Array.isArray(this.props.disabledTypes)
|
150
|
+
? this.props.disabledTypes
|
151
|
+
: [];
|
152
|
+
let types = this.defaultTypes.concat();
|
153
|
+
|
154
|
+
if (definitions) {
|
155
|
+
const keys = Object.keys(definitions);
|
156
|
+
keys.forEach(key => {
|
157
|
+
const definition = definitions[key];
|
158
|
+
|
159
|
+
if (
|
160
|
+
definition?.type &&
|
161
|
+
definition.title &&
|
162
|
+
[
|
163
|
+
'string',
|
164
|
+
'number',
|
165
|
+
'interger',
|
166
|
+
'object',
|
167
|
+
'array',
|
168
|
+
'boolean',
|
169
|
+
'null'
|
170
|
+
].includes(definition.type)
|
171
|
+
) {
|
172
|
+
types.push({
|
173
|
+
value: key,
|
174
|
+
label: translate(definition.title)
|
175
|
+
});
|
176
|
+
}
|
177
|
+
});
|
178
|
+
}
|
179
|
+
|
180
|
+
if (disabledTypes.length) {
|
181
|
+
types = types.filter(item => !~disabledTypes.indexOf(item.value));
|
182
|
+
}
|
183
|
+
|
184
|
+
return (
|
185
|
+
<div className={cx('SchemaEditor')}>
|
186
|
+
<SchemaEditorItem
|
187
|
+
types={types}
|
188
|
+
typeMutable={rootTypeMutable}
|
189
|
+
showInfo={showRootInfo}
|
190
|
+
value={value}
|
191
|
+
onChange={onChange}
|
192
|
+
renderExtraProps={renderExtraProps}
|
193
|
+
locale={locale}
|
194
|
+
translate={translate}
|
195
|
+
classnames={cx}
|
196
|
+
classPrefix={classPrefix}
|
197
|
+
disabled={disabled}
|
198
|
+
onTypeChange={this.handleTypeChange}
|
199
|
+
/>
|
200
|
+
</div>
|
201
|
+
);
|
202
|
+
}
|
203
|
+
}
|
204
|
+
|
205
|
+
export default themeable(
|
206
|
+
localeable(
|
207
|
+
uncontrollable(SchemaEditor, {
|
208
|
+
value: 'onChange'
|
209
|
+
})
|
210
|
+
)
|
211
|
+
);
|