amis-editor 4.1.0-beta.4 → 4.2.0-beta.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. package/dist/component/Breadcrumb.d.ts +23 -2
  2. package/dist/component/ClassNameControl.d.ts +1 -1
  3. package/dist/component/Control/APIControl.d.ts +2 -2
  4. package/dist/component/Control/OptionControl.d.ts +3 -3
  5. package/dist/component/Control/PopoverEdit.d.ts +4 -4
  6. package/dist/component/Control/ValidationControl.d.ts +1 -1
  7. package/dist/component/Editor.d.ts +20 -1
  8. package/dist/component/IFramePreview.d.ts +2 -1
  9. package/dist/component/NodeWrapper.d.ts +1 -1
  10. package/dist/component/Panel/RenderersPanel.d.ts +1 -2
  11. package/dist/component/Preview.d.ts +3 -1
  12. package/dist/component/RegionWrapper.d.ts +4 -0
  13. package/dist/component/VRenderer.d.ts +4 -0
  14. package/dist/component/base/InputComponentName.d.ts +1 -1
  15. package/dist/component/base/SearchCustomRendererPanel.d.ts +15 -0
  16. package/dist/component/base/SearchPanel.d.ts +83 -0
  17. package/dist/component/base/SearchRendererPanel.d.ts +2 -42
  18. package/dist/env.d.ts +1 -1
  19. package/dist/exports.min.js +1 -1
  20. package/dist/index.d.ts +4 -1
  21. package/dist/index.min.js +1 -1
  22. package/dist/manager.d.ts +16 -4
  23. package/dist/plugin/Alert.d.ts +1 -1
  24. package/dist/plugin/Button.d.ts +1 -1
  25. package/dist/plugin/Card.d.ts +1 -0
  26. package/dist/plugin/Cards.d.ts +2 -1
  27. package/dist/plugin/Carousel.d.ts +1 -0
  28. package/dist/plugin/Chart.d.ts +1 -0
  29. package/dist/plugin/Collapse.d.ts +1 -0
  30. package/dist/plugin/Custom.d.ts +3 -0
  31. package/dist/plugin/CustomRegion.d.ts +40 -0
  32. package/dist/plugin/Dialog.d.ts +1 -1
  33. package/dist/plugin/Drawer.d.ts +1 -1
  34. package/dist/plugin/DropDownButton.d.ts +1 -1
  35. package/dist/plugin/Each.d.ts +1 -1
  36. package/dist/plugin/Flex.d.ts +1 -0
  37. package/dist/plugin/Form/Control.d.ts +1 -0
  38. package/dist/plugin/Form/Form.d.ts +19 -3
  39. package/dist/plugin/Form/Formula.d.ts +3 -3
  40. package/dist/plugin/Form/InputURL.d.ts +1 -0
  41. package/dist/plugin/Form/Switch.d.ts +2 -0
  42. package/dist/plugin/Grid.d.ts +1 -0
  43. package/dist/plugin/HBox.d.ts +1 -0
  44. package/dist/plugin/IFrame.d.ts +3 -3
  45. package/dist/plugin/Json.d.ts +1 -0
  46. package/dist/plugin/List.d.ts +2 -1
  47. package/dist/plugin/Mapping.d.ts +1 -0
  48. package/dist/plugin/Markdown.d.ts +1 -0
  49. package/dist/plugin/Nav.d.ts +1 -0
  50. package/dist/plugin/Page.d.ts +1 -1
  51. package/dist/plugin/Panel/Outline.d.ts +8 -0
  52. package/dist/plugin/Progress.d.ts +1 -0
  53. package/dist/plugin/QRCode.d.ts +1 -0
  54. package/dist/plugin/Reset.d.ts +0 -1
  55. package/dist/plugin/Service.d.ts +1 -0
  56. package/dist/plugin/Sparkline.d.ts +1 -0
  57. package/dist/plugin/Status.d.ts +1 -0
  58. package/dist/plugin/Steps.d.ts +1 -0
  59. package/dist/plugin/Submit.d.ts +0 -1
  60. package/dist/plugin/Table.d.ts +1 -1
  61. package/dist/plugin/TableView.d.ts +1 -0
  62. package/dist/plugin/Tasks.d.ts +1 -0
  63. package/dist/plugin/TooltipWrapper.d.ts +1 -0
  64. package/dist/plugin/Video.d.ts +1 -0
  65. package/dist/plugin/WebComponent.d.ts +1 -0
  66. package/dist/plugin/Wizard.d.ts +11 -2
  67. package/dist/plugin/Wrapper.d.ts +1 -0
  68. package/dist/plugin.d.ts +8 -7
  69. package/dist/store/editor.d.ts +47 -11
  70. package/dist/store/node.d.ts +6 -0
  71. package/dist/style.css +1 -1
  72. package/dist/util.d.ts +1 -1
  73. package/package.json +10 -3
  74. package/src/component/schemaTpl.tsx +2157 -0
  75. package/src/plugin/Alert.tsx +87 -0
  76. package/src/plugin/AnchorNav.tsx +233 -0
  77. package/src/plugin/Audio.tsx +154 -0
  78. package/src/plugin/Avatar.tsx +77 -0
  79. package/src/plugin/Breadcrumb.tsx +107 -0
  80. package/src/plugin/Button.tsx +281 -0
  81. package/src/plugin/ButtonGroup.tsx +85 -0
  82. package/src/plugin/ButtonToolbar.tsx +87 -0
  83. package/src/plugin/CRUD.tsx +1835 -0
  84. package/src/plugin/Card.tsx +290 -0
  85. package/src/plugin/Cards.tsx +318 -0
  86. package/src/plugin/Carousel.tsx +377 -0
  87. package/src/plugin/Chart.tsx +218 -0
  88. package/src/plugin/CodeView.tsx +60 -0
  89. package/src/plugin/Collapse.tsx +136 -0
  90. package/src/plugin/CollapseGroup.tsx +167 -0
  91. package/src/plugin/Container.tsx +40 -0
  92. package/src/plugin/Custom.tsx +128 -0
  93. package/src/plugin/CustomRegion.tsx +156 -0
  94. package/src/plugin/Date.tsx +74 -0
  95. package/src/plugin/Datetime.tsx +68 -0
  96. package/src/plugin/Dialog.tsx +176 -0
  97. package/src/plugin/Divider.tsx +36 -0
  98. package/src/plugin/Drawer.tsx +214 -0
  99. package/src/plugin/DropDownButton.tsx +235 -0
  100. package/src/plugin/Each.tsx +150 -0
  101. package/src/plugin/ErrorRenderer.tsx +15 -0
  102. package/src/plugin/Flex.tsx +151 -0
  103. package/src/plugin/Form/ButtonGroupSelect.tsx +75 -0
  104. package/src/plugin/Form/ButtonToolbar.tsx +110 -0
  105. package/src/plugin/Form/ChainedSelect.tsx +70 -0
  106. package/src/plugin/Form/Checkbox.tsx +87 -0
  107. package/src/plugin/Form/Checkboxes.tsx +167 -0
  108. package/src/plugin/Form/CodeEditor.tsx +81 -0
  109. package/src/plugin/Form/Combo.tsx +582 -0
  110. package/src/plugin/Form/ConditionBuilder.tsx +315 -0
  111. package/src/plugin/Form/Control.tsx +139 -0
  112. package/src/plugin/Form/DiffEditor.tsx +111 -0
  113. package/src/plugin/Form/FieldSet.tsx +163 -0
  114. package/src/plugin/Form/Form.tsx +687 -0
  115. package/src/plugin/Form/Formula.tsx +79 -0
  116. package/src/plugin/Form/Group.tsx +295 -0
  117. package/src/plugin/Form/Hidden.tsx +44 -0
  118. package/src/plugin/Form/InputArray.tsx +228 -0
  119. package/src/plugin/Form/InputCity.tsx +93 -0
  120. package/src/plugin/Form/InputColor.tsx +123 -0
  121. package/src/plugin/Form/InputDate.tsx +175 -0
  122. package/src/plugin/Form/InputDateRange.tsx +225 -0
  123. package/src/plugin/Form/InputDateTime.tsx +183 -0
  124. package/src/plugin/Form/InputDateTimeRange.tsx +221 -0
  125. package/src/plugin/Form/InputEmail.tsx +33 -0
  126. package/src/plugin/Form/InputExcel.tsx +85 -0
  127. package/src/plugin/Form/InputFile.tsx +221 -0
  128. package/src/plugin/Form/InputGroup.tsx +96 -0
  129. package/src/plugin/Form/InputImage.tsx +266 -0
  130. package/src/plugin/Form/InputKV.tsx +72 -0
  131. package/src/plugin/Form/InputMonth.tsx +35 -0
  132. package/src/plugin/Form/InputMonthRange.tsx +195 -0
  133. package/src/plugin/Form/InputNumber.tsx +89 -0
  134. package/src/plugin/Form/InputPassword.tsx +33 -0
  135. package/src/plugin/Form/InputQuarter.tsx +35 -0
  136. package/src/plugin/Form/InputQuarterRange.tsx +195 -0
  137. package/src/plugin/Form/InputRange.tsx +121 -0
  138. package/src/plugin/Form/InputRating.tsx +78 -0
  139. package/src/plugin/Form/InputRepeat.tsx +57 -0
  140. package/src/plugin/Form/InputRichText.tsx +186 -0
  141. package/src/plugin/Form/InputSubForm.tsx +189 -0
  142. package/src/plugin/Form/InputTable.tsx +434 -0
  143. package/src/plugin/Form/InputTag.tsx +70 -0
  144. package/src/plugin/Form/InputText.tsx +186 -0
  145. package/src/plugin/Form/InputTime.tsx +85 -0
  146. package/src/plugin/Form/InputTree.tsx +229 -0
  147. package/src/plugin/Form/InputURL.tsx +34 -0
  148. package/src/plugin/Form/InputYear.tsx +35 -0
  149. package/src/plugin/Form/Item.tsx +327 -0
  150. package/src/plugin/Form/ListSelect.tsx +73 -0
  151. package/src/plugin/Form/LocationPicker.tsx +62 -0
  152. package/src/plugin/Form/MatrixCheckboxes.tsx +136 -0
  153. package/src/plugin/Form/NestedSelect.tsx +211 -0
  154. package/src/plugin/Form/Picker.tsx +209 -0
  155. package/src/plugin/Form/Radios.tsx +119 -0
  156. package/src/plugin/Form/Select.tsx +233 -0
  157. package/src/plugin/Form/Static.tsx +322 -0
  158. package/src/plugin/Form/Switch.tsx +107 -0
  159. package/src/plugin/Form/TabsTransfer.tsx +259 -0
  160. package/src/plugin/Form/Textarea.tsx +83 -0
  161. package/src/plugin/Form/Transfer.tsx +368 -0
  162. package/src/plugin/Form/TreeSelect.tsx +263 -0
  163. package/src/plugin/Form/UUID.tsx +48 -0
  164. package/src/plugin/Grid.tsx +798 -0
  165. package/src/plugin/HBox.tsx +727 -0
  166. package/src/plugin/IFrame.tsx +70 -0
  167. package/src/plugin/Image.tsx +314 -0
  168. package/src/plugin/Images.tsx +231 -0
  169. package/src/plugin/Json.tsx +69 -0
  170. package/src/plugin/Link.tsx +93 -0
  171. package/src/plugin/List.tsx +278 -0
  172. package/src/plugin/ListItem.tsx +229 -0
  173. package/src/plugin/Log.tsx +52 -0
  174. package/src/plugin/Mapping.tsx +149 -0
  175. package/src/plugin/Markdown.tsx +47 -0
  176. package/src/plugin/Nav.tsx +184 -0
  177. package/src/plugin/Operation.tsx +95 -0
  178. package/src/plugin/Others/Action.tsx +426 -0
  179. package/src/plugin/Others/BasicToolbar.tsx +585 -0
  180. package/src/plugin/Others/DataDebug.tsx +134 -0
  181. package/src/plugin/Others/TableCell.tsx +480 -0
  182. package/src/plugin/Others/Unknown.tsx +37 -0
  183. package/src/plugin/Page.tsx +306 -0
  184. package/src/plugin/Panel/AvailableRenderers.tsx +41 -0
  185. package/src/plugin/Panel/Code.tsx +44 -0
  186. package/src/plugin/Panel/Name.tsx +26 -0
  187. package/src/plugin/Panel/Outline.tsx +40 -0
  188. package/src/plugin/Panel.tsx +243 -0
  189. package/src/plugin/Plain.tsx +84 -0
  190. package/src/plugin/Progress.tsx +125 -0
  191. package/src/plugin/Property.tsx +139 -0
  192. package/src/plugin/QRCode.tsx +96 -0
  193. package/src/plugin/Reset.tsx +23 -0
  194. package/src/plugin/Service.tsx +162 -0
  195. package/src/plugin/Sparkline.tsx +40 -0
  196. package/src/plugin/Status.tsx +76 -0
  197. package/src/plugin/Steps.tsx +128 -0
  198. package/src/plugin/Submit.tsx +23 -0
  199. package/src/plugin/Table.tsx +428 -0
  200. package/src/plugin/TableView.tsx +709 -0
  201. package/src/plugin/Tabs.tsx +362 -0
  202. package/src/plugin/Tasks.tsx +274 -0
  203. package/src/plugin/Time.tsx +68 -0
  204. package/src/plugin/TooltipWrapper.tsx +193 -0
  205. package/src/plugin/Tpl.tsx +158 -0
  206. package/src/plugin/Video.tsx +158 -0
  207. package/src/plugin/WebComponent.tsx +53 -0
  208. package/src/plugin/Wizard.tsx +740 -0
  209. package/src/plugin/Wrapper.tsx +107 -0
  210. package/src/plugin.ts +1050 -0
  211. package/dist/150a58f3318ca7541ed9.png +0 -0
  212. package/dist/471adb97c322b226e589.png +0 -0
  213. package/dist/4de5f42360bc5946c3c2.png +0 -0
  214. package/dist/4e9968bba3855f088fed.png +0 -0
  215. package/dist/7f09c38ebc687fea847a.png +0 -0
  216. package/dist/c94073576487510314ea.png +0 -0
@@ -0,0 +1,136 @@
1
+ import {registerEditorPlugin} from '../manager';
2
+ import {BasePlugin, RegionConfig, BaseEventContext} from '../plugin';
3
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
4
+
5
+ export class CollapsePlugin extends BasePlugin {
6
+ // 关联渲染器名字
7
+ rendererName = 'collapse';
8
+ $schema = '/schemas/CollapseSchema.json';
9
+
10
+ // 组件名称
11
+ name = '折叠器';
12
+ isBaseComponent = true;
13
+ description = '折叠器,可以将内容区展开或隐藏,保持页面的整洁';
14
+ docLink = '/amis/zh-CN/components/collapse';
15
+ tags = ['展示'];
16
+ icon = 'fa fa-window-minimize';
17
+ scaffold = {
18
+ type: 'collapse',
19
+ header: '标题',
20
+ body: [
21
+ {
22
+ type: 'tpl',
23
+ tpl: '内容',
24
+ inline: false
25
+ }
26
+ ]
27
+ };
28
+ previewSchema = {
29
+ ...this.scaffold
30
+ };
31
+
32
+ panelTitle = '折叠器';
33
+ panelBodyCreator = (context: BaseEventContext) => {
34
+ return getSchemaTpl('tabs', [
35
+ {
36
+ title: '属性',
37
+ body: [
38
+ {
39
+ name: 'header',
40
+ label: '标题',
41
+ type: 'input-text',
42
+ pipeIn: defaultValue(
43
+ context?.schema?.title || context?.schema?.header || ''
44
+ ),
45
+ onChange: (value: any, oldValue: any, model: any, form: any) => {
46
+ // 转换一下旧版本的title字段
47
+ form.setValueByName('header', value);
48
+ form.setValueByName('title', undefined);
49
+ }
50
+ },
51
+ {
52
+ name: 'collapseHeader',
53
+ label: '展开标题',
54
+ type: 'input-text',
55
+ description: '折叠器处于展开状态时的标题'
56
+ },
57
+ {
58
+ name: 'headerPosition',
59
+ label: '标题展示位置',
60
+ type: 'button-group-select',
61
+ size: 'sm',
62
+ pipeIn: defaultValue('top'),
63
+ options: [
64
+ {
65
+ label: '顶部',
66
+ value: 'top',
67
+ icon: 'fa fa-arrow-up'
68
+ },
69
+ {
70
+ label: '底部',
71
+ value: 'bottom',
72
+ icon: 'fa fa-arrow-down'
73
+ }
74
+ ]
75
+ },
76
+ {
77
+ name: 'key',
78
+ label: '标识符',
79
+ type: 'input-text',
80
+ description: '折叠器key,主要用于设置默认展开状态'
81
+ },
82
+ {
83
+ name: 'showArrow',
84
+ label: '显示箭头',
85
+ mode: 'row',
86
+ inputClassName: 'inline-flex justify-between flex-row-reverse',
87
+ type: 'switch',
88
+ pipeIn: defaultValue(true)
89
+ },
90
+ {
91
+ name: 'collapsable',
92
+ type: 'switch',
93
+ mode: 'row',
94
+ inputClassName: 'inline-flex justify-between flex-row-reverse',
95
+ label: '可折叠',
96
+ pipeIn: defaultValue(true)
97
+ },
98
+ {
99
+ name: 'collapsed',
100
+ type: 'switch',
101
+ mode: 'row',
102
+ inputClassName: 'inline-flex justify-between flex-row-reverse',
103
+ label: '默认折叠'
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ title: '外观',
109
+ body: [
110
+ getSchemaTpl('className'),
111
+ getSchemaTpl('className', {
112
+ name: 'headingClassName',
113
+ label: '标题 CSS 类名'
114
+ }),
115
+ getSchemaTpl('className', {
116
+ name: 'bodyClassName',
117
+ label: '内容 CSS 类名'
118
+ })
119
+ ]
120
+ },
121
+ {
122
+ title: '状态',
123
+ body: [getSchemaTpl('disabled'), getSchemaTpl('visible')]
124
+ }
125
+ ]);
126
+ };
127
+
128
+ regions: Array<RegionConfig> = [
129
+ {
130
+ key: 'body',
131
+ label: '内容区'
132
+ }
133
+ ];
134
+ }
135
+
136
+ registerEditorPlugin(CollapsePlugin);
@@ -0,0 +1,167 @@
1
+ import {registerEditorPlugin} from '../manager';
2
+ import {
3
+ BasePlugin,
4
+ RegionConfig,
5
+ RendererInfo,
6
+ BaseEventContext
7
+ } from '../plugin';
8
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
9
+
10
+ import type {CollapseSchema} from 'amis/lib/renderers/Collapse';
11
+
12
+ export class CollapseGroupPlugin extends BasePlugin {
13
+ // 关联渲染器名字
14
+ rendererName = 'collapse-group';
15
+ $schema = '/schemas/CollapseGroupSchema.json';
16
+
17
+ // 组件名称
18
+ name = '折叠面板';
19
+ isBaseComponent = true;
20
+ description =
21
+ '折叠面板,当信息量较大且分类较多时,可使用折叠面板进行分类收纳。';
22
+ tags = ['展示', '容器'];
23
+ icon = 'fa fa-align-justify';
24
+ scaffold = {
25
+ type: 'collapse-group',
26
+ activeKey: ['1'],
27
+ body: [
28
+ {
29
+ type: 'collapse',
30
+ key: '1',
31
+ header: '标题1',
32
+ body: [
33
+ {
34
+ type: 'tpl',
35
+ tpl: '这里是内容1',
36
+ inline: false
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ type: 'collapse',
42
+ key: '2',
43
+ header: '标题2',
44
+ body: [
45
+ {
46
+ type: 'tpl',
47
+ tpl: '这里是内容1',
48
+ inline: false
49
+ }
50
+ ]
51
+ }
52
+ ]
53
+ };
54
+ previewSchema = {
55
+ ...this.scaffold
56
+ };
57
+
58
+ panelTitle = '折叠面板';
59
+ panelBodyCreator = (context: BaseEventContext) => {
60
+ const collapseChildren: CollapseSchema[] = Array.isArray(
61
+ context?.schema?.body
62
+ )
63
+ ? context?.schema?.body.filter(
64
+ (item: CollapseSchema) => item.type === 'collapse' && item.key != null
65
+ )
66
+ : [];
67
+
68
+ return [
69
+ getSchemaTpl('tabs', [
70
+ {
71
+ title: '属性',
72
+ body: [
73
+ {
74
+ name: 'activeKey',
75
+ label: '默认展开面板',
76
+ type: 'input-tag',
77
+ clearable: true,
78
+ joinValues: false,
79
+ extractValue: true,
80
+ options: collapseChildren.map((item: CollapseSchema) => item.key)
81
+ },
82
+ {
83
+ name: 'expandIconPosition',
84
+ label: '图标位置',
85
+ type: 'button-group-select',
86
+ pipeIn: defaultValue('left'),
87
+ options: [
88
+ {
89
+ label: '左边',
90
+ value: 'left',
91
+ icon: 'fa fa-align-left'
92
+ },
93
+ {
94
+ label: '右边',
95
+ value: 'right',
96
+ icon: 'fa fa-align-right'
97
+ }
98
+ ]
99
+ },
100
+ {
101
+ name: 'accordion',
102
+ label: '手风琴模式',
103
+ mode: 'row',
104
+ inputClassName: 'inline-flex justify-between flex-row-reverse',
105
+ type: 'switch',
106
+ description: '手风琴模式,只允许单个面板展开',
107
+ pipeIn: defaultValue(false)
108
+ },
109
+ {
110
+ name: 'body',
111
+ type: 'combo',
112
+ label: '面板管理',
113
+ multiple: true,
114
+ addable: true,
115
+ addButtonText: '新增折叠器',
116
+ minLength: 1,
117
+ draggable: true,
118
+ draggableTip: '',
119
+ placeholder: '请添加折叠器',
120
+ items: [
121
+ {
122
+ name: 'header',
123
+ placeholder: '标题',
124
+ type: 'input-text'
125
+ },
126
+ {
127
+ name: 'key',
128
+ placeholder: '标识符',
129
+ type: 'input-text',
130
+ size: 'xs',
131
+ unique: true
132
+ }
133
+ ],
134
+ scaffold: {
135
+ type: 'collapse',
136
+ header: '标题',
137
+ body: [
138
+ {
139
+ type: 'tpl',
140
+ tpl: '内容',
141
+ inline: false
142
+ }
143
+ ],
144
+ key: ''
145
+ }
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ title: '外观',
151
+ body: [getSchemaTpl('className')]
152
+ }
153
+ ])
154
+ ];
155
+ };
156
+
157
+ regions: Array<RegionConfig> = [
158
+ {
159
+ key: 'body',
160
+ label: '内容区',
161
+ renderMethod: 'render',
162
+ insertPosition: 'inner'
163
+ }
164
+ ];
165
+ }
166
+
167
+ registerEditorPlugin(CollapseGroupPlugin);
@@ -0,0 +1,40 @@
1
+ import {registerEditorPlugin} from '../manager';
2
+ import {
3
+ BaseEventContext,
4
+ BasePlugin,
5
+ RegionConfig} from '../plugin';
6
+ import {getSchemaTpl} from '../component/schemaTpl';
7
+
8
+ export class ContainerPlugin extends BasePlugin {
9
+ // 关联渲染器名字
10
+ rendererName = 'container';
11
+ $schema = '/schemas/ContainerSchema.json';
12
+
13
+ // 组件名称
14
+ name = '容器';
15
+ isBaseComponent = true;
16
+ description = '一个简单的容器,可以将多个渲染器放置在一起。';
17
+ tags = ['容器'];
18
+ icon = 'fa fa-square-o';
19
+ scaffold = {
20
+ type: 'container',
21
+ body: '内容'
22
+ };
23
+ previewSchema = {
24
+ ...this.scaffold
25
+ };
26
+
27
+ regions: Array<RegionConfig> = [
28
+ {
29
+ key: 'body',
30
+ label: '内容区'
31
+ }
32
+ ];
33
+
34
+ panelTitle = '容器';
35
+ panelBodyCreator = (context: BaseEventContext) => {
36
+ return [getSchemaTpl('className'), getSchemaTpl('style')];
37
+ };
38
+ }
39
+
40
+ registerEditorPlugin(ContainerPlugin);
@@ -0,0 +1,128 @@
1
+ /**
2
+ * @file 自定义代码
3
+ */
4
+
5
+ import React from 'react';
6
+ import {registerEditorPlugin} from '../manager';
7
+ import {
8
+ BasePlugin,
9
+ BasicSubRenderInfo,
10
+ BaseEventContext,
11
+ RendererEventContext,
12
+ SubRendererInfo,
13
+ BasicRendererInfo,
14
+ RendererInfoResolveEventContext,
15
+ PluginInterface
16
+ } from '../plugin';
17
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
18
+ import {isArray} from 'lodash';
19
+
20
+ export class CustomPlugin extends BasePlugin {
21
+ // 关联渲染器名字
22
+ rendererName = 'custom';
23
+ $schema = '/schemas/CustomSchema.json';
24
+
25
+ // 组件名称
26
+ name = '自定义代码';
27
+ isBaseComponent = true;
28
+ description = '通过内嵌代码来实现功能';
29
+ tags = ['功能'];
30
+ icon = 'fa fa-gears';
31
+ docLink = '/amis/zh-CN/components/custom';
32
+ scaffold = {
33
+ type: 'custom',
34
+ html: '<div><h2>hello, world!</h2></div>',
35
+ onMount: `
36
+ const button = document.createElement('button');
37
+ button.innerText = '点击修改姓名';
38
+ button.onclick = event => {
39
+ event.preventDefault();
40
+ };
41
+ dom.appendChild(button);`
42
+ };
43
+ previewSchema = {
44
+ ...this.scaffold
45
+ };
46
+
47
+ panelTitle = '自定义代码';
48
+ panelBody = [
49
+ getSchemaTpl('fieldSet', {
50
+ title: 'HTML 内容',
51
+ body: [
52
+ {
53
+ label: 'HTML 内容',
54
+ name: 'html',
55
+ type: 'editor',
56
+ allowFullscreen: true
57
+ }
58
+ ]
59
+ }),
60
+ getSchemaTpl('fieldSet', {
61
+ title: 'onMount',
62
+ body: [
63
+ {
64
+ name: 'onMount',
65
+ type: 'editor',
66
+ allowFullscreen: true,
67
+ size: 'xxl',
68
+ label: 'onMount 代码',
69
+ options: {
70
+ lineNumbers: 'off',
71
+ glyphMargin: false,
72
+ lineDecorationsWidth: 0,
73
+ lineNumbersMinChars: 0
74
+ }
75
+ }
76
+ ]
77
+ }),
78
+ getSchemaTpl('fieldSet', {
79
+ title: 'onUpdate',
80
+ body: [
81
+ {
82
+ name: 'onUpdate',
83
+ type: 'editor',
84
+ allowFullscreen: true,
85
+ size: 'xxl',
86
+ label: 'onUpdate 代码'
87
+ }
88
+ ]
89
+ }),
90
+ getSchemaTpl('fieldSet', {
91
+ title: 'onUnmount',
92
+ body: [
93
+ {
94
+ name: 'onUnmount',
95
+ type: 'editor',
96
+ allowFullscreen: true,
97
+ size: 'xxl',
98
+ label: 'onUnmount 代码'
99
+ }
100
+ ]
101
+ })
102
+ ];
103
+
104
+ buildSubRenderers(
105
+ context: RendererEventContext,
106
+ renderers: Array<SubRendererInfo>
107
+ ): BasicSubRenderInfo | Array<BasicSubRenderInfo> | void {
108
+ const info = super.buildSubRenderers.apply(this, arguments);
109
+ // 只有 form 下才调 onChange
110
+ // if (
111
+ // context.info.renderer.name === 'form' ||
112
+ // context.node.childRegions.some(i => i.region === 'body')
113
+ // ) {
114
+ (info as BasicSubRenderInfo).scaffold.onMount = `
115
+ const button = document.createElement('button');
116
+ button.innerText = '点击修改姓名ddd';
117
+ button.onclick = event => {
118
+ onChange('new name');
119
+ event.preventDefault();
120
+ };
121
+ dom.appendChild(button);`;
122
+ // }
123
+
124
+ return info;
125
+ }
126
+ }
127
+
128
+ registerEditorPlugin(CustomPlugin);
@@ -0,0 +1,156 @@
1
+ /**
2
+ * @file 自定义代码
3
+ */
4
+
5
+ import React from 'react';
6
+ import {registerEditorPlugin} from '../manager';
7
+ import {
8
+ BasePlugin,
9
+ BasicRendererInfo,
10
+ RendererInfoResolveEventContext,
11
+ PluginInterface,
12
+ RegionConfig,
13
+ } from '../plugin';
14
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
15
+ import {isArray} from 'lodash';
16
+
17
+ export class CustomPlugin extends BasePlugin {
18
+ // 关联渲染器名字
19
+ rendererName = 'custom';
20
+ $schema = '/schemas/CustomSchema.json';
21
+
22
+ // 组件名称
23
+ name = '自定义容器';
24
+ isBaseComponent = true;
25
+ disabledRendererPlugin = true; // 待完善,暂时隐藏
26
+
27
+ description = '通过自定义代码来实现容器组件';
28
+ docLink = '/amis/zh-CN/components/custom';
29
+ tags = ['功能', '容器'];
30
+ icon = 'fa fa-gears';
31
+ scaffold = {
32
+ type: 'custom',
33
+ html: '<div>\n<h2>hello, world!</h2>\n<div id="customBox">自定义容器区域</div>\n</div>',
34
+ onMount: `this.renderChild('body', props.body, document.getElementById('customBox'));`,
35
+ body: [
36
+ {
37
+ type: 'tpl',
38
+ tpl: '<p>自定义容器区域</p>'
39
+ }
40
+ ]
41
+ };
42
+
43
+ previewSchema = {
44
+ ...this.scaffold
45
+ };
46
+
47
+ regions: Array<RegionConfig> = [
48
+ {
49
+ key: 'body',
50
+ label: '内容区'
51
+ }
52
+ ];
53
+
54
+ panelTitle = '自定义代码';
55
+ panelBody = [
56
+ getSchemaTpl('fieldSet', {
57
+ title: 'HTML 内容',
58
+ body: [
59
+ {
60
+ label: 'HTML 内容',
61
+ name: 'html',
62
+ type: 'editor',
63
+ allowFullscreen: true
64
+ }
65
+ ]
66
+ }),
67
+ getSchemaTpl('fieldSet', {
68
+ title: 'onMount',
69
+ body: [
70
+ {
71
+ name: 'onMount',
72
+ type: 'editor',
73
+ allowFullscreen: true,
74
+ size: 'xxl',
75
+ label: 'onMount 代码',
76
+ options: {
77
+ lineNumbers: 'off',
78
+ glyphMargin: false,
79
+ lineDecorationsWidth: 0,
80
+ lineNumbersMinChars: 0
81
+ }
82
+ }
83
+ ]
84
+ }),
85
+ getSchemaTpl('fieldSet', {
86
+ title: 'onUpdate',
87
+ body: [
88
+ {
89
+ name: 'onUpdate',
90
+ type: 'editor',
91
+ allowFullscreen: true,
92
+ size: 'xxl',
93
+ label: 'onUpdate 代码'
94
+ }
95
+ ]
96
+ }),
97
+ getSchemaTpl('fieldSet', {
98
+ title: 'onUnmount',
99
+ body: [
100
+ {
101
+ name: 'onUnmount',
102
+ type: 'editor',
103
+ allowFullscreen: true,
104
+ size: 'xxl',
105
+ label: 'onUnmount 代码'
106
+ }
107
+ ]
108
+ })
109
+ ];
110
+
111
+ /**
112
+ * 备注: 根据当前custom组件的schema中是否有body元素来启动容器模式,用于实现custom组件实现自定义容器类型
113
+ */
114
+ getRendererInfo(
115
+ context: RendererInfoResolveEventContext
116
+ ): BasicRendererInfo | void {
117
+ const plugin: PluginInterface = this;
118
+ const {renderer, schema} = context;
119
+ if (
120
+ schema.$$id &&
121
+ plugin.name &&
122
+ plugin.rendererName &&
123
+ plugin.rendererName === renderer.name
124
+ ) {
125
+ let regions = plugin.regions;
126
+ if (!regions && schema && schema.body && isArray(schema.body)) {
127
+ regions = [
128
+ {
129
+ key: 'body',
130
+ label: '自定义容器区'
131
+ }
132
+ ];
133
+ }
134
+
135
+ return {
136
+ name: plugin.name,
137
+ regions: regions,
138
+ patchContainers: plugin.patchContainers,
139
+ // wrapper: plugin.wrapper,
140
+ vRendererConfig: plugin.vRendererConfig,
141
+ wrapperProps: plugin.wrapperProps,
142
+ wrapperResolve: plugin.wrapperResolve,
143
+ filterProps: plugin.filterProps,
144
+ $schema: plugin.$schema,
145
+ renderRenderer: plugin.renderRenderer,
146
+ multifactor: plugin.multifactor,
147
+ scaffoldForm: plugin.scaffoldForm,
148
+ disabledRendererPlugin: plugin.disabledRendererPlugin,
149
+ isBaseComponent: plugin.isBaseComponent,
150
+ rendererName: plugin.rendererName
151
+ };
152
+ }
153
+ }
154
+ }
155
+
156
+ registerEditorPlugin(CustomPlugin);
@@ -0,0 +1,74 @@
1
+ import {registerEditorPlugin} from '../manager';
2
+ import {BaseEventContext, BasePlugin} from '../plugin';
3
+ import {defaultValue, getSchemaTpl} from '../component/schemaTpl';
4
+
5
+ export class DatePlugin extends BasePlugin {
6
+ // 关联渲染器名字
7
+ rendererName = 'date';
8
+ $schema = '/schemas/DateSchema.json';
9
+
10
+ // 组件名称
11
+ name = '日期展示';
12
+ isBaseComponent = true;
13
+ description =
14
+ '主要用来关联字段名做日期展示,支持各种格式如:X(时间戳),YYYY-MM-DD HH:mm:ss。';
15
+ tags = ['展示'];
16
+ icon = 'fa fa-calendar';
17
+ scaffold = {
18
+ type: 'date',
19
+ value: Math.round(Date.now() / 1000)
20
+ };
21
+ previewSchema = {
22
+ ...this.scaffold,
23
+ format: 'YYYY-MM-DD',
24
+ value: Math.round(Date.now() / 1000)
25
+ };
26
+
27
+ panelTitle = '日期展示';
28
+ panelBodyCreator = (context: BaseEventContext) => {
29
+ return [
30
+ getSchemaTpl('tabs', [
31
+ {
32
+ title: '常规',
33
+ body: [
34
+ {
35
+ type: 'input-date',
36
+ name: 'value',
37
+ label: '日期数值'
38
+ },
39
+ {
40
+ type: 'input-text',
41
+ name: 'format',
42
+ label: '显示日期格式',
43
+ description: '请参考 moment 中的格式用法。',
44
+ pipeIn: defaultValue('YYYY-MM-DD')
45
+ },
46
+ {
47
+ type: 'input-text',
48
+ name: 'valueFormat',
49
+ label: '数据日期格式',
50
+ description: '请参考 moment 中的格式用法。',
51
+ pipeIn: defaultValue('X')
52
+ },
53
+ {
54
+ name: 'placeholder',
55
+ type: 'input-text',
56
+ pipeIn: defaultValue('-'),
57
+ label: '占位符'
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ title: '外观',
63
+ body: [getSchemaTpl('className')]
64
+ },
65
+ {
66
+ title: '显隐',
67
+ body: [getSchemaTpl('ref'), getSchemaTpl('visible')]
68
+ }
69
+ ])
70
+ ];
71
+ };
72
+ }
73
+
74
+ registerEditorPlugin(DatePlugin);