@gm-pc/react 1.24.9-beta.13 → 1.24.9-beta.14

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 (399) hide show
  1. package/package.json +3 -3
  2. package/src/common/hooks/index.ts +5 -5
  3. package/src/common/hooks/use_form/index.ts +2 -2
  4. package/src/common/hooks/use_form/use_form.ts +184 -184
  5. package/src/common/hooks/use_form/utils.ts +23 -23
  6. package/src/common/hooks/use_mutation_observer.ts +19 -19
  7. package/src/common/utils/date.ts +28 -28
  8. package/src/common/utils/get_record_partical_object.ts +4 -4
  9. package/src/common/utils/index.ts +3 -3
  10. package/src/common/utils/utils.ts +16 -16
  11. package/src/component/affix/affix.tsx +31 -31
  12. package/src/component/affix/index.ts +2 -2
  13. package/src/component/affix/stories.tsx +16 -16
  14. package/src/component/affix/style.less +3 -3
  15. package/src/component/auto_complete/auto_complete.tsx +202 -202
  16. package/src/component/auto_complete/index.ts +6 -6
  17. package/src/component/auto_complete/stories.tsx +37 -37
  18. package/src/component/auto_full/auto_full.tsx +36 -36
  19. package/src/component/auto_full/index.ts +1 -1
  20. package/src/component/box/box.tsx +29 -29
  21. package/src/component/box/box_form.tsx +83 -83
  22. package/src/component/box/box_pagination.tsx +12 -12
  23. package/src/component/box/box_panel.tsx +91 -91
  24. package/src/component/box/box_table.tsx +57 -57
  25. package/src/component/box/index.ts +10 -10
  26. package/src/component/box/stories.tsx +119 -119
  27. package/src/component/box/style.less +41 -41
  28. package/src/component/button/button.tsx +94 -94
  29. package/src/component/button/button_text.tsx +33 -33
  30. package/src/component/button/index.ts +4 -4
  31. package/src/component/button/stories.tsx +131 -131
  32. package/src/component/button/style.less +158 -158
  33. package/src/component/calendar/calendar.tsx +25 -25
  34. package/src/component/calendar/content.tsx +87 -87
  35. package/src/component/calendar/day.tsx +106 -106
  36. package/src/component/calendar/head.tsx +244 -244
  37. package/src/component/calendar/index.ts +4 -4
  38. package/src/component/calendar/range_calendar.tsx +121 -121
  39. package/src/component/calendar/stories.tsx +54 -54
  40. package/src/component/calendar/style.less +136 -136
  41. package/src/component/calendar/types.ts +54 -54
  42. package/src/component/calendar/week.tsx +27 -27
  43. package/src/component/card/card.tsx +148 -148
  44. package/src/component/card/form_card.tsx +42 -42
  45. package/src/component/card/index.ts +2 -2
  46. package/src/component/card/stories.tsx +90 -90
  47. package/src/component/card/style.less +125 -125
  48. package/src/component/checkbox/checkbox.tsx +75 -75
  49. package/src/component/checkbox/checkbox_group.tsx +51 -51
  50. package/src/component/checkbox/index.ts +5 -5
  51. package/src/component/checkbox/stories.tsx +152 -152
  52. package/src/component/checkbox/style.less +73 -73
  53. package/src/component/checkbox/util.ts +19 -19
  54. package/src/component/collapse/collapse.tsx +27 -27
  55. package/src/component/collapse/index.ts +2 -2
  56. package/src/component/collapse/stories.tsx +21 -21
  57. package/src/component/color_picker/color_list.ts +34 -34
  58. package/src/component/color_picker/color_picker.tsx +43 -43
  59. package/src/component/color_picker/color_select.tsx +97 -97
  60. package/src/component/color_picker/index.ts +2 -2
  61. package/src/component/color_picker/stories.tsx +20 -20
  62. package/src/component/color_picker/style.less +41 -41
  63. package/src/component/config_provider/config_provider.tsx +16 -16
  64. package/src/component/config_provider/context.ts +10 -10
  65. package/src/component/config_provider/index.ts +3 -3
  66. package/src/component/controlled_form/context.tsx +18 -18
  67. package/src/component/controlled_form/controlled_form.tsx +141 -141
  68. package/src/component/controlled_form/index.ts +8 -8
  69. package/src/component/controlled_form/items/index.tsx +115 -115
  70. package/src/component/controlled_form/items/utils.ts +132 -132
  71. package/src/component/controlled_form/stories/components/date_range_filter.tsx +83 -83
  72. package/src/component/controlled_form/stories/components/index.ts +2 -2
  73. package/src/component/controlled_form/stories/components/search_filter.tsx +52 -52
  74. package/src/component/controlled_form/stories/stories.tsx +372 -372
  75. package/src/component/date_picker/date_picker.tsx +183 -183
  76. package/src/component/date_picker/index.ts +2 -2
  77. package/src/component/date_picker/overlay.tsx +106 -106
  78. package/src/component/date_picker/stories.tsx +108 -108
  79. package/src/component/date_picker/style.less +23 -23
  80. package/src/component/date_picker/time_select.tsx +58 -58
  81. package/src/component/date_picker/types.ts +7 -7
  82. package/src/component/date_range_picker/date_range_picker.tsx +144 -144
  83. package/src/component/date_range_picker/index.ts +2 -2
  84. package/src/component/date_range_picker/left.tsx +107 -107
  85. package/src/component/date_range_picker/overlay.tsx +204 -204
  86. package/src/component/date_range_picker/stories.tsx +181 -181
  87. package/src/component/date_range_picker/style.less +41 -41
  88. package/src/component/date_range_picker/time_range_select.tsx +144 -144
  89. package/src/component/date_range_picker/two.tsx +108 -108
  90. package/src/component/date_range_picker/types.ts +42 -42
  91. package/src/component/date_range_picker/util.ts +11 -11
  92. package/src/component/dialog/alert.tsx +38 -38
  93. package/src/component/dialog/confirm.tsx +120 -120
  94. package/src/component/dialog/delete_com.tsx +27 -27
  95. package/src/component/dialog/dialog.tsx +70 -70
  96. package/src/component/dialog/index.ts +16 -16
  97. package/src/component/dialog/prompt.tsx +95 -95
  98. package/src/component/dialog/stories.tsx +195 -195
  99. package/src/component/dialog/types.ts +70 -70
  100. package/src/component/divider/divider.tsx +25 -25
  101. package/src/component/divider/index.ts +2 -2
  102. package/src/component/divider/stories.tsx +14 -14
  103. package/src/component/divider/style.less +29 -29
  104. package/src/component/flex/flex.tsx +133 -133
  105. package/src/component/flex/index.ts +2 -2
  106. package/src/component/flex/stories.tsx +17 -17
  107. package/src/component/flex/style.less +105 -105
  108. package/src/component/flip_number/flip_number.tsx +209 -209
  109. package/src/component/flip_number/index.ts +2 -2
  110. package/src/component/flip_number/stories.tsx +28 -28
  111. package/src/component/flip_number/utils.ts +58 -58
  112. package/src/component/form/context.tsx +15 -15
  113. package/src/component/form/form.tsx +142 -142
  114. package/src/component/form/form_block.tsx +39 -39
  115. package/src/component/form/form_button.tsx +28 -28
  116. package/src/component/form/form_group.tsx +157 -157
  117. package/src/component/form/form_item.tsx +141 -141
  118. package/src/component/form/form_panel.tsx +63 -63
  119. package/src/component/form/index.ts +15 -15
  120. package/src/component/form/stories.tsx +448 -448
  121. package/src/component/form/style.less +159 -159
  122. package/src/component/form/types.ts +110 -110
  123. package/src/component/function_set/function_set.tsx +84 -84
  124. package/src/component/function_set/index.ts +2 -2
  125. package/src/component/function_set/overlay.tsx +41 -41
  126. package/src/component/function_set/stories.tsx +71 -71
  127. package/src/component/function_set/types.ts +15 -15
  128. package/src/component/function_set/utils.ts +21 -21
  129. package/src/component/grid/col.tsx +55 -55
  130. package/src/component/grid/index.ts +3 -3
  131. package/src/component/grid/mixin.less +48 -48
  132. package/src/component/grid/row.tsx +27 -27
  133. package/src/component/grid/stories.tsx +65 -65
  134. package/src/component/grid/style.less +27 -27
  135. package/src/component/grid/types.ts +35 -35
  136. package/src/component/grid/util.ts +12 -12
  137. package/src/component/icon_down_up/icon_down_up.tsx +22 -22
  138. package/src/component/icon_down_up/index.ts +2 -2
  139. package/src/component/icon_down_up/stories.tsx +21 -21
  140. package/src/component/icon_down_up/style.less +10 -10
  141. package/src/component/icon_expand/icon_expand.tsx +22 -22
  142. package/src/component/icon_expand/index.ts +1 -1
  143. package/src/component/img_uploader/img_uploader.tsx +168 -168
  144. package/src/component/img_uploader/index.ts +2 -2
  145. package/src/component/img_uploader/stories.tsx +58 -58
  146. package/src/component/img_uploader/style.less +22 -22
  147. package/src/component/input/index.ts +5 -5
  148. package/src/component/input/input.tsx +24 -24
  149. package/src/component/input/input_close.tsx +51 -51
  150. package/src/component/input/stories.tsx +56 -56
  151. package/src/component/input/style.less +33 -33
  152. package/src/component/input_number/index.ts +2 -2
  153. package/src/component/input_number/input_number.tsx +115 -115
  154. package/src/component/input_number/stories.tsx +27 -27
  155. package/src/component/input_number/style.less +10 -10
  156. package/src/component/input_number/utils.ts +44 -44
  157. package/src/component/label/index.tsx +19 -19
  158. package/src/component/label/stories.tsx +26 -26
  159. package/src/component/label/style.less +34 -34
  160. package/src/component/layout_root/index.ts +2 -2
  161. package/src/component/layout_root/layout_root.tsx +116 -116
  162. package/src/component/layout_root/types.ts +38 -38
  163. package/src/component/level_list/index.ts +2 -2
  164. package/src/component/level_list/level_item.tsx +79 -79
  165. package/src/component/level_list/level_list.tsx +123 -123
  166. package/src/component/level_list/stories/constants.ts +72 -72
  167. package/src/component/level_list/stories/stories.tsx +87 -87
  168. package/src/component/level_list/style.less +41 -41
  169. package/src/component/level_list/types.ts +36 -36
  170. package/src/component/level_list/utils.ts +19 -19
  171. package/src/component/level_select/index.ts +7 -7
  172. package/src/component/level_select/level_select.tsx +216 -216
  173. package/src/component/level_select/multiple_level_select.tsx +104 -104
  174. package/src/component/level_select/stories.tsx +102 -102
  175. package/src/component/level_select/types.ts +38 -38
  176. package/src/component/level_select/util.ts +20 -20
  177. package/src/component/list/base.tsx +129 -129
  178. package/src/component/list/index.ts +3 -3
  179. package/src/component/list/list.tsx +61 -61
  180. package/src/component/list/stories.tsx +113 -113
  181. package/src/component/list/style.less +58 -58
  182. package/src/component/list/types.ts +37 -37
  183. package/src/component/loading/index.ts +10 -10
  184. package/src/component/loading/loading.tsx +26 -26
  185. package/src/component/loading/loading_chunk.tsx +37 -37
  186. package/src/component/loading/loading_full_screen.tsx +45 -45
  187. package/src/component/loading/stories.tsx +43 -43
  188. package/src/component/loading/style.less +69 -69
  189. package/src/component/loading/types.ts +30 -30
  190. package/src/component/mask/index.ts +2 -2
  191. package/src/component/mask/mask.tsx +22 -22
  192. package/src/component/mask/style.less +10 -10
  193. package/src/component/modal/clean_modal.tsx +14 -14
  194. package/src/component/modal/index.ts +5 -5
  195. package/src/component/modal/modal.tsx +145 -145
  196. package/src/component/modal/right_side_modal.tsx +22 -22
  197. package/src/component/modal/stories.tsx +132 -132
  198. package/src/component/modal/style.less +138 -138
  199. package/src/component/modal/types.ts +27 -27
  200. package/src/component/more_select/base.tsx +408 -408
  201. package/src/component/more_select/index.ts +6 -6
  202. package/src/component/more_select/more_select.tsx +137 -137
  203. package/src/component/more_select/render_list_filter.ts +39 -39
  204. package/src/component/more_select/stories.tsx +323 -323
  205. package/src/component/more_select/style.less +72 -72
  206. package/src/component/more_select/types.ts +114 -114
  207. package/src/component/multiple_selection/index.ts +2 -2
  208. package/src/component/multiple_selection/multiple_selection.tsx +118 -118
  209. package/src/component/multiple_selection/stories.tsx +37 -37
  210. package/src/component/multiple_selection/style.less +57 -57
  211. package/src/component/n_progress/index.ts +1 -1
  212. package/src/component/n_progress/n_progress.tsx +39 -39
  213. package/src/component/n_progress/stories.tsx +25 -25
  214. package/src/component/n_progress/style.less +39 -39
  215. package/src/component/nav/a.tsx +7 -7
  216. package/src/component/nav/index.ts +10 -10
  217. package/src/component/nav/nav.tsx +114 -114
  218. package/src/component/nav/nav_item.tsx +98 -98
  219. package/src/component/nav/nav_single_item.tsx +28 -28
  220. package/src/component/nav/popup.tsx +100 -100
  221. package/src/component/nav/portal.ts +17 -17
  222. package/src/component/nav/stories.tsx +152 -152
  223. package/src/component/nav/style.less +246 -246
  224. package/src/component/nav/types.ts +93 -93
  225. package/src/component/pagination/index.ts +2 -2
  226. package/src/component/pagination/left.tsx +45 -45
  227. package/src/component/pagination/page_with_count.tsx +115 -115
  228. package/src/component/pagination/page_without_count.tsx +64 -64
  229. package/src/component/pagination/pagination.tsx +23 -23
  230. package/src/component/pagination/right.tsx +78 -78
  231. package/src/component/pagination/stories.tsx +62 -62
  232. package/src/component/pagination/style.less +51 -51
  233. package/src/component/pagination/types.ts +16 -16
  234. package/src/component/pagination/util.ts +7 -7
  235. package/src/component/popover/index.ts +2 -2
  236. package/src/component/popover/popover.tsx +279 -279
  237. package/src/component/popover/stories.tsx +104 -104
  238. package/src/component/popover/types.ts +25 -25
  239. package/src/component/popover/utils.ts +22 -22
  240. package/src/component/popup/element_in_viewport.ts +33 -33
  241. package/src/component/popup/index.ts +4 -4
  242. package/src/component/popup/popup.tsx +149 -149
  243. package/src/component/popup/popup_content_confirm.tsx +106 -106
  244. package/src/component/popup/style.less +107 -107
  245. package/src/component/price/constant.ts +4 -4
  246. package/src/component/price/event_bus.ts +13 -13
  247. package/src/component/price/index.ts +2 -2
  248. package/src/component/price/price.tsx +152 -152
  249. package/src/component/price/stories.tsx +22 -22
  250. package/src/component/progress/index.ts +2 -2
  251. package/src/component/progress/progress.tsx +53 -53
  252. package/src/component/progress/stories.tsx +20 -20
  253. package/src/component/progress/style.less +35 -35
  254. package/src/component/progress_circle/index.ts +2 -2
  255. package/src/component/progress_circle/progress_circle.tsx +85 -85
  256. package/src/component/progress_circle/stories.tsx +31 -31
  257. package/src/component/progress_circle/style.less +21 -21
  258. package/src/component/radio/index.ts +5 -5
  259. package/src/component/radio/radio.tsx +72 -72
  260. package/src/component/radio/radio_group.tsx +48 -48
  261. package/src/component/radio/stories.tsx +103 -103
  262. package/src/component/radio/style.less +56 -56
  263. package/src/component/radio/util.ts +19 -19
  264. package/src/component/recommend_input/index.ts +2 -2
  265. package/src/component/recommend_input/recommend_input.tsx +100 -100
  266. package/src/component/recommend_input/stories.tsx +47 -47
  267. package/src/component/recommend_input/style.less +25 -25
  268. package/src/component/select/index.ts +2 -2
  269. package/src/component/select/select.tsx +172 -171
  270. package/src/component/select/stories.tsx +140 -140
  271. package/src/component/select/style.less +4 -4
  272. package/src/component/select/types.ts +29 -29
  273. package/src/component/selection/index.ts +2 -2
  274. package/src/component/selection/selection.tsx +162 -162
  275. package/src/component/selection/stories.tsx +45 -45
  276. package/src/component/selection/style.less +65 -65
  277. package/src/component/steps/index.ts +2 -2
  278. package/src/component/steps/steps.tsx +61 -61
  279. package/src/component/steps/stories.tsx +18 -18
  280. package/src/component/steps/style.less +39 -39
  281. package/src/component/storage/index.ts +1 -1
  282. package/src/component/storage/storage.ts +7 -7
  283. package/src/component/storage/stories.tsx +7 -7
  284. package/src/component/switch/index.ts +2 -2
  285. package/src/component/switch/stories.tsx +39 -39
  286. package/src/component/switch/style.less +60 -60
  287. package/src/component/switch/switch.tsx +127 -127
  288. package/src/component/table_select/index.ts +2 -2
  289. package/src/component/table_select/stories.tsx +97 -97
  290. package/src/component/table_select/style.less +20 -20
  291. package/src/component/table_select/table_select.tsx +92 -92
  292. package/src/component/table_select/types.ts +30 -30
  293. package/src/component/table_select/util.ts +15 -15
  294. package/src/component/tabs/index.ts +2 -2
  295. package/src/component/tabs/stories.tsx +172 -172
  296. package/src/component/tabs/style.less +149 -149
  297. package/src/component/tabs/tabs.tsx +232 -232
  298. package/src/component/textarea/index.ts +3 -3
  299. package/src/component/textarea/stories.tsx +37 -37
  300. package/src/component/textarea/style.less +12 -12
  301. package/src/component/textarea/textarea.tsx +22 -22
  302. package/src/component/time_span/index.ts +4 -4
  303. package/src/component/time_span/stories.tsx +87 -87
  304. package/src/component/time_span/style.less +45 -45
  305. package/src/component/time_span/time_span.tsx +129 -129
  306. package/src/component/time_span/time_span_picker.tsx +71 -71
  307. package/src/component/time_span/types.ts +58 -58
  308. package/src/component/time_span/util.ts +18 -18
  309. package/src/component/tip/index.ts +2 -2
  310. package/src/component/tip/stories.tsx +44 -44
  311. package/src/component/tip/style.less +53 -53
  312. package/src/component/tip/tip.tsx +95 -95
  313. package/src/component/tip/types.ts +20 -20
  314. package/src/component/tooltip/index.ts +2 -2
  315. package/src/component/tooltip/stories.tsx +32 -32
  316. package/src/component/tooltip/tooltip.tsx +40 -40
  317. package/src/component/transfer/index.ts +2 -2
  318. package/src/component/transfer/stories.tsx +140 -140
  319. package/src/component/transfer/transfer.tsx +147 -147
  320. package/src/component/transfer/types.ts +42 -42
  321. package/src/component/tree/bottom.tsx +34 -34
  322. package/src/component/tree/find.tsx +73 -73
  323. package/src/component/tree/index.ts +2 -2
  324. package/src/component/tree/item.tsx +75 -75
  325. package/src/component/tree/list.tsx +123 -123
  326. package/src/component/tree/search.tsx +29 -29
  327. package/src/component/tree/stories.tsx +309 -309
  328. package/src/component/tree/style.less +35 -35
  329. package/src/component/tree/tree.tsx +238 -238
  330. package/src/component/tree/types.ts +155 -155
  331. package/src/component/tree/util.ts +208 -208
  332. package/src/component/uploader/default_container.tsx +24 -24
  333. package/src/component/uploader/default_image.tsx +15 -15
  334. package/src/component/uploader/index.ts +10 -10
  335. package/src/component/uploader/stories.tsx +53 -53
  336. package/src/component/uploader/style.less +22 -22
  337. package/src/component/uploader/types.ts +25 -25
  338. package/src/component/uploader/uploader.tsx +62 -62
  339. package/src/component/v_browser/context/browser.ts +7 -7
  340. package/src/component/v_browser/context/browserWindow.ts +7 -7
  341. package/src/component/v_browser/hooks/useWindowEffect.ts +53 -53
  342. package/src/component/v_browser/index.ts +4 -4
  343. package/src/component/v_browser/types.ts +46 -46
  344. package/src/component/v_browser/ui/iframe_portal.tsx +28 -28
  345. package/src/component/v_browser/ui/index.tsx +213 -213
  346. package/src/component/v_browser/ui/style.less +113 -113
  347. package/src/component/v_browser/ui/window_wrapper.tsx +74 -74
  348. package/src/component/v_browser/v_browser.stories.mdx +128 -128
  349. package/src/component/v_browser/v_browser.tsx +287 -287
  350. package/src/css/base.less +64 -64
  351. package/src/css/bg.less +52 -52
  352. package/src/css/border.less +40 -40
  353. package/src/css/cursor.less +19 -19
  354. package/src/css/display.less +16 -16
  355. package/src/css/distance.less +93 -93
  356. package/src/css/error.less +8 -8
  357. package/src/css/other.less +15 -15
  358. package/src/css/overflow.less +23 -23
  359. package/src/css/position.less +11 -11
  360. package/src/css/svg.less +48 -48
  361. package/src/css/text.less +127 -127
  362. package/src/css/var/mixin.less +75 -75
  363. package/src/css/var/variables.less +125 -125
  364. package/src/event_type.ts +11 -11
  365. package/src/index.less +64 -64
  366. package/src/index.ts +61 -61
  367. package/src/svg/calendar-month.svg +8 -8
  368. package/src/svg/calendar-year.svg +13 -13
  369. package/src/svg/calendar.svg +17 -17
  370. package/src/svg/check-detail.svg +18 -18
  371. package/src/svg/close-circle.svg +13 -13
  372. package/src/svg/close-square.svg +12 -12
  373. package/src/svg/closeup.svg +20 -20
  374. package/src/svg/delete.svg +10 -10
  375. package/src/svg/down-small.svg +1 -1
  376. package/src/svg/down.svg +1 -1
  377. package/src/svg/edit-box.svg +17 -17
  378. package/src/svg/edit-pen.svg +17 -17
  379. package/src/svg/empty.svg +27 -27
  380. package/src/svg/expand.svg +21 -21
  381. package/src/svg/left-small.svg +1 -1
  382. package/src/svg/more.svg +10 -10
  383. package/src/svg/next.svg +40 -40
  384. package/src/svg/pen.svg +12 -12
  385. package/src/svg/remove.svg +1 -1
  386. package/src/svg/right-small.svg +1 -1
  387. package/src/svg/search.svg +8 -8
  388. package/src/svg/setting.svg +17 -17
  389. package/src/svg/up-small.svg +1 -1
  390. package/src/svg/up.svg +1 -1
  391. package/src/svg/vbrowser-tab-delete.svg +8 -8
  392. package/src/svg/vbrowser-tab-left.svg +8 -8
  393. package/src/svg/vbrowser-tab-right.svg +8 -8
  394. package/src/types.ts +33 -33
  395. package/src/validator/index.ts +16 -16
  396. package/src/validator/rules.ts +61 -61
  397. package/src/validator/types.ts +10 -10
  398. package/src/validator/validator.ts +95 -95
  399. package/src/var.less +2 -2
@@ -1,141 +1,141 @@
1
- /*
2
- * @Description: 受控表单
3
- */
4
- import React, {
5
- useState,
6
- useEffect,
7
- useCallback,
8
- useRef,
9
- useImperativeHandle,
10
- ReactNode,
11
- Ref,
12
- } from 'react'
13
- import { Form, FormProps } from '../form'
14
- import { noop } from 'lodash'
15
- import { useForm, UseFormProps, FormInstance } from '../../common/hooks'
16
- import { getRecordPartialObject, isFalsy } from '../../common/utils'
17
- import { ControlledFormContext, ControlledFormContextProps } from './context'
18
- import { RecordPartial, StringKey, anyCallback } from '../../types'
19
-
20
- export interface ControlledFormProps<K = any>
21
- extends UseFormProps<K>,
22
- Omit<FormProps, 'onSubmit' | 'onSubmitValidated'> {
23
- /* 表单实例,可拿到一些方法 */
24
- form?: Ref<FormInstance<K>>
25
- /* 要隐藏的表单项 */
26
- hideItems?: RecordPartial<K, boolean>
27
- /* 提交获取值是否过滤 null | undefined | '' */
28
- isIgnoreFalsy?: boolean
29
- // 初始化是否触发onSubmit
30
- isSubmitInit?: boolean
31
- children?: ReactNode
32
- /* 表单提交的回调 */
33
- onSubmit?(values: Partial<K>): void
34
- }
35
-
36
- function ControlledForm<K = any>(props: ControlledFormProps<K>) {
37
- const {
38
- form,
39
- // 默认值
40
- initialValues = getRecordPartialObject<K, any>(),
41
- // 规格化配置
42
- normalizes = getRecordPartialObject<K, anyCallback>(),
43
- // 表单提交时是否去除值为undefined, null, ''的项
44
- isIgnoreFalsy = true,
45
- isSubmitInit,
46
- // 隐藏的表单项 要隐藏将fieldName设为tue ,如{ alloc_type: true }
47
- hideItems = getRecordPartialObject<K, boolean>(),
48
- children,
49
- // 表单项改变的时候,回调第一个是改变的字段及新的值,第二个参数是所有新的值
50
- onFieldsChange = noop,
51
- // 表单提交的回调
52
- onSubmit: onTempSubmit,
53
- ...res
54
- } = props
55
-
56
- const {
57
- values = getRecordPartialObject<K, any>(),
58
- onChange,
59
- resetFields,
60
- setFieldsValue,
61
- getFieldsValue,
62
- getNormalizeValue,
63
- canSubmit,
64
- setCanSubmit,
65
- validateFields,
66
- } = useForm<K>({
67
- initialValues,
68
- normalizes,
69
- onFieldsChange,
70
- })
71
- const [didClickSubmit, setDidClickSubmit] = useState(false)
72
- const didMountRef = useRef(false)
73
-
74
- const formRef = useRef<Form>(null)
75
-
76
- // 表单提交
77
- const onSubmit = useCallback((): void => {
78
- const tempValues: ControlledFormProps<K>['initialValues'] = { ...values }
79
- if (isIgnoreFalsy || Object.keys(normalizes).length) {
80
- Object.keys(values).forEach((key) => {
81
- const tempKey = key as StringKey<K>
82
-
83
- const value = values[tempKey]
84
- // 剔除掉undefined, null和空字符串
85
- if (isIgnoreFalsy && isFalsy(value)) {
86
- delete tempValues[tempKey]
87
- } else {
88
- tempValues[tempKey] = getNormalizeValue(tempKey, value)
89
- }
90
- })
91
- }
92
- setDidClickSubmit(true)
93
- onTempSubmit && canSubmit() && onTempSubmit(tempValues as K)
94
- }, [values, isIgnoreFalsy, normalizes, onTempSubmit, getNormalizeValue, canSubmit])
95
- useEffect(() => {
96
- if (isSubmitInit && !didMountRef.current) {
97
- didMountRef.current = true
98
- onSubmit()
99
- }
100
- }, [isSubmitInit, onSubmit])
101
- useImperativeHandle(form, () => ({
102
- resetFields,
103
- setFieldsValue,
104
- getFieldsValue,
105
- validateFields: () => {
106
- setDidClickSubmit(true)
107
- return validateFields()
108
- },
109
- apiDoValidate: () => {
110
- setDidClickSubmit(true)
111
- return canSubmit()
112
- },
113
- }))
114
-
115
- const formProps = {
116
- ...res,
117
- ref: formRef,
118
- }
119
- if (onTempSubmit) {
120
- Object.assign(formProps, { onSubmit })
121
- }
122
- const providerValues = {
123
- values,
124
- hideItems,
125
- onChange,
126
- resetFields,
127
- setFieldsValue,
128
- getFieldsValue,
129
- setCanSubmit,
130
- didClickSubmit,
131
- } as ControlledFormContextProps
132
- return (
133
- <Form {...formProps}>
134
- <ControlledFormContext.Provider value={providerValues}>
135
- {children}
136
- </ControlledFormContext.Provider>
137
- </Form>
138
- )
139
- }
140
-
141
- export default ControlledForm
1
+ /*
2
+ * @Description: 受控表单
3
+ */
4
+ import React, {
5
+ useState,
6
+ useEffect,
7
+ useCallback,
8
+ useRef,
9
+ useImperativeHandle,
10
+ ReactNode,
11
+ Ref,
12
+ } from 'react'
13
+ import { Form, FormProps } from '../form'
14
+ import { noop } from 'lodash'
15
+ import { useForm, UseFormProps, FormInstance } from '../../common/hooks'
16
+ import { getRecordPartialObject, isFalsy } from '../../common/utils'
17
+ import { ControlledFormContext, ControlledFormContextProps } from './context'
18
+ import { RecordPartial, StringKey, anyCallback } from '../../types'
19
+
20
+ export interface ControlledFormProps<K = any>
21
+ extends UseFormProps<K>,
22
+ Omit<FormProps, 'onSubmit' | 'onSubmitValidated'> {
23
+ /* 表单实例,可拿到一些方法 */
24
+ form?: Ref<FormInstance<K>>
25
+ /* 要隐藏的表单项 */
26
+ hideItems?: RecordPartial<K, boolean>
27
+ /* 提交获取值是否过滤 null | undefined | '' */
28
+ isIgnoreFalsy?: boolean
29
+ // 初始化是否触发onSubmit
30
+ isSubmitInit?: boolean
31
+ children?: ReactNode
32
+ /* 表单提交的回调 */
33
+ onSubmit?(values: Partial<K>): void
34
+ }
35
+
36
+ function ControlledForm<K = any>(props: ControlledFormProps<K>) {
37
+ const {
38
+ form,
39
+ // 默认值
40
+ initialValues = getRecordPartialObject<K, any>(),
41
+ // 规格化配置
42
+ normalizes = getRecordPartialObject<K, anyCallback>(),
43
+ // 表单提交时是否去除值为undefined, null, ''的项
44
+ isIgnoreFalsy = true,
45
+ isSubmitInit,
46
+ // 隐藏的表单项 要隐藏将fieldName设为tue ,如{ alloc_type: true }
47
+ hideItems = getRecordPartialObject<K, boolean>(),
48
+ children,
49
+ // 表单项改变的时候,回调第一个是改变的字段及新的值,第二个参数是所有新的值
50
+ onFieldsChange = noop,
51
+ // 表单提交的回调
52
+ onSubmit: onTempSubmit,
53
+ ...res
54
+ } = props
55
+
56
+ const {
57
+ values = getRecordPartialObject<K, any>(),
58
+ onChange,
59
+ resetFields,
60
+ setFieldsValue,
61
+ getFieldsValue,
62
+ getNormalizeValue,
63
+ canSubmit,
64
+ setCanSubmit,
65
+ validateFields,
66
+ } = useForm<K>({
67
+ initialValues,
68
+ normalizes,
69
+ onFieldsChange,
70
+ })
71
+ const [didClickSubmit, setDidClickSubmit] = useState(false)
72
+ const didMountRef = useRef(false)
73
+
74
+ const formRef = useRef<Form>(null)
75
+
76
+ // 表单提交
77
+ const onSubmit = useCallback((): void => {
78
+ const tempValues: ControlledFormProps<K>['initialValues'] = { ...values }
79
+ if (isIgnoreFalsy || Object.keys(normalizes).length) {
80
+ Object.keys(values).forEach((key) => {
81
+ const tempKey = key as StringKey<K>
82
+
83
+ const value = values[tempKey]
84
+ // 剔除掉undefined, null和空字符串
85
+ if (isIgnoreFalsy && isFalsy(value)) {
86
+ delete tempValues[tempKey]
87
+ } else {
88
+ tempValues[tempKey] = getNormalizeValue(tempKey, value)
89
+ }
90
+ })
91
+ }
92
+ setDidClickSubmit(true)
93
+ onTempSubmit && canSubmit() && onTempSubmit(tempValues as K)
94
+ }, [values, isIgnoreFalsy, normalizes, onTempSubmit, getNormalizeValue, canSubmit])
95
+ useEffect(() => {
96
+ if (isSubmitInit && !didMountRef.current) {
97
+ didMountRef.current = true
98
+ onSubmit()
99
+ }
100
+ }, [isSubmitInit, onSubmit])
101
+ useImperativeHandle(form, () => ({
102
+ resetFields,
103
+ setFieldsValue,
104
+ getFieldsValue,
105
+ validateFields: () => {
106
+ setDidClickSubmit(true)
107
+ return validateFields()
108
+ },
109
+ apiDoValidate: () => {
110
+ setDidClickSubmit(true)
111
+ return canSubmit()
112
+ },
113
+ }))
114
+
115
+ const formProps = {
116
+ ...res,
117
+ ref: formRef,
118
+ }
119
+ if (onTempSubmit) {
120
+ Object.assign(formProps, { onSubmit })
121
+ }
122
+ const providerValues = {
123
+ values,
124
+ hideItems,
125
+ onChange,
126
+ resetFields,
127
+ setFieldsValue,
128
+ getFieldsValue,
129
+ setCanSubmit,
130
+ didClickSubmit,
131
+ } as ControlledFormContextProps
132
+ return (
133
+ <Form {...formProps}>
134
+ <ControlledFormContext.Provider value={providerValues}>
135
+ {children}
136
+ </ControlledFormContext.Provider>
137
+ </Form>
138
+ )
139
+ }
140
+
141
+ export default ControlledForm
@@ -1,8 +1,8 @@
1
- export { useControlFormRef } from '../../common/hooks'
2
- export type { OnFieldsChange } from '../../common/hooks'
3
- export { default as ControlledForm } from './controlled_form'
4
- export { default as ControlledFormItem } from './items'
5
- export { cloneElement } from './items/utils'
6
- export type { RenderProps } from './items/utils'
7
- export * from './controlled_form'
8
- export * from './items'
1
+ export { useControlFormRef } from '../../common/hooks'
2
+ export type { OnFieldsChange } from '../../common/hooks'
3
+ export { default as ControlledForm } from './controlled_form'
4
+ export { default as ControlledFormItem } from './items'
5
+ export { cloneElement } from './items/utils'
6
+ export type { RenderProps } from './items/utils'
7
+ export * from './controlled_form'
8
+ export * from './items'
@@ -1,115 +1,115 @@
1
- /*
2
- * @Description: 渲染单个表单项
3
- */
4
- import React, { ReactElement, useContext } from 'react'
5
- import { FormInstance } from '../../../common/hooks'
6
- import { FormItem, FormItemProps } from '../../form'
7
- import { ControlledFormContext } from '../context'
8
- import { cloneElement, getWarningMessage } from './utils'
9
- import { StringKey } from '../../../types'
10
- /** ---------Rule -------- end */
11
- export declare type RuleType = 'integer' | 'url' | 'email'
12
- type StoreValue = any
13
- declare type Validator = (
14
- rule: RuleObject,
15
- value: StoreValue,
16
- callback: (error?: string) => void
17
- ) => Promise<void | any> | void
18
- export declare type RuleRender<T = any> = (values: T) => string | undefined
19
- export interface ValidatorRule {
20
- message?: string | ReactElement
21
- validator: Validator
22
- }
23
- interface BaseRule {
24
- len?: number
25
- max?: number
26
- min?: number
27
- pattern?: RegExp
28
- required?: boolean
29
- whitespace?: boolean
30
- type?: RuleType
31
- }
32
- declare type AggregationRule = BaseRule & Partial<ValidatorRule>
33
- export declare type RuleObject = AggregationRule
34
- export declare type Rule<T = any> = RuleObject | RuleRender<T>
35
- /** ---------Rule -------- end */
36
- export interface ControlFormItemProps<T = any> extends FormItemProps {
37
- /* 表单名 */
38
- name?: StringKey<T>
39
- /* 组件value名 */
40
- valuePropName?: 'value' | 'checked' | 'selected' | 'date'
41
- /* 是否隐藏表单 */
42
- hide?: boolean
43
- /* 组件触发函数名 */
44
- trigger?: string
45
- rules?: Rule<T>[]
46
- children: ReactElement
47
- /* 表单项改变的回调 */
48
- onFieldChange?(
49
- newValue: any,
50
- context: Omit<FormInstance, 'apiDoValidate' | 'validateFields'>
51
- ): void
52
- }
53
- function ControlledFormItem<T = any>(props: ControlFormItemProps<T>) {
54
- const {
55
- name = '',
56
- valuePropName = 'value',
57
- // 控制表单是否隐藏
58
- hide,
59
- trigger = 'onChange',
60
- children,
61
- onFieldChange,
62
- rules,
63
- ...restProps
64
- } = props
65
-
66
- const {
67
- values,
68
- hideItems,
69
- onChange,
70
- resetFields,
71
- setFieldsValue,
72
- getFieldsValue,
73
- setCanSubmit,
74
- didClickSubmit,
75
- } = useContext(ControlledFormContext)
76
- const isHide = hide || hideItems?.[name]
77
-
78
- if (isHide) {
79
- return null
80
- }
81
- const childProps = {
82
- ...children.props,
83
- }
84
- // 如果有提供name
85
- if (name) {
86
- // 拦截加上value
87
- childProps[valuePropName] = values?.[name]
88
- const triggers = new Set<string>([trigger])
89
- if (!Array.isArray(children)) {
90
- triggers.forEach((eventName) => {
91
- childProps[eventName] = (args: any) => {
92
- // 触发更新
93
- if (onChange) {
94
- const newValue = onChange(name, args)
95
- if (onFieldChange && resetFields && getFieldsValue && setFieldsValue) {
96
- onFieldChange(newValue, { resetFields, getFieldsValue, setFieldsValue })
97
- }
98
- }
99
- }
100
- })
101
- }
102
- }
103
- const warningMessage = getWarningMessage(rules, values as T, name, restProps.required)
104
- if (name) {
105
- setCanSubmit(name, warningMessage)
106
- }
107
-
108
- return (
109
- <FormItem {...restProps} warningMessage={didClickSubmit ? warningMessage : undefined}>
110
- {cloneElement(children, childProps)}
111
- </FormItem>
112
- )
113
- }
114
-
115
- export default ControlledFormItem
1
+ /*
2
+ * @Description: 渲染单个表单项
3
+ */
4
+ import React, { ReactElement, useContext } from 'react'
5
+ import { FormInstance } from '../../../common/hooks'
6
+ import { FormItem, FormItemProps } from '../../form'
7
+ import { ControlledFormContext } from '../context'
8
+ import { cloneElement, getWarningMessage } from './utils'
9
+ import { StringKey } from '../../../types'
10
+ /** ---------Rule -------- end */
11
+ export declare type RuleType = 'integer' | 'url' | 'email'
12
+ type StoreValue = any
13
+ declare type Validator = (
14
+ rule: RuleObject,
15
+ value: StoreValue,
16
+ callback: (error?: string) => void
17
+ ) => Promise<void | any> | void
18
+ export declare type RuleRender<T = any> = (values: T) => string | undefined
19
+ export interface ValidatorRule {
20
+ message?: string | ReactElement
21
+ validator: Validator
22
+ }
23
+ interface BaseRule {
24
+ len?: number
25
+ max?: number
26
+ min?: number
27
+ pattern?: RegExp
28
+ required?: boolean
29
+ whitespace?: boolean
30
+ type?: RuleType
31
+ }
32
+ declare type AggregationRule = BaseRule & Partial<ValidatorRule>
33
+ export declare type RuleObject = AggregationRule
34
+ export declare type Rule<T = any> = RuleObject | RuleRender<T>
35
+ /** ---------Rule -------- end */
36
+ export interface ControlFormItemProps<T = any> extends FormItemProps {
37
+ /* 表单名 */
38
+ name?: StringKey<T>
39
+ /* 组件value名 */
40
+ valuePropName?: 'value' | 'checked' | 'selected' | 'date'
41
+ /* 是否隐藏表单 */
42
+ hide?: boolean
43
+ /* 组件触发函数名 */
44
+ trigger?: string
45
+ rules?: Rule<T>[]
46
+ children: ReactElement
47
+ /* 表单项改变的回调 */
48
+ onFieldChange?(
49
+ newValue: any,
50
+ context: Omit<FormInstance, 'apiDoValidate' | 'validateFields'>
51
+ ): void
52
+ }
53
+ function ControlledFormItem<T = any>(props: ControlFormItemProps<T>) {
54
+ const {
55
+ name = '',
56
+ valuePropName = 'value',
57
+ // 控制表单是否隐藏
58
+ hide,
59
+ trigger = 'onChange',
60
+ children,
61
+ onFieldChange,
62
+ rules,
63
+ ...restProps
64
+ } = props
65
+
66
+ const {
67
+ values,
68
+ hideItems,
69
+ onChange,
70
+ resetFields,
71
+ setFieldsValue,
72
+ getFieldsValue,
73
+ setCanSubmit,
74
+ didClickSubmit,
75
+ } = useContext(ControlledFormContext)
76
+ const isHide = hide || hideItems?.[name]
77
+
78
+ if (isHide) {
79
+ return null
80
+ }
81
+ const childProps = {
82
+ ...children.props,
83
+ }
84
+ // 如果有提供name
85
+ if (name) {
86
+ // 拦截加上value
87
+ childProps[valuePropName] = values?.[name]
88
+ const triggers = new Set<string>([trigger])
89
+ if (!Array.isArray(children)) {
90
+ triggers.forEach((eventName) => {
91
+ childProps[eventName] = (args: any) => {
92
+ // 触发更新
93
+ if (onChange) {
94
+ const newValue = onChange(name, args)
95
+ if (onFieldChange && resetFields && getFieldsValue && setFieldsValue) {
96
+ onFieldChange(newValue, { resetFields, getFieldsValue, setFieldsValue })
97
+ }
98
+ }
99
+ }
100
+ })
101
+ }
102
+ }
103
+ const warningMessage = getWarningMessage(rules, values as T, name, restProps.required)
104
+ if (name) {
105
+ setCanSubmit(name, warningMessage)
106
+ }
107
+
108
+ return (
109
+ <FormItem {...restProps} warningMessage={didClickSubmit ? warningMessage : undefined}>
110
+ {cloneElement(children, childProps)}
111
+ </FormItem>
112
+ )
113
+ }
114
+
115
+ export default ControlledFormItem