@gm-pc/react 1.27.0 → 1.27.1-beta.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 (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 +56 -56
  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 +187 -187
  76. package/src/component/date_picker/index.ts +2 -2
  77. package/src/component/date_picker/overlay.tsx +115 -115
  78. package/src/component/date_picker/stories.tsx +109 -109
  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 +56 -56
  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 +79 -79
  231. package/src/component/pagination/stories.tsx +63 -63
  232. package/src/component/pagination/style.less +51 -51
  233. package/src/component/pagination/types.ts +18 -18
  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 +154 -154
  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 -172
  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,187 +1,187 @@
1
- import React, {
2
- ReactNode,
3
- KeyboardEvent,
4
- Component,
5
- createRef,
6
- CSSProperties,
7
- } from 'react'
8
- import classNames from 'classnames'
9
- import moment from 'moment'
10
- import _ from 'lodash'
11
-
12
- import { Popover, PopoverTrigger } from '../popover'
13
- import { Selection } from '../selection'
14
- import { TimeLimit } from './types'
15
- import SVGCalendar from '../../svg/calendar.svg'
16
- import Overlay from './overlay'
17
-
18
- interface DatePickerState {
19
- willActiveSelected: Date | null
20
- }
21
-
22
- export interface DatePickerProps {
23
- /* 选择的日期 */
24
- date?: Date | null
25
- /* 选择日期的回调函数 */
26
- onChange?(date: Date | null): void
27
- /* 展示栏placeholder */
28
- placeholder?: string
29
- /* 禁用 */
30
- disabled?: boolean
31
- /* 最小可选日期 */
32
- min?: Date
33
- /* 最大可选日期 */
34
- max?: Date
35
- /* 自定义禁用日期,优先级高于min,max */
36
- disabledDate?(date: Date): boolean
37
- /* 自定义日期展示格式 */
38
- renderDate?(date: Date): ReactNode
39
- style?: CSSProperties
40
- className?: string
41
- onKeyDown?(event: KeyboardEvent): void
42
- /* 时间选择 */
43
- enabledTimeSelect?: boolean
44
- /* 时间选择限制 */
45
- timeLimit?: TimeLimit
46
- /* 目前内部用,触发方式 */
47
- popoverType?: PopoverTrigger
48
- /** 选择日期之后是否保留时间 */
49
- preserveTime?: boolean
50
- }
51
-
52
- class DatePicker extends Component<DatePickerProps, DatePickerState> {
53
- static defaultProps = {
54
- onKeyDown: _.noop,
55
- timeLimit: {
56
- timeSpan: 30 * 60 * 1000,
57
- },
58
- }
59
-
60
- readonly state: DatePickerState = {
61
- willActiveSelected: null,
62
- }
63
-
64
- private _popoverRef = createRef<Popover>()
65
- private _selectionRef = createRef<Selection>()
66
-
67
- public apiDoFocus(): void {
68
- this._selectionRef.current!.apiDoFocus()
69
- }
70
-
71
- public apiDoSelectWillActive(): void {
72
- const { willActiveSelected } = this.state
73
- const { onChange, date } = this.props
74
- onChange(willActiveSelected ?? date ?? new Date())
75
- }
76
-
77
- private _handleSelectDate = (date: Date): void => {
78
- this._popoverRef.current!.apiDoSetActive()
79
- const { onChange } = this.props
80
- onChange(date)
81
- }
82
-
83
- private _handleKeyDown = (event: KeyboardEvent): void => {
84
- if (
85
- !(
86
- event.key === 'ArrowUp' ||
87
- event.key === 'ArrowRight' ||
88
- event.key === 'ArrowDown' ||
89
- event.key === 'ArrowLeft'
90
- )
91
- ) {
92
- const { onKeyDown } = this.props
93
- onKeyDown && onKeyDown(event)
94
- return
95
- }
96
-
97
- const { date } = this.props
98
- const { willActiveSelected } = this.state
99
- let will = moment(willActiveSelected ?? date ?? undefined)
100
-
101
- if (event.key === 'ArrowUp') {
102
- will = will.subtract(1, 'days')
103
- } else if (event.key === 'ArrowDown') {
104
- will = will.add(1, 'days')
105
- } else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
106
- const { onKeyDown } = this.props
107
- onKeyDown && onKeyDown(event)
108
- return
109
- }
110
- this.setState({
111
- willActiveSelected: will.toDate(),
112
- })
113
- }
114
-
115
- private _renderSelected = (date: Date): ReactNode => {
116
- const { renderDate, enabledTimeSelect } = this.props
117
- if (!date) {
118
- return ''
119
- }
120
- if (renderDate) {
121
- return renderDate(date)
122
- }
123
- const format = enabledTimeSelect ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'
124
- return moment(date).format(format)
125
- }
126
-
127
- render() {
128
- const {
129
- date,
130
- onChange,
131
- placeholder,
132
- disabled,
133
- min,
134
- max,
135
- disabledDate,
136
- className,
137
- renderDate,
138
- onKeyDown,
139
- timeLimit,
140
- enabledTimeSelect,
141
- popoverType,
142
- children,
143
- preserveTime,
144
- ...rest
145
- } = this.props
146
- const { willActiveSelected } = this.state
147
- const popup = (
148
- <Overlay
149
- willActiveSelected={willActiveSelected}
150
- onSelect={this._handleSelectDate}
151
- max={max}
152
- date={date!}
153
- disabledDate={disabledDate}
154
- min={min}
155
- timeLimit={timeLimit!}
156
- enabledTimeSelect={enabledTimeSelect}
157
- preserveTime={preserveTime}
158
- />
159
- )
160
- return (
161
- <Popover
162
- popup={popup}
163
- ref={this._popoverRef}
164
- disabled={disabled}
165
- type={popoverType}
166
- style={{ minWidth: '200px' }}
167
- >
168
- {children ?? (
169
- <Selection
170
- ref={this._selectionRef}
171
- {...rest}
172
- selected={date!}
173
- onSelect={onChange}
174
- disabled={disabled}
175
- renderSelected={this._renderSelected}
176
- className={classNames('gm-date-picker', className)}
177
- placeholder={placeholder}
178
- funIcon={<SVGCalendar />}
179
- onKeyDown={this._handleKeyDown}
180
- />
181
- )}
182
- </Popover>
183
- )
184
- }
185
- }
186
-
187
- export default DatePicker
1
+ import React, {
2
+ ReactNode,
3
+ KeyboardEvent,
4
+ Component,
5
+ createRef,
6
+ CSSProperties,
7
+ } from 'react'
8
+ import classNames from 'classnames'
9
+ import moment from 'moment'
10
+ import _ from 'lodash'
11
+
12
+ import { Popover, PopoverTrigger } from '../popover'
13
+ import { Selection } from '../selection'
14
+ import { TimeLimit } from './types'
15
+ import SVGCalendar from '../../svg/calendar.svg'
16
+ import Overlay from './overlay'
17
+
18
+ interface DatePickerState {
19
+ willActiveSelected: Date | null
20
+ }
21
+
22
+ export interface DatePickerProps {
23
+ /* 选择的日期 */
24
+ date?: Date | null
25
+ /* 选择日期的回调函数 */
26
+ onChange?(date: Date | null): void
27
+ /* 展示栏placeholder */
28
+ placeholder?: string
29
+ /* 禁用 */
30
+ disabled?: boolean
31
+ /* 最小可选日期 */
32
+ min?: Date
33
+ /* 最大可选日期 */
34
+ max?: Date
35
+ /* 自定义禁用日期,优先级高于min,max */
36
+ disabledDate?(date: Date): boolean
37
+ /* 自定义日期展示格式 */
38
+ renderDate?(date: Date): ReactNode
39
+ style?: CSSProperties
40
+ className?: string
41
+ onKeyDown?(event: KeyboardEvent): void
42
+ /* 时间选择 */
43
+ enabledTimeSelect?: boolean
44
+ /* 时间选择限制 */
45
+ timeLimit?: TimeLimit
46
+ /* 目前内部用,触发方式 */
47
+ popoverType?: PopoverTrigger
48
+ /** 选择日期之后是否保留时间 */
49
+ preserveTime?: boolean
50
+ }
51
+
52
+ class DatePicker extends Component<DatePickerProps, DatePickerState> {
53
+ static defaultProps = {
54
+ onKeyDown: _.noop,
55
+ timeLimit: {
56
+ timeSpan: 30 * 60 * 1000,
57
+ },
58
+ }
59
+
60
+ readonly state: DatePickerState = {
61
+ willActiveSelected: null,
62
+ }
63
+
64
+ private _popoverRef = createRef<Popover>()
65
+ private _selectionRef = createRef<Selection>()
66
+
67
+ public apiDoFocus(): void {
68
+ this._selectionRef.current!.apiDoFocus()
69
+ }
70
+
71
+ public apiDoSelectWillActive(): void {
72
+ const { willActiveSelected } = this.state
73
+ const { onChange, date } = this.props
74
+ onChange(willActiveSelected ?? date ?? new Date())
75
+ }
76
+
77
+ private _handleSelectDate = (date: Date): void => {
78
+ this._popoverRef.current!.apiDoSetActive()
79
+ const { onChange } = this.props
80
+ onChange(date)
81
+ }
82
+
83
+ private _handleKeyDown = (event: KeyboardEvent): void => {
84
+ if (
85
+ !(
86
+ event.key === 'ArrowUp' ||
87
+ event.key === 'ArrowRight' ||
88
+ event.key === 'ArrowDown' ||
89
+ event.key === 'ArrowLeft'
90
+ )
91
+ ) {
92
+ const { onKeyDown } = this.props
93
+ onKeyDown && onKeyDown(event)
94
+ return
95
+ }
96
+
97
+ const { date } = this.props
98
+ const { willActiveSelected } = this.state
99
+ let will = moment(willActiveSelected ?? date ?? undefined)
100
+
101
+ if (event.key === 'ArrowUp') {
102
+ will = will.subtract(1, 'days')
103
+ } else if (event.key === 'ArrowDown') {
104
+ will = will.add(1, 'days')
105
+ } else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
106
+ const { onKeyDown } = this.props
107
+ onKeyDown && onKeyDown(event)
108
+ return
109
+ }
110
+ this.setState({
111
+ willActiveSelected: will.toDate(),
112
+ })
113
+ }
114
+
115
+ private _renderSelected = (date: Date): ReactNode => {
116
+ const { renderDate, enabledTimeSelect } = this.props
117
+ if (!date) {
118
+ return ''
119
+ }
120
+ if (renderDate) {
121
+ return renderDate(date)
122
+ }
123
+ const format = enabledTimeSelect ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD'
124
+ return moment(date).format(format)
125
+ }
126
+
127
+ render() {
128
+ const {
129
+ date,
130
+ onChange,
131
+ placeholder,
132
+ disabled,
133
+ min,
134
+ max,
135
+ disabledDate,
136
+ className,
137
+ renderDate,
138
+ onKeyDown,
139
+ timeLimit,
140
+ enabledTimeSelect,
141
+ popoverType,
142
+ children,
143
+ preserveTime,
144
+ ...rest
145
+ } = this.props
146
+ const { willActiveSelected } = this.state
147
+ const popup = (
148
+ <Overlay
149
+ willActiveSelected={willActiveSelected}
150
+ onSelect={this._handleSelectDate}
151
+ max={max}
152
+ date={date!}
153
+ disabledDate={disabledDate}
154
+ min={min}
155
+ timeLimit={timeLimit!}
156
+ enabledTimeSelect={enabledTimeSelect}
157
+ preserveTime={preserveTime}
158
+ />
159
+ )
160
+ return (
161
+ <Popover
162
+ popup={popup}
163
+ ref={this._popoverRef}
164
+ disabled={disabled}
165
+ type={popoverType}
166
+ style={{ minWidth: '200px' }}
167
+ >
168
+ {children ?? (
169
+ <Selection
170
+ ref={this._selectionRef}
171
+ {...rest}
172
+ selected={date!}
173
+ onSelect={onChange}
174
+ disabled={disabled}
175
+ renderSelected={this._renderSelected}
176
+ className={classNames('gm-date-picker', className)}
177
+ placeholder={placeholder}
178
+ funIcon={<SVGCalendar />}
179
+ onKeyDown={this._handleKeyDown}
180
+ />
181
+ )}
182
+ </Popover>
183
+ )
184
+ }
185
+ }
186
+
187
+ export default DatePicker
@@ -1,2 +1,2 @@
1
- export { default as DatePicker } from './date_picker'
2
- export type { DatePickerProps } from './date_picker'
1
+ export { default as DatePicker } from './date_picker'
2
+ export type { DatePickerProps } from './date_picker'
@@ -1,115 +1,115 @@
1
- import React, { FC, useState } from 'react'
2
- import _ from 'lodash'
3
- import moment from 'moment'
4
-
5
- import { TimeLimit } from './types'
6
- import { Flex } from '../flex'
7
- import { Calendar } from '../calendar'
8
- import { Button } from '../button'
9
- import { getLocale } from '@gm-pc/locales'
10
- import { getTimeCells, setTimes } from '../../common/utils/date'
11
- import TimeSelect from './time_select'
12
-
13
- interface OverlayProps {
14
- date?: Date
15
- willActiveSelected: Date | null
16
- min?: Date
17
- max?: Date
18
- onSelect(date: Date | null): void
19
- disabledDate?(date: Date): boolean
20
- timeLimit: TimeLimit
21
- enabledTimeSelect?: boolean
22
- preserveTime?: boolean
23
- }
24
-
25
- const Overlay: FC<OverlayProps> = ({
26
- date,
27
- willActiveSelected,
28
- min,
29
- max,
30
- onSelect,
31
- timeLimit,
32
- disabledDate,
33
- enabledTimeSelect,
34
- preserveTime,
35
- }) => {
36
- const [selectedDate, setSelectedDate] = useState(date)
37
-
38
- // 选择日期后渲染时间,有默认时间则展示,无展示为可选的第一个时间
39
- const getTime = (currentDate: Date): Date => {
40
- const { defaultTime, disabledSpan, timeSpan } = timeLimit
41
- if (defaultTime) {
42
- return defaultTime
43
- }
44
- const cells = getTimeCells(timeSpan!)
45
- cells.pop() // 去掉 24:00
46
- let index = 0
47
- if (disabledSpan) {
48
- index = _.findIndex(cells, (cell) => {
49
- const _cell = setTimes(moment(currentDate), cell)
50
- const disabled = disabledSpan(_cell.toDate(), currentDate)
51
- return !disabled
52
- })
53
- }
54
- return cells[index].toDate()
55
- }
56
-
57
- const _handelSelect = (value: Date, type: 'date' | 'time'): void => {
58
- if (!enabledTimeSelect) {
59
- onSelect(value)
60
- return
61
- }
62
- let date: Date
63
- let time: Date
64
- if (type === 'date') {
65
- date = value
66
- time = getTime(value)
67
- if (preserveTime && selectedDate) {
68
- // 不修改时分秒,否则会导致时间变化
69
- time = moment(date)
70
- .set('hour', selectedDate.getHours())
71
- .set('minute', selectedDate.getMinutes())
72
- .toDate()
73
- }
74
- } else {
75
- date = selectedDate!
76
- time = value
77
- }
78
- const newDate = setTimes(moment(date), moment(time)).toDate()
79
- setSelectedDate(newDate)
80
- }
81
-
82
- return (
83
- <Flex column className='gm-date-picker-overlay'>
84
- <Calendar
85
- className='gm-date-picker-overlay-calendar'
86
- selected={selectedDate}
87
- onSelect={(value) => _handelSelect(value, 'date')}
88
- willActiveSelected={willActiveSelected!}
89
- min={min}
90
- max={max}
91
- disabledDate={disabledDate}
92
- />
93
- <TimeSelect
94
- date={selectedDate}
95
- timeLimit={timeLimit}
96
- onSelectTime={(value) => _handelSelect(value, 'time')}
97
- enabledTimeSelect={enabledTimeSelect}
98
- />
99
- {enabledTimeSelect && (
100
- <Flex justifyEnd className='gm-border-top gm-padding-lr-10 gm-padding-tb-5'>
101
- <Button
102
- type='primary'
103
- className='gm-padding-lr-20'
104
- disabled={!selectedDate}
105
- onClick={() => onSelect(selectedDate!)}
106
- style={{ height: '28px' }}
107
- >
108
- {getLocale('确定')}
109
- </Button>
110
- </Flex>
111
- )}
112
- </Flex>
113
- )
114
- }
115
- export default Overlay
1
+ import React, { FC, useState } from 'react'
2
+ import _ from 'lodash'
3
+ import moment from 'moment'
4
+
5
+ import { TimeLimit } from './types'
6
+ import { Flex } from '../flex'
7
+ import { Calendar } from '../calendar'
8
+ import { Button } from '../button'
9
+ import { getLocale } from '@gm-pc/locales'
10
+ import { getTimeCells, setTimes } from '../../common/utils/date'
11
+ import TimeSelect from './time_select'
12
+
13
+ interface OverlayProps {
14
+ date?: Date
15
+ willActiveSelected: Date | null
16
+ min?: Date
17
+ max?: Date
18
+ onSelect(date: Date | null): void
19
+ disabledDate?(date: Date): boolean
20
+ timeLimit: TimeLimit
21
+ enabledTimeSelect?: boolean
22
+ preserveTime?: boolean
23
+ }
24
+
25
+ const Overlay: FC<OverlayProps> = ({
26
+ date,
27
+ willActiveSelected,
28
+ min,
29
+ max,
30
+ onSelect,
31
+ timeLimit,
32
+ disabledDate,
33
+ enabledTimeSelect,
34
+ preserveTime,
35
+ }) => {
36
+ const [selectedDate, setSelectedDate] = useState(date)
37
+
38
+ // 选择日期后渲染时间,有默认时间则展示,无展示为可选的第一个时间
39
+ const getTime = (currentDate: Date): Date => {
40
+ const { defaultTime, disabledSpan, timeSpan } = timeLimit
41
+ if (defaultTime) {
42
+ return defaultTime
43
+ }
44
+ const cells = getTimeCells(timeSpan!)
45
+ cells.pop() // 去掉 24:00
46
+ let index = 0
47
+ if (disabledSpan) {
48
+ index = _.findIndex(cells, (cell) => {
49
+ const _cell = setTimes(moment(currentDate), cell)
50
+ const disabled = disabledSpan(_cell.toDate(), currentDate)
51
+ return !disabled
52
+ })
53
+ }
54
+ return cells[index].toDate()
55
+ }
56
+
57
+ const _handelSelect = (value: Date, type: 'date' | 'time'): void => {
58
+ if (!enabledTimeSelect) {
59
+ onSelect(value)
60
+ return
61
+ }
62
+ let date: Date
63
+ let time: Date
64
+ if (type === 'date') {
65
+ date = value
66
+ time = getTime(value)
67
+ if (preserveTime && selectedDate) {
68
+ // 不修改时分秒,否则会导致时间变化
69
+ time = moment(date)
70
+ .set('hour', selectedDate.getHours())
71
+ .set('minute', selectedDate.getMinutes())
72
+ .toDate()
73
+ }
74
+ } else {
75
+ date = selectedDate!
76
+ time = value
77
+ }
78
+ const newDate = setTimes(moment(date), moment(time)).toDate()
79
+ setSelectedDate(newDate)
80
+ }
81
+
82
+ return (
83
+ <Flex column className='gm-date-picker-overlay'>
84
+ <Calendar
85
+ className='gm-date-picker-overlay-calendar'
86
+ selected={selectedDate}
87
+ onSelect={(value) => _handelSelect(value, 'date')}
88
+ willActiveSelected={willActiveSelected!}
89
+ min={min}
90
+ max={max}
91
+ disabledDate={disabledDate}
92
+ />
93
+ <TimeSelect
94
+ date={selectedDate}
95
+ timeLimit={timeLimit}
96
+ onSelectTime={(value) => _handelSelect(value, 'time')}
97
+ enabledTimeSelect={enabledTimeSelect}
98
+ />
99
+ {enabledTimeSelect && (
100
+ <Flex justifyEnd className='gm-border-top gm-padding-lr-10 gm-padding-tb-5'>
101
+ <Button
102
+ type='primary'
103
+ className='gm-padding-lr-20'
104
+ disabled={!selectedDate}
105
+ onClick={() => onSelect(selectedDate!)}
106
+ style={{ height: '28px' }}
107
+ >
108
+ {getLocale('确定')}
109
+ </Button>
110
+ </Flex>
111
+ )}
112
+ </Flex>
113
+ )
114
+ }
115
+ export default Overlay