amis 1.10.0 → 1.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (536) hide show
  1. package/lib/Root.js +2 -2
  2. package/lib/Root.js.map +1 -1
  3. package/lib/RootRenderer.js +1 -1
  4. package/lib/RootRenderer.js.map +1 -1
  5. package/lib/Schema.d.ts +1 -1
  6. package/lib/Schema.js.map +1 -1
  7. package/lib/SchemaRenderer.js +4 -4
  8. package/lib/SchemaRenderer.js.map +1 -1
  9. package/lib/Scoped.js +1 -1
  10. package/lib/Scoped.js.map +1 -1
  11. package/lib/WithRootStore.js +1 -1
  12. package/lib/WithRootStore.js.map +1 -1
  13. package/lib/WithStore.js +1 -1
  14. package/lib/WithStore.js.map +1 -1
  15. package/lib/actions/AjaxAction.js +1 -1
  16. package/lib/actions/AjaxAction.js.map +1 -1
  17. package/lib/actions/Decorators.js +1 -1
  18. package/lib/actions/Decorators.js.map +1 -1
  19. package/lib/actions/EmailAction.js +1 -1
  20. package/lib/actions/EmailAction.js.map +1 -1
  21. package/lib/actions/LoopAction.js +2 -2
  22. package/lib/actions/LoopAction.js.map +1 -1
  23. package/lib/compat.js +1 -1
  24. package/lib/compat.js.map +1 -1
  25. package/lib/components/Alert2.d.ts +10 -10
  26. package/lib/components/Alert2.js +2 -2
  27. package/lib/components/Alert2.js.map +1 -1
  28. package/lib/components/AnchorNav.js +1 -1
  29. package/lib/components/AnchorNav.js.map +1 -1
  30. package/lib/components/ArrayInput.js +2 -2
  31. package/lib/components/ArrayInput.js.map +1 -1
  32. package/lib/components/AsideNav.js +4 -4
  33. package/lib/components/AsideNav.js.map +1 -1
  34. package/lib/components/Avatar.d.ts +10 -10
  35. package/lib/components/Avatar.js +3 -3
  36. package/lib/components/Avatar.js.map +1 -1
  37. package/lib/components/Badge.js +10 -10
  38. package/lib/components/Badge.js.map +1 -1
  39. package/lib/components/BaiduMapPicker.js +1 -1
  40. package/lib/components/BaiduMapPicker.js.map +1 -1
  41. package/lib/components/Breadcrumb.js +1 -1
  42. package/lib/components/Breadcrumb.js.map +1 -1
  43. package/lib/components/Button.js +3 -3
  44. package/lib/components/Button.js.map +1 -1
  45. package/lib/components/CalendarMobile.js +2 -2
  46. package/lib/components/CalendarMobile.js.map +1 -1
  47. package/lib/components/Card.js +1 -1
  48. package/lib/components/Card.js.map +1 -1
  49. package/lib/components/ChainedSelection.js +1 -1
  50. package/lib/components/ChainedSelection.js.map +1 -1
  51. package/lib/components/Checkbox.js +10 -4
  52. package/lib/components/Checkbox.js.map +2 -2
  53. package/lib/components/Collapse.js +3 -3
  54. package/lib/components/Collapse.js.map +1 -1
  55. package/lib/components/ColorPicker.js +5 -5
  56. package/lib/components/ColorPicker.js.map +1 -1
  57. package/lib/components/ContextMenu.js +3 -3
  58. package/lib/components/ContextMenu.js.map +1 -1
  59. package/lib/components/DatePicker.js +3 -3
  60. package/lib/components/DatePicker.js.map +1 -1
  61. package/lib/components/DateRangePicker.js +14 -14
  62. package/lib/components/DateRangePicker.js.map +1 -1
  63. package/lib/components/Drawer.js +10 -10
  64. package/lib/components/Drawer.js.map +1 -1
  65. package/lib/components/Editor.js +3 -3
  66. package/lib/components/Editor.js.map +1 -1
  67. package/lib/components/GridNav.js +11 -11
  68. package/lib/components/GridNav.js.map +1 -1
  69. package/lib/components/InputBox.js +1 -1
  70. package/lib/components/InputBox.js.map +1 -1
  71. package/lib/components/Layout.js +1 -1
  72. package/lib/components/Layout.js.map +1 -1
  73. package/lib/components/ListGroup.d.ts +10 -10
  74. package/lib/components/ListGroup.js +1 -1
  75. package/lib/components/ListGroup.js.map +1 -1
  76. package/lib/components/Modal.js +4 -4
  77. package/lib/components/Modal.js.map +1 -1
  78. package/lib/components/MonthRangePicker.js +13 -13
  79. package/lib/components/MonthRangePicker.js.map +1 -1
  80. package/lib/components/NumberInput.js +3 -3
  81. package/lib/components/NumberInput.js.map +1 -1
  82. package/lib/components/Picker.js +4 -4
  83. package/lib/components/Picker.js.map +1 -1
  84. package/lib/components/PickerColumn.js +4 -4
  85. package/lib/components/PickerColumn.js.map +1 -1
  86. package/lib/components/PopOver.js +2 -2
  87. package/lib/components/PopOver.js.map +1 -1
  88. package/lib/components/PopUp.js +10 -10
  89. package/lib/components/PopUp.js.map +1 -1
  90. package/lib/components/Progress.js +5 -5
  91. package/lib/components/Progress.js.map +1 -1
  92. package/lib/components/PullRefresh.js +2 -2
  93. package/lib/components/PullRefresh.js.map +1 -1
  94. package/lib/components/Radios.js +2 -2
  95. package/lib/components/Radios.js.map +1 -1
  96. package/lib/components/Range.js +9 -3
  97. package/lib/components/Range.js.map +2 -2
  98. package/lib/components/Rating.js +1 -1
  99. package/lib/components/Rating.js.map +1 -1
  100. package/lib/components/ResultBox.d.ts +41 -40
  101. package/lib/components/ResultBox.js +26 -22
  102. package/lib/components/ResultBox.js.map +2 -2
  103. package/lib/components/ResultList.js +5 -5
  104. package/lib/components/ResultList.js.map +1 -1
  105. package/lib/components/ResultTreeList.js +1 -1
  106. package/lib/components/ResultTreeList.js.map +1 -1
  107. package/lib/components/SearchBox.d.ts +40 -40
  108. package/lib/components/Select.js +14 -10
  109. package/lib/components/Select.js.map +2 -2
  110. package/lib/components/SparkLine.js +3 -3
  111. package/lib/components/SparkLine.js.map +1 -1
  112. package/lib/components/Spinner.js +2 -2
  113. package/lib/components/Spinner.js.map +1 -1
  114. package/lib/components/Steps.d.ts +1 -0
  115. package/lib/components/Steps.js +10 -8
  116. package/lib/components/Steps.js.map +2 -2
  117. package/lib/components/Switch.js +2 -2
  118. package/lib/components/Switch.js.map +1 -1
  119. package/lib/components/Tabs.js +5 -5
  120. package/lib/components/Tabs.js.map +1 -1
  121. package/lib/components/Tag.js +3 -3
  122. package/lib/components/Tag.js.map +1 -1
  123. package/lib/components/Textarea.js +2 -2
  124. package/lib/components/Textarea.js.map +1 -1
  125. package/lib/components/Timeline.js +1 -1
  126. package/lib/components/Timeline.js.map +1 -1
  127. package/lib/components/TimelineItem.js +3 -3
  128. package/lib/components/TimelineItem.js.map +1 -1
  129. package/lib/components/Toast.js +3 -3
  130. package/lib/components/Toast.js.map +1 -1
  131. package/lib/components/Tooltip.js +1 -1
  132. package/lib/components/Tooltip.js.map +1 -1
  133. package/lib/components/TransferSearch.js +1 -1
  134. package/lib/components/TransferSearch.js.map +1 -1
  135. package/lib/components/Tree.js +5 -5
  136. package/lib/components/Tree.js.map +1 -1
  137. package/lib/components/TreeSelection.js +2 -2
  138. package/lib/components/TreeSelection.js.map +1 -1
  139. package/lib/components/UserSelect.js +4 -4
  140. package/lib/components/UserSelect.js.map +1 -1
  141. package/lib/components/WithRemoteConfig.js +1 -1
  142. package/lib/components/WithRemoteConfig.js.map +1 -1
  143. package/lib/components/WithStore.js +1 -1
  144. package/lib/components/WithStore.js.map +1 -1
  145. package/lib/components/calendar/DaysView.js +2 -2
  146. package/lib/components/calendar/DaysView.js.map +1 -1
  147. package/lib/components/calendar/QuartersView.js +1 -1
  148. package/lib/components/calendar/QuartersView.js.map +1 -1
  149. package/lib/components/calendar/TimeView.js +2 -2
  150. package/lib/components/calendar/TimeView.js.map +1 -1
  151. package/lib/components/condition-builder/Group.js +2 -2
  152. package/lib/components/condition-builder/Group.js.map +1 -1
  153. package/lib/components/condition-builder/GroupOrItem.js +1 -1
  154. package/lib/components/condition-builder/GroupOrItem.js.map +1 -1
  155. package/lib/components/condition-builder/index.d.ts +12 -2
  156. package/lib/components/condition-builder/index.js +40 -4
  157. package/lib/components/condition-builder/index.js.map +2 -2
  158. package/lib/components/formula/Editor.js +5 -5
  159. package/lib/components/formula/Editor.js.map +1 -1
  160. package/lib/components/formula/Picker.d.ts +0 -1
  161. package/lib/components/formula/Picker.js +8 -17
  162. package/lib/components/formula/Picker.js.map +2 -2
  163. package/lib/components/formula/VariableList.js +7 -7
  164. package/lib/components/formula/VariableList.js.map +1 -1
  165. package/lib/components/formula/plugin.js +1 -1
  166. package/lib/components/formula/plugin.js.map +1 -1
  167. package/lib/components/icons.js +1 -1
  168. package/lib/components/icons.js.map +1 -1
  169. package/lib/components/schema-editor/SchemaVariableList.js +1 -1
  170. package/lib/components/schema-editor/SchemaVariableList.js.map +1 -1
  171. package/lib/components/table/Cell.js +2 -2
  172. package/lib/components/table/Cell.js.map +1 -1
  173. package/lib/components/table/HeadCellFilter.js +1 -1
  174. package/lib/components/table/HeadCellFilter.js.map +1 -1
  175. package/lib/components/table/HeadCellSelect.js +1 -1
  176. package/lib/components/table/HeadCellSelect.js.map +1 -1
  177. package/lib/components/table/index.d.ts +9 -7
  178. package/lib/components/table/index.js +111 -111
  179. package/lib/components/table/index.js.map +2 -2
  180. package/lib/components/virtual-list/SizeAndPositionManager.js +4 -4
  181. package/lib/components/virtual-list/SizeAndPositionManager.js.map +1 -1
  182. package/lib/env.js +1 -1
  183. package/lib/env.js.map +1 -1
  184. package/lib/factory.js +3 -3
  185. package/lib/factory.js.map +1 -1
  186. package/lib/index.d.ts +1 -0
  187. package/lib/index.js +2 -1
  188. package/lib/index.js.map +2 -2
  189. package/lib/locale.js +1 -1
  190. package/lib/locale.js.map +1 -1
  191. package/lib/renderers/AnchorNav.js +1 -1
  192. package/lib/renderers/AnchorNav.js.map +1 -1
  193. package/lib/renderers/App.js +2 -2
  194. package/lib/renderers/App.js.map +1 -1
  195. package/lib/renderers/Audio.js +2 -2
  196. package/lib/renderers/Audio.js.map +1 -1
  197. package/lib/renderers/ButtonGroup.d.ts +2 -2
  198. package/lib/renderers/ButtonGroup.js.map +1 -1
  199. package/lib/renderers/CRUD.js +8 -8
  200. package/lib/renderers/CRUD.js.map +1 -1
  201. package/lib/renderers/CRUD2.d.ts +213 -0
  202. package/lib/renderers/CRUD2.js +724 -0
  203. package/lib/renderers/CRUD2.js.map +13 -0
  204. package/lib/renderers/Card.js +6 -6
  205. package/lib/renderers/Card.js.map +1 -1
  206. package/lib/renderers/Card2.d.ts +1 -1
  207. package/lib/renderers/Card2.js +1 -2
  208. package/lib/renderers/Card2.js.map +2 -2
  209. package/lib/renderers/Cards.d.ts +3 -0
  210. package/lib/renderers/Cards.js +62 -15
  211. package/lib/renderers/Cards.js.map +2 -2
  212. package/lib/renderers/Carousel.js +2 -2
  213. package/lib/renderers/Carousel.js.map +1 -1
  214. package/lib/renderers/Chart.js +2 -2
  215. package/lib/renderers/Chart.js.map +1 -1
  216. package/lib/renderers/Dialog.js +5 -5
  217. package/lib/renderers/Dialog.js.map +1 -1
  218. package/lib/renderers/Divider.js +1 -1
  219. package/lib/renderers/Divider.js.map +1 -1
  220. package/lib/renderers/Drawer.js +4 -4
  221. package/lib/renderers/Drawer.js.map +1 -1
  222. package/lib/renderers/DropDownButton.js +5 -5
  223. package/lib/renderers/DropDownButton.js.map +1 -1
  224. package/lib/renderers/Each.js +1 -1
  225. package/lib/renderers/Each.js.map +1 -1
  226. package/lib/renderers/Flex.js +2 -2
  227. package/lib/renderers/Flex.js.map +1 -1
  228. package/lib/renderers/Form/ButtonGroupSelect.js +4 -4
  229. package/lib/renderers/Form/ButtonGroupSelect.js.map +1 -1
  230. package/lib/renderers/Form/ButtonToolbar.js +1 -1
  231. package/lib/renderers/Form/ButtonToolbar.js.map +1 -1
  232. package/lib/renderers/Form/ChainedSelect.js +2 -2
  233. package/lib/renderers/Form/ChainedSelect.js.map +1 -1
  234. package/lib/renderers/Form/ChartRadios.js +1 -1
  235. package/lib/renderers/Form/ChartRadios.js.map +1 -1
  236. package/lib/renderers/Form/Checkbox.js +1 -1
  237. package/lib/renderers/Form/Checkbox.js.map +1 -1
  238. package/lib/renderers/Form/Combo.js +8 -8
  239. package/lib/renderers/Form/Combo.js.map +1 -1
  240. package/lib/renderers/Form/ConditionBuilder.d.ts +10 -0
  241. package/lib/renderers/Form/ConditionBuilder.js +6 -2
  242. package/lib/renderers/Form/ConditionBuilder.js.map +2 -2
  243. package/lib/renderers/Form/DiffEditor.d.ts +66 -20
  244. package/lib/renderers/Form/DiffEditor.js +2 -2
  245. package/lib/renderers/Form/DiffEditor.js.map +1 -1
  246. package/lib/renderers/Form/Editor.d.ts +66 -20
  247. package/lib/renderers/Form/Editor.js +4 -4
  248. package/lib/renderers/Form/Editor.js.map +1 -1
  249. package/lib/renderers/Form/FieldSet.js +1 -1
  250. package/lib/renderers/Form/FieldSet.js.map +1 -1
  251. package/lib/renderers/Form/Group.js +4 -4
  252. package/lib/renderers/Form/Group.js.map +1 -1
  253. package/lib/renderers/Form/IconPicker.js +2 -2
  254. package/lib/renderers/Form/IconPicker.js.map +1 -1
  255. package/lib/renderers/Form/InputColor.js +1 -1
  256. package/lib/renderers/Form/InputColor.js.map +1 -1
  257. package/lib/renderers/Form/InputDateRange.js +1 -1
  258. package/lib/renderers/Form/InputDateRange.js.map +1 -1
  259. package/lib/renderers/Form/InputFile.js +5 -5
  260. package/lib/renderers/Form/InputFile.js.map +1 -1
  261. package/lib/renderers/Form/InputFormula.js +1 -1
  262. package/lib/renderers/Form/InputFormula.js.map +2 -2
  263. package/lib/renderers/Form/InputGroup.js +1 -1
  264. package/lib/renderers/Form/InputGroup.js.map +1 -1
  265. package/lib/renderers/Form/InputImage.d.ts +1 -1
  266. package/lib/renderers/Form/InputImage.js +8 -4
  267. package/lib/renderers/Form/InputImage.js.map +2 -2
  268. package/lib/renderers/Form/InputMonthRange.js +1 -1
  269. package/lib/renderers/Form/InputMonthRange.js.map +1 -1
  270. package/lib/renderers/Form/InputNumber.js +2 -2
  271. package/lib/renderers/Form/InputNumber.js.map +1 -1
  272. package/lib/renderers/Form/InputQuarterRange.js +1 -1
  273. package/lib/renderers/Form/InputQuarterRange.js.map +1 -1
  274. package/lib/renderers/Form/InputRange.js +2 -2
  275. package/lib/renderers/Form/InputRange.js.map +1 -1
  276. package/lib/renderers/Form/InputRepeat.js +2 -2
  277. package/lib/renderers/Form/InputRepeat.js.map +1 -1
  278. package/lib/renderers/Form/InputRichText.js +2 -2
  279. package/lib/renderers/Form/InputRichText.js.map +1 -1
  280. package/lib/renderers/Form/InputSubForm.js +5 -5
  281. package/lib/renderers/Form/InputSubForm.js.map +1 -1
  282. package/lib/renderers/Form/InputTable.js +2 -2
  283. package/lib/renderers/Form/InputTable.js.map +1 -1
  284. package/lib/renderers/Form/InputTag.js +1 -1
  285. package/lib/renderers/Form/InputTag.js.map +1 -1
  286. package/lib/renderers/Form/InputText.js +12 -12
  287. package/lib/renderers/Form/InputText.js.map +1 -1
  288. package/lib/renderers/Form/InputTree.js +1 -1
  289. package/lib/renderers/Form/InputTree.js.map +1 -1
  290. package/lib/renderers/Form/InputYearRange.js +1 -1
  291. package/lib/renderers/Form/InputYearRange.js.map +1 -1
  292. package/lib/renderers/Form/Item.d.ts +4 -0
  293. package/lib/renderers/Form/Item.js +8 -8
  294. package/lib/renderers/Form/Item.js.map +2 -2
  295. package/lib/renderers/Form/ListSelect.js +2 -2
  296. package/lib/renderers/Form/ListSelect.js.map +1 -1
  297. package/lib/renderers/Form/NestedSelect.js +1 -1
  298. package/lib/renderers/Form/NestedSelect.js.map +1 -1
  299. package/lib/renderers/Form/Options.js +2 -2
  300. package/lib/renderers/Form/Options.js.map +1 -1
  301. package/lib/renderers/Form/Picker.js +3 -3
  302. package/lib/renderers/Form/Picker.js.map +1 -1
  303. package/lib/renderers/Form/Radios.js +1 -1
  304. package/lib/renderers/Form/Radios.js.map +1 -1
  305. package/lib/renderers/Form/Select.js +3 -3
  306. package/lib/renderers/Form/Select.js.map +1 -1
  307. package/lib/renderers/Form/Static.js +1 -1
  308. package/lib/renderers/Form/Static.js.map +1 -1
  309. package/lib/renderers/Form/TabsTransfer.js +1 -1
  310. package/lib/renderers/Form/TabsTransfer.js.map +1 -1
  311. package/lib/renderers/Form/TabsTransferPicker.js +1 -1
  312. package/lib/renderers/Form/TabsTransferPicker.js.map +1 -1
  313. package/lib/renderers/Form/Transfer.js +3 -3
  314. package/lib/renderers/Form/Transfer.js.map +1 -1
  315. package/lib/renderers/Form/TreeSelect.d.ts +0 -1
  316. package/lib/renderers/Form/TreeSelect.js +5 -13
  317. package/lib/renderers/Form/TreeSelect.js.map +2 -2
  318. package/lib/renderers/Form/index.js +11 -7
  319. package/lib/renderers/Form/index.js.map +2 -2
  320. package/lib/renderers/Grid.js +7 -7
  321. package/lib/renderers/Grid.js.map +1 -1
  322. package/lib/renderers/Grid2D.js +1 -1
  323. package/lib/renderers/Grid2D.js.map +1 -1
  324. package/lib/renderers/HBox.js +5 -5
  325. package/lib/renderers/HBox.js.map +1 -1
  326. package/lib/renderers/IFrame.js +1 -1
  327. package/lib/renderers/IFrame.js.map +1 -1
  328. package/lib/renderers/Icon.d.ts +1 -1
  329. package/lib/renderers/Icon.js +16 -11
  330. package/lib/renderers/Icon.js.map +2 -2
  331. package/lib/renderers/Image.js +3 -3
  332. package/lib/renderers/Image.js.map +1 -1
  333. package/lib/renderers/List.js +14 -14
  334. package/lib/renderers/List.js.map +1 -1
  335. package/lib/renderers/Mapping.js +1 -1
  336. package/lib/renderers/Mapping.js.map +1 -1
  337. package/lib/renderers/Operation.js +1 -1
  338. package/lib/renderers/Operation.js.map +1 -1
  339. package/lib/renderers/Page.js +7 -7
  340. package/lib/renderers/Page.js.map +1 -1
  341. package/lib/renderers/Panel.js +2 -2
  342. package/lib/renderers/Panel.js.map +1 -1
  343. package/lib/renderers/PopOver.js +2 -2
  344. package/lib/renderers/PopOver.js.map +1 -1
  345. package/lib/renderers/Portlet.js +10 -10
  346. package/lib/renderers/Portlet.js.map +1 -1
  347. package/lib/renderers/Property.js +3 -3
  348. package/lib/renderers/Property.js.map +1 -1
  349. package/lib/renderers/QRCode.js +1 -1
  350. package/lib/renderers/QRCode.js.map +1 -1
  351. package/lib/renderers/QuickEdit.js +11 -11
  352. package/lib/renderers/QuickEdit.js.map +1 -1
  353. package/lib/renderers/Remark.js +1 -1
  354. package/lib/renderers/Remark.js.map +1 -1
  355. package/lib/renderers/Service.js +2 -2
  356. package/lib/renderers/Service.js.map +1 -1
  357. package/lib/renderers/Status.js +1 -1
  358. package/lib/renderers/Status.js.map +1 -1
  359. package/lib/renderers/Table/ColumnToggler.js +5 -5
  360. package/lib/renderers/Table/ColumnToggler.js.map +1 -1
  361. package/lib/renderers/Table/HeadCellFilterDropdown.js +2 -2
  362. package/lib/renderers/Table/HeadCellFilterDropdown.js.map +1 -1
  363. package/lib/renderers/Table/HeadCellSearchDropdown.js +2 -2
  364. package/lib/renderers/Table/HeadCellSearchDropdown.js.map +1 -1
  365. package/lib/renderers/Table/ItemActionsWrapper.js +2 -2
  366. package/lib/renderers/Table/ItemActionsWrapper.js.map +1 -1
  367. package/lib/renderers/Table/TableBody.js +3 -3
  368. package/lib/renderers/Table/TableBody.js.map +1 -1
  369. package/lib/renderers/Table/TableContent.js +1 -1
  370. package/lib/renderers/Table/TableContent.js.map +1 -1
  371. package/lib/renderers/Table/TableRow.js +4 -4
  372. package/lib/renderers/Table/TableRow.js.map +1 -1
  373. package/lib/renderers/Table/index.js +32 -32
  374. package/lib/renderers/Table/index.js.map +2 -2
  375. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js +1 -1
  376. package/lib/renderers/Table-v2/HeadCellSearchDropdown.js.map +1 -1
  377. package/lib/renderers/Table-v2/index.d.ts +8 -5
  378. package/lib/renderers/Table-v2/index.js +88 -59
  379. package/lib/renderers/Table-v2/index.js.map +2 -2
  380. package/lib/renderers/TableView.js +4 -4
  381. package/lib/renderers/TableView.js.map +1 -1
  382. package/lib/renderers/Tabs.js +4 -4
  383. package/lib/renderers/Tabs.js.map +1 -1
  384. package/lib/renderers/Tasks.js +1 -1
  385. package/lib/renderers/Tasks.js.map +1 -1
  386. package/lib/renderers/Tpl.js +1 -1
  387. package/lib/renderers/Tpl.js.map +1 -1
  388. package/lib/renderers/VBox.js +2 -2
  389. package/lib/renderers/VBox.js.map +1 -1
  390. package/lib/renderers/Video.js +4 -4
  391. package/lib/renderers/Video.js.map +1 -1
  392. package/lib/renderers/Wizard.js +7 -7
  393. package/lib/renderers/Wizard.js.map +1 -1
  394. package/lib/renderers/Wrapper.js +1 -1
  395. package/lib/renderers/Wrapper.js.map +1 -1
  396. package/lib/store/app.js +3 -3
  397. package/lib/store/app.js.map +1 -1
  398. package/lib/store/combo.d.ts +72 -22
  399. package/lib/store/crud.d.ts +2 -0
  400. package/lib/store/crud.js +22 -2
  401. package/lib/store/crud.js.map +2 -2
  402. package/lib/store/form.d.ts +30 -9
  403. package/lib/store/form.js +30 -12
  404. package/lib/store/form.js.map +2 -2
  405. package/lib/store/formItem.d.ts +3 -1
  406. package/lib/store/formItem.js +6 -8
  407. package/lib/store/formItem.js.map +2 -2
  408. package/lib/store/list.d.ts +2 -0
  409. package/lib/store/list.js +8 -0
  410. package/lib/store/list.js.map +2 -2
  411. package/lib/store/node.js +2 -2
  412. package/lib/store/node.js.map +1 -1
  413. package/lib/store/table-v2.js +7 -7
  414. package/lib/store/table-v2.js.map +1 -1
  415. package/lib/store/table.d.ts +60 -18
  416. package/lib/store/table.js +6 -6
  417. package/lib/store/table.js.map +1 -1
  418. package/lib/theme.js +1 -1
  419. package/lib/theme.js.map +1 -1
  420. package/lib/themes/ang-ie11.css +187 -30
  421. package/lib/themes/ang.css +190 -31
  422. package/lib/themes/ang.css.map +1 -1
  423. package/lib/themes/antd-ie11.css +182 -25
  424. package/lib/themes/antd.css +190 -31
  425. package/lib/themes/antd.css.map +1 -1
  426. package/lib/themes/cxd-ie11.css +189 -32
  427. package/lib/themes/cxd.css +192 -33
  428. package/lib/themes/cxd.css.map +1 -1
  429. package/lib/themes/dark-ie11.css +184 -27
  430. package/lib/themes/dark.css +190 -31
  431. package/lib/themes/dark.css.map +1 -1
  432. package/lib/themes/default-ie11.css +189 -32
  433. package/lib/themes/default.css +192 -33
  434. package/lib/themes/default.css.map +1 -1
  435. package/lib/types.d.ts +1 -1
  436. package/lib/types.js.map +1 -1
  437. package/lib/utils/ColorScale.js +4 -4
  438. package/lib/utils/ColorScale.js.map +1 -1
  439. package/lib/utils/api.js +7 -7
  440. package/lib/utils/api.js.map +1 -1
  441. package/lib/utils/autobind.js +2 -2
  442. package/lib/utils/autobind.js.map +1 -1
  443. package/lib/utils/columnsSplit.js +2 -2
  444. package/lib/utils/columnsSplit.js.map +1 -1
  445. package/lib/utils/debug.js +13 -13
  446. package/lib/utils/debug.js.map +1 -1
  447. package/lib/utils/dom.js +1 -1
  448. package/lib/utils/dom.js.map +1 -1
  449. package/lib/utils/filter-schema.js +1 -1
  450. package/lib/utils/filter-schema.js.map +1 -1
  451. package/lib/utils/formula.js +1 -1
  452. package/lib/utils/formula.js.map +1 -1
  453. package/lib/utils/helper.js +6 -6
  454. package/lib/utils/helper.js.map +1 -1
  455. package/lib/utils/icon.js +7 -0
  456. package/lib/utils/icon.js.map +2 -2
  457. package/lib/utils/resize-sensor.js +1 -1
  458. package/lib/utils/resize-sensor.js.map +1 -1
  459. package/lib/utils/style.js +1 -1
  460. package/lib/utils/style.js.map +1 -1
  461. package/lib/utils/tpl-builtin.js +1 -1
  462. package/lib/utils/tpl-builtin.js.map +1 -1
  463. package/lib/utils/tpl-lodash.js +1 -1
  464. package/lib/utils/tpl-lodash.js.map +1 -1
  465. package/lib/utils/tpl.js +2 -2
  466. package/lib/utils/tpl.js.map +1 -1
  467. package/lib/utils/validations.js +2 -2
  468. package/lib/utils/validations.js.map +1 -1
  469. package/package.json +1 -1
  470. package/schema.json +231 -365
  471. package/scss/_properties.scss +5 -3
  472. package/scss/components/_condition-builder.scss +11 -0
  473. package/scss/components/_crud.scss +8 -3
  474. package/scss/components/_crud2.scss +148 -0
  475. package/scss/components/_formula.scss +2 -3
  476. package/scss/components/_result-box.scss +25 -7
  477. package/scss/components/_steps.scss +21 -26
  478. package/scss/components/_table-v2.scss +1 -3
  479. package/scss/components/form/_checks.scss +26 -16
  480. package/scss/components/form/_select.scss +4 -0
  481. package/scss/themes/_common.scss +1 -0
  482. package/scss/themes/_cxd-variables.scss +2 -2
  483. package/sdk/ang-ie11.css +228 -32
  484. package/sdk/ang.css +231 -33
  485. package/sdk/antd-ie11.css +223 -27
  486. package/sdk/antd.css +231 -33
  487. package/sdk/barcode.js +51 -51
  488. package/sdk/charts.js +17 -17
  489. package/sdk/codemirror.js +7 -7
  490. package/sdk/color-picker.js +65 -65
  491. package/sdk/cropperjs.js +3 -3
  492. package/sdk/cxd-ie11.css +230 -34
  493. package/sdk/cxd.css +233 -35
  494. package/sdk/dark-ie11.css +225 -29
  495. package/sdk/dark.css +231 -33
  496. package/sdk/exceljs.js +1 -1
  497. package/sdk/markdown.js +69 -69
  498. package/sdk/papaparse.js +3 -3
  499. package/sdk/renderers/Form/CityDB.js +1 -1
  500. package/sdk/rest.js +16 -16
  501. package/sdk/rich-text.js +62 -62
  502. package/sdk/sdk-ie11.css +230 -34
  503. package/sdk/sdk.css +233 -35
  504. package/sdk/sdk.js +1663 -1775
  505. package/sdk/thirds/hls.js/hls.js +19 -19
  506. package/sdk/thirds/mpegts.js/mpegts.js +2 -2
  507. package/sdk/tinymce.js +57 -57
  508. package/src/Schema.ts +1 -0
  509. package/src/components/Checkbox.tsx +10 -3
  510. package/src/components/Range.tsx +14 -7
  511. package/src/components/ResultBox.tsx +65 -54
  512. package/src/components/Select.tsx +10 -7
  513. package/src/components/Steps.tsx +60 -18
  514. package/src/components/condition-builder/index.tsx +107 -8
  515. package/src/components/formula/Picker.tsx +27 -16
  516. package/src/components/table/index.tsx +190 -193
  517. package/src/index.tsx +1 -0
  518. package/src/renderers/ButtonGroup.tsx +2 -2
  519. package/src/renderers/CRUD2.tsx +1213 -0
  520. package/src/renderers/Card2.tsx +2 -3
  521. package/src/renderers/Cards.tsx +55 -10
  522. package/src/renderers/Form/ConditionBuilder.tsx +19 -2
  523. package/src/renderers/Form/InputFormula.tsx +1 -1
  524. package/src/renderers/Form/InputImage.tsx +7 -5
  525. package/src/renderers/Form/Item.tsx +11 -1
  526. package/src/renderers/Form/TreeSelect.tsx +14 -16
  527. package/src/renderers/Form/index.tsx +7 -2
  528. package/src/renderers/Icon.tsx +8 -1
  529. package/src/renderers/Table/index.tsx +5 -5
  530. package/src/renderers/Table-v2/index.tsx +92 -72
  531. package/src/store/crud.ts +23 -1
  532. package/src/store/form.ts +31 -24
  533. package/src/store/formItem.ts +65 -52
  534. package/src/store/list.ts +10 -0
  535. package/src/types.ts +2 -1
  536. package/src/utils/icon.tsx +9 -0
@@ -0,0 +1,1213 @@
1
+ import React from 'react';
2
+
3
+ import {Renderer, RendererProps} from '../factory';
4
+ import {SchemaNode, Schema, Action, PlainObject} from '../types';
5
+ import {CRUDStore, ICRUDStore} from '../store/crud';
6
+ import {
7
+ createObject,
8
+ extendObject,
9
+ anyChanged,
10
+ isObjectShallowModified,
11
+ isVisible,
12
+ getPropValue,
13
+ getVariable,
14
+ qsstringify,
15
+ qsparse,
16
+ isArrayChildrenModified,
17
+ findTree,
18
+ isObject,
19
+ autobind,
20
+ mapTree
21
+ } from '../utils/helper';
22
+ import {ScopedContext, IScopedContext} from '../Scoped';
23
+ import Button from '../components/Button';
24
+ import Select from '../components/Select';
25
+ import getExprProperties from '../utils/filter-schema';
26
+ import pick from 'lodash/pick';
27
+ import {findDOMNode} from 'react-dom';
28
+ import {evalExpression, filter} from '../utils/tpl';
29
+ import {isEffectiveApi, isApiOutdated, str2function} from '../utils/api';
30
+ import omit from 'lodash/omit';
31
+ import find from 'lodash/find';
32
+ import findIndex from 'lodash/findIndex';
33
+ import Html from '../components/Html';
34
+ import {Spinner} from '../components';
35
+ import {Icon} from '../components/icons';
36
+ import {
37
+ BaseSchema,
38
+ SchemaApi,
39
+ SchemaClassName,
40
+ SchemaExpression,
41
+ SchemaMessage,
42
+ SchemaName,
43
+ SchemaObject,
44
+ SchemaTokenizeableString,
45
+ SchemaTpl
46
+ } from '../Schema';
47
+ import {ActionSchema} from './Action';
48
+ import {CardsSchema} from './Cards';
49
+ import {ListSchema} from './List';
50
+ import {TableSchema} from './Table';
51
+ import {isPureVariable, resolveVariableAndFilter} from '../utils/tpl-builtin';
52
+ import {SchemaCollection} from '..';
53
+ import {PaginationSchema} from './Pagination';
54
+ import {upperCase, upperFirst} from 'lodash';
55
+
56
+ export type CRUDRendererEvent = 'search';
57
+
58
+ export interface CRUD2CommonSchema extends BaseSchema {
59
+ /**
60
+ * 指定为 CRUD2 渲染器。
61
+ */
62
+ type: 'crud2';
63
+
64
+ /**
65
+ * 指定内容区的展示模式。
66
+ */
67
+ mode?: 'table' | 'grid' | 'cards' | /* grid 的别名*/ 'list';
68
+
69
+ /**
70
+ * 初始化数据 API
71
+ */
72
+ api?: SchemaApi;
73
+
74
+ /**
75
+ * 也可以直接从环境变量中读取,但是不太推荐。
76
+ */
77
+ source?: SchemaTokenizeableString;
78
+
79
+ /**
80
+ * 静默拉取
81
+ */
82
+ silentPolling?: boolean;
83
+ /**
84
+ * 设置自动刷新时间
85
+ */
86
+ interval?: number;
87
+ stopAutoRefreshWhen?: SchemaExpression;
88
+
89
+ /**
90
+ * 数据展示模式 无限加载 or 分页
91
+ */
92
+ loadType?: 'more' | 'pagination';
93
+
94
+ /**
95
+ * 无限加载时,根据此项设置其每页加载数量,可以不限制
96
+ */
97
+ perPage?: number;
98
+
99
+ /**
100
+ * 是否为前端单次加载模式,可以用来实现前端分页。
101
+ */
102
+ loadDataOnce?: boolean;
103
+
104
+ /**
105
+ * 是否可以选择数据,外部事件动作
106
+ */
107
+ selectable?: boolean;
108
+
109
+ /**
110
+ * 是否可以多选数据,仅当selectable为 true 时生效
111
+ */
112
+ multiple?: boolean;
113
+
114
+ /**
115
+ * 是否展示已选数据区域,仅当selectable为 true 时生效
116
+ */
117
+ showSelection?: boolean;
118
+
119
+ /**
120
+ * 快速编辑后用来批量保存的 API
121
+ */
122
+ quickSaveApi?: SchemaApi;
123
+
124
+ /**
125
+ * 快速编辑配置成及时保存时使用的 API
126
+ */
127
+ quickSaveItemApi?: SchemaApi;
128
+
129
+ /**
130
+ * 保存排序的 api
131
+ */
132
+ saveOrderApi?: SchemaApi;
133
+
134
+ /**
135
+ * 是否将过滤条件的参数同步到地址栏,默认为true
136
+ * @default true
137
+ */
138
+ syncLocation?: boolean;
139
+
140
+ /**
141
+ * 设置分页页码字段名。
142
+ * @default page
143
+ */
144
+ pageField?: string;
145
+
146
+ /**
147
+ * 设置分页一页显示的多少条数据的字段名。
148
+ * @default perPage
149
+ */
150
+ perPageField?: string;
151
+
152
+ name?: SchemaName;
153
+
154
+ /**
155
+ * 是否隐藏快速编辑的按钮。
156
+ */
157
+ hideQuickSaveBtn?: boolean;
158
+
159
+ /**
160
+ * 是否自动跳顶部,当切分页的时候。
161
+ */
162
+ autoJumpToTopOnPagerChange?: boolean;
163
+
164
+ /**
165
+ * 顶部区域
166
+ */
167
+ headerToolbar?: SchemaCollection;
168
+
169
+ /**
170
+ * 底部区域
171
+ */
172
+ footerToolbar?: SchemaCollection;
173
+
174
+ /**
175
+ * 是否将接口返回的内容自动同步到地址栏,前提是开启了同步地址栏。
176
+ */
177
+ syncResponse2Query?: boolean;
178
+
179
+ /**
180
+ * 翻页时是否保留用户已选的数据
181
+ */
182
+ keepItemSelectionOnPageChange?: boolean;
183
+
184
+ /**
185
+ * 内容区域占满屏幕剩余空间
186
+ */
187
+ autoFillHeight?: boolean;
188
+ }
189
+
190
+ export type CRUDCardsSchema = CRUD2CommonSchema & {
191
+ mode: 'cards';
192
+ } & Omit<CardsSchema, 'type'>;
193
+
194
+ export type CRUDListSchema = CRUD2CommonSchema & {
195
+ mode: 'list';
196
+ } & Omit<ListSchema, 'type'>;
197
+
198
+ export type CRUDTableSchema = CRUD2CommonSchema & {
199
+ mode?: 'table';
200
+ } & Omit<TableSchema, 'type'>;
201
+
202
+ export type CRUD2Schema = CRUDCardsSchema | CRUDListSchema | CRUDTableSchema;
203
+
204
+ export interface CRUDProps
205
+ extends RendererProps,
206
+ Omit<CRUD2CommonSchema, 'type' | 'className'> {
207
+ store: ICRUDStore;
208
+ pickerMode?: boolean; // 选择模式,用做表单中的选择操作
209
+ }
210
+
211
+ export default class CRUD2 extends React.Component<CRUDProps, any> {
212
+ static propsList: Array<keyof CRUDProps> = [
213
+ 'mode',
214
+ 'syncLocation',
215
+ 'value',
216
+ 'multiple',
217
+ 'valueField',
218
+ 'pageField',
219
+ 'perPageField',
220
+ 'hideQuickSaveBtn',
221
+ 'autoJumpToTopOnPagerChange',
222
+ 'interval',
223
+ 'silentPolling',
224
+ 'stopAutoRefreshWhen',
225
+ 'stopAutoRefreshWhenModalIsOpen',
226
+ 'api',
227
+ 'headerToolbar',
228
+ 'footerToolbar',
229
+ 'autoGenerateFilter',
230
+ 'syncResponse2Query',
231
+ 'keepItemSelectionOnPageChange',
232
+ 'source',
233
+ 'onChange',
234
+ 'onInit',
235
+ 'onSaved',
236
+ 'onQuery',
237
+ 'autoFillHeight',
238
+ 'showSelection'
239
+ ];
240
+ static defaultProps = {
241
+ toolbarInline: true,
242
+ syncLocation: true,
243
+ hideQuickSaveBtn: false,
244
+ autoJumpToTopOnPagerChange: true,
245
+ silentPolling: false,
246
+ autoFillHeight: false,
247
+ showSelection: true,
248
+ perPage: 10
249
+ };
250
+
251
+ control: any;
252
+
253
+ lastQuery: any;
254
+ lastData: any;
255
+
256
+ timer: ReturnType<typeof setTimeout>;
257
+ mounted: boolean;
258
+
259
+ stopingAutoRefresh: boolean = false;
260
+
261
+ constructor(props: CRUDProps) {
262
+ super(props);
263
+
264
+ const {location, store, syncLocation, pageField, perPageField} = props;
265
+
266
+ this.mounted = true;
267
+
268
+ if (syncLocation && location && (location.query || location.search)) {
269
+ store.updateQuery(
270
+ qsparse(location.search.substring(1)),
271
+ undefined,
272
+ pageField,
273
+ perPageField
274
+ );
275
+ } else if (syncLocation && !location && window.location.search) {
276
+ store.updateQuery(
277
+ qsparse(window.location.search.substring(1)) as object,
278
+ undefined,
279
+ pageField,
280
+ perPageField
281
+ );
282
+ }
283
+
284
+ // 如果有 api,data 里面先写个 空数组,面得继承外层的 items
285
+ // 比如 crud 打开一个弹框,里面也是个 crud,默认一开始其实显示
286
+ // 的是外层 crud 的数据,等接口回来后就会变成新的。
287
+ // 加上这个就是为了解决这种情况
288
+ if (this.props.api) {
289
+ this.props.store.updateData({
290
+ items: []
291
+ });
292
+ }
293
+ }
294
+
295
+ componentDidMount() {
296
+ const {store, pickerMode, loadType, loadDataOnce, perPage} = this.props;
297
+
298
+ // 初始化分页
299
+ let pagination = loadType && !!loadDataOnce;
300
+ if (pagination) {
301
+ store.changePage(store.page, perPage);
302
+ }
303
+
304
+ // 初始化筛选条件
305
+ this.initQuery({});
306
+
307
+ if (pickerMode) {
308
+ // 解析picker组件默认值
309
+ const val = getPropValue(this.props);
310
+ val && store.setSelectedItems(val);
311
+ }
312
+ }
313
+
314
+ componentDidUpdate(prevProps: CRUDProps) {
315
+ const props = this.props;
316
+ const store = prevProps.store;
317
+
318
+ // picker外部引起的值变化处理
319
+ let val: any;
320
+ if (
321
+ this.props.pickerMode &&
322
+ isArrayChildrenModified(
323
+ (val = getPropValue(this.props)),
324
+ getPropValue(prevProps)
325
+ )
326
+ ) {
327
+ store.setSelectedItems(val);
328
+ }
329
+
330
+ let dataInvalid = false;
331
+ if (
332
+ prevProps.syncLocation &&
333
+ prevProps.location &&
334
+ prevProps.location.search !== props.location.search
335
+ ) {
336
+ // 同步地址栏,那么直接检测 query 是否变了,变了就重新拉数据
337
+ store.updateQuery(
338
+ qsparse(props.location.search.substring(1)),
339
+ undefined,
340
+ props.pageField,
341
+ props.perPageField
342
+ );
343
+ dataInvalid = !!(
344
+ props.api && isObjectShallowModified(store.query, this.lastQuery, false)
345
+ );
346
+ }
347
+
348
+ if (dataInvalid) {
349
+ // 要同步数据
350
+ } else if (
351
+ prevProps.api &&
352
+ props.api &&
353
+ isApiOutdated(
354
+ prevProps.api,
355
+ props.api,
356
+ store.fetchCtxOf(prevProps.data, {
357
+ pageField: prevProps.pageField,
358
+ perPageField: prevProps.perPageField
359
+ }),
360
+ store.fetchCtxOf(props.data, {
361
+ pageField: props.pageField,
362
+ perPageField: props.perPageField
363
+ })
364
+ )
365
+ ) {
366
+ dataInvalid = true;
367
+ } else if (!props.api && isPureVariable(props.source)) {
368
+ const next = resolveVariableAndFilter(props.source, props.data, '| raw');
369
+
370
+ if (!this.lastData || this.lastData !== next) {
371
+ store.initFromScope(props.data, props.source);
372
+ this.lastData = next;
373
+ }
374
+ }
375
+
376
+ if (dataInvalid) {
377
+ this.getData();
378
+ }
379
+ }
380
+
381
+ componentWillUnmount() {
382
+ this.mounted = false;
383
+ clearTimeout(this.timer);
384
+ }
385
+
386
+ @autobind
387
+ controlRef(control: any) {
388
+ // 因为 control 有可能被 n 层 hoc 包裹。
389
+ while (control && control.getWrappedInstance) {
390
+ control = control.getWrappedInstance();
391
+ }
392
+
393
+ this.control = control;
394
+ }
395
+
396
+ initQuery(values: object) {
397
+ const {store, orderBy, orderDir} = this.props;
398
+ const params: any = {};
399
+
400
+ if (orderBy) {
401
+ params['orderBy'] = orderBy;
402
+ params['orderDir'] = orderDir || 'asc';
403
+ }
404
+
405
+ this.handleSearch({
406
+ query: {
407
+ ...params,
408
+ ...values,
409
+ ...store.query
410
+ },
411
+ replaceQuery: this.props.initFetch !== false
412
+ });
413
+
414
+ // 保留一次用于重置查询条件
415
+ store.setPristineQuery();
416
+ }
417
+
418
+ /**
419
+ * 加载更多动作处理器
420
+ */
421
+ handleLoadMore() {
422
+ this.getData(undefined, undefined, undefined, true);
423
+ }
424
+
425
+ /**
426
+ * 发起一次新的查询,查询条件不同,需要从第一页数据加载
427
+ */
428
+ handleSearch(data: {
429
+ query?: object; // 查询条件,没有将使用当前的
430
+ resetQuery?: boolean;
431
+ replaceQuery?: boolean;
432
+ }) {
433
+ const {store, syncLocation, env, pageField, perPageField} = this.props;
434
+ let {query, resetQuery, replaceQuery} = data;
435
+
436
+ query = syncLocation ? qsparse(qsstringify(query, undefined, true)) : query;
437
+
438
+ store.updateQuery(
439
+ resetQuery ? this.props.store.pristineQuery : query,
440
+ syncLocation && env && env.updateLocation
441
+ ? (location: any) => env.updateLocation(location, true)
442
+ : undefined,
443
+ pageField,
444
+ perPageField,
445
+ replaceQuery
446
+ );
447
+
448
+ this.lastQuery = store.query;
449
+ this.getData(undefined, undefined, undefined);
450
+ }
451
+
452
+ handleStopAutoRefresh() {
453
+ this.timer && clearTimeout(this.timer);
454
+ this.stopingAutoRefresh = true;
455
+ }
456
+
457
+ handleStartAutoRefresh() {
458
+ this.stopingAutoRefresh = false;
459
+ this.reload();
460
+ }
461
+
462
+ reloadTarget(target: string, data: any) {
463
+ // implement this.
464
+ }
465
+
466
+ closeTarget(target: string) {
467
+ // implement this.
468
+ }
469
+
470
+ updateQuery(newQuery: any = {}) {
471
+ this.props.store;
472
+ }
473
+
474
+ /**
475
+ * 更新列表数据
476
+ */
477
+ getData(
478
+ /** 静默更新,不显示加载状态 */
479
+ silent?: boolean,
480
+ /** 清空已选择数据 */
481
+ clearSelection?: boolean,
482
+ /** 强制重新加载 */
483
+ forceReload = false,
484
+ /** 加载更多数据,默认模式取props中的配置,只有事件动作需要直接触发 */
485
+ loadMore?: boolean
486
+ ) {
487
+ const {
488
+ store,
489
+ api,
490
+ messages,
491
+ pageField,
492
+ perPageField,
493
+ interval,
494
+ stopAutoRefreshWhen,
495
+ silentPolling,
496
+ syncLocation,
497
+ syncResponse2Query,
498
+ keepItemSelectionOnPageChange,
499
+ stopAutoRefreshWhenModalIsOpen,
500
+ pickerMode,
501
+ env,
502
+ loadType,
503
+ loadDataOnce,
504
+ loadDataOnceFetchOnFilter,
505
+ source,
506
+ columns
507
+ } = this.props;
508
+
509
+ // reload 需要清空用户选择
510
+ if (
511
+ !loadMore &&
512
+ keepItemSelectionOnPageChange &&
513
+ clearSelection &&
514
+ !pickerMode
515
+ ) {
516
+ store.setSelectedItems([]);
517
+ store.setUnSelectedItems([]);
518
+ }
519
+
520
+ clearTimeout(this.timer);
521
+ this.lastQuery = store.query;
522
+ const loadDataMode = loadMore ?? loadType === 'more';
523
+
524
+ const data = createObject(store.data, store.query);
525
+ isEffectiveApi(api, data)
526
+ ? store
527
+ .fetchInitData(api, data, {
528
+ successMessage: messages && messages.fetchSuccess,
529
+ errorMessage: messages && messages.fetchFailed,
530
+ autoAppend: true,
531
+ forceReload,
532
+ loadDataOnce,
533
+ loadDataOnceFetchOnFilter,
534
+ source,
535
+ silent,
536
+ pageField,
537
+ perPageField,
538
+ loadDataMode,
539
+ syncResponse2Query,
540
+ columns: store.columns ?? columns
541
+ })
542
+ .then(value => {
543
+ interval &&
544
+ !this.stopingAutoRefresh &&
545
+ this.mounted &&
546
+ (!stopAutoRefreshWhen ||
547
+ !(
548
+ stopAutoRefreshWhen &&
549
+ evalExpression(
550
+ stopAutoRefreshWhen,
551
+ createObject(store.data, store.query)
552
+ )
553
+ )) &&
554
+ // 弹窗期间不进行刷新
555
+ (!stopAutoRefreshWhenModalIsOpen || !store.dialogOpen) &&
556
+ (this.timer = setTimeout(
557
+ this.getData.bind(this, silentPolling, undefined, true),
558
+ Math.max(interval, 1000)
559
+ ));
560
+ return value;
561
+ })
562
+ : source && store.initFromScope(data, source);
563
+ }
564
+
565
+ @autobind
566
+ handleChangePage(page: number, perPage?: number) {
567
+ const {
568
+ store,
569
+ syncLocation,
570
+ env,
571
+ pageField,
572
+ perPageField,
573
+ autoJumpToTopOnPagerChange,
574
+ affixOffsetTop
575
+ } = this.props;
576
+
577
+ let query: any = {
578
+ [pageField || 'page']: page
579
+ };
580
+
581
+ if (perPage) {
582
+ query[perPageField || 'perPage'] = perPage;
583
+ }
584
+
585
+ store.updateQuery(
586
+ query,
587
+ syncLocation && env?.updateLocation ? env.updateLocation : undefined,
588
+ pageField,
589
+ perPageField
590
+ );
591
+
592
+ this.getData();
593
+
594
+ if (autoJumpToTopOnPagerChange && this.control) {
595
+ (findDOMNode(this.control) as HTMLElement).scrollIntoView();
596
+ const scrolledY = window.scrollY;
597
+ const offsetTop = affixOffsetTop ?? env?.affixOffsetTop ?? 0;
598
+ scrolledY && window.scroll(0, scrolledY - offsetTop);
599
+ }
600
+ }
601
+
602
+ handleSave(
603
+ rows: Array<object> | object,
604
+ diff: Array<object> | object,
605
+ indexes: Array<string>,
606
+ unModifiedItems?: Array<any>,
607
+ rowsOrigin?: Array<object> | object,
608
+ resetOnFailed?: boolean
609
+ ) {
610
+ const {
611
+ store,
612
+ quickSaveApi,
613
+ quickSaveItemApi,
614
+ primaryField,
615
+ env,
616
+ messages,
617
+ reload
618
+ } = this.props;
619
+
620
+ if (Array.isArray(rows)) {
621
+ if (!isEffectiveApi(quickSaveApi)) {
622
+ env && env.alert('CRUD quickSaveApi is required');
623
+ return;
624
+ }
625
+
626
+ const data: any = createObject(store.data, {
627
+ rows,
628
+ rowsDiff: diff,
629
+ indexes: indexes,
630
+ rowsOrigin
631
+ });
632
+
633
+ if (rows.length && rows[0].hasOwnProperty(primaryField || 'id')) {
634
+ data.ids = rows
635
+ .map(item => (item as any)[primaryField || 'id'])
636
+ .join(',');
637
+ }
638
+
639
+ if (unModifiedItems) {
640
+ data.unModifiedItems = unModifiedItems;
641
+ }
642
+
643
+ store
644
+ .saveRemote(quickSaveApi, data, {
645
+ successMessage: messages && messages.saveFailed,
646
+ errorMessage: messages && messages.saveSuccess
647
+ })
648
+ .then(() => {
649
+ reload && this.reloadTarget(reload, data);
650
+ this.getData(undefined, undefined, true, true);
651
+ })
652
+ .catch(() => {});
653
+ } else {
654
+ if (!isEffectiveApi(quickSaveItemApi)) {
655
+ env && env.alert('CRUD quickSaveItemApi is required!');
656
+ return;
657
+ }
658
+
659
+ const data = createObject(store.data, {
660
+ item: rows,
661
+ modified: diff,
662
+ origin: rowsOrigin
663
+ });
664
+
665
+ const sendData = createObject(data, rows);
666
+ store
667
+ .saveRemote(quickSaveItemApi, sendData)
668
+ .then(() => {
669
+ reload && this.reloadTarget(reload, data);
670
+ this.getData(undefined, undefined, true, true);
671
+ })
672
+ .catch(() => {
673
+ resetOnFailed && this.control.reset();
674
+ });
675
+ }
676
+ }
677
+
678
+ handleSaveOrder(moved: Array<object>, rows: Array<object>) {
679
+ const {store, saveOrderApi, orderField, primaryField, env, reload} =
680
+ this.props;
681
+
682
+ if (!saveOrderApi) {
683
+ env && env.alert('CRUD saveOrderApi is required!');
684
+ return;
685
+ }
686
+
687
+ const model: {
688
+ insertAfter?: any;
689
+ insertBefore?: any;
690
+ idMap?: any;
691
+ rows?: any;
692
+ ids?: any;
693
+ order?: any;
694
+ } = createObject(store.data);
695
+
696
+ let insertAfter: any;
697
+ let insertBefore: any;
698
+ const holding: Array<object> = [];
699
+ const hasIdField =
700
+ primaryField &&
701
+ rows[0] &&
702
+ (rows[0] as object).hasOwnProperty(primaryField);
703
+
704
+ hasIdField || (model.idMap = {});
705
+
706
+ model.insertAfter = {};
707
+ rows.forEach((item: any) => {
708
+ if (~moved.indexOf(item)) {
709
+ if (insertAfter) {
710
+ let insertAfterId = hasIdField
711
+ ? (insertAfter as any)[primaryField as string]
712
+ : rows.indexOf(insertAfter);
713
+ model.insertAfter[insertAfterId] =
714
+ (model as any).insertAfter[insertAfterId] || [];
715
+
716
+ hasIdField || (model.idMap[insertAfterId] = insertAfter);
717
+ model.insertAfter[insertAfterId].push(
718
+ hasIdField ? item[primaryField as string] : item
719
+ );
720
+ } else {
721
+ holding.push(item);
722
+ }
723
+ } else {
724
+ insertAfter = item;
725
+ insertBefore = insertBefore || item;
726
+ }
727
+ });
728
+
729
+ if (insertBefore && holding.length) {
730
+ let insertBeforeId = hasIdField
731
+ ? insertBefore[primaryField as string]
732
+ : rows.indexOf(insertBefore);
733
+ hasIdField || (model.idMap[insertBeforeId] = insertBefore);
734
+ model.insertBefore = {};
735
+ model.insertBefore[insertBeforeId] = holding.map((item: any) =>
736
+ hasIdField ? item[primaryField as string] : item
737
+ );
738
+ } else if (holding.length) {
739
+ const first: any = holding[0];
740
+ const firstId = hasIdField
741
+ ? first[primaryField as string]
742
+ : rows.indexOf(first);
743
+
744
+ hasIdField || (model.idMap[firstId] = first);
745
+ model.insertAfter[firstId] = holding
746
+ .slice(1)
747
+ .map((item: any) => (hasIdField ? item[primaryField as string] : item));
748
+ }
749
+
750
+ if (orderField) {
751
+ const start = (store.page - 1) * store.perPage || 0;
752
+ rows = rows.map((item, key) =>
753
+ extendObject(item, {
754
+ [orderField]: start + key + 1
755
+ })
756
+ );
757
+ }
758
+
759
+ model.rows = rows.concat();
760
+ hasIdField &&
761
+ (model.ids = rows
762
+ .map((item: any) => item[primaryField as string])
763
+ .join(','));
764
+ hasIdField &&
765
+ orderField &&
766
+ (model.order = rows.map(item =>
767
+ pick(item, [primaryField as string, orderField])
768
+ ));
769
+
770
+ isEffectiveApi(saveOrderApi, model) &&
771
+ store
772
+ .saveRemote(saveOrderApi, model)
773
+ .then(() => {
774
+ reload && this.reloadTarget(reload, model);
775
+ this.getData(undefined, undefined, true, true);
776
+ })
777
+ .catch(() => {});
778
+ }
779
+
780
+ @autobind
781
+ handleSelect(items: Array<any>, unSelectedItems: Array<any>) {
782
+ const {
783
+ store,
784
+ keepItemSelectionOnPageChange,
785
+ primaryField,
786
+ multiple,
787
+ pickerMode,
788
+ onSelect
789
+ } = this.props;
790
+
791
+ let newItems = items;
792
+ let newUnSelectedItems = unSelectedItems;
793
+
794
+ // cards等组件初始化的时候也会抛出来,感觉不太合理,但是只能用这个先暂时规避一下了
795
+ if (!isArrayChildrenModified(store.selectedItemsAsArray, newItems)) {
796
+ return;
797
+ }
798
+
799
+ if (keepItemSelectionOnPageChange && store.selectedItems.length) {
800
+ const oldItems = store.selectedItems.concat();
801
+ const oldUnselectedItems = store.unSelectedItems.concat();
802
+
803
+ items.forEach(item => {
804
+ const idx = findIndex(
805
+ oldItems,
806
+ a =>
807
+ a === item ||
808
+ (a[primaryField || 'id'] &&
809
+ a[primaryField || 'id'] == item[primaryField || 'id'])
810
+ );
811
+
812
+ if (~idx) {
813
+ oldItems[idx] = item;
814
+ } else {
815
+ oldItems.push(item);
816
+ }
817
+
818
+ const idx2 = findIndex(
819
+ oldUnselectedItems,
820
+ a =>
821
+ a === item ||
822
+ (a[primaryField || 'id'] &&
823
+ a[primaryField || 'id'] == item[primaryField || 'id'])
824
+ );
825
+
826
+ if (~idx2) {
827
+ oldUnselectedItems.splice(idx2, 1);
828
+ }
829
+ });
830
+
831
+ unSelectedItems.forEach(item => {
832
+ const idx = findIndex(
833
+ oldUnselectedItems,
834
+ a =>
835
+ a === item ||
836
+ (a[primaryField || 'id'] &&
837
+ a[primaryField || 'id'] == item[primaryField || 'id'])
838
+ );
839
+
840
+ const idx2 = findIndex(
841
+ oldItems,
842
+ a =>
843
+ a === item ||
844
+ (a[primaryField || 'id'] &&
845
+ a[primaryField || 'id'] == item[primaryField || 'id'])
846
+ );
847
+
848
+ if (~idx) {
849
+ oldUnselectedItems[idx] = item;
850
+ } else {
851
+ oldUnselectedItems.push(item);
852
+ }
853
+
854
+ ~idx2 && oldItems.splice(idx2, 1);
855
+ });
856
+
857
+ newItems = oldItems;
858
+ newUnSelectedItems = oldUnselectedItems;
859
+
860
+ // const thisBatch = items.concat(unSelectedItems);
861
+ // let notInThisBatch = (item: any) =>
862
+ // !find(
863
+ // thisBatch,
864
+ // a => a[primaryField || 'id'] == item[primaryField || 'id']
865
+ // );
866
+
867
+ // newItems = store.selectedItems.filter(notInThisBatch);
868
+ // newUnSelectedItems = store.unSelectedItems.filter(notInThisBatch);
869
+
870
+ // newItems.push(...items);
871
+ // newUnSelectedItems.push(...unSelectedItems);
872
+ }
873
+
874
+ if (pickerMode && multiple === false && newItems.length > 1) {
875
+ newUnSelectedItems.push.apply(
876
+ newUnSelectedItems,
877
+ newItems.splice(0, newItems.length - 1)
878
+ );
879
+ }
880
+
881
+ store.updateSelectData(newItems, newUnSelectedItems);
882
+ onSelect && onSelect(newItems);
883
+ }
884
+
885
+ /**
886
+ * 表格列上的筛选触发
887
+ */
888
+ handleTableQuery(values: object, forceReload: boolean = false) {
889
+ const {store, syncLocation, env, pageField, perPageField} = this.props;
890
+
891
+ store.updateQuery(
892
+ {
893
+ ...values,
894
+ [pageField || 'page']: 1
895
+ },
896
+ syncLocation && env && env.updateLocation
897
+ ? env.updateLocation
898
+ : undefined,
899
+ pageField,
900
+ perPageField
901
+ );
902
+ this.getData(undefined, undefined, undefined, forceReload);
903
+ }
904
+
905
+ reload(subpath?: string, query?: any) {
906
+ if (query) {
907
+ return this.receive(query);
908
+ } else {
909
+ this.getData(undefined, undefined, true, true);
910
+ }
911
+ }
912
+
913
+ receive(values: object) {
914
+ this.handleTableQuery(values, true);
915
+ }
916
+
917
+ @autobind
918
+ doAction(action: Action, data: object, throwErrors: boolean = false) {
919
+ if (
920
+ action.actionType &&
921
+ ~['stopAutoRefresh', 'reload', 'search', 'startAutoRefresh'].includes(
922
+ action.actionType
923
+ )
924
+ ) {
925
+ // @ts-ignore
926
+ return this[`handle${upperFirst(action.actionType)}`](data);
927
+ }
928
+ // const {onAction, data: ctx} = this.props;
929
+ // return this.props.onAction?.(
930
+ // undefined,
931
+ // action,
932
+ // ctx,
933
+ // throwErrors,
934
+ // undefined
935
+ // );
936
+ }
937
+
938
+ unSelectItem(item: any, index: number) {
939
+ const {store} = this.props;
940
+ const selected = store.selectedItems.concat();
941
+ const unSelected = store.unSelectedItems.concat();
942
+
943
+ const idx = selected.indexOf(item);
944
+ ~idx && unSelected.push.apply(unSelected, selected.splice(idx, 1));
945
+
946
+ store.setSelectedItems(selected);
947
+ store.setUnSelectedItems(unSelected);
948
+ }
949
+
950
+ clearSelection() {
951
+ const {store} = this.props;
952
+ const selected = store.selectedItems.concat();
953
+ const unSelected = store.unSelectedItems.concat();
954
+
955
+ store.setSelectedItems([]);
956
+ store.setUnSelectedItems(unSelected.concat(selected));
957
+ }
958
+
959
+ @autobind
960
+ renderChild(region: string, schema: any, props: object = {}) {
961
+ const {render, store} = this.props;
962
+
963
+ // 覆盖所有分页组件
964
+ const childProps = {
965
+ activePage: store.page,
966
+ lastPage: store.lastPage,
967
+ perPage: store.perPage,
968
+ total: store.total,
969
+ onPageChange: this.handleChangePage
970
+ // onAction: onAction
971
+ };
972
+
973
+ return render(region, schema, {
974
+ ...props,
975
+ // 包两层,主要是为了处理以下 case
976
+ // 里面放了个 form,form 提交过来的时候不希望把 items 这些发送过来。
977
+ // 因为会把数据呈现在地址栏上。
978
+ data: createObject(
979
+ createObject(store.filterData, store.getData(this.props.data)),
980
+ {}
981
+ ),
982
+ render: this.renderChild,
983
+ ...childProps
984
+ });
985
+ }
986
+
987
+ renderToolbar(region: string, toolbar?: SchemaCollection) {
988
+ if (!toolbar) {
989
+ return null;
990
+ }
991
+
992
+ toolbar = ([] as any).concat(toolbar) as any[];
993
+
994
+ return toolbar.map((item, index) =>
995
+ this.renderChild(`${region}/${index}`, item, {
996
+ key: index + ''
997
+ })
998
+ );
999
+ }
1000
+
1001
+ renderFilter(filter: SchemaObject[]) {
1002
+ if (!filter || filter.length === 0) {
1003
+ return null;
1004
+ }
1005
+
1006
+ return filter.map((item, index) =>
1007
+ this.renderChild(`filter/${index}`, item, {
1008
+ key: index + '',
1009
+ onSubmit: (data: any) => this.handleSearch({query: data})
1010
+ })
1011
+ );
1012
+ }
1013
+
1014
+ renderSelection(): React.ReactNode {
1015
+ const {
1016
+ store,
1017
+ classnames: cx,
1018
+ labelField,
1019
+ labelTpl,
1020
+ primaryField,
1021
+ translate: __
1022
+ } = this.props;
1023
+
1024
+ if (!store.selectedItems.length) {
1025
+ return null;
1026
+ }
1027
+
1028
+ return (
1029
+ <div className={cx('Crud-selection')}>
1030
+ <div className={cx('Crud-selectionLabel')}>
1031
+ {__('CRUD.selected', {total: store.selectedItems.length})}
1032
+ </div>
1033
+ {store.selectedItems.map((item, index) => (
1034
+ <div key={index} className={cx(`Crud-value`)}>
1035
+ <span
1036
+ data-tooltip={__('delete')}
1037
+ data-position="bottom"
1038
+ className={cx('Crud-valueIcon')}
1039
+ onClick={this.unSelectItem.bind(this, item, index)}
1040
+ >
1041
+ ×
1042
+ </span>
1043
+ <span className={cx('Crud-valueLabel')}>
1044
+ {labelTpl ? (
1045
+ <Html html={filter(labelTpl, item)} />
1046
+ ) : (
1047
+ getVariable(item, labelField || 'label') ||
1048
+ getVariable(item, primaryField || 'id')
1049
+ )}
1050
+ </span>
1051
+ </div>
1052
+ ))}
1053
+ <a onClick={this.clearSelection} className={cx('Crud-selectionClear')}>
1054
+ {__('clear')}
1055
+ </a>
1056
+ </div>
1057
+ );
1058
+ }
1059
+
1060
+ render() {
1061
+ const {
1062
+ columns,
1063
+ className,
1064
+ bodyClassName,
1065
+ filter,
1066
+ render,
1067
+ store,
1068
+ mode = 'table-v2',
1069
+ syncLocation,
1070
+ children,
1071
+ bulkActions,
1072
+ pickerMode,
1073
+ selectable,
1074
+ multiple,
1075
+ valueField,
1076
+ primaryField,
1077
+ value,
1078
+ hideQuickSaveBtn,
1079
+ itemActions,
1080
+ classnames: cx,
1081
+ keepItemSelectionOnPageChange,
1082
+ maxKeepItemSelectionLength,
1083
+ onAction,
1084
+ popOverContainer,
1085
+ translate: __,
1086
+ onQuery,
1087
+ autoGenerateFilter,
1088
+ onSelect,
1089
+ autoFillHeight,
1090
+ showSelection,
1091
+ headerToolbar,
1092
+ footerToolbar,
1093
+ ...rest
1094
+ } = this.props;
1095
+
1096
+ return (
1097
+ <div
1098
+ className={cx('Crud2', className, {
1099
+ 'is-loading': store.loading
1100
+ })}
1101
+ >
1102
+ <div className={cx('Crud2-filter')}>{this.renderFilter(filter)}</div>
1103
+
1104
+ <div className={cx('Crud2-toolbar')}>
1105
+ {this.renderToolbar('headerToolbar', headerToolbar)}
1106
+ </div>
1107
+
1108
+ {showSelection && keepItemSelectionOnPageChange && multiple !== false
1109
+ ? this.renderSelection()
1110
+ : null}
1111
+
1112
+ {render(
1113
+ 'body',
1114
+ {
1115
+ ...rest,
1116
+ type: mode,
1117
+ columns: mode.startsWith('table')
1118
+ ? store.columns || columns
1119
+ : undefined
1120
+ },
1121
+ {
1122
+ key: 'body',
1123
+ className: cx('Crud2-body', bodyClassName),
1124
+ ref: this.controlRef,
1125
+ autoGenerateFilter: !filter && autoGenerateFilter,
1126
+ autoFillHeight: autoFillHeight,
1127
+ checkAll: false, // 不使用组件的全选,因为不在工具栏里
1128
+ selectable: !!(selectable ?? pickerMode),
1129
+ itemActions,
1130
+ multiple: multiple,
1131
+ selected:
1132
+ pickerMode || keepItemSelectionOnPageChange
1133
+ ? store.selectedItemsAsArray
1134
+ : undefined,
1135
+ keepItemSelectionOnPageChange,
1136
+ maxKeepItemSelectionLength,
1137
+ valueField: valueField || primaryField,
1138
+ primaryField: primaryField,
1139
+ items: store.data.items,
1140
+ query: store.query,
1141
+ orderBy: store.query.orderBy,
1142
+ orderDir: store.query.orderDir,
1143
+ popOverContainer,
1144
+ onSave: this.handleSave,
1145
+ onSaveOrder: this.handleSaveOrder,
1146
+ onQuery: this.handleTableQuery,
1147
+ onSelect: this.handleSelect,
1148
+ data: store.mergedData
1149
+ }
1150
+ )}
1151
+
1152
+ <Spinner overlay size="lg" key="info" show={store.loading} />
1153
+
1154
+ <div className={cx('Crud2-toolbar')}>
1155
+ {this.renderToolbar('footerToolbar', footerToolbar)}
1156
+ </div>
1157
+ </div>
1158
+ );
1159
+ }
1160
+ }
1161
+
1162
+ @Renderer({
1163
+ type: 'crud2',
1164
+ storeType: CRUDStore.name,
1165
+ isolateScope: true
1166
+ })
1167
+ export class CRUD2Renderer extends CRUD2 {
1168
+ static contextType = ScopedContext;
1169
+
1170
+ constructor(props: CRUDProps, context: IScopedContext) {
1171
+ super(props);
1172
+
1173
+ const scoped = context;
1174
+ scoped.registerComponent(this);
1175
+ }
1176
+
1177
+ componentWillUnmount() {
1178
+ super.componentWillUnmount();
1179
+ const scoped = this.context as IScopedContext;
1180
+ scoped.unRegisterComponent(this);
1181
+ }
1182
+
1183
+ reload(subpath?: string, query?: any, ctx?: any) {
1184
+ const scoped = this.context as IScopedContext;
1185
+ if (subpath) {
1186
+ return scoped.reload(
1187
+ query ? `${subpath}?${qsstringify(query)}` : subpath,
1188
+ ctx
1189
+ );
1190
+ }
1191
+
1192
+ return super.reload(subpath, query);
1193
+ }
1194
+
1195
+ receive(values: any, subPath?: string) {
1196
+ const scoped = this.context as IScopedContext;
1197
+ if (subPath) {
1198
+ return scoped.send(subPath, values);
1199
+ }
1200
+
1201
+ return super.receive(values);
1202
+ }
1203
+
1204
+ reloadTarget(target: string, data: any) {
1205
+ const scoped = this.context as IScopedContext;
1206
+ scoped.reload(target, data);
1207
+ }
1208
+
1209
+ closeTarget(target: string) {
1210
+ const scoped = this.context as IScopedContext;
1211
+ scoped.close(target);
1212
+ }
1213
+ }