amis 1.4.0 → 1.4.2-beta.12

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 (520) 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 +4 -3
  14. package/lib/components/Badge.js +42 -7
  15. package/lib/components/Badge.js.map +2 -2
  16. package/lib/components/Button.d.ts +24 -22
  17. package/lib/components/Button.js +13 -7
  18. package/lib/components/Button.js.map +2 -2
  19. package/lib/components/{ChainedCheckboxes.d.ts → ChainedSelection.d.ts} +267 -98
  20. package/lib/components/{ChainedCheckboxes.js → ChainedSelection.js} +30 -24
  21. package/lib/components/ChainedSelection.js.map +13 -0
  22. package/lib/components/Collapse.js +1 -1
  23. package/lib/components/Collapse.js.map +2 -2
  24. package/lib/components/ColorPicker.d.ts +84 -84
  25. package/lib/components/DatePicker.d.ts +84 -84
  26. package/lib/components/DatePicker.js +1 -1
  27. package/lib/components/DatePicker.js.map +2 -2
  28. package/lib/components/DateRangePicker.d.ts +84 -84
  29. package/lib/components/DateRangePicker.js +1 -1
  30. package/lib/components/DateRangePicker.js.map +2 -2
  31. package/lib/components/Editor.d.ts +84 -84
  32. package/lib/components/GroupedSelection.d.ts +907 -0
  33. package/lib/components/GroupedSelection.js +48 -0
  34. package/lib/components/GroupedSelection.js.map +13 -0
  35. package/lib/components/InputBox.js +1 -1
  36. package/lib/components/InputBox.js.map +2 -2
  37. package/lib/components/Link.d.ts +84 -0
  38. package/lib/components/Link.js +43 -0
  39. package/lib/components/Link.js.map +13 -0
  40. package/lib/components/ListGroup.d.ts +21 -21
  41. package/lib/components/ModalManager.js +1 -1
  42. package/lib/components/ModalManager.js.map +2 -2
  43. package/lib/components/MonthRangePicker.d.ts +84 -84
  44. package/lib/components/MonthRangePicker.js +1 -1
  45. package/lib/components/MonthRangePicker.js.map +2 -2
  46. package/lib/components/NumberInput.d.ts +20 -20
  47. package/lib/components/PickerColumn.d.ts +514 -0
  48. package/lib/components/PickerColumn.js +279 -0
  49. package/lib/components/PickerColumn.js.map +13 -0
  50. package/lib/components/PickerContainer.d.ts +513 -0
  51. package/lib/components/PickerContainer.js +96 -0
  52. package/lib/components/PickerContainer.js.map +13 -0
  53. package/lib/components/Radios.d.ts +22 -21
  54. package/lib/components/Radios.js +1 -0
  55. package/lib/components/Radios.js.map +2 -2
  56. package/lib/components/Rating.d.ts +21 -21
  57. package/lib/components/ResultBox.d.ts +84 -84
  58. package/lib/components/RichText.d.ts +6 -1
  59. package/lib/components/RichText.js +207 -8
  60. package/lib/components/RichText.js.map +2 -2
  61. package/lib/components/SearchBox.d.ts +84 -84
  62. package/lib/components/SearchBox.js +4 -4
  63. package/lib/components/SearchBox.js.map +2 -2
  64. package/lib/components/Select.d.ts +245 -237
  65. package/lib/components/Select.js +28 -4
  66. package/lib/components/Select.js.map +2 -2
  67. package/lib/components/{Checkboxes.d.ts → Selection.d.ts} +273 -98
  68. package/lib/components/Selection.js +134 -0
  69. package/lib/components/Selection.js.map +13 -0
  70. package/lib/components/SparkLine.d.ts +85 -84
  71. package/lib/components/SparkLine.js +2 -2
  72. package/lib/components/SparkLine.js.map +2 -2
  73. package/lib/components/{TableCheckboxes.d.ts → TableSelection.d.ts} +266 -96
  74. package/lib/components/{TableCheckboxes.js → TableSelection.js} +30 -30
  75. package/lib/components/TableSelection.js.map +13 -0
  76. package/lib/components/Tabs.d.ts +20 -20
  77. package/lib/components/TabsTransfer.d.ts +84 -84
  78. package/lib/components/TabsTransfer.js +9 -9
  79. package/lib/components/TabsTransfer.js.map +2 -2
  80. package/lib/components/TabsTransferPicker.d.ts +489 -0
  81. package/lib/components/TabsTransferPicker.js +60 -0
  82. package/lib/components/TabsTransferPicker.js.map +13 -0
  83. package/lib/components/Toast.js +2 -2
  84. package/lib/components/Toast.js.map +2 -2
  85. package/lib/components/Transfer.d.ts +908 -274
  86. package/lib/components/Transfer.js +31 -24
  87. package/lib/components/Transfer.js.map +2 -2
  88. package/lib/components/TransferDropDown.d.ts +487 -0
  89. package/lib/components/TransferDropDown.js +59 -0
  90. package/lib/components/TransferDropDown.js.map +13 -0
  91. package/lib/components/TransferPicker.d.ts +489 -0
  92. package/lib/components/TransferPicker.js +60 -0
  93. package/lib/components/TransferPicker.js.map +13 -0
  94. package/lib/components/Tree.d.ts +84 -84
  95. package/lib/components/Tree.js +5 -3
  96. package/lib/components/Tree.js.map +2 -2
  97. package/lib/components/{TreeCheckboxes.d.ts → TreeSelection.d.ts} +269 -99
  98. package/lib/components/{TreeCheckboxes.js → TreeSelection.js} +36 -32
  99. package/lib/components/TreeSelection.js.map +13 -0
  100. package/lib/components/WithRemoteConfig.js +1 -1
  101. package/lib/components/WithRemoteConfig.js.map +2 -2
  102. package/lib/components/calendar/DaysView.js +2 -2
  103. package/lib/components/calendar/DaysView.js.map +2 -2
  104. package/lib/components/condition-builder/Field.js +5 -2
  105. package/lib/components/condition-builder/Field.js.map +2 -2
  106. package/lib/components/condition-builder/Func.js +2 -2
  107. package/lib/components/condition-builder/Func.js.map +2 -2
  108. package/lib/components/condition-builder/InputSwitch.js +2 -2
  109. package/lib/components/condition-builder/InputSwitch.js.map +2 -2
  110. package/lib/components/condition-builder/Item.js +3 -3
  111. package/lib/components/condition-builder/Item.js.map +2 -2
  112. package/lib/components/icons.js +14 -0
  113. package/lib/components/icons.js.map +2 -2
  114. package/lib/components/index.d.ts +8 -8
  115. package/lib/components/index.js +16 -16
  116. package/lib/components/index.js.map +2 -2
  117. package/lib/envOverwrite.js.map +2 -2
  118. package/lib/factory.d.ts +4 -0
  119. package/lib/factory.js +4 -2
  120. package/lib/factory.js.map +2 -2
  121. package/lib/helper.css.map +1 -1
  122. package/lib/hooks/index.d.ts +5 -0
  123. package/lib/hooks/index.js +14 -0
  124. package/lib/hooks/index.js.map +13 -0
  125. package/lib/hooks/use-set-state.d.ts +2 -0
  126. package/lib/hooks/use-set-state.js +15 -0
  127. package/lib/hooks/use-set-state.js.map +13 -0
  128. package/lib/hooks/use-touch.d.ts +16 -0
  129. package/lib/hooks/use-touch.js +73 -0
  130. package/lib/hooks/use-touch.js.map +13 -0
  131. package/lib/hooks/use-update-effect.d.ts +3 -0
  132. package/lib/hooks/use-update-effect.js +17 -0
  133. package/lib/hooks/use-update-effect.js.map +13 -0
  134. package/lib/icons/clock.js +10 -0
  135. package/lib/icons/loading-outline.js +7 -0
  136. package/lib/icons/status-close.js +11 -0
  137. package/lib/icons/status-fail.js +11 -0
  138. package/lib/icons/status-info.js +10 -0
  139. package/lib/icons/status-success.js +11 -0
  140. package/lib/icons/status-warning.js +10 -0
  141. package/lib/index.d.ts +3 -0
  142. package/lib/index.js +4 -1
  143. package/lib/index.js.map +2 -2
  144. package/lib/locale/de-DE.js +4 -0
  145. package/lib/locale/de-DE.js.map +2 -2
  146. package/lib/locale/en-US.js +4 -0
  147. package/lib/locale/en-US.js.map +2 -2
  148. package/lib/locale/zh-CN.js +7 -3
  149. package/lib/locale/zh-CN.js.map +2 -2
  150. package/lib/renderers/Action.d.ts +17 -1
  151. package/lib/renderers/Action.js +21 -8
  152. package/lib/renderers/Action.js.map +2 -2
  153. package/lib/renderers/AnchorNav.d.ts +1 -0
  154. package/lib/renderers/AnchorNav.js +2 -2
  155. package/lib/renderers/AnchorNav.js.map +2 -2
  156. package/lib/renderers/Avatar.js +3 -3
  157. package/lib/renderers/Avatar.js.map +2 -2
  158. package/lib/renderers/Breadcrumb.js +1 -1
  159. package/lib/renderers/Breadcrumb.js.map +2 -2
  160. package/lib/renderers/CRUD.d.ts +9 -0
  161. package/lib/renderers/CRUD.js +43 -8
  162. package/lib/renderers/CRUD.js.map +2 -2
  163. package/lib/renderers/Card.d.ts +4 -0
  164. package/lib/renderers/Card.js +29 -23
  165. package/lib/renderers/Card.js.map +2 -2
  166. package/lib/renderers/Chart.js +1 -1
  167. package/lib/renderers/Chart.js.map +2 -2
  168. package/lib/renderers/Collapse.js +3 -2
  169. package/lib/renderers/Collapse.js.map +2 -2
  170. package/lib/renderers/Dialog.js +0 -3
  171. package/lib/renderers/Dialog.js.map +2 -2
  172. package/lib/renderers/Drawer.js +0 -3
  173. package/lib/renderers/Drawer.js.map +2 -2
  174. package/lib/renderers/DropDownButton.d.ts +9 -1
  175. package/lib/renderers/DropDownButton.js +8 -4
  176. package/lib/renderers/DropDownButton.js.map +2 -2
  177. package/lib/renderers/Form/Checkbox.d.ts +5 -0
  178. package/lib/renderers/Form/Checkbox.js +4 -0
  179. package/lib/renderers/Form/Checkbox.js.map +2 -2
  180. package/lib/renderers/Form/Combo.js +2 -2
  181. package/lib/renderers/Form/Combo.js.map +2 -2
  182. package/lib/renderers/Form/DiffEditor.d.ts +4 -3
  183. package/lib/renderers/Form/Editor.d.ts +3 -2
  184. package/lib/renderers/Form/InputCity.d.ts +84 -84
  185. package/lib/renderers/Form/InputCity.js +7 -6
  186. package/lib/renderers/Form/InputCity.js.map +2 -2
  187. package/lib/renderers/Form/InputColor.d.ts +84 -84
  188. package/lib/renderers/Form/InputFile.js +12 -6
  189. package/lib/renderers/Form/InputFile.js.map +2 -2
  190. package/lib/renderers/Form/InputImage.js +16 -7
  191. package/lib/renderers/Form/InputImage.js.map +2 -2
  192. package/lib/renderers/Form/Item.d.ts +1 -1
  193. package/lib/renderers/Form/Item.js.map +1 -1
  194. package/lib/renderers/Form/Options.js +19 -6
  195. package/lib/renderers/Form/Options.js.map +2 -2
  196. package/lib/renderers/Form/Picker.js +2 -2
  197. package/lib/renderers/Form/Picker.js.map +2 -2
  198. package/lib/renderers/Form/Select.d.ts +41 -4
  199. package/lib/renderers/Form/Select.js +37 -3
  200. package/lib/renderers/Form/Select.js.map +2 -2
  201. package/lib/renderers/Form/TabsTransferPicker.d.ts +48 -0
  202. package/lib/renderers/Form/TabsTransferPicker.js +29 -0
  203. package/lib/renderers/Form/TabsTransferPicker.js.map +13 -0
  204. package/lib/renderers/Form/Transfer.js +18 -3
  205. package/lib/renderers/Form/Transfer.js.map +2 -2
  206. package/lib/renderers/Form/TransferPicker.d.ts +48 -0
  207. package/lib/renderers/Form/TransferPicker.js +43 -0
  208. package/lib/renderers/Form/TransferPicker.js.map +13 -0
  209. package/lib/renderers/Form/TreeSelect.js +2 -2
  210. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  211. package/lib/renderers/Form/index.d.ts +5 -0
  212. package/lib/renderers/Form/index.js +5 -3
  213. package/lib/renderers/Form/index.js.map +2 -2
  214. package/lib/renderers/Form/wrapControl.js +15 -3
  215. package/lib/renderers/Form/wrapControl.js.map +2 -2
  216. package/lib/renderers/IFrame.js +3 -5
  217. package/lib/renderers/IFrame.js.map +2 -2
  218. package/lib/renderers/Image.d.ts +1 -0
  219. package/lib/renderers/Image.js +15 -1
  220. package/lib/renderers/Image.js.map +2 -2
  221. package/lib/renderers/Json.d.ts +4 -0
  222. package/lib/renderers/Json.js +4 -13
  223. package/lib/renderers/Json.js.map +2 -2
  224. package/lib/renderers/Link.d.ts +18 -3
  225. package/lib/renderers/Link.js +27 -15
  226. package/lib/renderers/Link.js.map +2 -2
  227. package/lib/renderers/List.js +1 -1
  228. package/lib/renderers/List.js.map +2 -2
  229. package/lib/renderers/Log.d.ts +2 -2
  230. package/lib/renderers/Log.js +7 -1
  231. package/lib/renderers/Log.js.map +2 -2
  232. package/lib/renderers/Mapping.d.ts +9 -2
  233. package/lib/renderers/Mapping.js +18 -6
  234. package/lib/renderers/Mapping.js.map +2 -2
  235. package/lib/renderers/Nav.d.ts +81 -25
  236. package/lib/renderers/Nav.js +292 -31
  237. package/lib/renderers/Nav.js.map +2 -2
  238. package/lib/renderers/Page.js +1 -1
  239. package/lib/renderers/Page.js.map +2 -2
  240. package/lib/renderers/Portlet.d.ts +125 -0
  241. package/lib/renderers/Portlet.js +156 -0
  242. package/lib/renderers/Portlet.js.map +13 -0
  243. package/lib/renderers/Property.js +2 -1
  244. package/lib/renderers/Property.js.map +2 -2
  245. package/lib/renderers/SearchBox.d.ts +6 -1
  246. package/lib/renderers/SearchBox.js +19 -5
  247. package/lib/renderers/SearchBox.js.map +2 -2
  248. package/lib/renderers/SparkLine.d.ts +4 -0
  249. package/lib/renderers/SparkLine.js.map +2 -2
  250. package/lib/renderers/Table/ColumnToggler.d.ts +113 -0
  251. package/lib/renderers/Table/ColumnToggler.js +216 -0
  252. package/lib/renderers/Table/ColumnToggler.js.map +13 -0
  253. package/lib/renderers/Table/ItemActionsWrapper.d.ts +11 -0
  254. package/lib/renderers/Table/ItemActionsWrapper.js +31 -0
  255. package/lib/renderers/Table/ItemActionsWrapper.js.map +13 -0
  256. package/lib/renderers/Table/TableBody.d.ts +4 -0
  257. package/lib/renderers/Table/TableCell.js +3 -1
  258. package/lib/renderers/Table/TableCell.js.map +2 -2
  259. package/lib/renderers/Table/TableContent.d.ts +4 -1
  260. package/lib/renderers/Table/TableContent.js +21 -1
  261. package/lib/renderers/Table/TableContent.js.map +2 -2
  262. package/lib/renderers/Table/index.d.ts +19 -2
  263. package/lib/renderers/Table/index.js +172 -57
  264. package/lib/renderers/Table/index.js.map +2 -2
  265. package/lib/renderers/Tabs.js +9 -1
  266. package/lib/renderers/Tabs.js.map +2 -2
  267. package/lib/renderers/WebComponent.js +1 -1
  268. package/lib/renderers/WebComponent.js.map +2 -2
  269. package/lib/store/combo.d.ts +2 -16
  270. package/lib/store/crud.js +3 -7
  271. package/lib/store/crud.js.map +2 -2
  272. package/lib/store/form.d.ts +1 -1
  273. package/lib/store/form.js +5 -6
  274. package/lib/store/form.js.map +2 -2
  275. package/lib/store/service.js +5 -4
  276. package/lib/store/service.js.map +2 -2
  277. package/lib/store/table.d.ts +260 -3
  278. package/lib/store/table.js +64 -6
  279. package/lib/store/table.js.map +2 -2
  280. package/lib/themes/ang-ie11.css +1175 -255
  281. package/lib/themes/ang.css +1175 -255
  282. package/lib/themes/ang.css.map +1 -1
  283. package/lib/themes/antd-ie11.css +1175 -255
  284. package/lib/themes/antd.css +1175 -255
  285. package/lib/themes/antd.css.map +1 -1
  286. package/lib/themes/cxd-ie11.css +1761 -514
  287. package/lib/themes/cxd.css +1761 -514
  288. package/lib/themes/cxd.css.map +1 -1
  289. package/lib/themes/dark-ie11.css +1175 -255
  290. package/lib/themes/dark.css +1175 -255
  291. package/lib/themes/dark.css.map +1 -1
  292. package/lib/themes/default.css +1761 -514
  293. package/lib/themes/default.css.map +1 -1
  294. package/lib/types.d.ts +37 -0
  295. package/lib/types.js +0 -5
  296. package/lib/types.js.map +2 -2
  297. package/lib/utils/api.d.ts +3 -2
  298. package/lib/utils/api.js +31 -15
  299. package/lib/utils/api.js.map +2 -2
  300. package/lib/utils/dom.d.ts +4 -0
  301. package/lib/utils/dom.js +11 -1
  302. package/lib/utils/dom.js.map +2 -2
  303. package/lib/utils/handleAction.d.ts +7 -0
  304. package/lib/utils/handleAction.js +30 -0
  305. package/lib/utils/handleAction.js.map +13 -0
  306. package/lib/utils/helper.d.ts +3 -1
  307. package/lib/utils/helper.js +14 -5
  308. package/lib/utils/helper.js.map +2 -2
  309. package/lib/utils/icon.js +3 -0
  310. package/lib/utils/icon.js.map +2 -2
  311. package/lib/utils/tpl-builtin.d.ts +1 -1
  312. package/lib/utils/tpl-builtin.js +25 -15
  313. package/lib/utils/tpl-builtin.js.map +2 -2
  314. package/package.json +1 -2
  315. package/schema.json +3534 -1028
  316. package/scss/_mixins.scss +27 -0
  317. package/scss/_properties.scss +84 -13
  318. package/scss/_utilities.scss +4 -0
  319. package/scss/base/_normalize.scss +2 -0
  320. package/scss/components/_anchor-nav.scss +88 -29
  321. package/scss/components/_badge.scss +52 -1
  322. package/scss/components/_button.scss +34 -3
  323. package/scss/components/_card.scss +8 -14
  324. package/scss/components/_collapse.scss +41 -8
  325. package/scss/components/_column-toggler.scss +234 -0
  326. package/scss/components/_dropdown.scss +2 -1
  327. package/scss/components/_image-gallery.scss +1 -1
  328. package/scss/components/_images.scss +2 -1
  329. package/scss/components/_link.scss +6 -0
  330. package/scss/components/_mapping.scss +6 -0
  331. package/scss/components/_nav.scss +236 -154
  332. package/scss/components/_page.scss +5 -4
  333. package/scss/components/_picker-columns.scss +123 -0
  334. package/scss/components/_popover.scss +17 -0
  335. package/scss/components/_portlet.scss +51 -0
  336. package/scss/components/_progress.scss +2 -0
  337. package/scss/components/_status.scss +1 -1
  338. package/scss/components/_steps.scss +1 -1
  339. package/scss/components/_table.scss +51 -1
  340. package/scss/components/form/_checks.scss +0 -351
  341. package/scss/components/form/_color.scss +1 -0
  342. package/scss/components/form/_date-range.scss +2 -0
  343. package/scss/components/form/_date.scss +2 -0
  344. package/scss/components/form/_fieldset.scss +6 -3
  345. package/scss/components/form/_file.scss +5 -4
  346. package/scss/components/form/_form.scss +48 -0
  347. package/scss/components/form/_image.scss +7 -2
  348. package/scss/components/form/_list.scss +1 -0
  349. package/scss/components/form/_location.scss +1 -1
  350. package/scss/components/form/_selection.scss +354 -0
  351. package/scss/components/form/_text.scss +13 -0
  352. package/scss/components/form/_textarea.scss +10 -0
  353. package/scss/components/form/_transfer.scss +77 -18
  354. package/scss/themes/_common.scss +6 -0
  355. package/scss/themes/_cxd-colors.scss +56 -0
  356. package/scss/themes/_cxd-variables.scss +219 -91
  357. package/scss/themes/cxd.scss +370 -0
  358. package/sdk/ang-ie11.css +1596 -515
  359. package/sdk/ang.css +1395 -256
  360. package/sdk/antd-ie11.css +1397 -318
  361. package/sdk/antd.css +1395 -256
  362. package/sdk/charts.js +13 -13
  363. package/sdk/color-picker.js +65 -65
  364. package/sdk/cropperjs.js +2 -2
  365. package/sdk/cxd-ie11.css +2739 -1361
  366. package/sdk/cxd.css +2095 -588
  367. package/sdk/dark-ie11.css +1593 -512
  368. package/sdk/dark.css +1395 -256
  369. package/sdk/exceljs.js +1 -1
  370. package/sdk/helper.css.map +1 -1
  371. package/sdk/iconfont.svg +2513 -0
  372. package/sdk/iconfont.ttf +0 -0
  373. package/sdk/iconfont.woff +0 -0
  374. package/sdk/ie11-patch.css +1 -0
  375. package/sdk/locale/de-DE.js +4 -0
  376. package/sdk/markdown.js +69 -69
  377. package/sdk/papaparse.js +1 -1
  378. package/sdk/renderers/Form/CityDB.js +1 -1
  379. package/sdk/rest.js +18 -32
  380. package/sdk/rich-text.js +62 -64
  381. package/sdk/sdk-ie11.css +2739 -1361
  382. package/sdk/sdk.css +2095 -588
  383. package/sdk/sdk.js +1189 -1133
  384. package/sdk/thirds/hls.js/hls.js +1 -1
  385. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  386. package/sdk/tinymce.js +57 -57
  387. package/src/Schema.ts +32 -0
  388. package/src/components/Alert.tsx +3 -1
  389. package/src/components/AnchorNav.tsx +15 -4
  390. package/src/components/{AssociatedCheckboxes.tsx → AssociatedSelection.tsx} +41 -37
  391. package/src/components/Badge.tsx +96 -28
  392. package/src/components/Button.tsx +23 -7
  393. package/src/components/{ChainedCheckboxes.tsx → ChainedSelection.tsx} +57 -40
  394. package/src/components/Collapse.tsx +14 -9
  395. package/src/components/DatePicker.tsx +1 -1
  396. package/src/components/DateRangePicker.tsx +23 -11
  397. package/src/components/{ListCheckboxes.tsx → GroupedSelection.tsx} +26 -21
  398. package/src/components/InputBox.tsx +1 -1
  399. package/src/components/Link.tsx +85 -0
  400. package/src/components/ModalManager.ts +1 -1
  401. package/src/components/MonthRangePicker.tsx +10 -2
  402. package/src/components/PickerColumn.tsx +429 -0
  403. package/src/components/PickerContainer.tsx +128 -0
  404. package/src/components/Radios.tsx +3 -8
  405. package/src/components/RichText.tsx +244 -3
  406. package/src/components/SearchBox.tsx +4 -5
  407. package/src/components/Select.tsx +60 -5
  408. package/src/components/{Checkboxes.tsx → Selection.tsx} +75 -21
  409. package/src/components/SparkLine.tsx +4 -1
  410. package/src/components/{TableCheckboxes.tsx → TableSelection.tsx} +46 -25
  411. package/src/components/TabsTransfer.tsx +13 -7
  412. package/src/components/TabsTransferPicker.tsx +85 -0
  413. package/src/components/Toast.tsx +5 -5
  414. package/src/components/Transfer.tsx +71 -50
  415. package/src/components/TransferDropDown.tsx +117 -0
  416. package/src/components/TransferPicker.tsx +84 -0
  417. package/src/components/Tree.tsx +6 -8
  418. package/src/components/{TreeCheckboxes.tsx → TreeSelection.tsx} +33 -26
  419. package/src/components/WithRemoteConfig.tsx +7 -2
  420. package/src/components/calendar/DaysView.tsx +2 -2
  421. package/src/components/condition-builder/Field.tsx +5 -5
  422. package/src/components/condition-builder/Func.tsx +3 -3
  423. package/src/components/condition-builder/InputSwitch.tsx +3 -3
  424. package/src/components/condition-builder/Item.tsx +5 -12
  425. package/src/components/icons.tsx +15 -0
  426. package/src/components/index.tsx +13 -13
  427. package/src/envOverwrite.ts +0 -1
  428. package/src/factory.tsx +18 -3
  429. package/src/hooks/index.ts +5 -0
  430. package/src/hooks/use-set-state.ts +19 -0
  431. package/src/hooks/use-touch.ts +100 -0
  432. package/src/hooks/use-update-effect.ts +16 -0
  433. package/src/icons/clock.svg +1 -0
  434. package/src/icons/loading-outline.svg +4 -0
  435. package/src/icons/status-close.svg +10 -0
  436. package/src/icons/status-fail.svg +10 -0
  437. package/src/icons/status-info.svg +8 -0
  438. package/src/icons/status-success.svg +10 -0
  439. package/src/icons/status-warning.svg +8 -0
  440. package/src/index.tsx +3 -0
  441. package/src/locale/de-DE.ts +4 -0
  442. package/src/locale/en-US.ts +4 -0
  443. package/src/locale/zh-CN.ts +7 -3
  444. package/src/renderers/Action.tsx +99 -15
  445. package/src/renderers/AnchorNav.tsx +4 -0
  446. package/src/renderers/Avatar.tsx +8 -4
  447. package/src/renderers/Breadcrumb.tsx +5 -1
  448. package/src/renderers/CRUD.tsx +63 -28
  449. package/src/renderers/Card.tsx +63 -34
  450. package/src/renderers/Chart.tsx +6 -2
  451. package/src/renderers/Collapse.tsx +4 -2
  452. package/src/renderers/Dialog.tsx +0 -4
  453. package/src/renderers/Drawer.tsx +0 -4
  454. package/src/renderers/DropDownButton.tsx +26 -12
  455. package/src/renderers/Form/Checkbox.tsx +8 -0
  456. package/src/renderers/Form/Combo.tsx +2 -3
  457. package/src/renderers/Form/InputCity.tsx +4 -8
  458. package/src/renderers/Form/InputFile.tsx +30 -20
  459. package/src/renderers/Form/InputImage.tsx +16 -5
  460. package/src/renderers/Form/Item.tsx +1 -1
  461. package/src/renderers/Form/Options.tsx +32 -7
  462. package/src/renderers/Form/Picker.tsx +3 -2
  463. package/src/renderers/Form/Select.tsx +158 -21
  464. package/src/renderers/Form/TabsTransferPicker.tsx +123 -0
  465. package/src/renderers/Form/Transfer.tsx +19 -4
  466. package/src/renderers/Form/TransferPicker.tsx +139 -0
  467. package/src/renderers/Form/TreeSelect.tsx +25 -0
  468. package/src/renderers/Form/index.tsx +16 -2
  469. package/src/renderers/Form/wrapControl.tsx +28 -3
  470. package/src/renderers/IFrame.tsx +4 -5
  471. package/src/renderers/Image.tsx +10 -0
  472. package/src/renderers/Json.tsx +9 -9
  473. package/src/renderers/Link.tsx +53 -14
  474. package/src/renderers/List.tsx +1 -1
  475. package/src/renderers/Log.tsx +16 -3
  476. package/src/renderers/Mapping.tsx +27 -11
  477. package/src/renderers/Nav.tsx +392 -60
  478. package/src/renderers/Page.tsx +1 -1
  479. package/src/renderers/Portlet.tsx +423 -0
  480. package/src/renderers/Property.tsx +3 -2
  481. package/src/renderers/SearchBox.tsx +23 -4
  482. package/src/renderers/SparkLine.tsx +5 -0
  483. package/src/renderers/Table/ColumnToggler.tsx +544 -0
  484. package/src/renderers/Table/ItemActionsWrapper.tsx +44 -0
  485. package/src/renderers/Table/TableCell.tsx +16 -1
  486. package/src/renderers/Table/TableContent.tsx +40 -2
  487. package/src/renderers/Table/index.tsx +257 -80
  488. package/src/renderers/Tabs.tsx +9 -1
  489. package/src/renderers/WebComponent.tsx +2 -2
  490. package/src/store/crud.ts +3 -8
  491. package/src/store/form.ts +5 -10
  492. package/src/store/service.ts +5 -4
  493. package/src/store/table.ts +94 -6
  494. package/src/types.ts +57 -0
  495. package/src/utils/api.ts +52 -23
  496. package/src/utils/dom.tsx +12 -0
  497. package/src/utils/handleAction.ts +41 -0
  498. package/src/utils/helper.ts +12 -3
  499. package/src/utils/icon.tsx +4 -0
  500. package/src/utils/tpl-builtin.ts +48 -17
  501. package/dump.rdb +0 -0
  502. package/lib/components/AssociatedCheckboxes.d.ts +0 -762
  503. package/lib/components/AssociatedCheckboxes.js +0 -90
  504. package/lib/components/AssociatedCheckboxes.js.map +0 -13
  505. package/lib/components/ChainedCheckboxes.js.map +0 -13
  506. package/lib/components/Checkboxes.js +0 -101
  507. package/lib/components/Checkboxes.js.map +0 -13
  508. package/lib/components/ListCheckboxes.d.ts +0 -739
  509. package/lib/components/ListCheckboxes.js +0 -48
  510. package/lib/components/ListCheckboxes.js.map +0 -13
  511. package/lib/components/ListRadios.d.ts +0 -763
  512. package/lib/components/ListRadios.js +0 -86
  513. package/lib/components/ListRadios.js.map +0 -13
  514. package/lib/components/TableCheckboxes.js.map +0 -13
  515. package/lib/components/TreeCheckboxes.js.map +0 -13
  516. package/lib/components/TreeRadios.d.ts +0 -838
  517. package/lib/components/TreeRadios.js +0 -116
  518. package/lib/components/TreeRadios.js.map +0 -13
  519. package/src/components/ListRadios.tsx +0 -159
  520. package/src/components/TreeRadios.tsx +0 -202
@@ -7,7 +7,7 @@
7
7
  import React from 'react';
8
8
 
9
9
  // @ts-ignore
10
- import FroalaEditorComponent from 'react-froala-wysiwyg';
10
+ import FroalaEditor from 'froala-editor';
11
11
  // @ts-ignore
12
12
  import Froala from 'froala-editor/js/froala_editor.min.js';
13
13
  import 'froala-editor/js/plugins/align.min';
@@ -45,7 +45,249 @@ import 'froala-editor/js/languages/zh_cn.js';
45
45
  import 'froala-editor/css/froala_style.min.css';
46
46
  import 'froala-editor/css/froala_editor.pkgd.min.css';
47
47
 
48
- export default class FroalaEditor extends React.Component<any, any> {
48
+ export interface FroalaEditorComponentProps {
49
+ config: any;
50
+ model: string;
51
+ onModelChange: (value: string) => void;
52
+ }
53
+
54
+ // 代码来源于:https://github.com/froala/react-froala-wysiwyg/blob/master/lib/FroalaEditorFunctionality.jsx
55
+ // 改动原因是model 同步有些问题,有时候不更新,所以基于官方代码改造一下。
56
+ // 目前发现的问题是,如果 model 数据修改,如果此时 editor 还没有初始化完成则不会同步成功
57
+ class FroalaEditorComponent extends React.Component<FroalaEditorComponentProps> {
58
+ listeningEvents: any;
59
+ element: any;
60
+ editor: any;
61
+ config: any;
62
+ editorInitialized: any;
63
+ INNER_HTML_ATTR: any;
64
+ oldModel: any;
65
+ el: any;
66
+ _initEvents: any;
67
+
68
+ constructor(props: FroalaEditorComponentProps) {
69
+ super(props);
70
+
71
+ this.listeningEvents = [];
72
+ this.element = null;
73
+ this.editor = null;
74
+ this.config = {
75
+ immediateReactModelUpdate: false,
76
+ reactIgnoreAttrs: null
77
+ };
78
+
79
+ this.editorInitialized = false;
80
+ this.INNER_HTML_ATTR = 'innerHTML';
81
+
82
+ this.oldModel = null;
83
+ }
84
+
85
+ // After first time render.
86
+ componentDidMount() {
87
+ this.createEditor();
88
+ }
89
+
90
+ componentWillUnmount() {
91
+ this.destroyEditor();
92
+ }
93
+
94
+ componentDidUpdate() {
95
+ if (JSON.stringify(this.oldModel) == JSON.stringify(this.props.model)) {
96
+ return;
97
+ }
98
+
99
+ this.setContent();
100
+ }
101
+
102
+ // Return cloned object
103
+ clone(item: any) {
104
+ const me = this;
105
+ if (!item) {
106
+ return item;
107
+ } // null, undefined values check
108
+
109
+ let types = [Number, String, Boolean],
110
+ result: any;
111
+
112
+ // normalizing primitives if someone did new String('aaa'), or new Number('444');
113
+ types.forEach(function (type) {
114
+ if (item instanceof type) {
115
+ result = type(item);
116
+ }
117
+ });
118
+
119
+ if (typeof result == 'undefined') {
120
+ if (Object.prototype.toString.call(item) === '[object Array]') {
121
+ result = [];
122
+ item.forEach(function (child: any, index: number, array: Array<any>) {
123
+ result[index] = me.clone(child);
124
+ });
125
+ } else if (typeof item == 'object') {
126
+ // testing that this is DOM
127
+ if (item.nodeType && typeof item.cloneNode == 'function') {
128
+ result = item.cloneNode(true);
129
+ } else if (!item.prototype) {
130
+ // check that this is a literal
131
+ if (item instanceof Date) {
132
+ result = new Date(item);
133
+ } else {
134
+ // it is an object literal
135
+ result = {};
136
+ for (var i in item) {
137
+ result[i] = me.clone(item[i]);
138
+ }
139
+ }
140
+ } else {
141
+ if (false && item.constructor) {
142
+ result = new item.constructor();
143
+ } else {
144
+ result = item;
145
+ }
146
+ }
147
+ } else {
148
+ result = item;
149
+ }
150
+ }
151
+ return result;
152
+ }
153
+
154
+ createEditor() {
155
+ if (this.editorInitialized) {
156
+ return;
157
+ }
158
+
159
+ this.config = this.clone(this.props.config || this.config);
160
+ this.config = {...this.config};
161
+
162
+ this.element = this.el;
163
+
164
+ if (this.props.model) {
165
+ this.element.innerHTML = this.props.model;
166
+ }
167
+
168
+ this.setContent();
169
+
170
+ // Default initialized.
171
+ this.registerEvent(
172
+ 'initialized',
173
+ this.config.events && this.config.events.initialized
174
+ );
175
+
176
+ // Check if events are set.
177
+ if (!this.config.events) this.config.events = {};
178
+ this.config.events.initialized = () => {
179
+ this.editorInitialized = true;
180
+ this.initListeners();
181
+ };
182
+
183
+ this.editor = new FroalaEditor(this.element, this.config);
184
+ }
185
+
186
+ setContent() {
187
+ if (this.props.model || this.props.model == '') {
188
+ this.oldModel = this.props.model;
189
+
190
+ if (this.editorInitialized) {
191
+ this.setNormalTagContent();
192
+ } else {
193
+ if (!this._initEvents) this._initEvents = [];
194
+ this._initEvents.push(() => this.setNormalTagContent());
195
+ }
196
+ }
197
+ }
198
+
199
+ setNormalTagContent() {
200
+ let self = this;
201
+
202
+ self.editor.html && self.editor.html.set(self.props.model || '');
203
+ if (self.editorInitialized && self.editor.undo) {
204
+ //This will reset the undo stack everytime the model changes externally. Can we fix this?
205
+ self.editor.undo.reset();
206
+ self.editor.undo.saveStep();
207
+ }
208
+ }
209
+
210
+ destroyEditor() {
211
+ if (this.element) {
212
+ this.editor.destroy && this.editor.destroy();
213
+ this.listeningEvents.length = 0;
214
+ this.element = null;
215
+ this.editorInitialized = false;
216
+ this._initEvents = [];
217
+ }
218
+ }
219
+
220
+ getEditor() {
221
+ if (this.element) {
222
+ return this.editor;
223
+ }
224
+
225
+ return null;
226
+ }
227
+
228
+ updateModel() {
229
+ if (!this.props.onModelChange) {
230
+ return;
231
+ }
232
+
233
+ let modelContent = '';
234
+
235
+ let returnedHtml = this.editor.html.get();
236
+ if (typeof returnedHtml === 'string') {
237
+ modelContent = returnedHtml;
238
+ }
239
+
240
+ this.oldModel = modelContent;
241
+ this.props.onModelChange(modelContent);
242
+ }
243
+
244
+ initListeners() {
245
+ let self = this;
246
+
247
+ // bind contentChange and keyup event to froalaModel
248
+ this.editor.events.on('contentChanged', function () {
249
+ self.updateModel();
250
+ });
251
+ if (this.config.immediateReactModelUpdate) {
252
+ this.editor.events.on('keyup', function () {
253
+ self.updateModel();
254
+ });
255
+ }
256
+
257
+ // Call init events.
258
+ if (this._initEvents) {
259
+ for (let i = 0; i < this._initEvents.length; i++) {
260
+ this._initEvents[i].call(this.editor);
261
+ }
262
+ }
263
+ }
264
+
265
+ // register event on jquery editor element
266
+ registerEvent(eventName: string, callback: Function) {
267
+ if (!eventName || !callback) {
268
+ return;
269
+ }
270
+
271
+ if (eventName == 'initialized') {
272
+ if (!this._initEvents) this._initEvents = [];
273
+ this._initEvents.push(callback);
274
+ } else {
275
+ if (!this.config.events) {
276
+ this.config.events = {};
277
+ }
278
+
279
+ this.config.events[eventName] = callback;
280
+ }
281
+ }
282
+
283
+ render() {
284
+ return (
285
+ <textarea ref={el => (this.el = el)}>{this.props.children}</textarea>
286
+ );
287
+ }
288
+ }
289
+
290
+ export default class extends React.Component<any, any> {
49
291
  constructor(props: any) {
50
292
  super(props);
51
293
  Froala.VIDEO_PROVIDERS = [
@@ -61,7 +303,6 @@ export default class FroalaEditor extends React.Component<any, any> {
61
303
  render() {
62
304
  return (
63
305
  <FroalaEditorComponent
64
- tag="textarea"
65
306
  config={this.props.config}
66
307
  model={this.props.model}
67
308
  onModelChange={this.props.onModelChange}
@@ -54,7 +54,7 @@ export class SearchBox extends React.Component<SearchBoxProps> {
54
54
 
55
55
  @autobind
56
56
  handleCancel() {
57
- const {onActiveChange, onChange, onCancel} = this.props;
57
+ const {onActiveChange, onCancel, onChange} = this.props;
58
58
  onActiveChange?.(false);
59
59
  onCancel?.();
60
60
  onChange?.('');
@@ -62,14 +62,14 @@ export class SearchBox extends React.Component<SearchBoxProps> {
62
62
 
63
63
  @autobind
64
64
  handleChange(e: React.ChangeEvent<HTMLInputElement>) {
65
- const {onChange, onSearch, searchImediately} = this.props;
65
+ const {searchImediately, onChange} = this.props;
66
66
  onChange?.(e.currentTarget.value);
67
67
  searchImediately && this.lazyEmitSearch();
68
68
  }
69
69
 
70
70
  @autobind
71
71
  handleSearch() {
72
- const {value, onSearch} = this.props;
72
+ const {onSearch, value} = this.props;
73
73
  onSearch?.(value || '');
74
74
  }
75
75
 
@@ -84,14 +84,13 @@ export class SearchBox extends React.Component<SearchBoxProps> {
84
84
  render() {
85
85
  const {
86
86
  classnames: cx,
87
- value,
88
87
  active,
89
88
  name,
90
89
  className,
91
- onChange,
92
90
  disabled,
93
91
  placeholder,
94
92
  mini,
93
+ value,
95
94
  translate: __
96
95
  } = this.props;
97
96
 
@@ -20,7 +20,8 @@ import {
20
20
  findTree,
21
21
  autobind,
22
22
  ucFirst,
23
- normalizeNodePath
23
+ normalizeNodePath,
24
+ isMobile
24
25
  } from '../utils/helper';
25
26
  import find from 'lodash/find';
26
27
  import isPlainObject from 'lodash/isPlainObject';
@@ -35,6 +36,7 @@ import {LocaleProps, localeable} from '../locale';
35
36
  import Spinner from './Spinner';
36
37
  import {Option, Options} from '../Schema';
37
38
  import {RemoteOptionsProps, withRemoteConfig} from './WithRemoteConfig';
39
+ import PickerColumn from './PickerColumn';
38
40
 
39
41
  export {Option, Options};
40
42
 
@@ -317,6 +319,7 @@ interface SelectProps extends OptionProps, ThemeProps, LocaleProps {
317
319
  defaultCheckAll?: boolean;
318
320
  simpleValue?: boolean;
319
321
  defaultOpen?: boolean;
322
+ useMobileUI?: boolean;
320
323
 
321
324
  /**
322
325
  * 边框模式,全边框,还是半边框,或者没边框。
@@ -326,6 +329,11 @@ interface SelectProps extends OptionProps, ThemeProps, LocaleProps {
326
329
  * 是否隐藏已选项
327
330
  */
328
331
  hideSelected?: boolean;
332
+
333
+ /**
334
+ * 移动端样式类名
335
+ */
336
+ mobileClassName?: string;
329
337
  }
330
338
 
331
339
  interface SelectState {
@@ -335,6 +343,7 @@ interface SelectState {
335
343
  inputValue: string;
336
344
  highlightedIndex: number;
337
345
  selection: Array<Option>;
346
+ pickerSelectItem: any;
338
347
  }
339
348
 
340
349
  export class Select extends React.Component<SelectProps, SelectState> {
@@ -368,6 +377,8 @@ export class Select extends React.Component<SelectProps, SelectState> {
368
377
 
369
378
  this.open = this.open.bind(this);
370
379
  this.close = this.close.bind(this);
380
+ this.confirm = this.confirm.bind(this);
381
+ this.handlePickerChange = this.handlePickerChange.bind(this);
371
382
  this.toggle = this.toggle.bind(this);
372
383
  this.onBlur = this.onBlur.bind(this);
373
384
  this.onFocus = this.onFocus.bind(this);
@@ -391,7 +402,8 @@ export class Select extends React.Component<SelectProps, SelectState> {
391
402
  inputValue: '',
392
403
  highlightedIndex: -1,
393
404
  selection: value2array(props.value, props),
394
- itemHeight: 35
405
+ itemHeight: 35,
406
+ pickerSelectItem: ''
395
407
  };
396
408
  }
397
409
 
@@ -435,6 +447,14 @@ export class Select extends React.Component<SelectProps, SelectState> {
435
447
  });
436
448
  }
437
449
 
450
+ confirm() {
451
+ // @ts-ignore
452
+ this.handleChange(this.state.pickerSelectItem);
453
+ this.setState({
454
+ isOpen: false
455
+ });
456
+ }
457
+
438
458
  toggle(e?: React.MouseEvent<HTMLDivElement>) {
439
459
  if (
440
460
  e &&
@@ -549,6 +569,16 @@ export class Select extends React.Component<SelectProps, SelectState> {
549
569
  );
550
570
  }
551
571
 
572
+ handlePickerChange(selectItem: any, index: number, confirm: boolean) {
573
+ this.setState({
574
+ pickerSelectItem: selectItem
575
+ });
576
+ // 直接选中选项
577
+ if (confirm) {
578
+ this.handleChange(selectItem);
579
+ }
580
+ }
581
+
552
582
  handleChange(selectItem: any) {
553
583
  const {onChange, multiple, simpleValue, valueField} = this.props;
554
584
  let {selection} = this.state;
@@ -716,6 +746,7 @@ export class Select extends React.Component<SelectProps, SelectState> {
716
746
  const {
717
747
  popOverContainer,
718
748
  options,
749
+ value,
719
750
  valueField,
720
751
  labelField,
721
752
  noResultsText,
@@ -737,7 +768,9 @@ export class Select extends React.Component<SelectProps, SelectState> {
737
768
  overlayPlacement,
738
769
  translate: __,
739
770
  hideSelected,
740
- renderMenu
771
+ renderMenu,
772
+ mobileClassName,
773
+ useMobileUI = false
741
774
  } = this.props;
742
775
  const {selection} = this.state;
743
776
 
@@ -770,6 +803,9 @@ export class Select extends React.Component<SelectProps, SelectState> {
770
803
  // 渲染单个选项
771
804
  const renderItem = ({index, style}: {index: number; style?: object}) => {
772
805
  const item = filtedOptions[index];
806
+ if (!item) {
807
+ return null;
808
+ }
773
809
  const checked =
774
810
  selectedItem === item || !!~selectionValues.indexOf(item[valueField]);
775
811
  if (hideSelected && checked) {
@@ -879,7 +915,22 @@ export class Select extends React.Component<SelectProps, SelectState> {
879
915
  );
880
916
  };
881
917
 
882
- const menu = (
918
+ const mobileUI = isMobile() && useMobileUI;
919
+ const menu = mobileUI ? (
920
+ <PickerColumn
921
+ mobileClassName={mobileClassName}
922
+ labelField={'label'}
923
+ readonly={false}
924
+ className={'PickerColumns-column'}
925
+ value={value && value[0]}
926
+ swipeDuration={1000}
927
+ visibleItemCount={5}
928
+ options={filtedOptions}
929
+ onChange={checkAll ? noop : this.handlePickerChange}
930
+ onClose={this.close}
931
+ onConfirm={this.confirm}
932
+ ></PickerColumn>
933
+ ) : (
883
934
  <div
884
935
  ref={this.menu}
885
936
  className={cx('Select-menu', {
@@ -975,7 +1026,11 @@ export class Select extends React.Component<SelectProps, SelectState> {
975
1026
  >
976
1027
  <PopOver
977
1028
  overlay
978
- className={cx('Select-popover', popoverClassName)}
1029
+ className={cx(
1030
+ 'Select-popover',
1031
+ popoverClassName,
1032
+ mobileUI ? 'PopOver-isMobile' : ''
1033
+ )}
979
1034
  style={{
980
1035
  minWidth: this.target ? this.target.offsetWidth : 'auto'
981
1036
  }}
@@ -16,29 +16,33 @@ import isEqual from 'lodash/isEqual';
16
16
  import {LocaleProps, localeable} from '../locale';
17
17
  // import isPlainObject from 'lodash/isPlainObject';
18
18
 
19
- export interface BaseCheckboxesProps extends ThemeProps, LocaleProps {
19
+ export interface BaseSelectionProps extends ThemeProps, LocaleProps {
20
20
  options: Options;
21
21
  className?: string;
22
22
  placeholder?: string;
23
- value?: Array<any>;
24
- onChange?: (value: Array<Option>) => void;
23
+ value?: any | Array<any>;
24
+ multiple?: boolean;
25
+ clearable?: boolean;
26
+ onChange?: (value: Array<any> | any) => void;
25
27
  onDeferLoad?: (option: Option) => void;
26
28
  inline?: boolean;
27
29
  labelClassName?: string;
28
30
  option2value?: (option: Option) => any;
29
31
  itemClassName?: string;
30
32
  itemRender: (option: Option) => JSX.Element;
31
-
32
33
  disabled?: boolean;
34
+ onClick?: (e: React.MouseEvent) => void;
33
35
  }
34
36
 
35
- export class BaseCheckboxes<
36
- T extends BaseCheckboxesProps = BaseCheckboxesProps,
37
+ export class BaseSelection<
38
+ T extends BaseSelectionProps = BaseSelectionProps,
37
39
  S = any
38
40
  > extends React.Component<T, S> {
39
41
  static defaultProps = {
40
42
  placeholder: 'placeholder.noOption',
41
- itemRender: (option: Option) => <span>{option.label}</span>
43
+ itemRender: (option: Option) => <span>{option.label}</span>,
44
+ multiple: true,
45
+ clearable: false
42
46
  };
43
47
 
44
48
  static value2array(
@@ -62,36 +66,82 @@ export class BaseCheckboxes<
62
66
  });
63
67
  }
64
68
 
69
+ static resolveSelected(
70
+ value: any,
71
+ options: Options,
72
+ option2value: (option: Option) => any = (option: Option) => option
73
+ ) {
74
+ value = Array.isArray(value) ? value[0] : value;
75
+ return findTree(options, option => isEqual(option2value(option), value));
76
+ }
77
+
78
+ // 获取两个数组的交集
79
+ intersectArray(
80
+ arr1: undefined | Array<Option>,
81
+ arr2: undefined | Array<Option>
82
+ ): Array<Option> {
83
+ if (!Array.isArray(arr1) || !Array.isArray(arr2)) {
84
+ return [];
85
+ }
86
+ const len1 = arr1.length;
87
+ const len2 = arr2.length;
88
+ if (len1 < len2) {
89
+ return this.intersectArray(arr2, arr1);
90
+ }
91
+ return Array.from(new Set(arr1.filter(item => arr2.includes(item))));
92
+ }
93
+
65
94
  toggleOption(option: Option) {
66
- const {value, onChange, option2value, options, disabled} = this.props;
95
+ const {
96
+ value,
97
+ onChange,
98
+ option2value,
99
+ options,
100
+ disabled,
101
+ multiple,
102
+ clearable
103
+ } = this.props;
67
104
 
68
105
  if (disabled || option.disabled) {
69
106
  return;
70
107
  }
71
108
 
72
- let valueArray = BaseCheckboxes.value2array(value, options, option2value);
109
+ let valueArray = BaseSelection.value2array(value, options, option2value);
73
110
  let idx = valueArray.indexOf(option);
74
111
 
75
- if (~idx) {
112
+ if (~idx && (multiple || clearable)) {
76
113
  valueArray.splice(idx, 1);
77
- } else {
114
+ } else if (multiple) {
78
115
  valueArray.push(option);
116
+ } else {
117
+ valueArray = [option];
79
118
  }
80
119
 
81
120
  let newValue: string | Array<Option> = option2value
82
121
  ? valueArray.map(item => option2value(item))
83
122
  : valueArray;
84
123
 
85
- onChange && onChange(newValue);
124
+ onChange && onChange(multiple ? newValue : newValue[0]);
86
125
  }
87
126
 
88
127
  @autobind
89
128
  toggleAll() {
90
- const {value, onChange, option2value, options} = this.props;
129
+ const {value, onChange, option2value, options, multiple} = this.props;
130
+ if (multiple) {
131
+ return;
132
+ }
133
+
91
134
  let valueArray: Array<Option> = [];
92
135
 
93
- if (!Array.isArray(value) || !value.length) {
94
- valueArray = options.filter(option => !option.disabled);
136
+ const availableOptions = options.filter(option => !option.disabled);
137
+ const intersectOptions = this.intersectArray(value, availableOptions);
138
+
139
+ if (!Array.isArray(value)) {
140
+ valueArray = availableOptions;
141
+ } else if (intersectOptions.length < availableOptions.length) {
142
+ valueArray = Array.from(new Set([...value, ...availableOptions]));
143
+ } else {
144
+ valueArray = value.filter(item => !availableOptions.includes(item));
95
145
  }
96
146
 
97
147
  let newValue: string | Array<Option> = option2value
@@ -113,17 +163,20 @@ export class BaseCheckboxes<
113
163
  classnames: cx,
114
164
  option2value,
115
165
  itemClassName,
116
- itemRender
166
+ itemRender,
167
+ multiple,
168
+ onClick
117
169
  } = this.props;
118
170
 
119
171
  const __ = this.props.translate;
120
172
 
121
- let valueArray = BaseCheckboxes.value2array(value, options, option2value);
173
+ let valueArray = BaseSelection.value2array(value, options, option2value);
122
174
  let body: Array<React.ReactNode> = [];
123
175
 
124
176
  if (Array.isArray(options) && options.length) {
125
177
  body = options.map((option, key) => (
126
178
  <Checkbox
179
+ type={multiple ? 'checkbox' : 'radio'}
127
180
  className={cx(itemClassName, option.className)}
128
181
  key={key}
129
182
  onChange={() => this.toggleOption(option)}
@@ -140,10 +193,11 @@ export class BaseCheckboxes<
140
193
  return (
141
194
  <div
142
195
  className={cx(
143
- 'Checkboxes',
196
+ 'Selection',
144
197
  className,
145
- inline ? 'Checkboxes--inline' : ''
198
+ inline ? 'Selection--inline' : ''
146
199
  )}
200
+ onClick={onClick}
147
201
  >
148
202
  {body && body.length ? body : <div>{__(placeholder)}</div>}
149
203
  </div>
@@ -151,11 +205,11 @@ export class BaseCheckboxes<
151
205
  }
152
206
  }
153
207
 
154
- export class Checkboxes extends BaseCheckboxes {}
208
+ export class Selection extends BaseSelection {}
155
209
 
156
210
  export default themeable(
157
211
  localeable(
158
- uncontrollable(Checkboxes, {
212
+ uncontrollable(Selection, {
159
213
  value: 'onChange'
160
214
  })
161
215
  )
@@ -14,6 +14,7 @@ export interface SparkLineProps extends ThemeProps, LocaleProps {
14
14
  label?: string;
15
15
  }
16
16
  >;
17
+ placeholder?: string;
17
18
  onClick?: (e: React.MouseEvent, value?: PlainObject) => void;
18
19
  }
19
20
 
@@ -76,6 +77,8 @@ export class SparkLine extends React.Component<SparkLineProps> {
76
77
  value,
77
78
  width,
78
79
  height,
80
+ placeholder,
81
+ translate: __,
79
82
  onClick
80
83
  } = this.props;
81
84
 
@@ -98,7 +101,7 @@ export class SparkLine extends React.Component<SparkLineProps> {
98
101
  {this.renderLines()}
99
102
  </svg>
100
103
  ) : (
101
- <span>Invalid Value</span>
104
+ placeholder ?? __('placeholder.empty')
102
105
  )}
103
106
  </div>
104
107
  );