@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,157 +1,157 @@
1
- import React, {
2
- BaseSyntheticEvent,
3
- FC,
4
- useCallback,
5
- useEffect,
6
- useRef,
7
- useState,
8
- } from 'react'
9
- import { devWarnForHook, warn } from '@gm-common/tool'
10
- import { Button } from '../button'
11
- import { getLocale } from '@gm-pc/locales'
12
- import _ from 'lodash'
13
- import { useMutationObserver } from '../../common/hooks'
14
- import { FormGroupProps } from './types'
15
- import classNames from 'classnames'
16
-
17
- const options = {
18
- childList: true,
19
- attributes: true, // 观察属性变动
20
- subtree: true,
21
- characterData: false,
22
- }
23
-
24
- const FormGroup: FC<FormGroupProps> = ({
25
- disabled,
26
- onCancel,
27
- children,
28
- formRefs,
29
- onSubmit,
30
- saveText,
31
- actions,
32
- onSubmitValidated,
33
- className,
34
- absolute = false,
35
- ...rest
36
- }) => {
37
- devWarnForHook(() => {
38
- let i = 0
39
- onSubmit && i++
40
- onSubmitValidated && i++
41
- if (i === 0) {
42
- warn('请提供 onSubmit 或 onSubmitValidated')
43
- } else if (i > 1) {
44
- warn('请仅提供 onSubmit 或 onSubmitValidated')
45
- }
46
- })
47
-
48
- const [affix, setAffix] = useState(false)
49
- const bodyRef = useRef(document.querySelector('body'))
50
-
51
- const checkAndChangeAffix = useCallback(() => {
52
- const BODY_SCROLL_HEIGHT = document.body.scrollHeight
53
- const WINDOW_INNER_HEIGHT = window.innerHeight
54
-
55
- // 判断是否有滚动条就好
56
- if (BODY_SCROLL_HEIGHT > WINDOW_INNER_HEIGHT) {
57
- setAffix(true)
58
- } else {
59
- setAffix(false)
60
- }
61
- }, [])
62
-
63
- // 只针对body的scrollHeight
64
- const _observerCallBack = useCallback(_.throttle(checkAndChangeAffix, 1000), [
65
- checkAndChangeAffix,
66
- ])
67
-
68
- // 暂时没有其他方案可以监听body---scrollHeight,先通过body中的child变化来触发,内部没很重的逻辑
69
- useMutationObserver(bodyRef, _observerCallBack, options)
70
-
71
- useEffect(() => {
72
- const debounceChange = _.debounce(checkAndChangeAffix, 200)
73
- window.addEventListener('resize', debounceChange)
74
-
75
- return () => window.removeEventListener('resize', debounceChange)
76
- }, [checkAndChangeAffix])
77
-
78
- useEffect(() => {
79
- checkAndChangeAffix()
80
- }, [checkAndChangeAffix])
81
-
82
- const handleSubmit = useCallback(
83
- (event: BaseSyntheticEvent) => {
84
- event.preventDefault()
85
- if (onSubmit) {
86
- return onSubmit()
87
- }
88
- let isPass = true
89
- formRefs.forEach((form) => {
90
- if (!form.current!.apiDoValidate()) {
91
- isPass = false
92
- }
93
- })
94
- if (isPass && onSubmitValidated) {
95
- return onSubmitValidated()
96
- }
97
- },
98
- [onSubmit, formRefs, onSubmitValidated]
99
- )
100
-
101
- return (
102
- <>
103
- <div
104
- {...rest}
105
- onSubmit={handleSubmit}
106
- className={classNames('gm-margin-bottom-40', className)}
107
- >
108
- {children}
109
- </div>
110
- <div
111
- className={classNames(
112
- 'gm-padding-tb-5 gm-margin-top-20 gm-text-center gm-form-group-position-fixed-box gm-form-group-sticky-box',
113
- { 'gm-form-group-position-absolute-box': absolute }
114
- )}
115
- // 统一padding,margin样式,保证affix切换时正常切换
116
- >
117
- <Action
118
- disabled={disabled}
119
- actions={actions}
120
- onSubmit={handleSubmit}
121
- saveText={saveText}
122
- onCancel={onCancel}
123
- />
124
- </div>
125
- </>
126
- )
127
- }
128
-
129
- export default FormGroup
130
-
131
- type ActionProps = Omit<FormGroupProps, 'formRefs' | 'onSubmitValidated' | 'onSubmit'> & {
132
- onSubmit?(event: BaseSyntheticEvent): Promise<void> | void
133
- }
134
-
135
- const Action: FC<ActionProps> = ({ onCancel, onSubmit, disabled, saveText, actions }) => {
136
- const [loading, setLoading] = useState(false)
137
-
138
- const handleClick = (e: BaseSyntheticEvent) => {
139
- setLoading(true)
140
- Promise.resolve(onSubmit?.(e)).finally(() => setLoading(false))
141
- }
142
-
143
- return (
144
- <>
145
- {onCancel && (
146
- <>
147
- <Button onClick={onCancel}>{getLocale('取消')}</Button>
148
- <div className='gm-gap-10' />
149
- </>
150
- )}
151
- <Button type='primary' disabled={disabled} loading={loading} onClick={handleClick}>
152
- {saveText || getLocale('确定')}
153
- </Button>
154
- {actions}
155
- </>
156
- )
157
- }
1
+ import React, {
2
+ BaseSyntheticEvent,
3
+ FC,
4
+ useCallback,
5
+ useEffect,
6
+ useRef,
7
+ useState,
8
+ } from 'react'
9
+ import { devWarnForHook, warn } from '@gm-common/tool'
10
+ import { Button } from '../button'
11
+ import { getLocale } from '@gm-pc/locales'
12
+ import _ from 'lodash'
13
+ import { useMutationObserver } from '../../common/hooks'
14
+ import { FormGroupProps } from './types'
15
+ import classNames from 'classnames'
16
+
17
+ const options = {
18
+ childList: true,
19
+ attributes: true, // 观察属性变动
20
+ subtree: true,
21
+ characterData: false,
22
+ }
23
+
24
+ const FormGroup: FC<FormGroupProps> = ({
25
+ disabled,
26
+ onCancel,
27
+ children,
28
+ formRefs,
29
+ onSubmit,
30
+ saveText,
31
+ actions,
32
+ onSubmitValidated,
33
+ className,
34
+ absolute = false,
35
+ ...rest
36
+ }) => {
37
+ devWarnForHook(() => {
38
+ let i = 0
39
+ onSubmit && i++
40
+ onSubmitValidated && i++
41
+ if (i === 0) {
42
+ warn('请提供 onSubmit 或 onSubmitValidated')
43
+ } else if (i > 1) {
44
+ warn('请仅提供 onSubmit 或 onSubmitValidated')
45
+ }
46
+ })
47
+
48
+ const [affix, setAffix] = useState(false)
49
+ const bodyRef = useRef(document.querySelector('body'))
50
+
51
+ const checkAndChangeAffix = useCallback(() => {
52
+ const BODY_SCROLL_HEIGHT = document.body.scrollHeight
53
+ const WINDOW_INNER_HEIGHT = window.innerHeight
54
+
55
+ // 判断是否有滚动条就好
56
+ if (BODY_SCROLL_HEIGHT > WINDOW_INNER_HEIGHT) {
57
+ setAffix(true)
58
+ } else {
59
+ setAffix(false)
60
+ }
61
+ }, [])
62
+
63
+ // 只针对body的scrollHeight
64
+ const _observerCallBack = useCallback(_.throttle(checkAndChangeAffix, 1000), [
65
+ checkAndChangeAffix,
66
+ ])
67
+
68
+ // 暂时没有其他方案可以监听body---scrollHeight,先通过body中的child变化来触发,内部没很重的逻辑
69
+ useMutationObserver(bodyRef, _observerCallBack, options)
70
+
71
+ useEffect(() => {
72
+ const debounceChange = _.debounce(checkAndChangeAffix, 200)
73
+ window.addEventListener('resize', debounceChange)
74
+
75
+ return () => window.removeEventListener('resize', debounceChange)
76
+ }, [checkAndChangeAffix])
77
+
78
+ useEffect(() => {
79
+ checkAndChangeAffix()
80
+ }, [checkAndChangeAffix])
81
+
82
+ const handleSubmit = useCallback(
83
+ (event: BaseSyntheticEvent) => {
84
+ event.preventDefault()
85
+ if (onSubmit) {
86
+ return onSubmit()
87
+ }
88
+ let isPass = true
89
+ formRefs.forEach((form) => {
90
+ if (!form.current!.apiDoValidate()) {
91
+ isPass = false
92
+ }
93
+ })
94
+ if (isPass && onSubmitValidated) {
95
+ return onSubmitValidated()
96
+ }
97
+ },
98
+ [onSubmit, formRefs, onSubmitValidated]
99
+ )
100
+
101
+ return (
102
+ <>
103
+ <div
104
+ {...rest}
105
+ onSubmit={handleSubmit}
106
+ className={classNames('gm-margin-bottom-40', className)}
107
+ >
108
+ {children}
109
+ </div>
110
+ <div
111
+ className={classNames(
112
+ 'gm-padding-tb-5 gm-margin-top-20 gm-text-center gm-form-group-position-fixed-box gm-form-group-sticky-box',
113
+ { 'gm-form-group-position-absolute-box': absolute }
114
+ )}
115
+ // 统一padding,margin样式,保证affix切换时正常切换
116
+ >
117
+ <Action
118
+ disabled={disabled}
119
+ actions={actions}
120
+ onSubmit={handleSubmit}
121
+ saveText={saveText}
122
+ onCancel={onCancel}
123
+ />
124
+ </div>
125
+ </>
126
+ )
127
+ }
128
+
129
+ export default FormGroup
130
+
131
+ type ActionProps = Omit<FormGroupProps, 'formRefs' | 'onSubmitValidated' | 'onSubmit'> & {
132
+ onSubmit?(event: BaseSyntheticEvent): Promise<void> | void
133
+ }
134
+
135
+ const Action: FC<ActionProps> = ({ onCancel, onSubmit, disabled, saveText, actions }) => {
136
+ const [loading, setLoading] = useState(false)
137
+
138
+ const handleClick = (e: BaseSyntheticEvent) => {
139
+ setLoading(true)
140
+ Promise.resolve(onSubmit?.(e)).finally(() => setLoading(false))
141
+ }
142
+
143
+ return (
144
+ <>
145
+ {onCancel && (
146
+ <>
147
+ <Button onClick={onCancel}>{getLocale('取消')}</Button>
148
+ <div className='gm-gap-10' />
149
+ </>
150
+ )}
151
+ <Button type='primary' disabled={disabled} loading={loading} onClick={handleClick}>
152
+ {saveText || getLocale('确定')}
153
+ </Button>
154
+ {actions}
155
+ </>
156
+ )
157
+ }
@@ -1,141 +1,141 @@
1
- import React, {
2
- Children,
3
- ComponentType,
4
- CSSProperties,
5
- FC,
6
- useContext,
7
- ReactElement,
8
- cloneElement,
9
- } from 'react'
10
- import { devWarnForHook, warn } from '@gm-common/tool'
11
- import classNames from 'classnames'
12
- import _ from 'lodash'
13
- import FormContext from './context'
14
- import Validator from '../../validator'
15
- import { Flex } from '../flex'
16
- import { Tooltip } from '../tooltip'
17
- import { FormItemProps } from './types'
18
- /**
19
- * 请使用ControlledFormItem
20
- * @deprecated
21
- */
22
- const FormItem: FC<FormItemProps> = ({
23
- label,
24
- labelWidth,
25
- required,
26
- validate,
27
- error,
28
- help,
29
- unLabelTop,
30
- className,
31
- children,
32
- col = 1,
33
- disabledCol,
34
- colWidth,
35
- style,
36
- tooltip,
37
- warningMessage,
38
- }) => {
39
- const context = useContext(FormContext)
40
- labelWidth = labelWidth ?? context.labelWidth
41
- disabledCol = disabledCol ?? context.disabledCol
42
- colWidth = colWidth ?? context.colWidth
43
- const { canValidate } = context
44
-
45
- devWarnForHook(() => {
46
- if (_.isNil(label)) {
47
- return
48
- }
49
- if (typeof label === 'string' && (label.includes(':') || label.includes(':'))) {
50
- warn('label 包含了 `:` 或 `:`', label)
51
- }
52
- })
53
-
54
- const _cw = +colWidth!.replace('px', '')
55
- const _style: CSSProperties = Object.assign(
56
- {},
57
- style,
58
- disabledCol ? {} : { width: _cw * col }
59
- )
60
-
61
- if (canValidate && !_.isNil(validate)) {
62
- if (required) {
63
- help = validate(function (value) {
64
- return Validator.validate(Validator.TYPE.required, value)
65
- })
66
- } else {
67
- help = validate()
68
- }
69
- error = !!help
70
- }
71
- const childList = Children.toArray(children)
72
- return (
73
- <Flex
74
- style={_style}
75
- className={classNames('gm-form-group', className, {
76
- 'has-error': (required && !!warningMessage) || error,
77
- 'gm-has-error': (required && !!warningMessage) || error,
78
- })}
79
- >
80
- {!_.isNil(label) && (
81
- <Flex
82
- justifyEnd
83
- width={labelWidth}
84
- className={classNames('gm-form-label', 'control-label', {
85
- 'gm-form-label-un-top': unLabelTop,
86
- })}
87
- >
88
- {required && <span className='gm-text-red gm-text-16'>*</span>}
89
- {label}
90
- {label && ':'}
91
- </Flex>
92
- )}
93
- <Flex flex column>
94
- <div className='gm-form-field'>
95
- {childList[0] && <FormControl>{childList[0]}</FormControl>}
96
- {childList?.slice(1)}
97
- {(!!(error && help) || !!warningMessage) && (
98
- <div
99
- className={classNames({
100
- 'help-block': error,
101
- 'help-block gm-form-warning-message': !!warningMessage,
102
- })}
103
- >
104
- {warningMessage ?? help}
105
- </div>
106
- )}
107
- {tooltip && (
108
- <Tooltip popup={tooltip} className='gm-padding-lr-5 gm-form-toolTip' />
109
- )}
110
- </div>
111
- </Flex>
112
- </Flex>
113
- )
114
- }
115
-
116
- FormItem.displayName = 'FormItem'
117
-
118
- export default FormItem
119
-
120
- interface FormControlChildrenProps {
121
- className?: string
122
- type?: string
123
- }
124
-
125
- const FormControl: FC = (props) => {
126
- const children = props.children as ReactElement<
127
- FormControlChildrenProps,
128
- ComponentType | string
129
- >
130
- const { className } = children.props
131
- if (
132
- (children.type === 'input' && children.props.type !== 'file') ||
133
- children.type === 'textarea' ||
134
- children.type === 'select'
135
- ) {
136
- return cloneElement(children, {
137
- className: classNames('gm-form-control', className),
138
- })
139
- }
140
- return children
141
- }
1
+ import React, {
2
+ Children,
3
+ ComponentType,
4
+ CSSProperties,
5
+ FC,
6
+ useContext,
7
+ ReactElement,
8
+ cloneElement,
9
+ } from 'react'
10
+ import { devWarnForHook, warn } from '@gm-common/tool'
11
+ import classNames from 'classnames'
12
+ import _ from 'lodash'
13
+ import FormContext from './context'
14
+ import Validator from '../../validator'
15
+ import { Flex } from '../flex'
16
+ import { Tooltip } from '../tooltip'
17
+ import { FormItemProps } from './types'
18
+ /**
19
+ * 请使用ControlledFormItem
20
+ * @deprecated
21
+ */
22
+ const FormItem: FC<FormItemProps> = ({
23
+ label,
24
+ labelWidth,
25
+ required,
26
+ validate,
27
+ error,
28
+ help,
29
+ unLabelTop,
30
+ className,
31
+ children,
32
+ col = 1,
33
+ disabledCol,
34
+ colWidth,
35
+ style,
36
+ tooltip,
37
+ warningMessage,
38
+ }) => {
39
+ const context = useContext(FormContext)
40
+ labelWidth = labelWidth ?? context.labelWidth
41
+ disabledCol = disabledCol ?? context.disabledCol
42
+ colWidth = colWidth ?? context.colWidth
43
+ const { canValidate } = context
44
+
45
+ devWarnForHook(() => {
46
+ if (_.isNil(label)) {
47
+ return
48
+ }
49
+ if (typeof label === 'string' && (label.includes(':') || label.includes(':'))) {
50
+ warn('label 包含了 `:` 或 `:`', label)
51
+ }
52
+ })
53
+
54
+ const _cw = +colWidth!.replace('px', '')
55
+ const _style: CSSProperties = Object.assign(
56
+ {},
57
+ style,
58
+ disabledCol ? {} : { width: _cw * col }
59
+ )
60
+
61
+ if (canValidate && !_.isNil(validate)) {
62
+ if (required) {
63
+ help = validate(function (value) {
64
+ return Validator.validate(Validator.TYPE.required, value)
65
+ })
66
+ } else {
67
+ help = validate()
68
+ }
69
+ error = !!help
70
+ }
71
+ const childList = Children.toArray(children)
72
+ return (
73
+ <Flex
74
+ style={_style}
75
+ className={classNames('gm-form-group', className, {
76
+ 'has-error': (required && !!warningMessage) || error,
77
+ 'gm-has-error': (required && !!warningMessage) || error,
78
+ })}
79
+ >
80
+ {!_.isNil(label) && (
81
+ <Flex
82
+ justifyEnd
83
+ width={labelWidth}
84
+ className={classNames('gm-form-label', 'control-label', {
85
+ 'gm-form-label-un-top': unLabelTop,
86
+ })}
87
+ >
88
+ {required && <span className='gm-text-red gm-text-16'>*</span>}
89
+ {label}
90
+ {label && ':'}
91
+ </Flex>
92
+ )}
93
+ <Flex flex column>
94
+ <div className='gm-form-field'>
95
+ {childList[0] && <FormControl>{childList[0]}</FormControl>}
96
+ {childList?.slice(1)}
97
+ {(!!(error && help) || !!warningMessage) && (
98
+ <div
99
+ className={classNames({
100
+ 'help-block': error,
101
+ 'help-block gm-form-warning-message': !!warningMessage,
102
+ })}
103
+ >
104
+ {warningMessage ?? help}
105
+ </div>
106
+ )}
107
+ {tooltip && (
108
+ <Tooltip popup={tooltip} className='gm-padding-lr-5 gm-form-toolTip' />
109
+ )}
110
+ </div>
111
+ </Flex>
112
+ </Flex>
113
+ )
114
+ }
115
+
116
+ FormItem.displayName = 'FormItem'
117
+
118
+ export default FormItem
119
+
120
+ interface FormControlChildrenProps {
121
+ className?: string
122
+ type?: string
123
+ }
124
+
125
+ const FormControl: FC = (props) => {
126
+ const children = props.children as ReactElement<
127
+ FormControlChildrenProps,
128
+ ComponentType | string
129
+ >
130
+ const { className } = children.props
131
+ if (
132
+ (children.type === 'input' && children.props.type !== 'file') ||
133
+ children.type === 'textarea' ||
134
+ children.type === 'select'
135
+ ) {
136
+ return cloneElement(children, {
137
+ className: classNames('gm-form-control', className),
138
+ })
139
+ }
140
+ return children
141
+ }