amis 1.4.2-beta.1 → 1.4.2-beta.11

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 (381) hide show
  1. package/lib/Schema.d.ts +9 -2
  2. package/lib/Schema.js.map +1 -1
  3. package/lib/components/AnchorNav.d.ts +22 -21
  4. package/lib/components/AnchorNav.js +7 -3
  5. package/lib/components/AnchorNav.js.map +2 -2
  6. package/lib/components/ArrayInput.d.ts +84 -84
  7. package/lib/components/AssociatedSelection.d.ts +930 -0
  8. package/lib/components/AssociatedSelection.js +89 -0
  9. package/lib/components/AssociatedSelection.js.map +13 -0
  10. package/lib/components/Badge.js +2 -2
  11. package/lib/components/Badge.js.map +2 -2
  12. package/lib/components/{ChainedCheckboxes.d.ts → ChainedSelection.d.ts} +267 -98
  13. package/lib/components/{ChainedCheckboxes.js → ChainedSelection.js} +30 -24
  14. package/lib/components/ChainedSelection.js.map +13 -0
  15. package/lib/components/ColorPicker.d.ts +84 -84
  16. package/lib/components/DatePicker.d.ts +84 -84
  17. package/lib/components/DateRangePicker.d.ts +84 -84
  18. package/lib/components/Editor.d.ts +84 -84
  19. package/lib/components/GroupedSelection.d.ts +907 -0
  20. package/lib/components/GroupedSelection.js +48 -0
  21. package/lib/components/GroupedSelection.js.map +13 -0
  22. package/lib/components/Link.d.ts +29 -36
  23. package/lib/components/Link.js +14 -15
  24. package/lib/components/Link.js.map +2 -2
  25. package/lib/components/ListGroup.d.ts +21 -21
  26. package/lib/components/ModalManager.js +1 -1
  27. package/lib/components/ModalManager.js.map +2 -2
  28. package/lib/components/MonthRangePicker.d.ts +84 -84
  29. package/lib/components/NumberInput.d.ts +20 -20
  30. package/lib/components/PickerColumn.d.ts +514 -0
  31. package/lib/components/PickerColumn.js +279 -0
  32. package/lib/components/PickerColumn.js.map +13 -0
  33. package/lib/components/PickerContainer.d.ts +513 -0
  34. package/lib/components/PickerContainer.js +96 -0
  35. package/lib/components/PickerContainer.js.map +13 -0
  36. package/lib/components/Radios.d.ts +22 -21
  37. package/lib/components/Radios.js +1 -0
  38. package/lib/components/Radios.js.map +2 -2
  39. package/lib/components/Rating.d.ts +21 -21
  40. package/lib/components/ResultBox.d.ts +84 -84
  41. package/lib/components/SearchBox.d.ts +84 -84
  42. package/lib/components/SearchBox.js +4 -4
  43. package/lib/components/SearchBox.js.map +2 -2
  44. package/lib/components/Select.d.ts +245 -237
  45. package/lib/components/Select.js +25 -4
  46. package/lib/components/Select.js.map +2 -2
  47. package/lib/components/{Checkboxes.d.ts → Selection.d.ts} +273 -98
  48. package/lib/components/Selection.js +134 -0
  49. package/lib/components/Selection.js.map +13 -0
  50. package/lib/components/{TableCheckboxes.d.ts → TableSelection.d.ts} +266 -96
  51. package/lib/components/{TableCheckboxes.js → TableSelection.js} +30 -30
  52. package/lib/components/TableSelection.js.map +13 -0
  53. package/lib/components/Tabs.d.ts +20 -20
  54. package/lib/components/TabsTransfer.d.ts +84 -84
  55. package/lib/components/TabsTransfer.js +9 -9
  56. package/lib/components/TabsTransfer.js.map +2 -2
  57. package/lib/components/TabsTransferPicker.d.ts +489 -0
  58. package/lib/components/TabsTransferPicker.js +60 -0
  59. package/lib/components/TabsTransferPicker.js.map +13 -0
  60. package/lib/components/Transfer.d.ts +908 -274
  61. package/lib/components/Transfer.js +31 -24
  62. package/lib/components/Transfer.js.map +2 -2
  63. package/lib/components/TransferDropDown.d.ts +487 -0
  64. package/lib/components/TransferDropDown.js +59 -0
  65. package/lib/components/TransferDropDown.js.map +13 -0
  66. package/lib/components/TransferPicker.d.ts +489 -0
  67. package/lib/components/TransferPicker.js +60 -0
  68. package/lib/components/TransferPicker.js.map +13 -0
  69. package/lib/components/Tree.d.ts +84 -84
  70. package/lib/components/{TreeCheckboxes.d.ts → TreeSelection.d.ts} +269 -99
  71. package/lib/components/{TreeCheckboxes.js → TreeSelection.js} +36 -32
  72. package/lib/components/TreeSelection.js.map +13 -0
  73. package/lib/components/WithRemoteConfig.js +1 -1
  74. package/lib/components/WithRemoteConfig.js.map +2 -2
  75. package/lib/components/condition-builder/Field.js +5 -2
  76. package/lib/components/condition-builder/Field.js.map +2 -2
  77. package/lib/components/condition-builder/Func.js +2 -2
  78. package/lib/components/condition-builder/Func.js.map +2 -2
  79. package/lib/components/condition-builder/InputSwitch.js +2 -2
  80. package/lib/components/condition-builder/InputSwitch.js.map +2 -2
  81. package/lib/components/condition-builder/Item.js +3 -3
  82. package/lib/components/condition-builder/Item.js.map +2 -2
  83. package/lib/components/index.d.ts +8 -8
  84. package/lib/components/index.js +16 -16
  85. package/lib/components/index.js.map +2 -2
  86. package/lib/envOverwrite.js.map +2 -2
  87. package/lib/factory.d.ts +4 -0
  88. package/lib/factory.js +4 -2
  89. package/lib/factory.js.map +2 -2
  90. package/lib/helper.css.map +1 -1
  91. package/lib/hooks/index.d.ts +5 -0
  92. package/lib/hooks/index.js +14 -0
  93. package/lib/hooks/index.js.map +13 -0
  94. package/lib/hooks/use-set-state.d.ts +2 -0
  95. package/lib/hooks/use-set-state.js +15 -0
  96. package/lib/hooks/use-set-state.js.map +13 -0
  97. package/lib/hooks/use-touch.d.ts +16 -0
  98. package/lib/hooks/use-touch.js +73 -0
  99. package/lib/hooks/use-touch.js.map +13 -0
  100. package/lib/hooks/use-update-effect.d.ts +3 -0
  101. package/lib/hooks/use-update-effect.js +17 -0
  102. package/lib/hooks/use-update-effect.js.map +13 -0
  103. package/lib/index.d.ts +3 -0
  104. package/lib/index.js +4 -1
  105. package/lib/index.js.map +2 -2
  106. package/lib/locale/de-DE.js +2 -0
  107. package/lib/locale/de-DE.js.map +2 -2
  108. package/lib/locale/en-US.js +2 -0
  109. package/lib/locale/en-US.js.map +2 -2
  110. package/lib/locale/zh-CN.js +4 -2
  111. package/lib/locale/zh-CN.js.map +2 -2
  112. package/lib/renderers/Action.d.ts +4 -3
  113. package/lib/renderers/Action.js +17 -4
  114. package/lib/renderers/Action.js.map +2 -2
  115. package/lib/renderers/AnchorNav.d.ts +1 -0
  116. package/lib/renderers/AnchorNav.js +2 -2
  117. package/lib/renderers/AnchorNav.js.map +2 -2
  118. package/lib/renderers/Avatar.js +3 -3
  119. package/lib/renderers/Avatar.js.map +2 -2
  120. package/lib/renderers/Breadcrumb.js +1 -1
  121. package/lib/renderers/Breadcrumb.js.map +2 -2
  122. package/lib/renderers/CRUD.d.ts +9 -0
  123. package/lib/renderers/CRUD.js +24 -4
  124. package/lib/renderers/CRUD.js.map +2 -2
  125. package/lib/renderers/Card.d.ts +4 -0
  126. package/lib/renderers/Card.js +29 -23
  127. package/lib/renderers/Card.js.map +2 -2
  128. package/lib/renderers/Chart.js +1 -1
  129. package/lib/renderers/Chart.js.map +2 -2
  130. package/lib/renderers/Collapse.js +3 -2
  131. package/lib/renderers/Collapse.js.map +2 -2
  132. package/lib/renderers/DropDownButton.js +1 -1
  133. package/lib/renderers/DropDownButton.js.map +2 -2
  134. package/lib/renderers/Form/DiffEditor.d.ts +4 -3
  135. package/lib/renderers/Form/Editor.d.ts +3 -2
  136. package/lib/renderers/Form/InputCity.d.ts +84 -84
  137. package/lib/renderers/Form/InputCity.js +7 -6
  138. package/lib/renderers/Form/InputCity.js.map +2 -2
  139. package/lib/renderers/Form/InputColor.d.ts +84 -84
  140. package/lib/renderers/Form/InputFile.js +10 -4
  141. package/lib/renderers/Form/InputFile.js.map +2 -2
  142. package/lib/renderers/Form/InputImage.js +11 -4
  143. package/lib/renderers/Form/InputImage.js.map +2 -2
  144. package/lib/renderers/Form/Item.d.ts +1 -1
  145. package/lib/renderers/Form/Item.js.map +1 -1
  146. package/lib/renderers/Form/Options.js +13 -3
  147. package/lib/renderers/Form/Options.js.map +2 -2
  148. package/lib/renderers/Form/Select.d.ts +41 -4
  149. package/lib/renderers/Form/Select.js +23 -3
  150. package/lib/renderers/Form/Select.js.map +2 -2
  151. package/lib/renderers/Form/TabsTransferPicker.d.ts +48 -0
  152. package/lib/renderers/Form/TabsTransferPicker.js +29 -0
  153. package/lib/renderers/Form/TabsTransferPicker.js.map +13 -0
  154. package/lib/renderers/Form/Transfer.js +3 -2
  155. package/lib/renderers/Form/Transfer.js.map +2 -2
  156. package/lib/renderers/Form/TransferPicker.d.ts +48 -0
  157. package/lib/renderers/Form/TransferPicker.js +29 -0
  158. package/lib/renderers/Form/TransferPicker.js.map +13 -0
  159. package/lib/renderers/Form/TreeSelect.js +2 -2
  160. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  161. package/lib/renderers/Form/index.js +1 -1
  162. package/lib/renderers/Form/index.js.map +2 -2
  163. package/lib/renderers/Form/wrapControl.js +13 -1
  164. package/lib/renderers/Form/wrapControl.js.map +2 -2
  165. package/lib/renderers/IFrame.js +1 -3
  166. package/lib/renderers/IFrame.js.map +2 -2
  167. package/lib/renderers/Json.d.ts +4 -0
  168. package/lib/renderers/Json.js +4 -13
  169. package/lib/renderers/Json.js.map +2 -2
  170. package/lib/renderers/Link.d.ts +4 -2
  171. package/lib/renderers/Link.js +15 -6
  172. package/lib/renderers/Link.js.map +2 -2
  173. package/lib/renderers/List.js +1 -1
  174. package/lib/renderers/List.js.map +2 -2
  175. package/lib/renderers/Mapping.d.ts +9 -2
  176. package/lib/renderers/Mapping.js +18 -6
  177. package/lib/renderers/Mapping.js.map +2 -2
  178. package/lib/renderers/Nav.d.ts +21 -21
  179. package/lib/renderers/Nav.js +39 -21
  180. package/lib/renderers/Nav.js.map +2 -2
  181. package/lib/renderers/Portlet.d.ts +125 -0
  182. package/lib/renderers/Portlet.js +156 -0
  183. package/lib/renderers/Portlet.js.map +13 -0
  184. package/lib/renderers/Property.js +2 -1
  185. package/lib/renderers/Property.js.map +2 -2
  186. package/lib/renderers/SearchBox.d.ts +6 -1
  187. package/lib/renderers/SearchBox.js +19 -5
  188. package/lib/renderers/SearchBox.js.map +2 -2
  189. package/lib/renderers/Table/TableContent.d.ts +4 -1
  190. package/lib/renderers/Table/TableContent.js +21 -1
  191. package/lib/renderers/Table/TableContent.js.map +2 -2
  192. package/lib/renderers/Table/index.d.ts +5 -1
  193. package/lib/renderers/Table/index.js +64 -29
  194. package/lib/renderers/Table/index.js.map +2 -2
  195. package/lib/renderers/Tabs.js +9 -1
  196. package/lib/renderers/Tabs.js.map +2 -2
  197. package/lib/renderers/WebComponent.js +1 -1
  198. package/lib/renderers/WebComponent.js.map +2 -2
  199. package/lib/store/combo.d.ts +2 -16
  200. package/lib/store/crud.js +3 -7
  201. package/lib/store/crud.js.map +2 -2
  202. package/lib/store/form.d.ts +1 -1
  203. package/lib/store/form.js +5 -6
  204. package/lib/store/form.js.map +2 -2
  205. package/lib/store/service.js +5 -4
  206. package/lib/store/service.js.map +2 -2
  207. package/lib/store/table.d.ts +2 -2
  208. package/lib/themes/ang-ie11.css +422 -149
  209. package/lib/themes/ang.css +422 -149
  210. package/lib/themes/ang.css.map +1 -1
  211. package/lib/themes/antd-ie11.css +422 -149
  212. package/lib/themes/antd.css +422 -149
  213. package/lib/themes/antd.css.map +1 -1
  214. package/lib/themes/cxd-ie11.css +456 -182
  215. package/lib/themes/cxd.css +456 -182
  216. package/lib/themes/cxd.css.map +1 -1
  217. package/lib/themes/dark-ie11.css +422 -149
  218. package/lib/themes/dark.css +422 -149
  219. package/lib/themes/dark.css.map +1 -1
  220. package/lib/themes/default.css +456 -182
  221. package/lib/themes/default.css.map +1 -1
  222. package/lib/types.d.ts +37 -0
  223. package/lib/types.js +0 -5
  224. package/lib/types.js.map +2 -2
  225. package/lib/utils/api.d.ts +3 -2
  226. package/lib/utils/api.js +28 -12
  227. package/lib/utils/api.js.map +2 -2
  228. package/lib/utils/dom.d.ts +4 -0
  229. package/lib/utils/dom.js +11 -1
  230. package/lib/utils/dom.js.map +2 -2
  231. package/lib/utils/helper.d.ts +2 -0
  232. package/lib/utils/helper.js +11 -2
  233. package/lib/utils/helper.js.map +2 -2
  234. package/lib/utils/icon.js +3 -0
  235. package/lib/utils/icon.js.map +2 -2
  236. package/package.json +1 -1
  237. package/schema.json +3038 -790
  238. package/scss/_mixins.scss +1 -3
  239. package/scss/_properties.scss +25 -1
  240. package/scss/base/_normalize.scss +2 -0
  241. package/scss/components/_anchor-nav.scss +88 -29
  242. package/scss/components/_card.scss +8 -14
  243. package/scss/components/_collapse.scss +16 -1
  244. package/scss/components/_mapping.scss +6 -0
  245. package/scss/components/_nav.scss +1 -1
  246. package/scss/components/_picker-columns.scss +123 -0
  247. package/scss/components/_popover.scss +17 -0
  248. package/scss/components/_portlet.scss +51 -0
  249. package/scss/components/_status.scss +1 -1
  250. package/scss/components/_table.scss +26 -0
  251. package/scss/components/form/_checks.scss +0 -351
  252. package/scss/components/form/_fieldset.scss +5 -1
  253. package/scss/components/form/_selection.scss +354 -0
  254. package/scss/components/form/_transfer.scss +75 -18
  255. package/scss/themes/_common.scss +4 -0
  256. package/scss/themes/_cxd-variables.scss +4 -1
  257. package/scss/themes/cxd.scss +16 -12
  258. package/sdk/ang-ie11.css +457 -152
  259. package/sdk/ang.css +480 -154
  260. package/sdk/antd-ie11.css +456 -151
  261. package/sdk/antd.css +480 -154
  262. package/sdk/charts.js +13 -13
  263. package/sdk/color-picker.js +65 -69
  264. package/sdk/cropperjs.js +2 -2
  265. package/sdk/cxd-ie11.css +496 -194
  266. package/sdk/cxd.css +517 -190
  267. package/sdk/dark-ie11.css +457 -152
  268. package/sdk/dark.css +480 -154
  269. package/sdk/exceljs.js +1 -1
  270. package/sdk/helper.css.map +1 -1
  271. package/sdk/locale/de-DE.js +2 -0
  272. package/sdk/markdown.js +69 -69
  273. package/sdk/papaparse.js +1 -1
  274. package/sdk/renderers/Form/CityDB.js +1 -1
  275. package/sdk/rest.js +20 -28
  276. package/sdk/rich-text.js +62 -62
  277. package/sdk/sdk-ie11.css +496 -194
  278. package/sdk/sdk.css +517 -190
  279. package/sdk/sdk.js +1268 -1236
  280. package/sdk/thirds/hls.js/hls.js +1 -1
  281. package/sdk/thirds/mpegts.js/mpegts.js +1 -1
  282. package/sdk/tinymce.js +57 -57
  283. package/src/Schema.ts +14 -0
  284. package/src/components/AnchorNav.tsx +15 -4
  285. package/src/components/{AssociatedCheckboxes.tsx → AssociatedSelection.tsx} +41 -37
  286. package/src/components/Badge.tsx +3 -3
  287. package/src/components/{ChainedCheckboxes.tsx → ChainedSelection.tsx} +57 -40
  288. package/src/components/{ListCheckboxes.tsx → GroupedSelection.tsx} +26 -21
  289. package/src/components/Link.tsx +28 -37
  290. package/src/components/ModalManager.ts +1 -1
  291. package/src/components/PickerColumn.tsx +429 -0
  292. package/src/components/PickerContainer.tsx +128 -0
  293. package/src/components/Radios.tsx +3 -8
  294. package/src/components/SearchBox.tsx +4 -5
  295. package/src/components/Select.tsx +57 -5
  296. package/src/components/{Checkboxes.tsx → Selection.tsx} +75 -21
  297. package/src/components/{TableCheckboxes.tsx → TableSelection.tsx} +46 -25
  298. package/src/components/TabsTransfer.tsx +13 -7
  299. package/src/components/TabsTransferPicker.tsx +85 -0
  300. package/src/components/Transfer.tsx +71 -50
  301. package/src/components/TransferDropDown.tsx +117 -0
  302. package/src/components/TransferPicker.tsx +84 -0
  303. package/src/components/{TreeCheckboxes.tsx → TreeSelection.tsx} +33 -26
  304. package/src/components/WithRemoteConfig.tsx +7 -2
  305. package/src/components/condition-builder/Field.tsx +5 -5
  306. package/src/components/condition-builder/Func.tsx +3 -3
  307. package/src/components/condition-builder/InputSwitch.tsx +3 -3
  308. package/src/components/condition-builder/Item.tsx +5 -12
  309. package/src/components/index.tsx +13 -13
  310. package/src/envOverwrite.ts +0 -1
  311. package/src/factory.tsx +18 -3
  312. package/src/hooks/index.ts +5 -0
  313. package/src/hooks/use-set-state.ts +19 -0
  314. package/src/hooks/use-touch.ts +100 -0
  315. package/src/hooks/use-update-effect.ts +16 -0
  316. package/src/index.tsx +3 -0
  317. package/src/locale/de-DE.ts +2 -0
  318. package/src/locale/en-US.ts +2 -0
  319. package/src/locale/zh-CN.ts +4 -2
  320. package/src/renderers/Action.tsx +28 -2
  321. package/src/renderers/AnchorNav.tsx +4 -0
  322. package/src/renderers/Avatar.tsx +8 -4
  323. package/src/renderers/Breadcrumb.tsx +5 -1
  324. package/src/renderers/CRUD.tsx +33 -3
  325. package/src/renderers/Card.tsx +63 -34
  326. package/src/renderers/Chart.tsx +6 -2
  327. package/src/renderers/Collapse.tsx +4 -2
  328. package/src/renderers/DropDownButton.tsx +1 -1
  329. package/src/renderers/Form/InputCity.tsx +4 -8
  330. package/src/renderers/Form/InputFile.tsx +29 -20
  331. package/src/renderers/Form/InputImage.tsx +11 -3
  332. package/src/renderers/Form/Item.tsx +1 -1
  333. package/src/renderers/Form/Options.tsx +16 -2
  334. package/src/renderers/Form/Select.tsx +144 -21
  335. package/src/renderers/Form/TabsTransferPicker.tsx +123 -0
  336. package/src/renderers/Form/Transfer.tsx +3 -2
  337. package/src/renderers/Form/TransferPicker.tsx +123 -0
  338. package/src/renderers/Form/TreeSelect.tsx +25 -0
  339. package/src/renderers/Form/index.tsx +1 -1
  340. package/src/renderers/Form/wrapControl.tsx +26 -1
  341. package/src/renderers/IFrame.tsx +2 -4
  342. package/src/renderers/Json.tsx +9 -9
  343. package/src/renderers/Link.tsx +27 -13
  344. package/src/renderers/List.tsx +1 -1
  345. package/src/renderers/Mapping.tsx +27 -11
  346. package/src/renderers/Nav.tsx +108 -60
  347. package/src/renderers/Portlet.tsx +423 -0
  348. package/src/renderers/Property.tsx +3 -2
  349. package/src/renderers/SearchBox.tsx +23 -4
  350. package/src/renderers/Table/TableContent.tsx +40 -2
  351. package/src/renderers/Table/index.tsx +87 -41
  352. package/src/renderers/Tabs.tsx +9 -1
  353. package/src/renderers/WebComponent.tsx +2 -2
  354. package/src/store/crud.ts +3 -8
  355. package/src/store/form.ts +5 -10
  356. package/src/store/service.ts +5 -4
  357. package/src/types.ts +57 -0
  358. package/src/utils/api.ts +40 -20
  359. package/src/utils/dom.tsx +12 -0
  360. package/src/utils/helper.ts +8 -0
  361. package/src/utils/icon.tsx +4 -0
  362. package/dump.rdb +0 -0
  363. package/lib/components/AssociatedCheckboxes.d.ts +0 -762
  364. package/lib/components/AssociatedCheckboxes.js +0 -90
  365. package/lib/components/AssociatedCheckboxes.js.map +0 -13
  366. package/lib/components/ChainedCheckboxes.js.map +0 -13
  367. package/lib/components/Checkboxes.js +0 -101
  368. package/lib/components/Checkboxes.js.map +0 -13
  369. package/lib/components/ListCheckboxes.d.ts +0 -739
  370. package/lib/components/ListCheckboxes.js +0 -48
  371. package/lib/components/ListCheckboxes.js.map +0 -13
  372. package/lib/components/ListRadios.d.ts +0 -763
  373. package/lib/components/ListRadios.js +0 -86
  374. package/lib/components/ListRadios.js.map +0 -13
  375. package/lib/components/TableCheckboxes.js.map +0 -13
  376. package/lib/components/TreeCheckboxes.js.map +0 -13
  377. package/lib/components/TreeRadios.d.ts +0 -838
  378. package/lib/components/TreeRadios.js +0 -116
  379. package/lib/components/TreeRadios.js.map +0 -13
  380. package/src/components/ListRadios.tsx +0 -159
  381. package/src/components/TreeRadios.tsx +0 -202
@@ -9,6 +9,7 @@ import './ColumnToggler';
9
9
  import Checkbox from '../../components/Checkbox';
10
10
  import Button from '../../components/Button';
11
11
  import {TableStore, ITableStore, IColumn, IRow} from '../../store/table';
12
+ import {saveAs} from 'file-saver';
12
13
  import {
13
14
  anyChanged,
14
15
  getScrollParent,
@@ -19,7 +20,8 @@ import {
19
20
  getVariable,
20
21
  removeHTMLTag,
21
22
  eachTree,
22
- isObject
23
+ isObject,
24
+ createObject
23
25
  } from '../../utils/helper';
24
26
  import {
25
27
  isPureVariable,
@@ -53,9 +55,10 @@ import {TableBody} from './TableBody';
53
55
  import {TplSchema} from '../Tpl';
54
56
  import {MappingSchema} from '../Mapping';
55
57
  import {isAlive, getSnapshot} from 'mobx-state-tree';
56
- import ItemActionsWrapper from './ItemActionsWrapper';
57
58
  import ColumnToggler from './ColumnToggler';
58
59
  import {BadgeSchema} from '../../components/Badge';
60
+ import offset from '../../utils/offset';
61
+ import {getStyleNumber} from '../../utils/dom';
59
62
 
60
63
  /**
61
64
  * 表格列,不指定类型时默认为文本类型。
@@ -422,7 +425,8 @@ export default class Table extends React.Component<TableProps, object> {
422
425
  'headerToolbarClassName',
423
426
  'toolbarClassName',
424
427
  'footerToolbarClassName',
425
- 'itemBadge'
428
+ 'itemBadge',
429
+ 'autoFillHeight'
426
430
  ];
427
431
  static defaultProps: Partial<TableProps> = {
428
432
  className: '',
@@ -497,6 +501,7 @@ export default class Table extends React.Component<TableProps, object> {
497
501
  this.subFormRef = this.subFormRef.bind(this);
498
502
  this.handleColumnToggle = this.handleColumnToggle.bind(this);
499
503
  this.renderAutoFilterForm = this.renderAutoFilterForm.bind(this);
504
+ this.updateAutoFillHeight = this.updateAutoFillHeight.bind(this);
500
505
 
501
506
  const {
502
507
  store,
@@ -607,6 +612,68 @@ export default class Table extends React.Component<TableProps, object> {
607
612
  this.affixDetect();
608
613
  parent.addEventListener('scroll', this.affixDetect);
609
614
  window.addEventListener('resize', this.affixDetect);
615
+ this.updateAutoFillHeight();
616
+ window.addEventListener('resize', this.updateAutoFillHeight);
617
+ }
618
+
619
+ /**
620
+ * 自动设置表格高度占满界面剩余区域
621
+ * 用 css 实现有点麻烦,要改很多结构,所以先用 dom hack 了,避免对之前的功能有影响
622
+ */
623
+ updateAutoFillHeight() {
624
+ const {autoFillHeight, footerToolbar, classPrefix: ns} = this.props;
625
+ if (!autoFillHeight) {
626
+ return;
627
+ }
628
+ const table = findDOMNode(this) as HTMLElement;
629
+ const tableContent = table.querySelector(
630
+ `.${ns}Table-content`
631
+ ) as HTMLElement;
632
+ const tableContentWrap = table.querySelector(
633
+ `.${ns}Table-contentWrap`
634
+ ) as HTMLElement;
635
+ const footToolbar = table.querySelector(
636
+ `.${ns}Table-footToolbar`
637
+ ) as HTMLElement;
638
+ if (!tableContent) {
639
+ return;
640
+ }
641
+
642
+ // 计算 table-content 在 dom 中的位置
643
+ const tableContentTop = offset(tableContent).top;
644
+ const viewportHeight = window.innerHeight;
645
+ // 有时候会拿不到 footToolbar?
646
+ const footToolbarHeight = footToolbar ? offset(footToolbar).height : 0;
647
+ // 有时候会拿不到 footToolbar,等一下在执行
648
+ if (!footToolbarHeight && footerToolbar && footerToolbar.length) {
649
+ setTimeout(() => {
650
+ this.updateAutoFillHeight();
651
+ }, 100);
652
+ return;
653
+ }
654
+ const tableContentWrapMarginButtom = getStyleNumber(
655
+ tableContentWrap,
656
+ 'margin-bottom'
657
+ );
658
+
659
+ // 循环计算父级节点的 pddding,这里不考虑父级节点还可能会有其它兄弟节点的情况了
660
+ let allParentPaddingButtom = 0;
661
+ let parentNode = tableContent.parentElement;
662
+ while (parentNode) {
663
+ const paddingButtom = getStyleNumber(parentNode, 'padding-bottom');
664
+ const borderBottom = getStyleNumber(parentNode, 'border-bottom-width');
665
+ allParentPaddingButtom =
666
+ allParentPaddingButtom + paddingButtom + borderBottom;
667
+ parentNode = parentNode.parentElement;
668
+ }
669
+
670
+ tableContent.style.height = `${
671
+ viewportHeight -
672
+ tableContentTop -
673
+ tableContentWrapMarginButtom -
674
+ footToolbarHeight -
675
+ allParentPaddingButtom
676
+ }px`;
610
677
  }
611
678
 
612
679
  componentDidUpdate(prevProps: TableProps) {
@@ -692,6 +759,7 @@ export default class Table extends React.Component<TableProps, object> {
692
759
  const parent = this.parentNode;
693
760
  parent && parent.removeEventListener('scroll', this.affixDetect);
694
761
  window.removeEventListener('resize', this.affixDetect);
762
+ window.removeEventListener('resize', this.updateAutoFillHeight);
695
763
  (this.updateTableInfoLazy as any).cancel();
696
764
  this.unSensor && this.unSensor();
697
765
 
@@ -881,7 +949,7 @@ export default class Table extends React.Component<TableProps, object> {
881
949
  }
882
950
 
883
951
  affixDetect() {
884
- if (!this.props.affixHeader || !this.table) {
952
+ if (!this.props.affixHeader || !this.table || this.props.autoFillHeight) {
885
953
  return;
886
954
  }
887
955
 
@@ -2381,7 +2449,10 @@ export default class Table extends React.Component<TableProps, object> {
2381
2449
  } else {
2382
2450
  if ((column as TplSchema).tpl) {
2383
2451
  sheetRow.getCell(columIndex).value = removeHTMLTag(
2384
- filter((column as TplSchema).tpl, row.data)
2452
+ filter(
2453
+ (column as TplSchema).tpl,
2454
+ createObject(data, row.data)
2455
+ )
2385
2456
  );
2386
2457
  } else {
2387
2458
  sheetRow.getCell(columIndex).value = value;
@@ -2584,39 +2655,6 @@ export default class Table extends React.Component<TableProps, object> {
2584
2655
  : footerNode || toolbarNode || null;
2585
2656
  }
2586
2657
 
2587
- renderItemActions() {
2588
- const {itemActions, render, store, classnames: cx} = this.props;
2589
- const finalActions = Array.isArray(itemActions)
2590
- ? itemActions.filter(action => !action.hiddenOnHover)
2591
- : [];
2592
-
2593
- if (!finalActions.length) {
2594
- return null;
2595
- }
2596
-
2597
- return (
2598
- <ItemActionsWrapper store={store} classnames={cx}>
2599
- <div className={cx('Table-itemActions')}>
2600
- {finalActions.map((action, index) =>
2601
- render(
2602
- `itemAction/${index}`,
2603
- {
2604
- ...(action as any),
2605
- isMenuItem: true
2606
- },
2607
- {
2608
- key: index,
2609
- item: store.hoverRow,
2610
- data: store.hoverRow!.locals,
2611
- rowIndex: store.hoverRow!.index
2612
- }
2613
- )
2614
- )}
2615
- </div>
2616
- </ItemActionsWrapper>
2617
- );
2618
- }
2619
-
2620
2658
  renderTableContent() {
2621
2659
  const {
2622
2660
  classnames: cx,
@@ -2631,8 +2669,11 @@ export default class Table extends React.Component<TableProps, object> {
2631
2669
  prefixRow,
2632
2670
  locale,
2633
2671
  affixRow,
2672
+ tableContentClassName,
2634
2673
  translate,
2635
- itemAction
2674
+ itemAction,
2675
+ autoFillHeight,
2676
+ itemActions
2636
2677
  } = this.props;
2637
2678
 
2638
2679
  // 理论上来说 store.rows 应该也行啊
@@ -2643,9 +2684,13 @@ export default class Table extends React.Component<TableProps, object> {
2643
2684
  <TableContent
2644
2685
  tableClassName={cx(
2645
2686
  store.combineNum > 0 ? 'Table-table--withCombine' : '',
2687
+ {'Table-table--checkOnItemClick': checkOnItemClick},
2646
2688
  tableClassName
2647
2689
  )}
2690
+ className={tableContentClassName}
2691
+ itemActions={itemActions}
2648
2692
  itemAction={itemAction}
2693
+ store={store}
2649
2694
  classnames={cx}
2650
2695
  columns={store.filteredColumns}
2651
2696
  columnsGroup={store.columnGroup}
@@ -2681,6 +2726,7 @@ export default class Table extends React.Component<TableProps, object> {
2681
2726
  store,
2682
2727
  classnames: cx,
2683
2728
  affixColumns,
2729
+ autoFillHeight,
2684
2730
  autoGenerateFilter
2685
2731
  } = this.props;
2686
2732
 
@@ -2697,7 +2743,8 @@ export default class Table extends React.Component<TableProps, object> {
2697
2743
  return (
2698
2744
  <div
2699
2745
  className={cx('Table', className, {
2700
- 'Table--unsaved': !!store.modified || !!store.moved
2746
+ 'Table--unsaved': !!store.modified || !!store.moved,
2747
+ 'Table--autoFillHeight': autoFillHeight
2701
2748
  })}
2702
2749
  >
2703
2750
  {autoGenerateFilter ? this.renderAutoFilterForm() : null}
@@ -2734,7 +2781,6 @@ export default class Table extends React.Component<TableProps, object> {
2734
2781
  : null}
2735
2782
  </div>
2736
2783
  {this.renderTableContent()}
2737
- {store.hoverRow ? this.renderItemActions() : null}
2738
2784
  </div>
2739
2785
  {this.renderAffixHeader(tableClassName)}
2740
2786
  {footer}
@@ -374,7 +374,15 @@ export default class Tabs extends React.Component<TabsProps, TabsState> {
374
374
 
375
375
  @autobind
376
376
  handleSelect(key: any) {
377
- const {env, onSelect} = this.props;
377
+ const {env, onSelect, id} = this.props;
378
+
379
+ env.tracker?.({
380
+ eventType: 'tabChange',
381
+ eventData: {
382
+ id,
383
+ key
384
+ }
385
+ });
378
386
 
379
387
  // 是 hash,需要更新到地址栏
380
388
  if (typeof key === 'string' && env) {
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import {Renderer, RendererProps} from '../factory';
3
3
  import {BaseSchema, SchemaCollection} from '../Schema';
4
- import {resolveVariable} from '../utils/tpl-builtin';
4
+ import {resolveVariable, resolveVariableAndFilter} from '../utils/tpl-builtin';
5
5
  import mapValues from 'lodash/mapValues';
6
6
 
7
7
  /**
@@ -43,7 +43,7 @@ export default class WebComponent extends React.Component<RendererProps> {
43
43
 
44
44
  const propsValues = mapValues(props, s => {
45
45
  if (typeof s === 'string') {
46
- return resolveVariable(s, data) || s;
46
+ return resolveVariableAndFilter(s, data, '| raw') || s;
47
47
  } else {
48
48
  return s;
49
49
  }
package/src/store/crud.ts CHANGED
@@ -21,6 +21,7 @@ import {
21
21
  import {Api, Payload, fetchOptions, Action, ApiObject} from '../types';
22
22
  import pick from 'lodash/pick';
23
23
  import {resolveVariableAndFilter} from '../utils/tpl-builtin';
24
+ import {normalizeApiResponseData} from '../utils/api';
24
25
 
25
26
  class ServerError extends Error {
26
27
  type = 'ServerError';
@@ -228,13 +229,7 @@ export const CRUDStore = ServiceStore.named('CRUDStore')
228
229
  }
229
230
 
230
231
  self.updatedAt = Date.now();
231
- let result = json.data;
232
-
233
- if (Array.isArray(result)) {
234
- result = {
235
- items: result
236
- };
237
- }
232
+ let result = normalizeApiResponseData(json.data);
238
233
 
239
234
  const {
240
235
  total,
@@ -384,7 +379,7 @@ export const CRUDStore = ServiceStore.named('CRUDStore')
384
379
 
385
380
  if (!isEmpty(json.data) || json.ok) {
386
381
  self.updateData(
387
- json.data,
382
+ normalizeApiResponseData(json.data),
388
383
  {
389
384
  __saved: Date.now()
390
385
  },
package/src/store/form.ts CHANGED
@@ -29,6 +29,7 @@ import isEqual from 'lodash/isEqual';
29
29
  import flatten from 'lodash/flatten';
30
30
  import {getStoreById, removeStore} from './manager';
31
31
  import {filter} from '../utils/tpl';
32
+ import {normalizeApiResponseData} from '../utils/api';
32
33
 
33
34
  export const FormStore = ServiceStore.named('FormStore')
34
35
  .props({
@@ -305,7 +306,7 @@ export const FormStore = ServiceStore.named('FormStore')
305
306
  self.updatedAt = Date.now();
306
307
 
307
308
  setValues(
308
- json.data,
309
+ normalizeApiResponseData(json.data),
309
310
  json.ok
310
311
  ? {
311
312
  __saved: Date.now()
@@ -587,14 +588,9 @@ export const FormStore = ServiceStore.named('FormStore')
587
588
  self.persistData = value;
588
589
  }
589
590
 
590
- const setLocalPersistData = debounce(
591
- () => localStorage.setItem(self.persistKey, JSON.stringify(self.data)),
592
- 250,
593
- {
594
- trailing: true,
595
- leading: false
596
- }
597
- );
591
+ const setLocalPersistData = () => {
592
+ localStorage.setItem(self.persistKey, JSON.stringify(self.data));
593
+ };
598
594
 
599
595
  function getLocalPersistData() {
600
596
  let data = localStorage.getItem(self.persistKey);
@@ -638,7 +634,6 @@ export const FormStore = ServiceStore.named('FormStore')
638
634
  clearRestError,
639
635
  beforeDestroy() {
640
636
  syncOptions.cancel();
641
- setLocalPersistData.cancel();
642
637
  }
643
638
  };
644
639
  });
@@ -3,6 +3,7 @@ import {iRendererStore} from './iRenderer';
3
3
  import {Api, ApiObject, Payload, fetchOptions} from '../types';
4
4
  import {extendObject, isEmpty, isObject} from '../utils/helper';
5
5
  import {ServerError} from '../utils/errors';
6
+ import {normalizeApiResponseData} from '../utils/api';
6
7
 
7
8
  export const ServiceStore = iRendererStore
8
9
  .named('ServiceStore')
@@ -96,7 +97,7 @@ export const ServiceStore = iRendererStore
96
97
  let replace = !!(api as ApiObject).replaceData;
97
98
  let data = {
98
99
  ...(replace ? {} : self.data),
99
- ...json.data
100
+ ...normalizeApiResponseData(json.data)
100
101
  };
101
102
  reInitData(data, replace);
102
103
  self.hasRemoteData = true;
@@ -176,7 +177,7 @@ export const ServiceStore = iRendererStore
176
177
 
177
178
  json.data &&
178
179
  self.updateData(
179
- json.data,
180
+ normalizeApiResponseData(json.data),
180
181
  undefined,
181
182
  !!(api as ApiObject).replaceData
182
183
  );
@@ -264,7 +265,7 @@ export const ServiceStore = iRendererStore
264
265
 
265
266
  json.data &&
266
267
  self.updateData(
267
- json.data,
268
+ normalizeApiResponseData(json.data),
268
269
  undefined,
269
270
  !!(api as ApiObject).replaceData
270
271
  );
@@ -406,7 +407,7 @@ export const ServiceStore = iRendererStore
406
407
  : {
407
408
  type: 'wrapper',
408
409
  wrap: false,
409
- ...json.data
410
+ ...normalizeApiResponseData(json.data)
410
411
  };
411
412
  self.schemaKey = '' + Date.now();
412
413
  isObject(json.data.data) &&
package/src/types.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type {ActionSchema} from './renderers/Action';
1
2
  import {SchemaApiObject} from './Schema';
2
3
 
3
4
  export interface ApiObject extends SchemaApiObject {
@@ -157,3 +158,59 @@ export interface JSONSchema {
157
158
  // export type ExtractProps<
158
159
  // TComponentOrTProps
159
160
  // > = TComponentOrTProps extends React.ComponentType<infer P> ? P : never;
161
+
162
+ /**
163
+ * 事件跟踪的定义
164
+ */
165
+ export interface EventTrack {
166
+ /**
167
+ * 事件类型,目前有以下几种
168
+ *
169
+ * api: 所有 fetcher 前调用
170
+ * url: 打开外部链接,组件有可能是 action 也有可能是 link
171
+ * link: 打开内部链接
172
+ * dialog: action 的弹框
173
+ * drawer: action 的抽出式弹框
174
+ * copy: action 里的复制
175
+ * reload: action 里的 reload
176
+ * email: action 里的 email
177
+ * prev: action 里的 prev
178
+ * next: action 里的 next
179
+ * cancel: action 里的 cancel
180
+ * close: action 里的 close
181
+ * submit: 有可能是 action 里的 submit,也有可能是表单提交
182
+ * confirm: action 里的 confirm
183
+ * add: action 里的 add
184
+ * reset: action 里的 reset
185
+ * reset-and-submit: action 里的 reset-and-submit
186
+ * formItemChange: 表单项内容变化
187
+ * formError: 表单验证失败
188
+ * formSubmit: 表单成功提交,在表单验证成功之后才会触发,这个可能会和 api 重合
189
+ * tabChange: tab 切换
190
+ * netError: api 报错
191
+ */
192
+ eventType:
193
+ | 'api'
194
+ | 'url'
195
+ | 'link'
196
+ | 'dialog'
197
+ | 'drawer'
198
+ | 'copy'
199
+ | 'reload'
200
+ | 'email'
201
+ | 'prev'
202
+ | 'next'
203
+ | 'cancel'
204
+ | 'close'
205
+ | 'submit'
206
+ | 'confirm'
207
+ | 'reset'
208
+ | 'reset-and-submit'
209
+ | 'formItemChange'
210
+ | 'tabChange';
211
+
212
+ /**
213
+ * 事件数据
214
+ */
215
+ eventData: ActionSchema | Api;
216
+ }
package/src/utils/api.ts CHANGED
@@ -1,4 +1,5 @@
1
- import {Api, ApiObject, fetcherResult, Payload} from '../types';
1
+ import omit from 'lodash/omit';
2
+ import {Api, ApiObject, EventTrack, fetcherResult, Payload} from '../types';
2
3
  import {fetcherConfig} from '../factory';
3
4
  import {tokenize, dataMapping} from './tpl-builtin';
4
5
  import {evalExpression} from './tpl';
@@ -12,6 +13,7 @@ import {
12
13
  createObject,
13
14
  qsparse
14
15
  } from './helper';
16
+ import isPlainObject from 'lodash/isPlainObject';
15
17
 
16
18
  const rSchema = /(?:^|raw\:)(get|post|put|delete|patch|options|head):/i;
17
19
 
@@ -61,6 +63,23 @@ export function buildApi(
61
63
  };
62
64
  api.method = (api.method || (options as any).method || 'get').toLowerCase();
63
65
 
66
+ if (api.headers) {
67
+ api.headers = dataMapping(api.headers, data, undefined, false);
68
+ }
69
+
70
+ if (api.requestAdaptor && typeof api.requestAdaptor === 'string') {
71
+ api.requestAdaptor = str2function(api.requestAdaptor, 'api') as any;
72
+ }
73
+
74
+ if (api.adaptor && typeof api.adaptor === 'string') {
75
+ api.adaptor = str2function(
76
+ api.adaptor,
77
+ 'payload',
78
+ 'response',
79
+ 'api'
80
+ ) as any;
81
+ }
82
+
64
83
  if (!data) {
65
84
  return api;
66
85
  } else if (
@@ -144,23 +163,6 @@ export function buildApi(
144
163
  }
145
164
  }
146
165
 
147
- if (api.headers) {
148
- api.headers = dataMapping(api.headers, data, undefined, false);
149
- }
150
-
151
- if (api.requestAdaptor && typeof api.requestAdaptor === 'string') {
152
- api.requestAdaptor = str2function(api.requestAdaptor, 'api') as any;
153
- }
154
-
155
- if (api.adaptor && typeof api.adaptor === 'string') {
156
- api.adaptor = str2function(
157
- api.adaptor,
158
- 'payload',
159
- 'response',
160
- 'api'
161
- ) as any;
162
- }
163
-
164
166
  return api;
165
167
  }
166
168
 
@@ -197,7 +199,7 @@ export function responseAdaptor(ret: fetcherResult, api: ApiObject) {
197
199
  let hasStatusField = true;
198
200
 
199
201
  if (!data) {
200
- throw new Error('Response is empty!');
202
+ throw new Error('Response is empty');
201
203
  }
202
204
 
203
205
  // 兼容几种常见写法
@@ -265,7 +267,8 @@ export function responseAdaptor(ret: fetcherResult, api: ApiObject) {
265
267
  }
266
268
 
267
269
  export function wrapFetcher(
268
- fn: (config: fetcherConfig) => Promise<fetcherResult>
270
+ fn: (config: fetcherConfig) => Promise<fetcherResult>,
271
+ tracker?: (eventTrack: EventTrack, data: any) => void
269
272
  ): (api: Api, data: object, options?: object) => Promise<Payload | void> {
270
273
  return function (api, data, options) {
271
274
  api = buildApi(api, data, options) as ApiObject;
@@ -295,6 +298,11 @@ export function wrapFetcher(
295
298
  api.headers['Content-Type'] = 'application/json';
296
299
  }
297
300
 
301
+ tracker?.(
302
+ {eventType: 'api', eventData: omit(api, ['config', 'data', 'body'])},
303
+ api.data
304
+ );
305
+
298
306
  if (typeof api.cache === 'number' && api.cache > 0) {
299
307
  const apiCache = getApiCache(api);
300
308
  return wrapAdaptor(
@@ -469,4 +477,16 @@ export function clearApiCache() {
469
477
  apiCaches.splice(0, apiCaches.length);
470
478
  }
471
479
 
480
+ export function normalizeApiResponseData(data: any) {
481
+ if (typeof data === 'undefined') {
482
+ data = {};
483
+ } else if (!isPlainObject(data)) {
484
+ data = {
485
+ [Array.isArray(data) ? 'items' : 'result']: data
486
+ };
487
+ }
488
+
489
+ return data;
490
+ }
491
+
472
492
  // window.apiCaches = apiCaches;
package/src/utils/dom.tsx CHANGED
@@ -267,3 +267,15 @@ export function calculatePosition(
267
267
  activePlacement
268
268
  };
269
269
  }
270
+
271
+ /**
272
+ * 专门用来获取样式的像素值,默认返回 0
273
+ */
274
+ export function getStyleNumber(element: HTMLElement, styleName: string) {
275
+ if (!element) {
276
+ return 0;
277
+ }
278
+ return (
279
+ parseInt(getComputedStyle(element).getPropertyValue(styleName), 10) || 0
280
+ );
281
+ }
@@ -16,6 +16,14 @@ import {
16
16
  } from './tpl-builtin';
17
17
  import {isObservable} from 'mobx';
18
18
 
19
+ export function isMobile() {
20
+ return (window as any).matchMedia?.('(max-width: 768px)').matches;
21
+ }
22
+
23
+ export function range(num: number, min: number, max: number): number {
24
+ return Math.min(Math.max(num, min), max);
25
+ }
26
+
19
27
  // 方便取值的时候能够把上层的取到,但是获取的时候不会全部把所有的数据获取到。
20
28
  export function createObject(
21
29
  superProps?: {[propName: string]: any},
@@ -17,6 +17,10 @@ export const generateIcon = (
17
17
  className?: string,
18
18
  classNameProp?: string
19
19
  ) => {
20
+ if (React.isValidElement(icon)) {
21
+ return icon;
22
+ }
23
+
20
24
  const isURLIcon = icon?.indexOf('.') !== -1;
21
25
 
22
26
  return icon ? (
package/dump.rdb DELETED
Binary file