amis 1.4.1 → 1.4.2-beta.13

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 (516) hide show
  1. package/README.md +1 -1
  2. package/lib/Schema.d.ts +26 -2
  3. package/lib/Schema.js.map +1 -1
  4. package/lib/components/Alert.js +3 -1
  5. package/lib/components/Alert.js.map +2 -2
  6. package/lib/components/AnchorNav.d.ts +22 -21
  7. package/lib/components/AnchorNav.js +7 -3
  8. package/lib/components/AnchorNav.js.map +2 -2
  9. package/lib/components/ArrayInput.d.ts +84 -84
  10. package/lib/components/AssociatedSelection.d.ts +930 -0
  11. package/lib/components/AssociatedSelection.js +89 -0
  12. package/lib/components/AssociatedSelection.js.map +13 -0
  13. package/lib/components/Badge.d.ts +2 -2
  14. package/lib/components/Badge.js +13 -7
  15. package/lib/components/Badge.js.map +2 -2
  16. package/lib/components/{ChainedCheckboxes.d.ts → ChainedSelection.d.ts} +267 -98
  17. package/lib/components/{ChainedCheckboxes.js → ChainedSelection.js} +30 -24
  18. package/lib/components/ChainedSelection.js.map +13 -0
  19. package/lib/components/Collapse.js +1 -1
  20. package/lib/components/Collapse.js.map +2 -2
  21. package/lib/components/ColorPicker.d.ts +84 -84
  22. package/lib/components/DatePicker.d.ts +84 -84
  23. package/lib/components/DatePicker.js +1 -1
  24. package/lib/components/DatePicker.js.map +2 -2
  25. package/lib/components/DateRangePicker.d.ts +84 -84
  26. package/lib/components/DateRangePicker.js +1 -1
  27. package/lib/components/DateRangePicker.js.map +2 -2
  28. package/lib/components/Editor.d.ts +84 -84
  29. package/lib/components/GroupedSelection.d.ts +907 -0
  30. package/lib/components/GroupedSelection.js +48 -0
  31. package/lib/components/GroupedSelection.js.map +13 -0
  32. package/lib/components/InputBox.d.ts +22 -21
  33. package/lib/components/InputBox.js +11 -3
  34. package/lib/components/InputBox.js.map +2 -2
  35. package/lib/components/Link.d.ts +84 -0
  36. package/lib/components/Link.js +43 -0
  37. package/lib/components/Link.js.map +13 -0
  38. package/lib/components/ListGroup.d.ts +21 -21
  39. package/lib/components/ModalManager.js +1 -1
  40. package/lib/components/ModalManager.js.map +2 -2
  41. package/lib/components/MonthRangePicker.d.ts +84 -84
  42. package/lib/components/MonthRangePicker.js +1 -1
  43. package/lib/components/MonthRangePicker.js.map +2 -2
  44. package/lib/components/NumberInput.d.ts +20 -20
  45. package/lib/components/PickerColumn.d.ts +514 -0
  46. package/lib/components/PickerColumn.js +279 -0
  47. package/lib/components/PickerColumn.js.map +13 -0
  48. package/lib/components/PickerContainer.d.ts +513 -0
  49. package/lib/components/PickerContainer.js +96 -0
  50. package/lib/components/PickerContainer.js.map +13 -0
  51. package/lib/components/Radios.d.ts +22 -21
  52. package/lib/components/Radios.js +1 -0
  53. package/lib/components/Radios.js.map +2 -2
  54. package/lib/components/Rating.d.ts +21 -21
  55. package/lib/components/ResultBox.d.ts +84 -84
  56. package/lib/components/ResultBox.js +10 -2
  57. package/lib/components/ResultBox.js.map +2 -2
  58. package/lib/components/RichText.js +17 -53
  59. package/lib/components/RichText.js.map +2 -2
  60. package/lib/components/SearchBox.d.ts +84 -84
  61. package/lib/components/SearchBox.js +4 -4
  62. package/lib/components/SearchBox.js.map +2 -2
  63. package/lib/components/Select.d.ts +245 -237
  64. package/lib/components/Select.js +28 -4
  65. package/lib/components/Select.js.map +2 -2
  66. package/lib/components/{Checkboxes.d.ts → Selection.d.ts} +273 -98
  67. package/lib/components/Selection.js +134 -0
  68. package/lib/components/Selection.js.map +13 -0
  69. package/lib/components/SparkLine.d.ts +85 -84
  70. package/lib/components/SparkLine.js +2 -2
  71. package/lib/components/SparkLine.js.map +2 -2
  72. package/lib/components/{TableCheckboxes.d.ts → TableSelection.d.ts} +266 -96
  73. package/lib/components/{TableCheckboxes.js → TableSelection.js} +30 -30
  74. package/lib/components/TableSelection.js.map +13 -0
  75. package/lib/components/Tabs.d.ts +20 -20
  76. package/lib/components/TabsTransfer.d.ts +84 -84
  77. package/lib/components/TabsTransfer.js +9 -9
  78. package/lib/components/TabsTransfer.js.map +2 -2
  79. package/lib/components/TabsTransferPicker.d.ts +489 -0
  80. package/lib/components/TabsTransferPicker.js +60 -0
  81. package/lib/components/TabsTransferPicker.js.map +13 -0
  82. package/lib/components/Toast.js +2 -2
  83. package/lib/components/Toast.js.map +2 -2
  84. package/lib/components/Transfer.d.ts +908 -274
  85. package/lib/components/Transfer.js +31 -24
  86. package/lib/components/Transfer.js.map +2 -2
  87. package/lib/components/TransferDropDown.d.ts +488 -0
  88. package/lib/components/TransferDropDown.js +59 -0
  89. package/lib/components/TransferDropDown.js.map +13 -0
  90. package/lib/components/TransferPicker.d.ts +493 -0
  91. package/lib/components/TransferPicker.js +60 -0
  92. package/lib/components/TransferPicker.js.map +13 -0
  93. package/lib/components/Tree.d.ts +84 -84
  94. package/lib/components/Tree.js +5 -3
  95. package/lib/components/Tree.js.map +2 -2
  96. package/lib/components/{TreeCheckboxes.d.ts → TreeSelection.d.ts} +269 -99
  97. package/lib/components/{TreeCheckboxes.js → TreeSelection.js} +36 -32
  98. package/lib/components/TreeSelection.js.map +13 -0
  99. package/lib/components/WithRemoteConfig.js +1 -1
  100. package/lib/components/WithRemoteConfig.js.map +2 -2
  101. package/lib/components/condition-builder/Field.js +5 -2
  102. package/lib/components/condition-builder/Field.js.map +2 -2
  103. package/lib/components/condition-builder/Func.js +2 -2
  104. package/lib/components/condition-builder/Func.js.map +2 -2
  105. package/lib/components/condition-builder/InputSwitch.js +2 -2
  106. package/lib/components/condition-builder/InputSwitch.js.map +2 -2
  107. package/lib/components/condition-builder/Item.js +3 -3
  108. package/lib/components/condition-builder/Item.js.map +2 -2
  109. package/lib/components/icons.js +14 -0
  110. package/lib/components/icons.js.map +2 -2
  111. package/lib/components/index.d.ts +8 -8
  112. package/lib/components/index.js +16 -16
  113. package/lib/components/index.js.map +2 -2
  114. package/lib/envOverwrite.js.map +2 -2
  115. package/lib/factory.d.ts +4 -0
  116. package/lib/factory.js +4 -2
  117. package/lib/factory.js.map +2 -2
  118. package/lib/helper.css.map +1 -1
  119. package/lib/hooks/index.d.ts +5 -0
  120. package/lib/hooks/index.js +14 -0
  121. package/lib/hooks/index.js.map +13 -0
  122. package/lib/hooks/use-set-state.d.ts +2 -0
  123. package/lib/hooks/use-set-state.js +15 -0
  124. package/lib/hooks/use-set-state.js.map +13 -0
  125. package/lib/hooks/use-touch.d.ts +16 -0
  126. package/lib/hooks/use-touch.js +73 -0
  127. package/lib/hooks/use-touch.js.map +13 -0
  128. package/lib/hooks/use-update-effect.d.ts +3 -0
  129. package/lib/hooks/use-update-effect.js +17 -0
  130. package/lib/hooks/use-update-effect.js.map +13 -0
  131. package/lib/icons/clock.js +10 -0
  132. package/lib/icons/download.js +7 -0
  133. package/lib/icons/status-close.js +11 -0
  134. package/lib/icons/status-fail.js +11 -0
  135. package/lib/icons/status-info.js +10 -0
  136. package/lib/icons/status-success.js +11 -0
  137. package/lib/icons/status-warning.js +10 -0
  138. package/lib/index.d.ts +3 -0
  139. package/lib/index.js +4 -1
  140. package/lib/index.js.map +2 -2
  141. package/lib/locale/de-DE.js +4 -0
  142. package/lib/locale/de-DE.js.map +2 -2
  143. package/lib/locale/en-US.js +5 -0
  144. package/lib/locale/en-US.js.map +2 -2
  145. package/lib/locale/zh-CN.js +8 -3
  146. package/lib/locale/zh-CN.js.map +2 -2
  147. package/lib/renderers/Action.d.ts +8 -0
  148. package/lib/renderers/Action.js +17 -4
  149. package/lib/renderers/Action.js.map +2 -2
  150. package/lib/renderers/AnchorNav.d.ts +1 -0
  151. package/lib/renderers/AnchorNav.js +2 -2
  152. package/lib/renderers/AnchorNav.js.map +2 -2
  153. package/lib/renderers/Avatar.js +3 -3
  154. package/lib/renderers/Avatar.js.map +2 -2
  155. package/lib/renderers/Breadcrumb.js +1 -1
  156. package/lib/renderers/Breadcrumb.js.map +2 -2
  157. package/lib/renderers/CRUD.d.ts +9 -0
  158. package/lib/renderers/CRUD.js +43 -8
  159. package/lib/renderers/CRUD.js.map +2 -2
  160. package/lib/renderers/Card.d.ts +4 -0
  161. package/lib/renderers/Card.js +29 -23
  162. package/lib/renderers/Card.js.map +2 -2
  163. package/lib/renderers/Chart.js +1 -1
  164. package/lib/renderers/Chart.js.map +2 -2
  165. package/lib/renderers/Collapse.js +3 -2
  166. package/lib/renderers/Collapse.js.map +2 -2
  167. package/lib/renderers/Dialog.js +0 -3
  168. package/lib/renderers/Dialog.js.map +2 -2
  169. package/lib/renderers/Drawer.js +0 -3
  170. package/lib/renderers/Drawer.js.map +2 -2
  171. package/lib/renderers/DropDownButton.d.ts +5 -1
  172. package/lib/renderers/DropDownButton.js +8 -6
  173. package/lib/renderers/DropDownButton.js.map +2 -2
  174. package/lib/renderers/Form/Checkbox.d.ts +5 -0
  175. package/lib/renderers/Form/Checkbox.js +4 -0
  176. package/lib/renderers/Form/Checkbox.js.map +2 -2
  177. package/lib/renderers/Form/Combo.js +2 -2
  178. package/lib/renderers/Form/Combo.js.map +2 -2
  179. package/lib/renderers/Form/DiffEditor.d.ts +4 -3
  180. package/lib/renderers/Form/Editor.d.ts +3 -2
  181. package/lib/renderers/Form/InputCity.d.ts +84 -84
  182. package/lib/renderers/Form/InputCity.js +7 -6
  183. package/lib/renderers/Form/InputCity.js.map +2 -2
  184. package/lib/renderers/Form/InputColor.d.ts +84 -84
  185. package/lib/renderers/Form/InputFile.d.ts +6 -0
  186. package/lib/renderers/Form/InputFile.js +30 -10
  187. package/lib/renderers/Form/InputFile.js.map +2 -2
  188. package/lib/renderers/Form/InputImage.js +16 -7
  189. package/lib/renderers/Form/InputImage.js.map +2 -2
  190. package/lib/renderers/Form/Item.d.ts +1 -1
  191. package/lib/renderers/Form/Item.js.map +1 -1
  192. package/lib/renderers/Form/Options.js +19 -6
  193. package/lib/renderers/Form/Options.js.map +2 -2
  194. package/lib/renderers/Form/Picker.js +2 -2
  195. package/lib/renderers/Form/Picker.js.map +2 -2
  196. package/lib/renderers/Form/Select.d.ts +42 -4
  197. package/lib/renderers/Form/Select.js +37 -3
  198. package/lib/renderers/Form/Select.js.map +2 -2
  199. package/lib/renderers/Form/TabsTransferPicker.d.ts +48 -0
  200. package/lib/renderers/Form/TabsTransferPicker.js +29 -0
  201. package/lib/renderers/Form/TabsTransferPicker.js.map +13 -0
  202. package/lib/renderers/Form/Transfer.js +18 -3
  203. package/lib/renderers/Form/Transfer.js.map +2 -2
  204. package/lib/renderers/Form/TransferPicker.d.ts +52 -0
  205. package/lib/renderers/Form/TransferPicker.js +43 -0
  206. package/lib/renderers/Form/TransferPicker.js.map +13 -0
  207. package/lib/renderers/Form/TreeSelect.js +2 -2
  208. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  209. package/lib/renderers/Form/index.d.ts +5 -0
  210. package/lib/renderers/Form/index.js +5 -3
  211. package/lib/renderers/Form/index.js.map +2 -2
  212. package/lib/renderers/Form/wrapControl.js +15 -3
  213. package/lib/renderers/Form/wrapControl.js.map +2 -2
  214. package/lib/renderers/IFrame.js +3 -5
  215. package/lib/renderers/IFrame.js.map +2 -2
  216. package/lib/renderers/Image.d.ts +1 -0
  217. package/lib/renderers/Image.js +15 -1
  218. package/lib/renderers/Image.js.map +2 -2
  219. package/lib/renderers/Json.d.ts +4 -0
  220. package/lib/renderers/Json.js +4 -13
  221. package/lib/renderers/Json.js.map +2 -2
  222. package/lib/renderers/Link.d.ts +18 -3
  223. package/lib/renderers/Link.js +27 -15
  224. package/lib/renderers/Link.js.map +2 -2
  225. package/lib/renderers/List.js +1 -1
  226. package/lib/renderers/List.js.map +2 -2
  227. package/lib/renderers/Log.d.ts +2 -2
  228. package/lib/renderers/Log.js +7 -1
  229. package/lib/renderers/Log.js.map +2 -2
  230. package/lib/renderers/Mapping.d.ts +9 -2
  231. package/lib/renderers/Mapping.js +18 -6
  232. package/lib/renderers/Mapping.js.map +2 -2
  233. package/lib/renderers/Nav.d.ts +62 -36
  234. package/lib/renderers/Nav.js +272 -96
  235. package/lib/renderers/Nav.js.map +2 -2
  236. package/lib/renderers/Portlet.d.ts +125 -0
  237. package/lib/renderers/Portlet.js +156 -0
  238. package/lib/renderers/Portlet.js.map +13 -0
  239. package/lib/renderers/Property.js +2 -1
  240. package/lib/renderers/Property.js.map +2 -2
  241. package/lib/renderers/SearchBox.d.ts +6 -1
  242. package/lib/renderers/SearchBox.js +19 -5
  243. package/lib/renderers/SearchBox.js.map +2 -2
  244. package/lib/renderers/SparkLine.d.ts +4 -0
  245. package/lib/renderers/SparkLine.js.map +2 -2
  246. package/lib/renderers/Table/ColumnToggler.d.ts +113 -0
  247. package/lib/renderers/Table/ColumnToggler.js +216 -0
  248. package/lib/renderers/Table/ColumnToggler.js.map +13 -0
  249. package/lib/renderers/Table/ItemActionsWrapper.d.ts +11 -0
  250. package/lib/renderers/Table/ItemActionsWrapper.js +31 -0
  251. package/lib/renderers/Table/ItemActionsWrapper.js.map +13 -0
  252. package/lib/renderers/Table/TableBody.d.ts +4 -0
  253. package/lib/renderers/Table/TableCell.js +3 -1
  254. package/lib/renderers/Table/TableCell.js.map +2 -2
  255. package/lib/renderers/Table/TableContent.d.ts +4 -1
  256. package/lib/renderers/Table/TableContent.js +21 -1
  257. package/lib/renderers/Table/TableContent.js.map +2 -2
  258. package/lib/renderers/Table/index.d.ts +19 -2
  259. package/lib/renderers/Table/index.js +172 -57
  260. package/lib/renderers/Table/index.js.map +2 -2
  261. package/lib/renderers/Tabs.js +9 -1
  262. package/lib/renderers/Tabs.js.map +2 -2
  263. package/lib/renderers/WebComponent.js +1 -1
  264. package/lib/renderers/WebComponent.js.map +2 -2
  265. package/lib/store/combo.d.ts +2 -16
  266. package/lib/store/crud.js +3 -7
  267. package/lib/store/crud.js.map +2 -2
  268. package/lib/store/form.d.ts +1 -1
  269. package/lib/store/form.js +5 -6
  270. package/lib/store/form.js.map +2 -2
  271. package/lib/store/service.js +5 -4
  272. package/lib/store/service.js.map +2 -2
  273. package/lib/store/table.d.ts +260 -3
  274. package/lib/store/table.js +69 -11
  275. package/lib/store/table.js.map +2 -2
  276. package/lib/themes/ang-ie11.css +888 -238
  277. package/lib/themes/ang.css +888 -238
  278. package/lib/themes/ang.css.map +1 -1
  279. package/lib/themes/antd-ie11.css +888 -238
  280. package/lib/themes/antd.css +888 -238
  281. package/lib/themes/antd.css.map +1 -1
  282. package/lib/themes/cxd-ie11.css +1446 -457
  283. package/lib/themes/cxd.css +1446 -457
  284. package/lib/themes/cxd.css.map +1 -1
  285. package/lib/themes/dark-ie11.css +888 -238
  286. package/lib/themes/dark.css +888 -238
  287. package/lib/themes/dark.css.map +1 -1
  288. package/lib/themes/default.css +1446 -457
  289. package/lib/themes/default.css.map +1 -1
  290. package/lib/types.d.ts +37 -0
  291. package/lib/types.js +0 -5
  292. package/lib/types.js.map +2 -2
  293. package/lib/utils/api.d.ts +3 -2
  294. package/lib/utils/api.js +31 -15
  295. package/lib/utils/api.js.map +2 -2
  296. package/lib/utils/dom.d.ts +4 -0
  297. package/lib/utils/dom.js +11 -1
  298. package/lib/utils/dom.js.map +2 -2
  299. package/lib/utils/handleAction.d.ts +7 -0
  300. package/lib/utils/handleAction.js +30 -0
  301. package/lib/utils/handleAction.js.map +13 -0
  302. package/lib/utils/helper.d.ts +3 -1
  303. package/lib/utils/helper.js +14 -5
  304. package/lib/utils/helper.js.map +2 -2
  305. package/lib/utils/icon.js +3 -0
  306. package/lib/utils/icon.js.map +2 -2
  307. package/lib/utils/tpl-builtin.d.ts +1 -1
  308. package/lib/utils/tpl-builtin.js +25 -15
  309. package/lib/utils/tpl-builtin.js.map +2 -2
  310. package/package.json +1 -1
  311. package/schema.json +3341 -998
  312. package/scss/_mixins.scss +1 -3
  313. package/scss/_properties.scss +63 -4
  314. package/scss/_utilities.scss +4 -0
  315. package/scss/base/_common.scss +3 -0
  316. package/scss/base/_normalize.scss +2 -0
  317. package/scss/components/_anchor-nav.scss +88 -29
  318. package/scss/components/_button.scss +4 -5
  319. package/scss/components/_card.scss +8 -14
  320. package/scss/components/_collapse.scss +41 -8
  321. package/scss/components/_column-toggler.scss +234 -0
  322. package/scss/components/_dropdown.scss +2 -1
  323. package/scss/components/_images.scss +2 -1
  324. package/scss/components/_input-box.scss +1 -0
  325. package/scss/components/_link.scss +6 -0
  326. package/scss/components/_mapping.scss +6 -0
  327. package/scss/components/_nav.scss +231 -223
  328. package/scss/components/_page.scss +5 -4
  329. package/scss/components/_picker-columns.scss +124 -0
  330. package/scss/components/_popover.scss +13 -0
  331. package/scss/components/_portlet.scss +51 -0
  332. package/scss/components/_progress.scss +2 -0
  333. package/scss/components/_result-box.scss +1 -0
  334. package/scss/components/_status.scss +1 -1
  335. package/scss/components/_steps.scss +1 -1
  336. package/scss/components/_table.scss +51 -1
  337. package/scss/components/form/_checks.scss +0 -351
  338. package/scss/components/form/_color.scss +1 -0
  339. package/scss/components/form/_date-range.scss +2 -0
  340. package/scss/components/form/_date.scss +2 -0
  341. package/scss/components/form/_fieldset.scss +6 -3
  342. package/scss/components/form/_file.scss +16 -4
  343. package/scss/components/form/_form.scss +48 -0
  344. package/scss/components/form/_image.scss +7 -2
  345. package/scss/components/form/_list.scss +1 -0
  346. package/scss/components/form/_location.scss +1 -1
  347. package/scss/components/form/_selection.scss +354 -0
  348. package/scss/components/form/_text.scss +13 -0
  349. package/scss/components/form/_textarea.scss +10 -0
  350. package/scss/components/form/_transfer.scss +77 -18
  351. package/scss/themes/_common.scss +7 -0
  352. package/scss/themes/_cxd-colors.scss +56 -0
  353. package/scss/themes/_cxd-variables.scss +217 -89
  354. package/scss/themes/cxd.scss +370 -0
  355. package/sdk/ang-ie11.css +1117 -392
  356. package/sdk/ang.css +1110 -342
  357. package/sdk/antd-ie11.css +1105 -380
  358. package/sdk/antd.css +1110 -342
  359. package/sdk/charts.js +13 -13
  360. package/sdk/color-picker.js +65 -69
  361. package/sdk/cropperjs.js +2 -2
  362. package/sdk/cxd-ie11.css +2086 -1062
  363. package/sdk/cxd.css +1643 -495
  364. package/sdk/dark-ie11.css +1117 -392
  365. package/sdk/dark.css +1110 -342
  366. package/sdk/exceljs.js +1 -1
  367. package/sdk/helper.css.map +1 -1
  368. package/sdk/iconfont.svg +2513 -0
  369. package/sdk/iconfont.ttf +0 -0
  370. package/sdk/iconfont.woff +0 -0
  371. package/sdk/ie11-patch.css +1 -0
  372. package/sdk/locale/de-DE.js +4 -0
  373. package/sdk/markdown.js +69 -69
  374. package/sdk/papaparse.js +1 -1
  375. package/sdk/renderers/Form/CityDB.js +1 -1
  376. package/sdk/rest.js +20 -28
  377. package/sdk/rich-text.js +62 -62
  378. package/sdk/sdk-ie11.css +2086 -1062
  379. package/sdk/sdk.css +1643 -495
  380. package/sdk/sdk.js +1219 -1165
  381. package/sdk/thirds/hls.js/hls.js +1 -1
  382. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  383. package/sdk/tinymce.js +57 -57
  384. package/src/Schema.ts +32 -0
  385. package/src/components/Alert.tsx +3 -1
  386. package/src/components/AnchorNav.tsx +15 -4
  387. package/src/components/{AssociatedCheckboxes.tsx → AssociatedSelection.tsx} +41 -37
  388. package/src/components/Badge.tsx +38 -26
  389. package/src/components/{ChainedCheckboxes.tsx → ChainedSelection.tsx} +57 -40
  390. package/src/components/Collapse.tsx +14 -9
  391. package/src/components/DatePicker.tsx +1 -1
  392. package/src/components/DateRangePicker.tsx +23 -11
  393. package/src/components/{ListCheckboxes.tsx → GroupedSelection.tsx} +26 -21
  394. package/src/components/InputBox.tsx +11 -10
  395. package/src/components/Link.tsx +85 -0
  396. package/src/components/ModalManager.ts +1 -1
  397. package/src/components/MonthRangePicker.tsx +10 -2
  398. package/src/components/PickerColumn.tsx +429 -0
  399. package/src/components/PickerContainer.tsx +128 -0
  400. package/src/components/Radios.tsx +3 -8
  401. package/src/components/ResultBox.tsx +9 -9
  402. package/src/components/RichText.tsx +17 -57
  403. package/src/components/SearchBox.tsx +4 -5
  404. package/src/components/Select.tsx +60 -5
  405. package/src/components/{Checkboxes.tsx → Selection.tsx} +75 -21
  406. package/src/components/SparkLine.tsx +4 -1
  407. package/src/components/{TableCheckboxes.tsx → TableSelection.tsx} +46 -25
  408. package/src/components/TabsTransfer.tsx +13 -7
  409. package/src/components/TabsTransferPicker.tsx +85 -0
  410. package/src/components/Toast.tsx +5 -5
  411. package/src/components/Transfer.tsx +71 -50
  412. package/src/components/TransferDropDown.tsx +120 -0
  413. package/src/components/TransferPicker.tsx +91 -0
  414. package/src/components/Tree.tsx +6 -8
  415. package/src/components/{TreeCheckboxes.tsx → TreeSelection.tsx} +33 -26
  416. package/src/components/WithRemoteConfig.tsx +7 -2
  417. package/src/components/condition-builder/Field.tsx +5 -5
  418. package/src/components/condition-builder/Func.tsx +3 -3
  419. package/src/components/condition-builder/InputSwitch.tsx +3 -3
  420. package/src/components/condition-builder/Item.tsx +5 -12
  421. package/src/components/icons.tsx +15 -0
  422. package/src/components/index.tsx +13 -13
  423. package/src/envOverwrite.ts +0 -1
  424. package/src/factory.tsx +18 -3
  425. package/src/hooks/index.ts +5 -0
  426. package/src/hooks/use-set-state.ts +19 -0
  427. package/src/hooks/use-touch.ts +100 -0
  428. package/src/hooks/use-update-effect.ts +16 -0
  429. package/src/icons/clock.svg +1 -0
  430. package/src/icons/download.svg +4 -0
  431. package/src/icons/status-close.svg +10 -0
  432. package/src/icons/status-fail.svg +10 -0
  433. package/src/icons/status-info.svg +8 -0
  434. package/src/icons/status-success.svg +10 -0
  435. package/src/icons/status-warning.svg +8 -0
  436. package/src/index.tsx +3 -0
  437. package/src/locale/de-DE.ts +4 -0
  438. package/src/locale/en-US.ts +5 -0
  439. package/src/locale/zh-CN.ts +8 -3
  440. package/src/renderers/Action.tsx +33 -2
  441. package/src/renderers/AnchorNav.tsx +4 -0
  442. package/src/renderers/Avatar.tsx +8 -4
  443. package/src/renderers/Breadcrumb.tsx +5 -1
  444. package/src/renderers/CRUD.tsx +63 -28
  445. package/src/renderers/Card.tsx +63 -34
  446. package/src/renderers/Chart.tsx +6 -2
  447. package/src/renderers/Collapse.tsx +4 -2
  448. package/src/renderers/Dialog.tsx +0 -4
  449. package/src/renderers/Drawer.tsx +0 -4
  450. package/src/renderers/DropDownButton.tsx +18 -13
  451. package/src/renderers/Form/Checkbox.tsx +8 -0
  452. package/src/renderers/Form/Combo.tsx +2 -3
  453. package/src/renderers/Form/InputCity.tsx +4 -8
  454. package/src/renderers/Form/InputFile.tsx +66 -24
  455. package/src/renderers/Form/InputImage.tsx +16 -5
  456. package/src/renderers/Form/Item.tsx +3 -2
  457. package/src/renderers/Form/Options.tsx +32 -7
  458. package/src/renderers/Form/Picker.tsx +3 -2
  459. package/src/renderers/Form/Select.tsx +162 -21
  460. package/src/renderers/Form/TabsTransferPicker.tsx +123 -0
  461. package/src/renderers/Form/Transfer.tsx +19 -4
  462. package/src/renderers/Form/TransferPicker.tsx +145 -0
  463. package/src/renderers/Form/TreeSelect.tsx +25 -0
  464. package/src/renderers/Form/index.tsx +15 -2
  465. package/src/renderers/Form/wrapControl.tsx +28 -3
  466. package/src/renderers/IFrame.tsx +4 -5
  467. package/src/renderers/Image.tsx +10 -0
  468. package/src/renderers/Json.tsx +9 -9
  469. package/src/renderers/Link.tsx +53 -14
  470. package/src/renderers/List.tsx +1 -1
  471. package/src/renderers/Log.tsx +16 -3
  472. package/src/renderers/Mapping.tsx +27 -11
  473. package/src/renderers/Nav.tsx +325 -122
  474. package/src/renderers/Portlet.tsx +423 -0
  475. package/src/renderers/Property.tsx +3 -2
  476. package/src/renderers/SearchBox.tsx +23 -4
  477. package/src/renderers/SparkLine.tsx +5 -0
  478. package/src/renderers/Table/ColumnToggler.tsx +544 -0
  479. package/src/renderers/Table/ItemActionsWrapper.tsx +44 -0
  480. package/src/renderers/Table/TableCell.tsx +16 -1
  481. package/src/renderers/Table/TableContent.tsx +40 -2
  482. package/src/renderers/Table/index.tsx +257 -80
  483. package/src/renderers/Tabs.tsx +9 -1
  484. package/src/renderers/WebComponent.tsx +2 -2
  485. package/src/store/crud.ts +3 -8
  486. package/src/store/form.ts +5 -10
  487. package/src/store/service.ts +5 -4
  488. package/src/store/table.ts +103 -11
  489. package/src/types.ts +57 -0
  490. package/src/utils/api.ts +52 -23
  491. package/src/utils/dom.tsx +12 -0
  492. package/src/utils/handleAction.ts +41 -0
  493. package/src/utils/helper.ts +12 -4
  494. package/src/utils/icon.tsx +4 -0
  495. package/src/utils/tpl-builtin.ts +48 -17
  496. package/dump.rdb +0 -0
  497. package/lib/components/AssociatedCheckboxes.d.ts +0 -762
  498. package/lib/components/AssociatedCheckboxes.js +0 -90
  499. package/lib/components/AssociatedCheckboxes.js.map +0 -13
  500. package/lib/components/ChainedCheckboxes.js.map +0 -13
  501. package/lib/components/Checkboxes.js +0 -101
  502. package/lib/components/Checkboxes.js.map +0 -13
  503. package/lib/components/ListCheckboxes.d.ts +0 -739
  504. package/lib/components/ListCheckboxes.js +0 -48
  505. package/lib/components/ListCheckboxes.js.map +0 -13
  506. package/lib/components/ListRadios.d.ts +0 -763
  507. package/lib/components/ListRadios.js +0 -86
  508. package/lib/components/ListRadios.js.map +0 -13
  509. package/lib/components/TableCheckboxes.js.map +0 -13
  510. package/lib/components/TreeCheckboxes.js.map +0 -13
  511. package/lib/components/TreeRadios.d.ts +0 -838
  512. package/lib/components/TreeRadios.js +0 -116
  513. package/lib/components/TreeRadios.js.map +0 -13
  514. package/sdk.zip +0 -0
  515. package/src/components/ListRadios.tsx +0 -159
  516. package/src/components/TreeRadios.tsx +0 -202
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import Sortable from 'sortablejs';
2
+ import {findDOMNode} from 'react-dom';
3
3
  import {Renderer, RendererEnv, RendererProps} from '../factory';
4
4
  import getExprProperties from '../utils/filter-schema';
5
5
  import {filter, evalExpression} from '../utils/tpl';
@@ -11,12 +11,19 @@ import {
11
11
  isUnfolded,
12
12
  mapTree,
13
13
  someTree,
14
- spliceTree
14
+ spliceTree,
15
+ findTreeIndex
15
16
  } from '../utils/helper';
16
17
  import {ScopedContext, IScopedContext} from '../Scoped';
17
18
  import {themeable, ThemeProps} from '../theme';
18
19
  import {Icon} from '../components/icons';
19
- import {BaseSchema, SchemaApi, SchemaIcon, SchemaUrlPath, SchemaCollection} from '../Schema';
20
+ import {
21
+ BaseSchema,
22
+ SchemaApi,
23
+ SchemaIcon,
24
+ SchemaUrlPath,
25
+ SchemaCollection
26
+ } from '../Schema';
20
27
  import {generateIcon} from '../utils/icon';
21
28
  import {
22
29
  RemoteOptionsProps,
@@ -24,7 +31,6 @@ import {
24
31
  } from '../components/WithRemoteConfig';
25
32
  import {Payload} from '../types';
26
33
  import Spinner from '../components/Spinner';
27
- import cloneDeep from 'lodash/cloneDeep';
28
34
  import {isEffectiveApi} from '../utils/api';
29
35
  import {Badge, BadgeSchema} from '../components/Badge';
30
36
 
@@ -50,11 +56,6 @@ export type NavItemSchema = {
50
56
  deferApi?: SchemaApi;
51
57
 
52
58
  children?: Array<NavItemSchema>;
53
-
54
- /**
55
- * 角标
56
- */
57
- badge?: BadgeSchema
58
59
  } & Omit<BaseSchema, 'type'>;
59
60
 
60
61
  /**
@@ -95,22 +96,27 @@ export interface NavSchema extends BaseSchema {
95
96
  /**
96
97
  * 更多操作菜单列表
97
98
  */
98
- itemActions?: SchemaCollection;
99
+ itemActions?: SchemaCollection;
99
100
 
100
101
  /**
101
102
  * 可拖拽
102
103
  */
103
- draggable?: boolean;
104
+ draggable?: boolean;
104
105
 
105
- /**
106
- * 保存排序的 api
107
- */
106
+ /**
107
+ * 保存排序的 api
108
+ */
108
109
  saveOrderApi?: SchemaApi;
109
110
 
110
111
  /**
111
112
  * 角标
112
113
  */
113
- badge?: BadgeSchema;
114
+ itemBadge?: BadgeSchema;
115
+
116
+ /**
117
+ * 仅允许同层级拖拽
118
+ */
119
+ dragOnSameLevel?: boolean;
114
120
  }
115
121
 
116
122
  export interface Link {
@@ -127,28 +133,46 @@ export interface Link {
127
133
  loading?: boolean;
128
134
  loaded?: boolean;
129
135
  [propName: string]: any;
130
- badge?: BadgeSchema
136
+ itemBadge?: BadgeSchema;
131
137
  }
132
138
  export interface Links extends Array<Link> {}
133
139
 
134
140
  export interface NavigationState {
135
- links: Links;
141
+ links?: Links;
136
142
  error?: string;
143
+ dropIndicator?: {
144
+ top: number;
145
+ left: number;
146
+ width: number;
147
+ height?: number;
148
+ opacity?: number;
149
+ };
137
150
  }
138
151
 
139
152
  export interface NavigationProps
140
153
  extends ThemeProps,
141
154
  Omit<NavSchema, 'type' | 'className'> {
142
155
  onSelect?: (item: Link) => void | false;
143
- onToggle?: (item: Link) => void;
156
+ onToggle?: (item: Link, forceFold?: boolean) => void;
157
+ onDragUpdate?: (dropInfo: IDropInfo) => void;
144
158
  togglerClassName?: string;
145
159
  links?: Array<Link>;
146
160
  loading?: boolean;
147
161
  render: RendererProps['render'];
148
162
  env: RendererEnv;
163
+ data: Object;
149
164
  reload?: any;
150
165
  }
151
166
 
167
+ export interface IDropInfo {
168
+ dragLink: Link | null;
169
+ nodeId: string;
170
+ position: string;
171
+ rect: DOMRect;
172
+ height: number;
173
+ left: number;
174
+ }
175
+
152
176
  export class Navigation extends React.Component<
153
177
  NavigationProps,
154
178
  NavigationState
@@ -156,76 +180,174 @@ export class Navigation extends React.Component<
156
180
  static defaultProps = {
157
181
  indentSize: 24
158
182
  };
159
- sortable: Sortable[] = [];
160
- id: string;
161
- dragRef?: HTMLElement;
183
+
184
+ dragNode: {
185
+ node: HTMLElement;
186
+ link: Link | null;
187
+ } | null;
188
+ dropInfo: IDropInfo | null;
189
+ startPoint: {
190
+ y: number;
191
+ x: number;
192
+ } = {
193
+ y: 0,
194
+ x: 0
195
+ };
196
+ state: NavigationState = {};
162
197
 
163
198
  @autobind
164
199
  handleClick(link: Link) {
165
- this.props.onSelect?.(link);
200
+ const {env, onSelect} = this.props;
201
+ // 和 action 里命名一致方便分析
202
+ if (link && link.to) {
203
+ env?.tracker({
204
+ eventType: 'link',
205
+ eventData: {
206
+ label: link.label,
207
+ link: link.to
208
+ }
209
+ });
210
+ }
211
+
212
+ onSelect?.(link);
166
213
  }
167
214
 
168
215
  @autobind
169
- toggleLink(target: Link) {
170
- this.props.onToggle?.(target);
216
+ toggleLink(target: Link, forceFold?: boolean) {
217
+ this.props.onToggle?.(target, forceFold);
171
218
  }
172
219
 
173
220
  @autobind
174
- dragRefFn(ref: any) {
175
- const {draggable} = this.props;
176
- if (ref && draggable) {
177
- this.id = guid();
178
- this.initDragging(ref);
221
+ getDropInfo(e: DragEvent, id: string, depth: number): IDropInfo {
222
+ const {dragOnSameLevel, indentSize} = this.props;
223
+ let rect = (e.target as HTMLElement).getBoundingClientRect();
224
+ const dragLink = this.dragNode?.link as Link;
225
+ const {top, height, width} = rect;
226
+ let {clientY, clientX} = e;
227
+ const left = depth * (parseInt(indentSize as any, 10) ?? 24);
228
+ const deltaX = left + width * 0.2;
229
+ let position;
230
+ if (clientY >= top + height / 2) {
231
+ position = 'bottom';
232
+ } else {
233
+ position = 'top';
179
234
  }
235
+ if (
236
+ !dragOnSameLevel &&
237
+ position === 'bottom' &&
238
+ clientX >= this.startPoint.x + deltaX
239
+ ) {
240
+ position = 'self';
241
+ }
242
+ return {
243
+ nodeId: id,
244
+ dragLink,
245
+ position,
246
+ rect,
247
+ height,
248
+ left
249
+ };
180
250
  }
181
-
182
- initDragging(ref: HTMLElement) {
183
- const ns = this.props.classPrefix;
184
- this.sortable.push(new Sortable(
185
- ref,
186
- {
187
- group: `nav-${this.id}`,
188
- animation: 150,
189
- handle: `.${ns}Nav-itemDrager`,
190
- ghostClass: `${ns}Nav-item--dragging`,
191
- onEnd: async (e: any) => {
192
- // 没有移动
193
- if (e.newIndex === e.oldIndex) {
194
- return;
195
- }
196
- const id = e.item.getAttribute('data-id');
197
- const parentNode = e.to
198
- if (
199
- e.newIndex < e.oldIndex &&
200
- e.oldIndex < parentNode.childNodes.length - 1
201
- ) {
202
- parentNode.insertBefore(e.item, parentNode.childNodes[e.oldIndex + 1]);
203
- } else if (e.oldIndex < parentNode.childNodes.length - 1) {
204
- parentNode.insertBefore(e.item, parentNode.childNodes[e.oldIndex]);
205
- } else {
206
- parentNode.appendChild(e.item);
207
- }
208
- const links = cloneDeep(this.props.links) as Link[];
209
- let parent = links;
210
- someTree(links, (item: Link, key, level, paths: Link[]) => {
211
- if (item.id === id) {
212
- const len = paths.length - 1;
213
- parent = (~len ? paths[len].children : links) as Link[];
214
- return true;
215
- }
216
- return false;
217
- });
218
- parent.splice(e.newIndex, 0, parent.splice(e.oldIndex, 1)[0]);
219
- const {saveOrderApi, env} = this.props;
220
- if (saveOrderApi && isEffectiveApi(saveOrderApi)) {
221
- await env.fetcher(saveOrderApi as SchemaApi, {data: links}, {method: 'post'});
222
- this.props.reload();
223
- } else {
224
- console.warn('请配置saveOrderApi');
225
- }
251
+ @autobind
252
+ updateDropIndicator(e: DragEvent) {
253
+ const {dragOnSameLevel} = this.props;
254
+ const target = e.target as HTMLElement; // a标签
255
+ const targetId = target.getAttribute('data-id') as string;
256
+ const targetDepth = Number(target.getAttribute('data-depth'));
257
+ if (
258
+ dragOnSameLevel &&
259
+ this.dragNode?.node.parentElement !== target.parentElement?.parentElement
260
+ ) {
261
+ this.setState({dropIndicator: undefined});
262
+ this.dropInfo = null;
263
+ return;
264
+ }
265
+ this.dropInfo = this.getDropInfo(e, targetId, targetDepth);
266
+ let {position, rect, dragLink, height, left} = this.dropInfo;
267
+ if (targetId === dragLink?.__id) {
268
+ this.setState({dropIndicator: undefined});
269
+ this.dropInfo = null;
270
+ return;
271
+ }
272
+ const ul = (findDOMNode(this) as HTMLElement).firstChild as HTMLElement;
273
+ if (position === 'self') {
274
+ this.setState({
275
+ dropIndicator: {
276
+ top: rect.top - ul.getBoundingClientRect().top,
277
+ left,
278
+ width: ul.getBoundingClientRect().width - left,
279
+ height,
280
+ opacity: 0.2
226
281
  }
227
- }
228
- ));
282
+ });
283
+ } else {
284
+ this.setState({
285
+ dropIndicator: {
286
+ top:
287
+ (position === 'bottom' ? rect.top + rect.height : rect.top) -
288
+ ul.getBoundingClientRect().top,
289
+ left,
290
+ width: ul.getBoundingClientRect().width - left
291
+ }
292
+ });
293
+ }
294
+ }
295
+
296
+ @autobind
297
+ handleDragStart(link: Link) {
298
+ return (e: React.DragEvent) => {
299
+ e.stopPropagation();
300
+ const currentTarget = e.currentTarget as HTMLElement;
301
+ e.dataTransfer.effectAllowed = 'copyMove';
302
+ e.dataTransfer.setDragImage(currentTarget, 0, 0);
303
+ this.dragNode = {
304
+ node: currentTarget,
305
+ link: link
306
+ };
307
+ this.dropInfo = null;
308
+ this.startPoint = {
309
+ x: e.clientX,
310
+ y: e.clientY
311
+ };
312
+ currentTarget.addEventListener('dragend', this.handleDragEnd);
313
+ document.body.addEventListener('dragover', this.handleDragOver);
314
+ };
315
+ }
316
+
317
+ @autobind
318
+ handleDragOver(e: DragEvent) {
319
+ e.preventDefault();
320
+ e.stopPropagation();
321
+ if (!this.dragNode) {
322
+ return;
323
+ }
324
+ const target = e.target as HTMLElement;
325
+ const id = target.getAttribute('data-id');
326
+ if (!id) {
327
+ return;
328
+ }
329
+ this.updateDropIndicator(e);
330
+ }
331
+
332
+ @autobind
333
+ handleDragEnd(e: DragEvent) {
334
+ e.preventDefault();
335
+ e.stopPropagation();
336
+ this.setState({
337
+ dropIndicator: undefined
338
+ });
339
+ const currentTarget = e.currentTarget as HTMLElement;
340
+ const id = currentTarget.getAttribute('data-id');
341
+ let nodeId = this.dropInfo?.nodeId;
342
+ if (!this.dropInfo || !nodeId || id === nodeId) {
343
+ return;
344
+ }
345
+ currentTarget.removeEventListener('dragend', this.handleDragEnd);
346
+ document.body.removeEventListener('dragover', this.handleDragOver);
347
+
348
+ this.props.onDragUpdate?.(this.dropInfo);
349
+ this.dragNode = null;
350
+ this.dropInfo = null;
229
351
  }
230
352
 
231
353
  renderItem(link: Link, index: number, depth = 1) {
@@ -242,39 +364,48 @@ export class Navigation extends React.Component<
242
364
  itemActions,
243
365
  draggable,
244
366
  links,
245
- badge: defaultBadge
367
+ itemBadge,
368
+ data: defaultData
246
369
  } = this.props;
247
370
  const hasSub =
248
371
  (link.defer && !link.loaded) || (link.children && link.children.length);
249
- const id = guid();
250
- link.id = id;
251
- const badge = defaultBadge ? Object.assign(defaultBadge, link.badge) : link.badge;
252
372
  return (
253
373
  <li
254
- key={index}
374
+ key={link.__id}
375
+ data-id={link.__id}
255
376
  className={cx('Nav-item', link.className, {
256
377
  'is-disabled': disabled || link.disabled || link.loading,
257
378
  'is-active': isActive,
258
379
  'is-unfolded': link.unfolded,
259
380
  'has-sub': hasSub
260
381
  })}
261
- data-id={id}
382
+ onDragStart={this.handleDragStart(link)}
262
383
  >
263
- <Badge classnames={cx} badge={badge} data={link}>
384
+ <Badge
385
+ classnames={cx}
386
+ badge={itemBadge}
387
+ data={createObject(defaultData, link)}
388
+ >
264
389
  <a
390
+ data-id={link.__id}
391
+ data-depth={depth}
265
392
  onClick={this.handleClick.bind(this, link)}
266
- style={{paddingLeft: depth * (parseInt(indentSize as any, 10) ?? 24)}}
393
+ style={{
394
+ paddingLeft: depth * (parseInt(indentSize as any, 10) ?? 24)
395
+ }}
267
396
  >
268
- {!disabled && draggable && links && links.length > 1 ? (
269
- <div className={cx('Nav-itemDrager')} >
270
- <a
271
- key="drag"
272
- data-position="bottom"
397
+ {!disabled && draggable ? (
398
+ <div
399
+ className={cx('Nav-itemDrager')}
400
+ draggable
401
+ onMouseDown={e => {
402
+ this.toggleLink(link, true);
403
+ e.stopPropagation();
404
+ }}
273
405
  >
274
406
  <Icon icon="drag-bar" className="icon" />
275
- </a>
276
- </div>
277
- ) : null}
407
+ </div>
408
+ ) : null}
278
409
  {link.loading ? (
279
410
  <Spinner
280
411
  size="sm"
@@ -291,23 +422,23 @@ export class Navigation extends React.Component<
291
422
  </span>
292
423
  ) : null}
293
424
  {generateIcon(cx, link.icon, 'Nav-itemIcon')}
294
- {
295
- link.label && (typeof link.label === 'string'
296
- ? link.label
297
- : render('inline', link.label as SchemaCollection))
298
- }
425
+ {link.label &&
426
+ (typeof link.label === 'string'
427
+ ? link.label
428
+ : render('inline', link.label as SchemaCollection))}
299
429
  </a>
300
430
  {
301
431
  // 更多操作
302
- itemActions
303
- ? <div className={cx('Nav-item-atcions')}>
304
- {
305
- render('inline', itemActions, {data: link})
306
- }
307
- </div> : null
432
+ itemActions ? (
433
+ <div className={cx('Nav-item-atcions')}>
434
+ {render('inline', itemActions, {
435
+ data: createObject(defaultData, link)
436
+ })}
437
+ </div>
438
+ ) : null
308
439
  }
309
440
  {Array.isArray(link.children) && link.children.length ? (
310
- <ul className={cx('Nav-subItems')} ref={this.dragRefFn}>
441
+ <ul className={cx('Nav-subItems')}>
311
442
  {link.children.map((link, index) =>
312
443
  this.renderItem(link, index, depth + 1)
313
444
  )}
@@ -320,18 +451,26 @@ export class Navigation extends React.Component<
320
451
 
321
452
  render(): JSX.Element {
322
453
  const {className, stacked, classnames: cx, links, loading} = this.props;
323
-
454
+ const {dropIndicator} = this.state;
324
455
  return (
325
- <ul
326
- className={cx('Nav', className, stacked ? 'Nav--stacked' : 'Nav--tabs')}
327
- ref={this.dragRefFn}
328
- >
329
- {Array.isArray(links)
330
- ? links.map((item, index) => this.renderItem(item, index))
331
- : null}
332
-
333
- <Spinner show={!!loading} overlay icon="reload" />
334
- </ul>
456
+ <div className={cx('Nav')}>
457
+ <ul
458
+ className={cx(
459
+ 'Nav-list',
460
+ className,
461
+ stacked ? 'Nav-list--stacked' : 'Nav-list--tabs'
462
+ )}
463
+ >
464
+ {Array.isArray(links)
465
+ ? links.map((item, index) => this.renderItem(item, index))
466
+ : null}
467
+
468
+ <Spinner show={!!loading} overlay icon="reload" />
469
+ </ul>
470
+ {dropIndicator ? (
471
+ <div className={cx('Nav-dropIndicator')} style={dropIndicator} />
472
+ ) : null}
473
+ </div>
335
474
  );
336
475
  }
337
476
  }
@@ -345,7 +484,7 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
345
484
  : config.links || config.options || config.items || config.rows;
346
485
 
347
486
  if (!Array.isArray(links)) {
348
- throw new Error('payload.data.options is not array.');
487
+ throw new Error('payload.data.options is not array.');
349
488
  }
350
489
 
351
490
  return links;
@@ -380,7 +519,8 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
380
519
  link.hasOwnProperty('to') &&
381
520
  env &&
382
521
  env.isCurrentUrl(filter(link.to as string, data))
383
- ))
522
+ )),
523
+ __id: link.__id || guid()
384
524
  };
385
525
 
386
526
  item.unfolded =
@@ -444,6 +584,7 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
444
584
  super(props);
445
585
  this.toggleLink = this.toggleLink.bind(this);
446
586
  this.handleSelect = this.handleSelect.bind(this);
587
+ this.dragUpdate = this.dragUpdate.bind(this);
447
588
  }
448
589
 
449
590
  componentDidMount() {
@@ -460,7 +601,7 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
460
601
  }
461
602
  }
462
603
 
463
- toggleLink(target: Link) {
604
+ toggleLink(target: Link, forceFold?: boolean) {
464
605
  const {config, updateConfig, deferLoad} = this.props;
465
606
 
466
607
  if (target.defer && !target.loaded) {
@@ -471,7 +612,7 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
471
612
  target === link
472
613
  ? {
473
614
  ...link,
474
- unfolded: !link.unfolded
615
+ unfolded: forceFold ? false : !link.unfolded
475
616
  }
476
617
  : link
477
618
  ),
@@ -480,6 +621,69 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
480
621
  }
481
622
  }
482
623
 
624
+ async dragUpdate(dropInfo: IDropInfo) {
625
+ let links = this.props.config;
626
+ const {nodeId, dragLink, position} = dropInfo;
627
+ if (dragLink) {
628
+ // 删除原节点
629
+ const sourceIdx = findTreeIndex(
630
+ links,
631
+ link => link.__id === dragLink.__id
632
+ ) as number[];
633
+ links = spliceTree(links, sourceIdx, 1);
634
+
635
+ if (position === 'self') {
636
+ // 插入到对应节点的children中
637
+ mapTree(links, link => {
638
+ if (link.__id === nodeId) {
639
+ if (!link.children) {
640
+ link.children = [];
641
+ }
642
+ link.children.push(dragLink);
643
+ }
644
+ return link;
645
+ });
646
+ } else {
647
+ // 找到需要插入的节点
648
+ const idx = findTreeIndex(
649
+ links,
650
+ link => link.__id === nodeId
651
+ ) as number[];
652
+ // 插入节点之后
653
+ if (position === 'bottom') {
654
+ idx.push((idx.pop() as number) + 1);
655
+ }
656
+ links = spliceTree(links, idx, 0, dragLink);
657
+ }
658
+ }
659
+ this.props.updateConfig(links, 'update');
660
+ await this.saveOrder(
661
+ mapTree(links, (link: Link) => {
662
+ // 清除内部加的字段
663
+ for (let key in link) {
664
+ if (/^__.*$/.test(key)) {
665
+ delete link[key];
666
+ }
667
+ }
668
+ return link;
669
+ })
670
+ );
671
+ }
672
+
673
+ async saveOrder(links: Links) {
674
+ const {saveOrderApi, env, data, reload} = this.props;
675
+ if (saveOrderApi && isEffectiveApi(saveOrderApi)) {
676
+ await env.fetcher(
677
+ saveOrderApi as SchemaApi,
678
+ createObject(data, {data: links}),
679
+ {method: 'post'}
680
+ );
681
+ reload();
682
+ } else {
683
+ env.alert('NAV saveOrderApi is required!');
684
+ }
685
+ }
686
+
483
687
  handleSelect(link: Link) {
484
688
  const {onSelect, env, data} = this.props;
485
689
  if (onSelect && onSelect(link) === false) {
@@ -500,15 +704,15 @@ const ConditionBuilderWithRemoteOptions = withRemoteConfig({
500
704
 
501
705
  render() {
502
706
  const {loading, config, deferLoad, updateConfig, ...rest} = this.props;
503
-
504
707
  return (
505
708
  <ThemedNavigation
506
709
  {...rest}
507
710
  loading={loading}
508
- links={config || rest.links || []}
711
+ links={config || []}
509
712
  disabled={loading}
510
713
  onSelect={this.handleSelect}
511
714
  onToggle={this.toggleLink}
715
+ onDragUpdate={this.dragUpdate}
512
716
  />
513
717
  );
514
718
  }
@@ -566,7 +770,6 @@ export class NavigationRenderer extends React.Component<RendererProps> {
566
770
 
567
771
  render() {
568
772
  const {...rest} = this.props;
569
-
570
773
  return (
571
774
  <ConditionBuilderWithRemoteOptions
572
775
  {...rest}