@formily-design/formily-antd 1.0.0

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 (584) hide show
  1. package/.umirc.js +44 -0
  2. package/LICENSE.md +20 -0
  3. package/README.md +106 -0
  4. package/copy.ts +6 -0
  5. package/esm/common/Container/index.d.ts +6 -0
  6. package/esm/common/Container/index.js +13 -0
  7. package/esm/common/Container/styles.less +5 -0
  8. package/esm/common/FormItemSwitcher/index.d.ts +6 -0
  9. package/esm/common/FormItemSwitcher/index.js +7 -0
  10. package/esm/common/LoadTemplate/index.d.ts +13 -0
  11. package/esm/common/LoadTemplate/index.js +8 -0
  12. package/esm/components/ArrayBase/index.d.ts +1 -0
  13. package/esm/components/ArrayBase/index.js +71 -0
  14. package/esm/components/ArrayCards/index.d.ts +1 -0
  15. package/esm/components/ArrayCards/index.js +1 -0
  16. package/esm/components/ArrayCards/preview.d.ts +4 -0
  17. package/esm/components/ArrayCards/preview.js +206 -0
  18. package/esm/components/ArrayCards/styles.less +2 -0
  19. package/esm/components/ArrayTable/index.d.ts +1 -0
  20. package/esm/components/ArrayTable/index.js +1 -0
  21. package/esm/components/ArrayTable/preview.d.ts +4 -0
  22. package/esm/components/ArrayTable/preview.js +384 -0
  23. package/esm/components/ArrayTable/styles.less +2 -0
  24. package/esm/components/Card/index.d.ts +1 -0
  25. package/esm/components/Card/index.js +1 -0
  26. package/esm/components/Card/preview.d.ts +4 -0
  27. package/esm/components/Card/preview.js +34 -0
  28. package/esm/components/Cascader/index.d.ts +1 -0
  29. package/esm/components/Cascader/index.js +1 -0
  30. package/esm/components/Cascader/preview.d.ts +4 -0
  31. package/esm/components/Cascader/preview.js +28 -0
  32. package/esm/components/Checkbox/index.d.ts +1 -0
  33. package/esm/components/Checkbox/index.js +1 -0
  34. package/esm/components/Checkbox/preview.d.ts +4 -0
  35. package/esm/components/Checkbox/preview.js +33 -0
  36. package/esm/components/DatePicker/index.d.ts +1 -0
  37. package/esm/components/DatePicker/index.js +1 -0
  38. package/esm/components/DatePicker/preview.d.ts +4 -0
  39. package/esm/components/DatePicker/preview.js +50 -0
  40. package/esm/components/Field/index.d.ts +2 -0
  41. package/esm/components/Field/index.js +2 -0
  42. package/esm/components/Field/preview.d.ts +3 -0
  43. package/esm/components/Field/preview.js +127 -0
  44. package/esm/components/Field/shared.d.ts +649 -0
  45. package/esm/components/Field/shared.js +242 -0
  46. package/esm/components/Form/index.d.ts +1 -0
  47. package/esm/components/Form/index.js +1 -0
  48. package/esm/components/Form/preview.d.ts +5 -0
  49. package/esm/components/Form/preview.js +81 -0
  50. package/esm/components/Form/styles.less +32 -0
  51. package/esm/components/FormCollapse/index.d.ts +1 -0
  52. package/esm/components/FormCollapse/index.js +1 -0
  53. package/esm/components/FormCollapse/preview.d.ts +6 -0
  54. package/esm/components/FormCollapse/preview.js +116 -0
  55. package/esm/components/FormGrid/index.d.ts +1 -0
  56. package/esm/components/FormGrid/index.js +1 -0
  57. package/esm/components/FormGrid/preview.d.ts +9 -0
  58. package/esm/components/FormGrid/preview.js +131 -0
  59. package/esm/components/FormGrid/styles.less +5 -0
  60. package/esm/components/FormLayout/index.d.ts +1 -0
  61. package/esm/components/FormLayout/index.js +1 -0
  62. package/esm/components/FormLayout/preview.d.ts +4 -0
  63. package/esm/components/FormLayout/preview.js +29 -0
  64. package/esm/components/FormTab/index.d.ts +1 -0
  65. package/esm/components/FormTab/index.js +1 -0
  66. package/esm/components/FormTab/preview.d.ts +6 -0
  67. package/esm/components/FormTab/preview.js +123 -0
  68. package/esm/components/Input/index.d.ts +1 -0
  69. package/esm/components/Input/index.js +1 -0
  70. package/esm/components/Input/preview.d.ts +4 -0
  71. package/esm/components/Input/preview.js +50 -0
  72. package/esm/components/NumberPicker/index.d.ts +1 -0
  73. package/esm/components/NumberPicker/index.js +1 -0
  74. package/esm/components/NumberPicker/preview.d.ts +4 -0
  75. package/esm/components/NumberPicker/preview.js +29 -0
  76. package/esm/components/Object/index.d.ts +1 -0
  77. package/esm/components/Object/index.js +1 -0
  78. package/esm/components/Object/preview.d.ts +4 -0
  79. package/esm/components/Object/preview.js +26 -0
  80. package/esm/components/Password/index.d.ts +1 -0
  81. package/esm/components/Password/index.js +1 -0
  82. package/esm/components/Password/preview.d.ts +4 -0
  83. package/esm/components/Password/preview.js +28 -0
  84. package/esm/components/Radio/index.d.ts +1 -0
  85. package/esm/components/Radio/index.js +1 -0
  86. package/esm/components/Radio/preview.d.ts +4 -0
  87. package/esm/components/Radio/preview.js +33 -0
  88. package/esm/components/Rate/index.d.ts +1 -0
  89. package/esm/components/Rate/index.js +1 -0
  90. package/esm/components/Rate/preview.d.ts +4 -0
  91. package/esm/components/Rate/preview.js +29 -0
  92. package/esm/components/Select/index.d.ts +1 -0
  93. package/esm/components/Select/index.js +1 -0
  94. package/esm/components/Select/preview.d.ts +4 -0
  95. package/esm/components/Select/preview.js +28 -0
  96. package/esm/components/Slider/index.d.ts +1 -0
  97. package/esm/components/Slider/index.js +1 -0
  98. package/esm/components/Slider/preview.d.ts +4 -0
  99. package/esm/components/Slider/preview.js +29 -0
  100. package/esm/components/Space/index.d.ts +1 -0
  101. package/esm/components/Space/index.js +1 -0
  102. package/esm/components/Space/preview.d.ts +4 -0
  103. package/esm/components/Space/preview.js +30 -0
  104. package/esm/components/Switch/index.d.ts +1 -0
  105. package/esm/components/Switch/index.js +1 -0
  106. package/esm/components/Switch/preview.d.ts +4 -0
  107. package/esm/components/Switch/preview.js +29 -0
  108. package/esm/components/Text/index.d.ts +1 -0
  109. package/esm/components/Text/index.js +1 -0
  110. package/esm/components/Text/preview.d.ts +11 -0
  111. package/esm/components/Text/preview.js +32 -0
  112. package/esm/components/Text/styles.less +10 -0
  113. package/esm/components/TimePicker/index.d.ts +1 -0
  114. package/esm/components/TimePicker/index.js +1 -0
  115. package/esm/components/TimePicker/preview.d.ts +4 -0
  116. package/esm/components/TimePicker/preview.js +50 -0
  117. package/esm/components/Transfer/index.d.ts +1 -0
  118. package/esm/components/Transfer/index.js +1 -0
  119. package/esm/components/Transfer/preview.d.ts +4 -0
  120. package/esm/components/Transfer/preview.js +28 -0
  121. package/esm/components/TreeSelect/index.d.ts +1 -0
  122. package/esm/components/TreeSelect/index.js +1 -0
  123. package/esm/components/TreeSelect/preview.d.ts +4 -0
  124. package/esm/components/TreeSelect/preview.js +28 -0
  125. package/esm/components/Upload/index.d.ts +1 -0
  126. package/esm/components/Upload/index.js +1 -0
  127. package/esm/components/Upload/preview.d.ts +4 -0
  128. package/esm/components/Upload/preview.js +56 -0
  129. package/esm/components/index.d.ts +27 -0
  130. package/esm/components/index.js +27 -0
  131. package/esm/hooks/index.d.ts +1 -0
  132. package/esm/hooks/index.js +1 -0
  133. package/esm/hooks/useDropTemplate.d.ts +2 -0
  134. package/esm/hooks/useDropTemplate.js +20 -0
  135. package/esm/index.d.ts +3 -0
  136. package/esm/index.js +3 -0
  137. package/esm/locales/ArrayBase.d.ts +77 -0
  138. package/esm/locales/ArrayBase.js +91 -0
  139. package/esm/locales/ArrayCards.d.ts +1 -0
  140. package/esm/locales/ArrayCards.js +19 -0
  141. package/esm/locales/ArrayTable.d.ts +138 -0
  142. package/esm/locales/ArrayTable.js +129 -0
  143. package/esm/locales/Card.d.ts +44 -0
  144. package/esm/locales/Card.js +44 -0
  145. package/esm/locales/Cascader.d.ts +59 -0
  146. package/esm/locales/Cascader.js +59 -0
  147. package/esm/locales/Checkbox.d.ts +11 -0
  148. package/esm/locales/Checkbox.js +11 -0
  149. package/esm/locales/Component.d.ts +53 -0
  150. package/esm/locales/Component.js +53 -0
  151. package/esm/locales/DatePicker.d.ts +75 -0
  152. package/esm/locales/DatePicker.js +86 -0
  153. package/esm/locales/Field.d.ts +341 -0
  154. package/esm/locales/Field.js +338 -0
  155. package/esm/locales/Form.d.ts +1 -0
  156. package/esm/locales/Form.js +133 -0
  157. package/esm/locales/FormCollapse.d.ts +88 -0
  158. package/esm/locales/FormCollapse.js +82 -0
  159. package/esm/locales/FormGrid.d.ts +76 -0
  160. package/esm/locales/FormGrid.js +76 -0
  161. package/esm/locales/FormLayout.d.ts +128 -0
  162. package/esm/locales/FormLayout.js +122 -0
  163. package/esm/locales/FormTab.d.ts +82 -0
  164. package/esm/locales/FormTab.js +82 -0
  165. package/esm/locales/Input.d.ts +50 -0
  166. package/esm/locales/Input.js +50 -0
  167. package/esm/locales/NumberPicker.d.ts +77 -0
  168. package/esm/locales/NumberPicker.js +77 -0
  169. package/esm/locales/Object.d.ts +11 -0
  170. package/esm/locales/Object.js +11 -0
  171. package/esm/locales/Password.d.ts +1 -0
  172. package/esm/locales/Password.js +13 -0
  173. package/esm/locales/Radio.d.ts +47 -0
  174. package/esm/locales/Radio.js +29 -0
  175. package/esm/locales/Rate.d.ts +41 -0
  176. package/esm/locales/Rate.js +32 -0
  177. package/esm/locales/Select.d.ts +125 -0
  178. package/esm/locales/Select.js +125 -0
  179. package/esm/locales/Slider.d.ts +71 -0
  180. package/esm/locales/Slider.js +71 -0
  181. package/esm/locales/Space.d.ts +53 -0
  182. package/esm/locales/Space.js +50 -0
  183. package/esm/locales/Switch.d.ts +11 -0
  184. package/esm/locales/Switch.js +11 -0
  185. package/esm/locales/Text.d.ts +38 -0
  186. package/esm/locales/Text.js +38 -0
  187. package/esm/locales/TextArea.d.ts +35 -0
  188. package/esm/locales/TextArea.js +35 -0
  189. package/esm/locales/TimePicker.d.ts +2 -0
  190. package/esm/locales/TimePicker.js +72 -0
  191. package/esm/locales/Transfer.d.ts +56 -0
  192. package/esm/locales/Transfer.js +38 -0
  193. package/esm/locales/TreeSelect.d.ts +181 -0
  194. package/esm/locales/TreeSelect.js +178 -0
  195. package/esm/locales/Upload.d.ts +78 -0
  196. package/esm/locales/Upload.js +92 -0
  197. package/esm/locales/Void.d.ts +11 -0
  198. package/esm/locales/Void.js +11 -0
  199. package/esm/locales/all.d.ts +31 -0
  200. package/esm/locales/all.js +31 -0
  201. package/esm/locales/index.d.ts +2 -0
  202. package/esm/locales/index.js +2 -0
  203. package/esm/schemas/ArrayCards.d.ts +59 -0
  204. package/esm/schemas/ArrayCards.js +4 -0
  205. package/esm/schemas/ArrayTable.d.ts +5 -0
  206. package/esm/schemas/ArrayTable.js +111 -0
  207. package/esm/schemas/CSSStyle.d.ts +2 -0
  208. package/esm/schemas/CSSStyle.js +49 -0
  209. package/esm/schemas/Card.d.ts +4 -0
  210. package/esm/schemas/Card.js +45 -0
  211. package/esm/schemas/Cascader.d.ts +2 -0
  212. package/esm/schemas/Cascader.js +74 -0
  213. package/esm/schemas/Checkbox.d.ts +4 -0
  214. package/esm/schemas/Checkbox.js +10 -0
  215. package/esm/schemas/DatePicker.d.ts +4 -0
  216. package/esm/schemas/DatePicker.js +104 -0
  217. package/esm/schemas/Form.d.ts +2 -0
  218. package/esm/schemas/Form.js +6 -0
  219. package/esm/schemas/FormCollapse.d.ts +4 -0
  220. package/esm/schemas/FormCollapse.js +58 -0
  221. package/esm/schemas/FormGrid.d.ts +4 -0
  222. package/esm/schemas/FormGrid.js +76 -0
  223. package/esm/schemas/FormItem.d.ts +2 -0
  224. package/esm/schemas/FormItem.js +138 -0
  225. package/esm/schemas/FormLayout.d.ts +2 -0
  226. package/esm/schemas/FormLayout.js +121 -0
  227. package/esm/schemas/FormTab.d.ts +4 -0
  228. package/esm/schemas/FormTab.js +43 -0
  229. package/esm/schemas/Input.d.ts +4 -0
  230. package/esm/schemas/Input.js +89 -0
  231. package/esm/schemas/NumberPicker.d.ts +2 -0
  232. package/esm/schemas/NumberPicker.js +79 -0
  233. package/esm/schemas/Password.d.ts +2 -0
  234. package/esm/schemas/Password.js +9 -0
  235. package/esm/schemas/Radio.d.ts +4 -0
  236. package/esm/schemas/Radio.js +35 -0
  237. package/esm/schemas/Rate.d.ts +2 -0
  238. package/esm/schemas/Rate.js +38 -0
  239. package/esm/schemas/Select.d.ts +2 -0
  240. package/esm/schemas/Select.js +159 -0
  241. package/esm/schemas/Slider.d.ts +2 -0
  242. package/esm/schemas/Slider.js +77 -0
  243. package/esm/schemas/Space.d.ts +2 -0
  244. package/esm/schemas/Space.js +39 -0
  245. package/esm/schemas/Switch.d.ts +2 -0
  246. package/esm/schemas/Switch.js +19 -0
  247. package/esm/schemas/Text.d.ts +2 -0
  248. package/esm/schemas/Text.js +19 -0
  249. package/esm/schemas/TimePicker.d.ts +116 -0
  250. package/esm/schemas/TimePicker.js +120 -0
  251. package/esm/schemas/Transfer.d.ts +2 -0
  252. package/esm/schemas/Transfer.js +44 -0
  253. package/esm/schemas/TreeSelect.d.ts +2 -0
  254. package/esm/schemas/TreeSelect.js +137 -0
  255. package/esm/schemas/Upload.d.ts +4 -0
  256. package/esm/schemas/Upload.js +99 -0
  257. package/esm/schemas/all.d.ts +27 -0
  258. package/esm/schemas/all.js +27 -0
  259. package/esm/schemas/index.d.ts +2 -0
  260. package/esm/schemas/index.js +2 -0
  261. package/esm/shared.d.ts +13 -0
  262. package/esm/shared.js +86 -0
  263. package/lib/common/Container/index.d.ts +6 -0
  264. package/lib/common/Container/index.js +20 -0
  265. package/lib/common/Container/styles.less +5 -0
  266. package/lib/common/FormItemSwitcher/index.d.ts +6 -0
  267. package/lib/common/FormItemSwitcher/index.js +14 -0
  268. package/lib/common/LoadTemplate/index.d.ts +13 -0
  269. package/lib/common/LoadTemplate/index.js +15 -0
  270. package/lib/components/ArrayBase/index.d.ts +1 -0
  271. package/lib/components/ArrayBase/index.js +75 -0
  272. package/lib/components/ArrayCards/index.d.ts +1 -0
  273. package/lib/components/ArrayCards/index.js +17 -0
  274. package/lib/components/ArrayCards/preview.d.ts +4 -0
  275. package/lib/components/ArrayCards/preview.js +245 -0
  276. package/lib/components/ArrayCards/styles.less +2 -0
  277. package/lib/components/ArrayTable/index.d.ts +1 -0
  278. package/lib/components/ArrayTable/index.js +17 -0
  279. package/lib/components/ArrayTable/preview.d.ts +4 -0
  280. package/lib/components/ArrayTable/preview.js +390 -0
  281. package/lib/components/ArrayTable/styles.less +2 -0
  282. package/lib/components/Card/index.d.ts +1 -0
  283. package/lib/components/Card/index.js +17 -0
  284. package/lib/components/Card/preview.d.ts +4 -0
  285. package/lib/components/Card/preview.js +41 -0
  286. package/lib/components/Cascader/index.d.ts +1 -0
  287. package/lib/components/Cascader/index.js +17 -0
  288. package/lib/components/Cascader/preview.d.ts +4 -0
  289. package/lib/components/Cascader/preview.js +31 -0
  290. package/lib/components/Checkbox/index.d.ts +1 -0
  291. package/lib/components/Checkbox/index.js +17 -0
  292. package/lib/components/Checkbox/preview.d.ts +4 -0
  293. package/lib/components/Checkbox/preview.js +36 -0
  294. package/lib/components/DatePicker/index.d.ts +1 -0
  295. package/lib/components/DatePicker/index.js +17 -0
  296. package/lib/components/DatePicker/preview.d.ts +4 -0
  297. package/lib/components/DatePicker/preview.js +53 -0
  298. package/lib/components/Field/index.d.ts +2 -0
  299. package/lib/components/Field/index.js +18 -0
  300. package/lib/components/Field/preview.d.ts +3 -0
  301. package/lib/components/Field/preview.js +133 -0
  302. package/lib/components/Field/shared.d.ts +649 -0
  303. package/lib/components/Field/shared.js +248 -0
  304. package/lib/components/Form/index.d.ts +1 -0
  305. package/lib/components/Form/index.js +17 -0
  306. package/lib/components/Form/preview.d.ts +5 -0
  307. package/lib/components/Form/preview.js +117 -0
  308. package/lib/components/Form/styles.less +32 -0
  309. package/lib/components/FormCollapse/index.d.ts +1 -0
  310. package/lib/components/FormCollapse/index.js +17 -0
  311. package/lib/components/FormCollapse/preview.d.ts +6 -0
  312. package/lib/components/FormCollapse/preview.js +152 -0
  313. package/lib/components/FormGrid/index.d.ts +1 -0
  314. package/lib/components/FormGrid/index.js +17 -0
  315. package/lib/components/FormGrid/preview.d.ts +9 -0
  316. package/lib/components/FormGrid/preview.js +137 -0
  317. package/lib/components/FormGrid/styles.less +5 -0
  318. package/lib/components/FormLayout/index.d.ts +1 -0
  319. package/lib/components/FormLayout/index.js +17 -0
  320. package/lib/components/FormLayout/preview.d.ts +4 -0
  321. package/lib/components/FormLayout/preview.js +32 -0
  322. package/lib/components/FormTab/index.d.ts +1 -0
  323. package/lib/components/FormTab/index.js +17 -0
  324. package/lib/components/FormTab/preview.d.ts +6 -0
  325. package/lib/components/FormTab/preview.js +159 -0
  326. package/lib/components/Input/index.d.ts +1 -0
  327. package/lib/components/Input/index.js +17 -0
  328. package/lib/components/Input/preview.d.ts +4 -0
  329. package/lib/components/Input/preview.js +53 -0
  330. package/lib/components/NumberPicker/index.d.ts +1 -0
  331. package/lib/components/NumberPicker/index.js +17 -0
  332. package/lib/components/NumberPicker/preview.d.ts +4 -0
  333. package/lib/components/NumberPicker/preview.js +32 -0
  334. package/lib/components/Object/index.d.ts +1 -0
  335. package/lib/components/Object/index.js +17 -0
  336. package/lib/components/Object/preview.d.ts +4 -0
  337. package/lib/components/Object/preview.js +29 -0
  338. package/lib/components/Password/index.d.ts +1 -0
  339. package/lib/components/Password/index.js +17 -0
  340. package/lib/components/Password/preview.d.ts +4 -0
  341. package/lib/components/Password/preview.js +31 -0
  342. package/lib/components/Radio/index.d.ts +1 -0
  343. package/lib/components/Radio/index.js +17 -0
  344. package/lib/components/Radio/preview.d.ts +4 -0
  345. package/lib/components/Radio/preview.js +36 -0
  346. package/lib/components/Rate/index.d.ts +1 -0
  347. package/lib/components/Rate/index.js +17 -0
  348. package/lib/components/Rate/preview.d.ts +4 -0
  349. package/lib/components/Rate/preview.js +32 -0
  350. package/lib/components/Select/index.d.ts +1 -0
  351. package/lib/components/Select/index.js +17 -0
  352. package/lib/components/Select/preview.d.ts +4 -0
  353. package/lib/components/Select/preview.js +31 -0
  354. package/lib/components/Slider/index.d.ts +1 -0
  355. package/lib/components/Slider/index.js +17 -0
  356. package/lib/components/Slider/preview.d.ts +4 -0
  357. package/lib/components/Slider/preview.js +32 -0
  358. package/lib/components/Space/index.d.ts +1 -0
  359. package/lib/components/Space/index.js +17 -0
  360. package/lib/components/Space/preview.d.ts +4 -0
  361. package/lib/components/Space/preview.js +33 -0
  362. package/lib/components/Switch/index.d.ts +1 -0
  363. package/lib/components/Switch/index.js +17 -0
  364. package/lib/components/Switch/preview.d.ts +4 -0
  365. package/lib/components/Switch/preview.js +32 -0
  366. package/lib/components/Text/index.d.ts +1 -0
  367. package/lib/components/Text/index.js +17 -0
  368. package/lib/components/Text/preview.d.ts +11 -0
  369. package/lib/components/Text/preview.js +39 -0
  370. package/lib/components/Text/styles.less +10 -0
  371. package/lib/components/TimePicker/index.d.ts +1 -0
  372. package/lib/components/TimePicker/index.js +17 -0
  373. package/lib/components/TimePicker/preview.d.ts +4 -0
  374. package/lib/components/TimePicker/preview.js +53 -0
  375. package/lib/components/Transfer/index.d.ts +1 -0
  376. package/lib/components/Transfer/index.js +17 -0
  377. package/lib/components/Transfer/preview.d.ts +4 -0
  378. package/lib/components/Transfer/preview.js +31 -0
  379. package/lib/components/TreeSelect/index.d.ts +1 -0
  380. package/lib/components/TreeSelect/index.js +17 -0
  381. package/lib/components/TreeSelect/preview.d.ts +4 -0
  382. package/lib/components/TreeSelect/preview.js +31 -0
  383. package/lib/components/Upload/index.d.ts +1 -0
  384. package/lib/components/Upload/index.js +17 -0
  385. package/lib/components/Upload/preview.d.ts +4 -0
  386. package/lib/components/Upload/preview.js +59 -0
  387. package/lib/components/index.d.ts +27 -0
  388. package/lib/components/index.js +43 -0
  389. package/lib/hooks/index.d.ts +1 -0
  390. package/lib/hooks/index.js +17 -0
  391. package/lib/hooks/useDropTemplate.d.ts +2 -0
  392. package/lib/hooks/useDropTemplate.js +24 -0
  393. package/lib/index.d.ts +3 -0
  394. package/lib/index.js +19 -0
  395. package/lib/locales/ArrayBase.d.ts +77 -0
  396. package/lib/locales/ArrayBase.js +94 -0
  397. package/lib/locales/ArrayCards.d.ts +1 -0
  398. package/lib/locales/ArrayCards.js +22 -0
  399. package/lib/locales/ArrayTable.d.ts +138 -0
  400. package/lib/locales/ArrayTable.js +132 -0
  401. package/lib/locales/Card.d.ts +44 -0
  402. package/lib/locales/Card.js +47 -0
  403. package/lib/locales/Cascader.d.ts +59 -0
  404. package/lib/locales/Cascader.js +62 -0
  405. package/lib/locales/Checkbox.d.ts +11 -0
  406. package/lib/locales/Checkbox.js +14 -0
  407. package/lib/locales/Component.d.ts +53 -0
  408. package/lib/locales/Component.js +56 -0
  409. package/lib/locales/DatePicker.d.ts +75 -0
  410. package/lib/locales/DatePicker.js +89 -0
  411. package/lib/locales/Field.d.ts +341 -0
  412. package/lib/locales/Field.js +341 -0
  413. package/lib/locales/Form.d.ts +1 -0
  414. package/lib/locales/Form.js +136 -0
  415. package/lib/locales/FormCollapse.d.ts +88 -0
  416. package/lib/locales/FormCollapse.js +85 -0
  417. package/lib/locales/FormGrid.d.ts +76 -0
  418. package/lib/locales/FormGrid.js +79 -0
  419. package/lib/locales/FormLayout.d.ts +128 -0
  420. package/lib/locales/FormLayout.js +125 -0
  421. package/lib/locales/FormTab.d.ts +82 -0
  422. package/lib/locales/FormTab.js +85 -0
  423. package/lib/locales/Input.d.ts +50 -0
  424. package/lib/locales/Input.js +53 -0
  425. package/lib/locales/NumberPicker.d.ts +77 -0
  426. package/lib/locales/NumberPicker.js +80 -0
  427. package/lib/locales/Object.d.ts +11 -0
  428. package/lib/locales/Object.js +14 -0
  429. package/lib/locales/Password.d.ts +1 -0
  430. package/lib/locales/Password.js +16 -0
  431. package/lib/locales/Radio.d.ts +47 -0
  432. package/lib/locales/Radio.js +32 -0
  433. package/lib/locales/Rate.d.ts +41 -0
  434. package/lib/locales/Rate.js +35 -0
  435. package/lib/locales/Select.d.ts +125 -0
  436. package/lib/locales/Select.js +128 -0
  437. package/lib/locales/Slider.d.ts +71 -0
  438. package/lib/locales/Slider.js +74 -0
  439. package/lib/locales/Space.d.ts +53 -0
  440. package/lib/locales/Space.js +53 -0
  441. package/lib/locales/Switch.d.ts +11 -0
  442. package/lib/locales/Switch.js +14 -0
  443. package/lib/locales/Text.d.ts +38 -0
  444. package/lib/locales/Text.js +41 -0
  445. package/lib/locales/TextArea.d.ts +35 -0
  446. package/lib/locales/TextArea.js +38 -0
  447. package/lib/locales/TimePicker.d.ts +2 -0
  448. package/lib/locales/TimePicker.js +75 -0
  449. package/lib/locales/Transfer.d.ts +56 -0
  450. package/lib/locales/Transfer.js +41 -0
  451. package/lib/locales/TreeSelect.d.ts +181 -0
  452. package/lib/locales/TreeSelect.js +181 -0
  453. package/lib/locales/Upload.d.ts +78 -0
  454. package/lib/locales/Upload.js +95 -0
  455. package/lib/locales/Void.d.ts +11 -0
  456. package/lib/locales/Void.js +14 -0
  457. package/lib/locales/all.d.ts +31 -0
  458. package/lib/locales/all.js +47 -0
  459. package/lib/locales/index.d.ts +2 -0
  460. package/lib/locales/index.js +38 -0
  461. package/lib/schemas/ArrayCards.d.ts +59 -0
  462. package/lib/schemas/ArrayCards.js +7 -0
  463. package/lib/schemas/ArrayTable.d.ts +5 -0
  464. package/lib/schemas/ArrayTable.js +114 -0
  465. package/lib/schemas/CSSStyle.d.ts +2 -0
  466. package/lib/schemas/CSSStyle.js +52 -0
  467. package/lib/schemas/Card.d.ts +4 -0
  468. package/lib/schemas/Card.js +48 -0
  469. package/lib/schemas/Cascader.d.ts +2 -0
  470. package/lib/schemas/Cascader.js +77 -0
  471. package/lib/schemas/Checkbox.d.ts +4 -0
  472. package/lib/schemas/Checkbox.js +13 -0
  473. package/lib/schemas/DatePicker.d.ts +4 -0
  474. package/lib/schemas/DatePicker.js +107 -0
  475. package/lib/schemas/Form.d.ts +2 -0
  476. package/lib/schemas/Form.js +9 -0
  477. package/lib/schemas/FormCollapse.d.ts +4 -0
  478. package/lib/schemas/FormCollapse.js +61 -0
  479. package/lib/schemas/FormGrid.d.ts +4 -0
  480. package/lib/schemas/FormGrid.js +79 -0
  481. package/lib/schemas/FormItem.d.ts +2 -0
  482. package/lib/schemas/FormItem.js +141 -0
  483. package/lib/schemas/FormLayout.d.ts +2 -0
  484. package/lib/schemas/FormLayout.js +124 -0
  485. package/lib/schemas/FormTab.d.ts +4 -0
  486. package/lib/schemas/FormTab.js +46 -0
  487. package/lib/schemas/Input.d.ts +4 -0
  488. package/lib/schemas/Input.js +92 -0
  489. package/lib/schemas/NumberPicker.d.ts +2 -0
  490. package/lib/schemas/NumberPicker.js +82 -0
  491. package/lib/schemas/Password.d.ts +2 -0
  492. package/lib/schemas/Password.js +12 -0
  493. package/lib/schemas/Radio.d.ts +4 -0
  494. package/lib/schemas/Radio.js +38 -0
  495. package/lib/schemas/Rate.d.ts +2 -0
  496. package/lib/schemas/Rate.js +41 -0
  497. package/lib/schemas/Select.d.ts +2 -0
  498. package/lib/schemas/Select.js +162 -0
  499. package/lib/schemas/Slider.d.ts +2 -0
  500. package/lib/schemas/Slider.js +80 -0
  501. package/lib/schemas/Space.d.ts +2 -0
  502. package/lib/schemas/Space.js +42 -0
  503. package/lib/schemas/Switch.d.ts +2 -0
  504. package/lib/schemas/Switch.js +22 -0
  505. package/lib/schemas/Text.d.ts +2 -0
  506. package/lib/schemas/Text.js +22 -0
  507. package/lib/schemas/TimePicker.d.ts +116 -0
  508. package/lib/schemas/TimePicker.js +123 -0
  509. package/lib/schemas/Transfer.d.ts +2 -0
  510. package/lib/schemas/Transfer.js +47 -0
  511. package/lib/schemas/TreeSelect.d.ts +2 -0
  512. package/lib/schemas/TreeSelect.js +140 -0
  513. package/lib/schemas/Upload.d.ts +4 -0
  514. package/lib/schemas/Upload.js +102 -0
  515. package/lib/schemas/all.d.ts +27 -0
  516. package/lib/schemas/all.js +43 -0
  517. package/lib/schemas/index.d.ts +2 -0
  518. package/lib/schemas/index.js +38 -0
  519. package/lib/shared.d.ts +13 -0
  520. package/lib/shared.js +98 -0
  521. package/package.json +75 -0
  522. package/playground/components/AsyncSelect/AsyncSelect.tsx +38 -0
  523. package/playground/components/AsyncSelect/index.tsx +1 -0
  524. package/playground/components/AsyncSelect/preview.tsx +36 -0
  525. package/playground/components/ClickEventSetter/ActionConfigModal.tsx +173 -0
  526. package/playground/components/ClickEventSetter/ActionList.tsx +67 -0
  527. package/playground/components/ClickEventSetter/DownloadPanel.tsx +24 -0
  528. package/playground/components/ClickEventSetter/NavigationPanel.tsx +42 -0
  529. package/playground/components/ClickEventSetter/RequestPanel.tsx +190 -0
  530. package/playground/components/ClickEventSetter/index.tsx +90 -0
  531. package/playground/components/ClickEventSetter/styles.less +89 -0
  532. package/playground/components/ClickEventSetter/types.ts +43 -0
  533. package/playground/components/FormButton/FormButton.tsx +189 -0
  534. package/playground/components/FormButton/hooks/useEventActionExecutor.ts +65 -0
  535. package/playground/components/FormButton/index.ts +1 -0
  536. package/playground/components/FormButton/preview.tsx +60 -0
  537. package/playground/components/FormButton/utils/actionExecutors.ts +96 -0
  538. package/playground/components/FormButtonGroup/FormButtonGroup.tsx +21 -0
  539. package/playground/components/FormButtonGroup/index.ts +1 -0
  540. package/playground/components/FormButtonGroup/preview.tsx +66 -0
  541. package/playground/components/FormList/FormList.tsx +164 -0
  542. package/playground/components/FormList/index.tsx +1 -0
  543. package/playground/components/FormList/preview.tsx +429 -0
  544. package/playground/components/LocationPicker/LocationModal.tsx +328 -0
  545. package/playground/components/LocationPicker/LocationPicker.tsx +163 -0
  546. package/playground/components/LocationPicker/SearchBox.tsx +122 -0
  547. package/playground/components/LocationPicker/api.ts +77 -0
  548. package/playground/components/LocationPicker/constants.ts +2 -0
  549. package/playground/components/LocationPicker/index.tsx +44 -0
  550. package/playground/components/LocationPicker/types.ts +160 -0
  551. package/playground/components/LocationPicker/utils.ts +46 -0
  552. package/playground/components/ResourceIcon/index.module.less +10 -0
  553. package/playground/components/ResourceIcon/index.tsx +10 -0
  554. package/playground/designerLocales/en-US.ts +38 -0
  555. package/playground/designerLocales/index.ts +6 -0
  556. package/playground/designerLocales/ko-KR.ts +10 -0
  557. package/playground/designerLocales/zh-CN.ts +38 -0
  558. package/playground/locales/FormButton.ts +38 -0
  559. package/playground/locales/FormButtonGroup.ts +29 -0
  560. package/playground/locales/LocationPicker.ts +30 -0
  561. package/playground/locales/all.ts +3 -0
  562. package/playground/locales/index.ts +3 -0
  563. package/playground/main.tsx +222 -0
  564. package/playground/react-app-env.d.ts +4 -0
  565. package/playground/request.ts +123 -0
  566. package/playground/schemas/FormButton.ts +42 -0
  567. package/playground/schemas/FormButtonGroup.ts +24 -0
  568. package/playground/schemas/LocationPicker.ts +14 -0
  569. package/playground/schemas/all.ts +3 -0
  570. package/playground/schemas/index.ts +3 -0
  571. package/playground/service/index.ts +1 -0
  572. package/playground/service/schema.ts +22 -0
  573. package/playground/template.ejs +20 -0
  574. package/playground/utils.ts +744 -0
  575. package/playground/webpack.base.ts +123 -0
  576. package/playground/webpack.dev.ts +64 -0
  577. package/playground/webpack.prod.ts +46 -0
  578. package/playground/widgets/ActionsWidget.tsx +58 -0
  579. package/playground/widgets/LogoWidget.tsx +20 -0
  580. package/playground/widgets/MarkupSchemaWidget.tsx +164 -0
  581. package/playground/widgets/PreviewWidget.tsx +188 -0
  582. package/playground/widgets/SchemaEditorWidget.tsx +27 -0
  583. package/playground/widgets/index.ts +5 -0
  584. package/tsconfig.build.json +12 -0
@@ -0,0 +1,190 @@
1
+ import React from 'react'
2
+ import { Form, Input, Select, Tabs, Button } from 'antd'
3
+ import { MonacoInput } from '@formily-design/react-settings-form'
4
+ import { TextWidget } from '@formily-design/react'
5
+ import './styles.less'
6
+
7
+ export interface IRequestPanelProps {
8
+ form?: any
9
+ }
10
+
11
+ export const RequestPanel: React.FC<IRequestPanelProps> = () => {
12
+ const tabsItems = [
13
+ {
14
+ key: 'basic',
15
+ label: <TextWidget token="SettingComponents.RemoteDataSource.basic" />,
16
+ children: (
17
+ <div className="request-panel-section">
18
+ <Form.Item
19
+ label={
20
+ <TextWidget token="SettingComponents.RemoteDataSource.url" />
21
+ }
22
+ name="url"
23
+ rules={[{ required: true, message: '请输入请求地址' }]}
24
+ >
25
+ <Input placeholder="https://api.example.com/data" />
26
+ </Form.Item>
27
+ <Form.Item
28
+ label={
29
+ <TextWidget token="SettingComponents.RemoteDataSource.method" />
30
+ }
31
+ name="method"
32
+ initialValue="POST"
33
+ >
34
+ <Select
35
+ options={[
36
+ { label: 'GET', value: 'GET' },
37
+ { label: 'POST', value: 'POST' },
38
+ { label: 'PUT', value: 'PUT' },
39
+ { label: 'DELETE', value: 'DELETE' },
40
+ { label: 'PATCH', value: 'PATCH' },
41
+ ]}
42
+ />
43
+ </Form.Item>
44
+ <Form.Item
45
+ label={
46
+ <TextWidget token="SettingComponents.ClickEventSetter.successMessage" />
47
+ }
48
+ name="successMessage"
49
+ >
50
+ <Input placeholder="请输入成功提示文案(可选)" />
51
+ </Form.Item>
52
+ </div>
53
+ ),
54
+ },
55
+ {
56
+ key: 'headers',
57
+ label: <TextWidget token="SettingComponents.RemoteDataSource.headers" />,
58
+ children: (
59
+ <div className="request-panel-section">
60
+ <Form.List name="headers">
61
+ {(fields, { add, remove }) => (
62
+ <>
63
+ {fields.map((field) => (
64
+ <div key={field.key} className="request-panel-row">
65
+ <Form.Item
66
+ {...field}
67
+ label=""
68
+ style={{ marginBottom: 0 }}
69
+ name={[field.name, 'key']}
70
+ >
71
+ <Input placeholder="Key" style={{ width: '45%' }} />
72
+ </Form.Item>
73
+ <span style={{ margin: '0 8px' }}>-</span>
74
+ <Form.Item
75
+ style={{ marginBottom: 0 }}
76
+ name={[field.name, 'value']}
77
+ >
78
+ <Input placeholder="Value" style={{ width: '45%' }} />
79
+ </Form.Item>
80
+ <Button
81
+ type="text"
82
+ danger
83
+ onClick={() => remove(field.name)}
84
+ style={{ marginLeft: 8 }}
85
+ >
86
+ X
87
+ </Button>
88
+ </div>
89
+ ))}
90
+ <Button
91
+ type="dashed"
92
+ onClick={() => add({ key: '', value: '' })}
93
+ block
94
+ >
95
+ <TextWidget token="SettingComponents.RemoteDataSource.addHeader" />
96
+ </Button>
97
+ </>
98
+ )}
99
+ </Form.List>
100
+ </div>
101
+ ),
102
+ },
103
+ {
104
+ key: 'params',
105
+ label: <TextWidget token="SettingComponents.RemoteDataSource.params" />,
106
+ children: (
107
+ <div className="request-panel-section">
108
+ <Form.List name="params">
109
+ {(fields, { add, remove }) => (
110
+ <>
111
+ {fields.map((field) => (
112
+ <div key={field.key} className="request-panel-row">
113
+ <Form.Item
114
+ {...field}
115
+ label=""
116
+ style={{ marginBottom: 0 }}
117
+ name={[field.name, 'key']}
118
+ >
119
+ <Input placeholder="参数名" style={{ width: '45%' }} />
120
+ </Form.Item>
121
+ <span style={{ margin: '0 8px' }}>-</span>
122
+ <Form.Item
123
+ style={{ marginBottom: 0 }}
124
+ name={[field.name, 'value']}
125
+ >
126
+ <Input placeholder="表单字段" style={{ width: '45%' }} />
127
+ </Form.Item>
128
+ <Button
129
+ type="text"
130
+ danger
131
+ onClick={() => remove(field.name)}
132
+ style={{ marginLeft: 8 }}
133
+ >
134
+ X
135
+ </Button>
136
+ </div>
137
+ ))}
138
+ <Button
139
+ type="dashed"
140
+ onClick={() => add({ key: '', field: '' })}
141
+ block
142
+ >
143
+ <TextWidget token="SettingComponents.RemoteDataSource.addParam" />
144
+ </Button>
145
+ </>
146
+ )}
147
+ </Form.List>
148
+ </div>
149
+ ),
150
+ },
151
+ {
152
+ key: 'handlers',
153
+ label: <TextWidget token="SettingComponents.RemoteDataSource.handlers" />,
154
+ children: (
155
+ <div className="request-panel-section">
156
+ <Form.Item
157
+ label={
158
+ <TextWidget token="SettingComponents.RemoteDataSource.beforeRequest" />
159
+ }
160
+ name="beforeRequest"
161
+ >
162
+ <MonacoInput
163
+ language="javascript.expression"
164
+ height={120}
165
+ helpLink={false}
166
+ />
167
+ </Form.Item>
168
+ <Form.Item
169
+ label={
170
+ <TextWidget token="SettingComponents.RemoteDataSource.dataHandler" />
171
+ }
172
+ name="dataHandler"
173
+ >
174
+ <MonacoInput
175
+ language="javascript.expression"
176
+ height={120}
177
+ helpLink={false}
178
+ />
179
+ </Form.Item>
180
+ </div>
181
+ ),
182
+ },
183
+ ]
184
+
185
+ return (
186
+ <div className="request-panel">
187
+ <Tabs items={tabsItems} defaultActiveKey="basic" size="small" />
188
+ </div>
189
+ )
190
+ }
@@ -0,0 +1,90 @@
1
+ import React, { Fragment, useState, useMemo } from 'react'
2
+ import { Modal, Button } from 'antd'
3
+ import { usePrefix, TextWidget } from '@formily-design/react'
4
+ import { IEventAction, IEventConfig } from './types'
5
+ import { ActionList } from './ActionList'
6
+ import { ActionConfigModal } from './ActionConfigModal'
7
+ import './styles.less'
8
+
9
+ export interface IClickEventSetterProps {
10
+ className?: string
11
+ style?: React.CSSProperties
12
+ onChange: (value: IEventConfig) => void
13
+ value?: IEventConfig
14
+ }
15
+
16
+ export const ClickEventSetter: React.FC<IClickEventSetterProps> = (props) => {
17
+ const { value, onChange } = props
18
+ const prefix = usePrefix('click-event-setter')
19
+ const [modalVisible, setModalVisible] = useState(false)
20
+ const [editingAction, setEditingAction] = useState<IEventAction | null>(null)
21
+ const [editingIndex, setEditingIndex] = useState<number>(-1)
22
+
23
+ const actions = useMemo(() => value?.actions || [], [value])
24
+
25
+ const openModal = () => setModalVisible(true)
26
+ const closeModal = () => {
27
+ setModalVisible(false)
28
+ setEditingAction(null)
29
+ setEditingIndex(-1)
30
+ }
31
+
32
+ const handleEditAction = (action: IEventAction, index: number) => {
33
+ setEditingAction(action)
34
+ setEditingIndex(index)
35
+ setModalVisible(true)
36
+ }
37
+
38
+ const handleDeleteAction = (index: number) => {
39
+ const newActions = [...actions]
40
+ newActions.splice(index, 1)
41
+ onChange({ actions: newActions })
42
+ }
43
+
44
+ const handleSaveAction = (action: IEventAction) => {
45
+ const newActions = [...actions]
46
+ if (editingIndex >= 0) {
47
+ newActions[editingIndex] = action
48
+ } else {
49
+ newActions.push(action)
50
+ }
51
+ onChange({ actions: newActions })
52
+ closeModal()
53
+ }
54
+
55
+ return (
56
+ <Fragment>
57
+ <div className={`${prefix}-container`}>
58
+ <Button block onClick={openModal} className={`${prefix}-trigger`}>
59
+ <TextWidget token="SettingComponents.ClickEventSetter.configureEvents" />
60
+ </Button>
61
+ {actions.length > 0 && (
62
+ <ActionList
63
+ actions={actions}
64
+ onEdit={handleEditAction}
65
+ onDelete={handleDeleteAction}
66
+ />
67
+ )}
68
+ </div>
69
+ <Modal
70
+ title={
71
+ <TextWidget token="SettingComponents.ClickEventSetter.configureEvents" />
72
+ }
73
+ width={700}
74
+ styles={{ body: { padding: 10 } }}
75
+ transitionName=""
76
+ maskTransitionName=""
77
+ open={modalVisible}
78
+ onCancel={closeModal}
79
+ footer={null}
80
+ destroyOnClose
81
+ >
82
+ <ActionConfigModal
83
+ editingAction={editingAction}
84
+ onSave={handleSaveAction}
85
+ onCancel={closeModal}
86
+ />
87
+ </Modal>
88
+ </Fragment>
89
+ )
90
+ }
@@ -0,0 +1,89 @@
1
+ // @click-event-setter-prefix: ~'click-event-setter';
2
+ @click-event-setter-prefix: 'dn-click-event-setter';
3
+
4
+ .dn-click-event-setter-container {
5
+ width: 100%;
6
+ }
7
+
8
+ .dn-click-event-setter-trigger {
9
+ margin-bottom: 8px;
10
+ }
11
+
12
+ /* Action List Styles */
13
+ .click-event-action-list {
14
+ width: 100%;
15
+ border: 1px solid #e8e8e8;
16
+ border-radius: 4px;
17
+
18
+ .click-event-action-item {
19
+ padding: 4px;
20
+ border-bottom: 1px solid #f0f0f0;
21
+ word-break: break-all;
22
+
23
+ &:last-child {
24
+ border-bottom: none;
25
+ }
26
+
27
+ .ant-list-item-action {
28
+ margin-inline-start: 0;
29
+ }
30
+
31
+ .click-event-action-title {
32
+ display: flex;
33
+ align-items: center;
34
+ gap: 2px;
35
+
36
+ .click-event-action-description {
37
+ color: #666;
38
+ font-size: 12px;
39
+ overflow: hidden;
40
+ text-overflow: ellipsis;
41
+ white-space: nowrap;
42
+ max-width: 300px;
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ /* Action Config Modal Styles */
49
+ .action-config-modal {
50
+ .action-config-basic {
51
+ padding: 8px 0;
52
+ }
53
+
54
+ .action-config-panel {
55
+ padding: 8px 0;
56
+ }
57
+
58
+ .action-config-footer {
59
+ display: flex;
60
+ justify-content: flex-end;
61
+ gap: 8px;
62
+ margin-top: 16px;
63
+ padding-top: 16px;
64
+ border-top: 1px solid #f0f0f0;
65
+ }
66
+ }
67
+
68
+ /* Request Panel Styles */
69
+ .request-panel {
70
+ &-section {
71
+ padding: 8px 0;
72
+ }
73
+
74
+ &-row {
75
+ display: flex;
76
+ align-items: center;
77
+ margin-bottom: 8px;
78
+ }
79
+ }
80
+
81
+ /* Navigation Panel Styles */
82
+ .navigation-panel {
83
+ padding: 8px 0;
84
+ }
85
+
86
+ /* Download Panel Styles */
87
+ .download-panel {
88
+ padding: 8px 0;
89
+ }
@@ -0,0 +1,43 @@
1
+ // 事件动作类型
2
+ export type EventActionType = 'navigation' | 'request' | 'download'
3
+
4
+ // 事件配置结构
5
+ export interface IEventConfig {
6
+ actions: IEventAction[]
7
+ }
8
+
9
+ // 单个事件动作基础接口
10
+ export interface IEventActionBase {
11
+ id: string
12
+ type: EventActionType
13
+ description?: string
14
+ }
15
+
16
+ // 页面跳转动作
17
+ export interface INavigationAction extends IEventActionBase {
18
+ type: 'navigation'
19
+ url: string
20
+ target?: '_blank' | '_self'
21
+ }
22
+
23
+ // 服务请求动作
24
+ export interface IRequestAction extends IEventActionBase {
25
+ type: 'request'
26
+ url: string
27
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH'
28
+ headers?: Record<string, string>
29
+ params?: Record<string, string>
30
+ beforeRequest?: string
31
+ dataHandler?: string
32
+ successMessage?: string
33
+ dataKey?: string
34
+ }
35
+
36
+ // 下载文件动作
37
+ export interface IDownloadAction extends IEventActionBase {
38
+ type: 'download'
39
+ url: string
40
+ }
41
+
42
+ // 联合类型
43
+ export type IEventAction = INavigationAction | IRequestAction | IDownloadAction
@@ -0,0 +1,189 @@
1
+ import React from 'react'
2
+ import { DnFC } from '@formily-design/react'
3
+ import { Button as AntButton, ButtonProps } from 'antd'
4
+ import { Reset, Submit } from '@formily/antd-v5'
5
+ import { useForm, observer, useExpressionScope } from '@formily/react'
6
+ import { IEventAction } from '../ClickEventSetter/types'
7
+ import {
8
+ useEventActionExecutor,
9
+ hasActionOfType,
10
+ } from './hooks/useEventActionExecutor'
11
+
12
+ interface IFormButtonSetterProps {
13
+ /** 是否禁用表单验证 */
14
+ noValidate?: boolean
15
+ /** 事件配置 */
16
+ onEvent?: {
17
+ /** 点击事件配置 */
18
+ click?: {
19
+ /** 点击事件动作列表 */
20
+ actions: IEventAction[]
21
+ }
22
+ }
23
+ }
24
+
25
+ export interface IFormButtonProps extends IFormButtonSetterProps, ButtonProps {
26
+ onClick?: (e: React.MouseEvent<Element, MouseEvent>) => void
27
+ title?: string
28
+ }
29
+
30
+ export const FormButton: DnFC<IFormButtonProps> = (props: IFormButtonProps) => {
31
+ const { htmlType } = props
32
+
33
+ if (htmlType === 'reset')
34
+ return <ResetButton {...props}>{props.title}</ResetButton>
35
+ if (htmlType === 'submit')
36
+ return <SubmitButton {...props}>{props.title}</SubmitButton>
37
+ return <Button {...props}>{props.title}</Button>
38
+ }
39
+
40
+ /**
41
+ * 获取点击事件动作列表
42
+ */
43
+ function getClickActions(
44
+ onEvent?: IFormButtonSetterProps['onEvent']
45
+ ): IEventAction[] | undefined {
46
+ return onEvent?.click?.actions
47
+ }
48
+
49
+ /**
50
+ * 重置
51
+ * 为什么使用 observer 包裹?
52
+ * 因为 useForm() 获取的 form 实例是响应式的,observer 可以确保组件在 form 状态变化时重新渲染。使用 connect 或 observer 都可以达到这个目的。
53
+ * https://react.formilyjs.org/zh-CN/api/shared/observer
54
+ */
55
+ const ResetButton = observer(
56
+ ({
57
+ children,
58
+ onEvent,
59
+ ...props
60
+ }: React.ComponentProps<typeof Reset> & IFormButtonSetterProps) => {
61
+ const form = useForm()
62
+ const actions = getClickActions(onEvent)
63
+ const { execute: executeEvents, executing } = useEventActionExecutor(
64
+ actions,
65
+ form
66
+ )
67
+
68
+ const handleClick = async () => {
69
+ if (actions && actions.length > 0) {
70
+ await executeEvents()
71
+ }
72
+ // 执行表单重置
73
+ form.reset()
74
+ }
75
+
76
+ return (
77
+ <Reset
78
+ {...props}
79
+ htmlType="button"
80
+ loading={executing}
81
+ onClick={handleClick}
82
+ >
83
+ {children}
84
+ </Reset>
85
+ )
86
+ }
87
+ )
88
+
89
+ /** 提交 */
90
+ const SubmitButton = observer(
91
+ ({
92
+ children,
93
+ noValidate,
94
+ onEvent,
95
+ ...props
96
+ }: React.ComponentProps<typeof Submit> & IFormButtonSetterProps) => {
97
+ const form = useForm()
98
+ const actions = getClickActions(onEvent)
99
+ const hasRequestAction = hasActionOfType(actions, 'request')
100
+ const { execute: executeEvents, executing } = useEventActionExecutor(
101
+ actions,
102
+ form
103
+ )
104
+ // useExpressionScope 读取表达式作用域,获取表单配置的提交 API submitFormApi
105
+ const { submitFormApi, apiParams } = useExpressionScope()
106
+ const handleClick = async () => {
107
+ if (noValidate) {
108
+ // 获取表单值
109
+ const values = form.values
110
+ // 手动更新表单状态为提交中
111
+ form.setSubmitting(true)
112
+ try {
113
+ if (hasRequestAction) {
114
+ // 有 request 动作时,仅执行事件动作,不执行表单提交
115
+ await executeEvents(values, apiParams)
116
+ } else if (actions && actions.length > 0) {
117
+ // 有事件但无 request 动作时,先执行事件再提交
118
+ await executeEvents(values, apiParams)
119
+ await doSubmit(values)
120
+ } else {
121
+ // 无事件配置时,直接提交
122
+ await doSubmit(values)
123
+ }
124
+ } finally {
125
+ form.setSubmitting(false)
126
+ }
127
+ } else {
128
+ form.submit(async (values) => {
129
+ if (hasRequestAction) {
130
+ // 有 request 动作时,仅执行事件动作,不执行表单提交
131
+ await executeEvents(values, apiParams)
132
+ } else if (actions && actions.length > 0) {
133
+ // 有事件但无 request 动作时,先执行事件再提交
134
+ await executeEvents(values, apiParams)
135
+ await doSubmit(values)
136
+ } else {
137
+ // 无事件配置时,直接提交
138
+ await doSubmit(values)
139
+ }
140
+ })
141
+ }
142
+ }
143
+
144
+ /** 表单提交 - 执行 form 配置的 API */
145
+ const doSubmit = async (values: Record<string, any>) => {
146
+ await submitFormApi?.(values)
147
+ }
148
+ return (
149
+ <Submit
150
+ {...props}
151
+ htmlType="button"
152
+ loading={executing || form.submitting}
153
+ onClick={handleClick}
154
+ >
155
+ {children}
156
+ </Submit>
157
+ )
158
+ }
159
+ )
160
+
161
+ /** 按钮 */
162
+ const Button = observer(
163
+ ({
164
+ children,
165
+ onEvent,
166
+ ...props
167
+ }: React.ComponentProps<typeof AntButton> & IFormButtonSetterProps) => {
168
+ const form = useForm()
169
+ const actions = getClickActions(onEvent)
170
+ // useExpressionScope 读取表达式作用域
171
+ const { apiParams } = useExpressionScope()
172
+ const { execute: executeEvents, executing } = useEventActionExecutor(
173
+ actions,
174
+ form
175
+ )
176
+
177
+ const handleClick = async () => {
178
+ if (actions && actions.length > 0) {
179
+ await executeEvents(form.values, apiParams)
180
+ }
181
+ }
182
+
183
+ return (
184
+ <AntButton {...props} loading={executing} onClick={handleClick}>
185
+ {children}
186
+ </AntButton>
187
+ )
188
+ }
189
+ )
@@ -0,0 +1,65 @@
1
+ import { useState, useCallback } from 'react'
2
+ import { IEventAction } from '../../ClickEventSetter/types'
3
+ import { executeActions } from '../utils/actionExecutors'
4
+ import { Form } from '@formily/core'
5
+
6
+ interface UseEventActionExecutorOptions {
7
+ onComplete?: () => void
8
+ onError?: (error: Error) => void
9
+ }
10
+
11
+ interface UseEventActionExecutorReturn {
12
+ executing: boolean
13
+ execute: (
14
+ formValues?: Record<string, any>,
15
+ apiParams?: Record<string, any>
16
+ ) => Promise<void>
17
+ }
18
+
19
+ export function useEventActionExecutor(
20
+ actions: IEventAction[] | undefined,
21
+ form: Form,
22
+ options?: UseEventActionExecutorOptions
23
+ ): UseEventActionExecutorReturn {
24
+ const [executing, setExecuting] = useState(false)
25
+
26
+ const execute = useCallback(
27
+ async (
28
+ formValues?: Record<string, any>,
29
+ apiParams?: Record<string, any>
30
+ ) => {
31
+ if (!actions || actions.length === 0) {
32
+ return
33
+ }
34
+ setExecuting(true)
35
+ try {
36
+ await executeActions(actions, formValues, apiParams, (error, index) => {
37
+ console.error(`动作 ${index + 1} 执行失败:`, error)
38
+ })
39
+ options?.onComplete?.()
40
+ } catch (error) {
41
+ const err = error instanceof Error ? error : new Error(String(error))
42
+ options?.onError?.(err)
43
+ } finally {
44
+ setExecuting(false)
45
+ }
46
+ },
47
+ [actions, form, options]
48
+ )
49
+
50
+ return {
51
+ executing,
52
+ execute,
53
+ }
54
+ }
55
+
56
+ /**
57
+ * 检查动作配置中是否包含指定类型的动作
58
+ */
59
+ export function hasActionOfType(
60
+ actions: IEventAction[] | undefined,
61
+ type: string
62
+ ): boolean {
63
+ if (!actions) return false
64
+ return actions.some((action) => action.type === type)
65
+ }
@@ -0,0 +1 @@
1
+ export * from './preview'