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.
Files changed (365) hide show
  1. package/lib/Schema.d.ts +4 -2
  2. package/lib/Schema.js.map +1 -1
  3. package/lib/SchemaRenderer.d.ts +2 -2
  4. package/lib/SchemaRenderer.js +3 -3
  5. package/lib/SchemaRenderer.js.map +2 -2
  6. package/lib/actions/Action.d.ts +8 -6
  7. package/lib/actions/Action.js.map +2 -2
  8. package/lib/actions/AjaxAction.d.ts +10 -7
  9. package/lib/actions/AjaxAction.js +27 -21
  10. package/lib/actions/AjaxAction.js.map +2 -2
  11. package/lib/actions/BreakAction.d.ts +2 -2
  12. package/lib/actions/BreakAction.js.map +1 -1
  13. package/lib/actions/BroadcastAction.d.ts +3 -3
  14. package/lib/actions/BroadcastAction.js +3 -2
  15. package/lib/actions/BroadcastAction.js.map +2 -2
  16. package/lib/actions/CmptAction.d.ts +2 -2
  17. package/lib/actions/CmptAction.js +7 -9
  18. package/lib/actions/CmptAction.js.map +2 -2
  19. package/lib/actions/ContinueAction.d.ts +2 -2
  20. package/lib/actions/ContinueAction.js.map +1 -1
  21. package/lib/actions/CopyAction.d.ts +7 -4
  22. package/lib/actions/CopyAction.js +8 -6
  23. package/lib/actions/CopyAction.js.map +2 -2
  24. package/lib/actions/CustomAction.d.ts +2 -2
  25. package/lib/actions/CustomAction.js.map +1 -1
  26. package/lib/actions/DialogAction.d.ts +14 -8
  27. package/lib/actions/DialogAction.js +6 -6
  28. package/lib/actions/DialogAction.js.map +2 -2
  29. package/lib/actions/DrawerAction.d.ts +3 -3
  30. package/lib/actions/DrawerAction.js.map +1 -1
  31. package/lib/actions/EmailAction.d.ts +10 -7
  32. package/lib/actions/EmailAction.js +4 -5
  33. package/lib/actions/EmailAction.js.map +2 -2
  34. package/lib/actions/LinkAction.d.ts +19 -11
  35. package/lib/actions/LinkAction.js +6 -5
  36. package/lib/actions/LinkAction.js.map +2 -2
  37. package/lib/actions/LoopAction.d.ts +6 -3
  38. package/lib/actions/LoopAction.js +22 -20
  39. package/lib/actions/LoopAction.js.map +2 -2
  40. package/lib/actions/PageAction.d.ts +8 -5
  41. package/lib/actions/PageAction.js +3 -2
  42. package/lib/actions/PageAction.js.map +2 -2
  43. package/lib/actions/ParallelAction.d.ts +2 -2
  44. package/lib/actions/ParallelAction.js.map +1 -1
  45. package/lib/actions/SwitchAction.d.ts +2 -2
  46. package/lib/actions/SwitchAction.js.map +1 -1
  47. package/lib/actions/ToastAction.d.ts +2 -2
  48. package/lib/actions/ToastAction.js +6 -4
  49. package/lib/actions/ToastAction.js.map +2 -2
  50. package/lib/components/Editor.d.ts +84 -84
  51. package/lib/components/InputBox.js +1 -1
  52. package/lib/components/InputBox.js.map +2 -2
  53. package/lib/components/Pagination.d.ts +1175 -0
  54. package/lib/components/Pagination.js +274 -0
  55. package/lib/components/Pagination.js.map +13 -0
  56. package/lib/components/PickerContainer.d.ts +1 -0
  57. package/lib/components/PickerContainer.js +3 -2
  58. package/lib/components/PickerContainer.js.map +2 -2
  59. package/lib/components/Rating.js +11 -9
  60. package/lib/components/Rating.js.map +2 -2
  61. package/lib/components/Select.js +3 -3
  62. package/lib/components/Select.js.map +2 -2
  63. package/lib/components/Tag.d.ts +148 -0
  64. package/lib/components/Tag.js +96 -0
  65. package/lib/components/Tag.js.map +13 -0
  66. package/lib/components/TooltipWrapper.d.ts +25 -21
  67. package/lib/components/TooltipWrapper.js +11 -1
  68. package/lib/components/TooltipWrapper.js.map +2 -2
  69. package/lib/components/TransferDropDown.d.ts +85 -84
  70. package/lib/components/TransferDropDown.js +2 -2
  71. package/lib/components/TransferDropDown.js.map +2 -2
  72. package/lib/components/Tree.d.ts +84 -84
  73. package/lib/components/formula/VariableList.d.ts +1 -0
  74. package/lib/components/formula/VariableList.js.map +2 -2
  75. package/lib/components/icons.js +2 -0
  76. package/lib/components/icons.js.map +2 -2
  77. package/lib/components/index.d.ts +4 -1
  78. package/lib/components/index.js +7 -1
  79. package/lib/components/index.js.map +2 -2
  80. package/lib/components/schema-editor/Array.d.ts +11 -0
  81. package/lib/components/schema-editor/Array.js +66 -0
  82. package/lib/components/schema-editor/Array.js.map +13 -0
  83. package/lib/components/schema-editor/Common.d.ts +29 -0
  84. package/lib/components/schema-editor/Common.js +69 -0
  85. package/lib/components/schema-editor/Common.js.map +13 -0
  86. package/lib/components/schema-editor/Item.d.ts +9 -0
  87. package/lib/components/schema-editor/Item.js +31 -0
  88. package/lib/components/schema-editor/Item.js.map +13 -0
  89. package/lib/components/schema-editor/Object.d.ts +44 -0
  90. package/lib/components/schema-editor/Object.js +191 -0
  91. package/lib/components/schema-editor/Object.js.map +13 -0
  92. package/lib/components/schema-editor/SchemaVariableList.d.ts +316 -0
  93. package/lib/components/schema-editor/SchemaVariableList.js +74 -0
  94. package/lib/components/schema-editor/SchemaVariableList.js.map +13 -0
  95. package/lib/components/schema-editor/SchemaVariableListPicker.d.ts +305 -0
  96. package/lib/components/schema-editor/SchemaVariableListPicker.js +32 -0
  97. package/lib/components/schema-editor/SchemaVariableListPicker.js.map +13 -0
  98. package/lib/components/schema-editor/index.d.ts +520 -0
  99. package/lib/components/schema-editor/index.js +118 -0
  100. package/lib/components/schema-editor/index.js.map +13 -0
  101. package/lib/components/table/Cell.d.ts +930 -0
  102. package/lib/components/table/Cell.js +36 -0
  103. package/lib/components/table/Cell.js.map +13 -0
  104. package/lib/components/table/HeadCellDropDown.d.ts +514 -0
  105. package/lib/components/table/HeadCellDropDown.js +52 -0
  106. package/lib/components/table/HeadCellDropDown.js.map +13 -0
  107. package/lib/components/table/HeadCellFilter.d.ts +771 -0
  108. package/lib/components/table/HeadCellFilter.js +106 -0
  109. package/lib/components/table/HeadCellFilter.js.map +13 -0
  110. package/lib/components/table/HeadCellSelect.d.ts +672 -0
  111. package/lib/components/table/HeadCellSelect.js +46 -0
  112. package/lib/components/table/HeadCellSelect.js.map +13 -0
  113. package/lib/components/table/HeadCellSort.d.ts +498 -0
  114. package/lib/components/table/HeadCellSort.js +67 -0
  115. package/lib/components/table/HeadCellSort.js.map +13 -0
  116. package/lib/components/table/index.d.ts +1355 -0
  117. package/lib/components/table/index.js +1095 -0
  118. package/lib/components/table/index.js.map +13 -0
  119. package/lib/env.d.ts +2 -4
  120. package/lib/env.js.map +2 -2
  121. package/lib/factory.js +0 -95
  122. package/lib/factory.js.map +2 -2
  123. package/lib/icons/dot.js +11 -0
  124. package/lib/index.d.ts +6 -1
  125. package/lib/index.js +9 -2
  126. package/lib/index.js.map +2 -2
  127. package/lib/locale/de-DE.js +18 -1
  128. package/lib/locale/de-DE.js.map +2 -2
  129. package/lib/locale/en-US.js +18 -1
  130. package/lib/locale/en-US.js.map +2 -2
  131. package/lib/locale/zh-CN.js +20 -1
  132. package/lib/locale/zh-CN.js.map +2 -2
  133. package/lib/renderers/Action.js +0 -2
  134. package/lib/renderers/Action.js.map +2 -2
  135. package/lib/renderers/Carousel.d.ts +5 -1
  136. package/lib/renderers/Carousel.js +18 -5
  137. package/lib/renderers/Carousel.js.map +2 -2
  138. package/lib/renderers/Form/ButtonGroupSelect.d.ts +2 -0
  139. package/lib/renderers/Form/ButtonGroupSelect.js +7 -0
  140. package/lib/renderers/Form/ButtonGroupSelect.js.map +2 -2
  141. package/lib/renderers/Form/Checkbox.js +3 -4
  142. package/lib/renderers/Form/Checkbox.js.map +2 -2
  143. package/lib/renderers/Form/Checkboxes.d.ts +2 -1
  144. package/lib/renderers/Form/Checkboxes.js +19 -14
  145. package/lib/renderers/Form/Checkboxes.js.map +2 -2
  146. package/lib/renderers/Form/Combo.js +23 -4
  147. package/lib/renderers/Form/Combo.js.map +2 -2
  148. package/lib/renderers/Form/DiffEditor.d.ts +126 -18
  149. package/lib/renderers/Form/Editor.d.ts +412 -112
  150. package/lib/renderers/Form/Editor.js +10 -1
  151. package/lib/renderers/Form/Editor.js.map +2 -2
  152. package/lib/renderers/Form/InputExcel.js +6 -1
  153. package/lib/renderers/Form/InputExcel.js.map +2 -2
  154. package/lib/renderers/Form/InputFile.js +1 -2
  155. package/lib/renderers/Form/InputFile.js.map +2 -2
  156. package/lib/renderers/Form/InputTree.js +1 -1
  157. package/lib/renderers/Form/InputTree.js.map +2 -2
  158. package/lib/renderers/Form/Item.d.ts +0 -6
  159. package/lib/renderers/Form/JSONSchemaEditor.d.ts +41 -0
  160. package/lib/renderers/Form/JSONSchemaEditor.js +33 -0
  161. package/lib/renderers/Form/JSONSchemaEditor.js.map +13 -0
  162. package/lib/renderers/Form/ListSelect.d.ts +2 -0
  163. package/lib/renderers/Form/ListSelect.js +7 -0
  164. package/lib/renderers/Form/ListSelect.js.map +2 -2
  165. package/lib/renderers/Form/Options.js +1 -0
  166. package/lib/renderers/Form/Options.js.map +2 -2
  167. package/lib/renderers/Form/Select.js +12 -1
  168. package/lib/renderers/Form/Select.js.map +2 -2
  169. package/lib/renderers/Form/TabsTransfer.d.ts +1 -1
  170. package/lib/renderers/Form/TabsTransfer.js +2 -2
  171. package/lib/renderers/Form/TabsTransfer.js.map +2 -2
  172. package/lib/renderers/Form/TreeSelect.d.ts +4 -0
  173. package/lib/renderers/Form/TreeSelect.js +2 -2
  174. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  175. package/lib/renderers/Form/wrapControl.js +10 -5
  176. package/lib/renderers/Form/wrapControl.js.map +2 -2
  177. package/lib/renderers/Pagination.d.ts +49 -30
  178. package/lib/renderers/Pagination.js +3 -132
  179. package/lib/renderers/Pagination.js.map +2 -2
  180. package/lib/renderers/Table/HeadCellSearchDropdown.js +0 -1
  181. package/lib/renderers/Table/HeadCellSearchDropdown.js.map +2 -2
  182. package/lib/renderers/Table-v2/HeadCellSearchDropdown.d.ts +29 -0
  183. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js +158 -0
  184. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js.map +13 -0
  185. package/lib/renderers/Table-v2/TableCell.d.ts +6 -0
  186. package/lib/renderers/Table-v2/TableCell.js +28 -0
  187. package/lib/renderers/Table-v2/TableCell.js.map +13 -0
  188. package/lib/renderers/Table-v2/index.d.ts +256 -0
  189. package/lib/renderers/Table-v2/index.js +548 -0
  190. package/lib/renderers/Table-v2/index.js.map +13 -0
  191. package/lib/renderers/Tabs.js +1 -1
  192. package/lib/renderers/Tabs.js.map +2 -2
  193. package/lib/renderers/Tag.d.ts +66 -0
  194. package/lib/renderers/Tag.js +53 -0
  195. package/lib/renderers/Tag.js.map +13 -0
  196. package/lib/renderers/Wizard.js +3 -3
  197. package/lib/renderers/Wizard.js.map +2 -2
  198. package/lib/schemaExtend.js +24 -30
  199. package/lib/schemaExtend.js.map +2 -2
  200. package/lib/store/combo.d.ts +140 -20
  201. package/lib/store/form.d.ts +56 -8
  202. package/lib/store/formItem.d.ts +3 -1
  203. package/lib/store/formItem.js +3 -1
  204. package/lib/store/formItem.js.map +2 -2
  205. package/lib/store/index.js +2 -0
  206. package/lib/store/index.js.map +2 -2
  207. package/lib/store/table-v2.d.ts +308 -0
  208. package/lib/store/table-v2.js +452 -0
  209. package/lib/store/table-v2.js.map +13 -0
  210. package/lib/store/table.d.ts +112 -16
  211. package/lib/store/table.js +1 -1
  212. package/lib/store/table.js.map +2 -2
  213. package/lib/themes/ang-ie11.css +1686 -120
  214. package/lib/themes/ang.css +1807 -208
  215. package/lib/themes/ang.css.map +1 -1
  216. package/lib/themes/antd-ie11.css +1667 -101
  217. package/lib/themes/antd.css +1789 -201
  218. package/lib/themes/antd.css.map +1 -1
  219. package/lib/themes/cxd-ie11.css +1662 -97
  220. package/lib/themes/cxd.css +1983 -394
  221. package/lib/themes/cxd.css.map +1 -1
  222. package/lib/themes/dark-ie11.css +1667 -101
  223. package/lib/themes/dark.css +1789 -201
  224. package/lib/themes/dark.css.map +1 -1
  225. package/lib/themes/default-ie11.css +1662 -97
  226. package/lib/themes/default.css +1983 -394
  227. package/lib/themes/default.css.map +1 -1
  228. package/lib/utils/DataSchema.d.ts +25 -0
  229. package/lib/utils/DataSchema.js +104 -0
  230. package/lib/utils/DataSchema.js.map +13 -0
  231. package/lib/utils/DataScope.d.ts +23 -0
  232. package/lib/utils/DataScope.js +140 -0
  233. package/lib/utils/DataScope.js.map +13 -0
  234. package/lib/utils/handleAction.js +1 -1
  235. package/lib/utils/handleAction.js.map +2 -2
  236. package/lib/utils/renderer-event.d.ts +8 -2
  237. package/lib/utils/renderer-event.js +102 -1
  238. package/lib/utils/renderer-event.js.map +2 -2
  239. package/package.json +3 -2
  240. package/schema.json +1476 -469
  241. package/scss/_properties.scss +69 -0
  242. package/scss/components/_button.scss +37 -39
  243. package/scss/components/_context-menu.scss +3 -18
  244. package/scss/components/_json-schema-editor.scss +126 -0
  245. package/scss/components/_pagination.scss +104 -23
  246. package/scss/components/_result-box.scss +2 -2
  247. package/scss/components/_table-v2.scss +912 -0
  248. package/scss/components/_tag.scss +177 -0
  249. package/scss/components/form/_selection.scss +1 -14
  250. package/scss/components/form/_text.scss +1 -1
  251. package/scss/themes/_antd-variables.scss +0 -13
  252. package/scss/themes/_common.scss +3 -0
  253. package/scss/themes/_cxd-variables.scss +7 -17
  254. package/scss/themes/_dark-variables.scss +0 -13
  255. package/scss/themes/cxd.scss +1 -1
  256. package/sdk/ang-ie11.css +2240 -227
  257. package/sdk/ang.css +2905 -859
  258. package/sdk/antd-ie11.css +2233 -220
  259. package/sdk/antd.css +2905 -870
  260. package/sdk/barcode.js +51 -51
  261. package/sdk/charts.js +14 -14
  262. package/sdk/codemirror.js +7 -7
  263. package/sdk/color-picker.js +65 -65
  264. package/sdk/cropperjs.js +2 -2
  265. package/sdk/cxd-ie11.css +2223 -211
  266. package/sdk/cxd.css +2911 -875
  267. package/sdk/dark-ie11.css +2233 -220
  268. package/sdk/dark.css +2905 -870
  269. package/sdk/exceljs.js +1 -1
  270. package/sdk/locale/de-DE.js +18 -1
  271. package/sdk/markdown.js +69 -69
  272. package/sdk/papaparse.js +1 -1
  273. package/sdk/renderers/Form/CityDB.js +1 -1
  274. package/sdk/rest.js +16 -16
  275. package/sdk/rich-text.js +62 -62
  276. package/sdk/sdk-ie11.css +2223 -211
  277. package/sdk/sdk.css +2911 -875
  278. package/sdk/sdk.js +1326 -1270
  279. package/sdk/thirds/hls.js/hls.js +1 -1
  280. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  281. package/sdk/tinymce.js +57 -57
  282. package/src/Schema.ts +7 -0
  283. package/src/SchemaRenderer.tsx +4 -5
  284. package/src/actions/Action.ts +7 -6
  285. package/src/actions/AjaxAction.ts +33 -24
  286. package/src/actions/BreakAction.ts +2 -2
  287. package/src/actions/BroadcastAction.ts +6 -5
  288. package/src/actions/CmptAction.ts +5 -6
  289. package/src/actions/ContinueAction.ts +2 -2
  290. package/src/actions/CopyAction.ts +14 -8
  291. package/src/actions/CustomAction.ts +2 -2
  292. package/src/actions/DialogAction.ts +16 -10
  293. package/src/actions/DrawerAction.ts +3 -3
  294. package/src/actions/EmailAction.ts +12 -12
  295. package/src/actions/LinkAction.ts +34 -14
  296. package/src/actions/LoopAction.ts +13 -8
  297. package/src/actions/PageAction.ts +9 -6
  298. package/src/actions/ParallelAction.ts +2 -2
  299. package/src/actions/SwitchAction.ts +2 -2
  300. package/src/actions/ToastAction.ts +9 -5
  301. package/src/components/InputBox.tsx +1 -0
  302. package/src/components/Pagination.tsx +446 -0
  303. package/src/components/PickerContainer.tsx +8 -5
  304. package/src/components/Rating.tsx +16 -9
  305. package/src/components/Select.tsx +3 -3
  306. package/src/components/Tag.tsx +179 -0
  307. package/src/components/TooltipWrapper.tsx +14 -1
  308. package/src/components/TransferDropDown.tsx +3 -0
  309. package/src/components/formula/VariableList.tsx +1 -0
  310. package/src/components/icons.tsx +2 -0
  311. package/src/components/index.tsx +7 -1
  312. package/src/components/schema-editor/Array.tsx +95 -0
  313. package/src/components/schema-editor/Common.tsx +138 -0
  314. package/src/components/schema-editor/Item.tsx +36 -0
  315. package/src/components/schema-editor/Object.tsx +299 -0
  316. package/src/components/schema-editor/SchemaVariableList.tsx +97 -0
  317. package/src/components/schema-editor/SchemaVariableListPicker.tsx +66 -0
  318. package/src/components/schema-editor/index.tsx +211 -0
  319. package/src/components/table/Cell.tsx +70 -0
  320. package/src/components/table/HeadCellDropDown.tsx +115 -0
  321. package/src/components/table/HeadCellFilter.tsx +193 -0
  322. package/src/components/table/HeadCellSelect.tsx +86 -0
  323. package/src/components/table/HeadCellSort.tsx +102 -0
  324. package/src/components/table/index.tsx +1681 -0
  325. package/src/env.tsx +7 -14
  326. package/src/factory.tsx +3 -106
  327. package/src/icons/dot.svg +11 -0
  328. package/src/index.tsx +8 -1
  329. package/src/locale/de-DE.ts +18 -1
  330. package/src/locale/en-US.ts +18 -1
  331. package/src/locale/zh-CN.ts +20 -1
  332. package/src/renderers/Action.tsx +1 -1
  333. package/src/renderers/Carousel.tsx +21 -6
  334. package/src/renderers/Form/ButtonGroupSelect.tsx +10 -1
  335. package/src/renderers/Form/Checkbox.tsx +4 -4
  336. package/src/renderers/Form/Checkboxes.tsx +31 -25
  337. package/src/renderers/Form/Combo.tsx +20 -4
  338. package/src/renderers/Form/Editor.tsx +15 -1
  339. package/src/renderers/Form/InputExcel.tsx +6 -1
  340. package/src/renderers/Form/InputFile.tsx +1 -2
  341. package/src/renderers/Form/InputTree.tsx +1 -1
  342. package/src/renderers/Form/JSONSchemaEditor.tsx +67 -0
  343. package/src/renderers/Form/ListSelect.tsx +9 -1
  344. package/src/renderers/Form/Options.tsx +1 -1
  345. package/src/renderers/Form/Select.tsx +7 -0
  346. package/src/renderers/Form/TabsTransfer.tsx +2 -2
  347. package/src/renderers/Form/TreeSelect.tsx +8 -1
  348. package/src/renderers/Form/wrapControl.tsx +11 -5
  349. package/src/renderers/Pagination.tsx +65 -253
  350. package/src/renderers/Table/HeadCellSearchDropdown.tsx +0 -1
  351. package/src/renderers/Table-v2/HeadCellSearchDropdown.tsx +244 -0
  352. package/src/renderers/Table-v2/TableCell.tsx +19 -0
  353. package/src/renderers/Table-v2/index.tsx +1140 -0
  354. package/src/renderers/Tabs.tsx +1 -1
  355. package/src/renderers/Tag.tsx +128 -0
  356. package/src/renderers/Wizard.tsx +3 -3
  357. package/src/schemaExtend.ts +24 -28
  358. package/src/store/formItem.ts +5 -1
  359. package/src/store/index.ts +2 -0
  360. package/src/store/table-v2.ts +646 -0
  361. package/src/store/table.ts +1 -1
  362. package/src/utils/DataSchema.ts +131 -0
  363. package/src/utils/DataScope.ts +190 -0
  364. package/src/utils/handleAction.ts +1 -1
  365. 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
+ );