@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,144 +1,144 @@
1
- import React, { FC, ReactNode } from 'react'
2
- import { TimeLimit } from '../date_picker/types'
3
- import moment from 'moment'
4
- import { getLocale } from '@gm-pc/locales'
5
-
6
- import { renderTime } from './util'
7
- import TimeSpanPicker from '../time_span/time_span_picker'
8
- import { Flex } from '../flex'
9
- import { setTimes } from '../../common/utils/date'
10
-
11
- interface TimeRangeSelectProps {
12
- begin?: Date | null
13
- end?: Date | null
14
- enabledTimeSelect?: boolean
15
- onSelect?(begin: Date | null, end: Date, updateEndTime: boolean): void
16
- renderTime?(date: Date): ReactNode
17
- timeSpan?: number
18
- beginTimeSelect?: Omit<TimeLimit, 'timeSpan'>
19
- endTimeSelect?: Omit<TimeLimit, 'timeSpan'>
20
- }
21
-
22
- const TimeRangeSelect: FC<TimeRangeSelectProps> = ({
23
- begin,
24
- end,
25
- enabledTimeSelect,
26
- beginTimeSelect,
27
- endTimeSelect,
28
- onSelect,
29
- timeSpan,
30
- }) => {
31
- let b: ReactNode = <span className='gm-text-desc'>{getLocale('开始日期')}</span>
32
- let e: ReactNode = <span className='gm-text-desc'>{getLocale('结束日期')}</span>
33
-
34
- if (begin) {
35
- b = moment(begin).format('YYYY-MM-DD')
36
- }
37
- if (end) {
38
- e = moment(end).format('YYYY-MM-DD')
39
- }
40
-
41
- const handleTimeSelect = (time: Date, type: 'begin' | 'end'): void => {
42
- let b = begin
43
- let e = end
44
- let updateEndTime = false
45
-
46
- if (type === 'begin') {
47
- b = setTimes(moment(begin ?? undefined), moment(time)).toDate()
48
- updateEndTime =
49
- (endTimeSelect &&
50
- endTimeSelect.disabledSpan?.(end!, {
51
- begin: b!,
52
- end: end!,
53
- })) ||
54
- false
55
- }
56
-
57
- if (type === 'end') {
58
- e = setTimes(moment(end ?? undefined), moment(time)).toDate()
59
- }
60
-
61
- // 选择防止同一天出现 开始 > 结束, 做一下判断
62
- if (moment(b ?? undefined).isAfter(moment(e ?? undefined))) {
63
- e = setTimes(moment(end ?? undefined), moment(time)).toDate()
64
- }
65
- onSelect && onSelect(b!, e!, updateEndTime)
66
- }
67
-
68
- // 做一步处理,防止不同日期可选时间段不同
69
- const handleDisabledSpan = (time: Date, type: 'begin' | 'end'): boolean => {
70
- if (type === 'begin') {
71
- if (beginTimeSelect && beginTimeSelect.disabledSpan) {
72
- const date = setTimes(moment(begin ?? undefined), moment(time)).toDate()
73
- return beginTimeSelect.disabledSpan(date, { begin: begin!, end: end! })
74
- }
75
- return false
76
- }
77
-
78
- if (type === 'end') {
79
- const date = setTimes(moment(end ?? undefined), moment(time)).toDate()
80
- let isAfterBeginTime = true
81
- // 同一天,结束时间小于/等于开始时间
82
- if (moment(begin ?? undefined).isSame(moment(end ?? undefined), 'day')) {
83
- isAfterBeginTime = moment(date).isSameOrAfter(moment(begin ?? undefined))
84
- }
85
-
86
- if (endTimeSelect && endTimeSelect.disabledSpan) {
87
- return (
88
- endTimeSelect.disabledSpan(date, { begin: begin!, end: end! }) ||
89
- !isAfterBeginTime
90
- )
91
- }
92
- return !isAfterBeginTime
93
- }
94
- return false
95
- }
96
-
97
- const renderTimeSelect = (type: 'begin' | 'end'): ReactNode => {
98
- const isDisabled = enabledTimeSelect && begin && end
99
- let time: Date | null = null
100
-
101
- if (type === 'begin') {
102
- time = begin as Date
103
- }
104
-
105
- if (type === 'end') {
106
- time = end as Date
107
- }
108
-
109
- return (
110
- isDisabled && (
111
- <TimeSpanPicker
112
- date={time!}
113
- onChange={(value) => handleTimeSelect(value!, type)}
114
- span={timeSpan}
115
- disabledSpan={(date) => handleDisabledSpan(date, type)}
116
- renderItem={(value) => renderTime(moment(value))}
117
- enabledEndTimeOfDay
118
- isInPopup
119
- >
120
- <button className='gm-date-range-picker-bottom-time'>
121
- {renderTime(moment(time!))}
122
- </button>
123
- </TimeSpanPicker>
124
- )
125
- )
126
- }
127
-
128
- return (
129
- <Flex
130
- alignCenter
131
- justifyBetween
132
- style={{ height: '25px', margin: '0px 5px 8px 15px' }}
133
- >
134
- <div className='gm-text-bold gm-date-range-picker-bottom-text'>
135
- <span>{b}</span>
136
- {enabledTimeSelect && renderTimeSelect('begin')}
137
- &nbsp;~&nbsp;
138
- <span>{e}</span>
139
- {enabledTimeSelect && renderTimeSelect('end')}
140
- </div>
141
- </Flex>
142
- )
143
- }
144
- export default TimeRangeSelect
1
+ import React, { FC, ReactNode } from 'react'
2
+ import { TimeLimit } from '../date_picker/types'
3
+ import moment from 'moment'
4
+ import { getLocale } from '@gm-pc/locales'
5
+
6
+ import { renderTime } from './util'
7
+ import TimeSpanPicker from '../time_span/time_span_picker'
8
+ import { Flex } from '../flex'
9
+ import { setTimes } from '../../common/utils/date'
10
+
11
+ interface TimeRangeSelectProps {
12
+ begin?: Date | null
13
+ end?: Date | null
14
+ enabledTimeSelect?: boolean
15
+ onSelect?(begin: Date | null, end: Date, updateEndTime: boolean): void
16
+ renderTime?(date: Date): ReactNode
17
+ timeSpan?: number
18
+ beginTimeSelect?: Omit<TimeLimit, 'timeSpan'>
19
+ endTimeSelect?: Omit<TimeLimit, 'timeSpan'>
20
+ }
21
+
22
+ const TimeRangeSelect: FC<TimeRangeSelectProps> = ({
23
+ begin,
24
+ end,
25
+ enabledTimeSelect,
26
+ beginTimeSelect,
27
+ endTimeSelect,
28
+ onSelect,
29
+ timeSpan,
30
+ }) => {
31
+ let b: ReactNode = <span className='gm-text-desc'>{getLocale('开始日期')}</span>
32
+ let e: ReactNode = <span className='gm-text-desc'>{getLocale('结束日期')}</span>
33
+
34
+ if (begin) {
35
+ b = moment(begin).format('YYYY-MM-DD')
36
+ }
37
+ if (end) {
38
+ e = moment(end).format('YYYY-MM-DD')
39
+ }
40
+
41
+ const handleTimeSelect = (time: Date, type: 'begin' | 'end'): void => {
42
+ let b = begin
43
+ let e = end
44
+ let updateEndTime = false
45
+
46
+ if (type === 'begin') {
47
+ b = setTimes(moment(begin ?? undefined), moment(time)).toDate()
48
+ updateEndTime =
49
+ (endTimeSelect &&
50
+ endTimeSelect.disabledSpan?.(end!, {
51
+ begin: b!,
52
+ end: end!,
53
+ })) ||
54
+ false
55
+ }
56
+
57
+ if (type === 'end') {
58
+ e = setTimes(moment(end ?? undefined), moment(time)).toDate()
59
+ }
60
+
61
+ // 选择防止同一天出现 开始 > 结束, 做一下判断
62
+ if (moment(b ?? undefined).isAfter(moment(e ?? undefined))) {
63
+ e = setTimes(moment(end ?? undefined), moment(time)).toDate()
64
+ }
65
+ onSelect && onSelect(b!, e!, updateEndTime)
66
+ }
67
+
68
+ // 做一步处理,防止不同日期可选时间段不同
69
+ const handleDisabledSpan = (time: Date, type: 'begin' | 'end'): boolean => {
70
+ if (type === 'begin') {
71
+ if (beginTimeSelect && beginTimeSelect.disabledSpan) {
72
+ const date = setTimes(moment(begin ?? undefined), moment(time)).toDate()
73
+ return beginTimeSelect.disabledSpan(date, { begin: begin!, end: end! })
74
+ }
75
+ return false
76
+ }
77
+
78
+ if (type === 'end') {
79
+ const date = setTimes(moment(end ?? undefined), moment(time)).toDate()
80
+ let isAfterBeginTime = true
81
+ // 同一天,结束时间小于/等于开始时间
82
+ if (moment(begin ?? undefined).isSame(moment(end ?? undefined), 'day')) {
83
+ isAfterBeginTime = moment(date).isSameOrAfter(moment(begin ?? undefined))
84
+ }
85
+
86
+ if (endTimeSelect && endTimeSelect.disabledSpan) {
87
+ return (
88
+ endTimeSelect.disabledSpan(date, { begin: begin!, end: end! }) ||
89
+ !isAfterBeginTime
90
+ )
91
+ }
92
+ return !isAfterBeginTime
93
+ }
94
+ return false
95
+ }
96
+
97
+ const renderTimeSelect = (type: 'begin' | 'end'): ReactNode => {
98
+ const isDisabled = enabledTimeSelect && begin && end
99
+ let time: Date | null = null
100
+
101
+ if (type === 'begin') {
102
+ time = begin as Date
103
+ }
104
+
105
+ if (type === 'end') {
106
+ time = end as Date
107
+ }
108
+
109
+ return (
110
+ isDisabled && (
111
+ <TimeSpanPicker
112
+ date={time!}
113
+ onChange={(value) => handleTimeSelect(value!, type)}
114
+ span={timeSpan}
115
+ disabledSpan={(date) => handleDisabledSpan(date, type)}
116
+ renderItem={(value) => renderTime(moment(value))}
117
+ enabledEndTimeOfDay
118
+ isInPopup
119
+ >
120
+ <button className='gm-date-range-picker-bottom-time'>
121
+ {renderTime(moment(time!))}
122
+ </button>
123
+ </TimeSpanPicker>
124
+ )
125
+ )
126
+ }
127
+
128
+ return (
129
+ <Flex
130
+ alignCenter
131
+ justifyBetween
132
+ style={{ height: '25px', margin: '0px 5px 8px 15px' }}
133
+ >
134
+ <div className='gm-text-bold gm-date-range-picker-bottom-text'>
135
+ <span>{b}</span>
136
+ {enabledTimeSelect && renderTimeSelect('begin')}
137
+ &nbsp;~&nbsp;
138
+ <span>{e}</span>
139
+ {enabledTimeSelect && renderTimeSelect('end')}
140
+ </div>
141
+ </Flex>
142
+ )
143
+ }
144
+ export default TimeRangeSelect
@@ -1,108 +1,108 @@
1
- import React, { FC, useEffect, useState } from 'react'
2
- import moment from 'moment'
3
- import { isNull } from 'lodash'
4
- import { Flex } from '../flex'
5
- import { RangeCalendar } from '../calendar'
6
-
7
- interface TwoProps {
8
- begin?: Date | null
9
- end?: Date | null
10
- onSelect(begin: Date | null, end: Date | null, updateEndTime: boolean): void
11
- min?: Date
12
- max?: Date
13
- disabledDate?(date: Date, selected: { begin?: Date; end?: Date }): boolean
14
- enabledTimeSelect?: boolean
15
- }
16
-
17
- const Two: FC<TwoProps> = ({ begin, end, onSelect, min, max, disabledDate }) => {
18
- const _will = begin ?? moment().toDate()
19
- // eslint-disable-next-line camelcase
20
- let _will_end: Date
21
-
22
- // 判断 begin && end 是否同月份,确定日历2 应该显示的月份
23
- if (begin && end) {
24
- const isSameMonth = moment(begin).month() === moment(end).month()
25
- // eslint-disable-next-line camelcase
26
- _will_end = isSameMonth ? moment(begin).add(1, 'month').toDate() : end
27
- } else {
28
- // eslint-disable-next-line camelcase
29
- _will_end = moment().add(1, 'month').toDate()
30
- }
31
-
32
- // 告诉 日历1 应该显示的月份
33
- const [will, setWill] = useState(_will)
34
- // 告诉 日历2 应该显示的月份
35
- // eslint-disable-next-line camelcase
36
- const [will_end, setWillEnd] = useState(_will_end)
37
- // 告诉 此时hover的日期
38
- const [hoverDay, setHoverDay] = useState<Date | null>()
39
-
40
- // 可以选择时间时,针对快速选择日期想需要更新日历
41
- useEffect(() => {
42
- if (begin && end) {
43
- let _end: Date
44
- if (begin && end) {
45
- const isSameMonth = moment(begin).month() === moment(end).month()
46
- // eslint-disable-next-line camelcase
47
- _end = isSameMonth ? moment(begin).add(1, 'month').toDate() : end
48
- } else {
49
- // eslint-disable-next-line camelcase
50
- _end = moment().add(1, 'month').toDate()
51
- }
52
- setWill(begin)
53
- setWillEnd(_end)
54
- }
55
- }, [begin, end])
56
-
57
- const handleWillChange = (date: Date): void => {
58
- setWill(date)
59
- }
60
-
61
- const handleWillChangeByEnd = (date: Date): void => {
62
- setWillEnd(date)
63
- }
64
-
65
- const disabledYearOrMonth = (): boolean => {
66
- // 两个日历显示为 同年相邻月份,disabled相应的 年 / 月 切换按钮
67
- const _begin = moment(will).startOf('month').add(1, 'month').toDate()
68
- const _end = moment(will_end).startOf('month').toDate()
69
-
70
- return +_begin === +_end
71
- }
72
-
73
- return (
74
- <Flex className='gm-padding-5'>
75
- <RangeCalendar
76
- className='gm-date-range-picker-overlay-calendar'
77
- begin={begin}
78
- end={end}
79
- willActiveSelected={will}
80
- onWillActiveSelected={handleWillChange}
81
- onSelect={(begin, end) => onSelect(begin, end, true)}
82
- min={min}
83
- max={max}
84
- disabledDate={disabledDate}
85
- disabledYearAndMonth={disabledYearOrMonth() ? 'right' : undefined}
86
- hoverDay={isNull(hoverDay) ? hoverDay : moment(hoverDay)}
87
- onHoverDay={(moment) => setHoverDay(moment ? moment.toDate() : moment)}
88
- />
89
- <RangeCalendar
90
- className='gm-date-range-picker-overlay-calendar'
91
- begin={begin}
92
- end={end}
93
- // eslint-disable-next-line camelcase
94
- willActiveSelected={will_end}
95
- onWillActiveSelected={handleWillChangeByEnd}
96
- onSelect={(begin, end) => onSelect(begin, end, true)}
97
- min={min}
98
- max={max}
99
- disabledDate={disabledDate}
100
- disabledYearAndMonth={disabledYearOrMonth() ? 'left' : undefined}
101
- hoverDay={isNull(hoverDay) ? hoverDay : moment(hoverDay)}
102
- onHoverDay={(m) => setHoverDay(m ? moment(m).toDate() : m)}
103
- />
104
- </Flex>
105
- )
106
- }
107
-
108
- export default Two
1
+ import React, { FC, useEffect, useState } from 'react'
2
+ import moment from 'moment'
3
+ import { isNull } from 'lodash'
4
+ import { Flex } from '../flex'
5
+ import { RangeCalendar } from '../calendar'
6
+
7
+ interface TwoProps {
8
+ begin?: Date | null
9
+ end?: Date | null
10
+ onSelect(begin: Date | null, end: Date | null, updateEndTime: boolean): void
11
+ min?: Date
12
+ max?: Date
13
+ disabledDate?(date: Date, selected: { begin?: Date; end?: Date }): boolean
14
+ enabledTimeSelect?: boolean
15
+ }
16
+
17
+ const Two: FC<TwoProps> = ({ begin, end, onSelect, min, max, disabledDate }) => {
18
+ const _will = begin ?? moment().toDate()
19
+ // eslint-disable-next-line camelcase
20
+ let _will_end: Date
21
+
22
+ // 判断 begin && end 是否同月份,确定日历2 应该显示的月份
23
+ if (begin && end) {
24
+ const isSameMonth = moment(begin).month() === moment(end).month()
25
+ // eslint-disable-next-line camelcase
26
+ _will_end = isSameMonth ? moment(begin).add(1, 'month').toDate() : end
27
+ } else {
28
+ // eslint-disable-next-line camelcase
29
+ _will_end = moment().add(1, 'month').toDate()
30
+ }
31
+
32
+ // 告诉 日历1 应该显示的月份
33
+ const [will, setWill] = useState(_will)
34
+ // 告诉 日历2 应该显示的月份
35
+ // eslint-disable-next-line camelcase
36
+ const [will_end, setWillEnd] = useState(_will_end)
37
+ // 告诉 此时hover的日期
38
+ const [hoverDay, setHoverDay] = useState<Date | null>()
39
+
40
+ // 可以选择时间时,针对快速选择日期想需要更新日历
41
+ useEffect(() => {
42
+ if (begin && end) {
43
+ let _end: Date
44
+ if (begin && end) {
45
+ const isSameMonth = moment(begin).month() === moment(end).month()
46
+ // eslint-disable-next-line camelcase
47
+ _end = isSameMonth ? moment(begin).add(1, 'month').toDate() : end
48
+ } else {
49
+ // eslint-disable-next-line camelcase
50
+ _end = moment().add(1, 'month').toDate()
51
+ }
52
+ setWill(begin)
53
+ setWillEnd(_end)
54
+ }
55
+ }, [begin, end])
56
+
57
+ const handleWillChange = (date: Date): void => {
58
+ setWill(date)
59
+ }
60
+
61
+ const handleWillChangeByEnd = (date: Date): void => {
62
+ setWillEnd(date)
63
+ }
64
+
65
+ const disabledYearOrMonth = (): boolean => {
66
+ // 两个日历显示为 同年相邻月份,disabled相应的 年 / 月 切换按钮
67
+ const _begin = moment(will).startOf('month').add(1, 'month').toDate()
68
+ const _end = moment(will_end).startOf('month').toDate()
69
+
70
+ return +_begin === +_end
71
+ }
72
+
73
+ return (
74
+ <Flex className='gm-padding-5'>
75
+ <RangeCalendar
76
+ className='gm-date-range-picker-overlay-calendar'
77
+ begin={begin}
78
+ end={end}
79
+ willActiveSelected={will}
80
+ onWillActiveSelected={handleWillChange}
81
+ onSelect={(begin, end) => onSelect(begin, end, true)}
82
+ min={min}
83
+ max={max}
84
+ disabledDate={disabledDate}
85
+ disabledYearAndMonth={disabledYearOrMonth() ? 'right' : undefined}
86
+ hoverDay={isNull(hoverDay) ? hoverDay : moment(hoverDay)}
87
+ onHoverDay={(moment) => setHoverDay(moment ? moment.toDate() : moment)}
88
+ />
89
+ <RangeCalendar
90
+ className='gm-date-range-picker-overlay-calendar'
91
+ begin={begin}
92
+ end={end}
93
+ // eslint-disable-next-line camelcase
94
+ willActiveSelected={will_end}
95
+ onWillActiveSelected={handleWillChangeByEnd}
96
+ onSelect={(begin, end) => onSelect(begin, end, true)}
97
+ min={min}
98
+ max={max}
99
+ disabledDate={disabledDate}
100
+ disabledYearAndMonth={disabledYearOrMonth() ? 'left' : undefined}
101
+ hoverDay={isNull(hoverDay) ? hoverDay : moment(hoverDay)}
102
+ onHoverDay={(m) => setHoverDay(m ? moment(m).toDate() : m)}
103
+ />
104
+ </Flex>
105
+ )
106
+ }
107
+
108
+ export default Two
@@ -1,42 +1,42 @@
1
- import { CSSProperties, ReactNode } from 'react'
2
- import { TimeLimit } from '../date_picker/types'
3
-
4
- interface DateRangePickerProps {
5
- /* 开始日期 */
6
- begin?: Date | null
7
- /* 结束日期 */
8
- end?: Date | null
9
- /* 选择回调 */
10
- onChange?(begin: Date | null, end: Date | null): void
11
- disabled?: boolean
12
- /* 最小可选日期 */
13
- min?: Date
14
- /* 最大可选日期 */
15
- max?: Date
16
- /* 自定义禁用日期,优先度高于min,max */
17
- disabledDate?(date: Date, selected: { begin?: Date; end?: Date }): boolean
18
- /* 自定义展示日期 */
19
- renderDate?(begin: Date, end: Date): ReactNode
20
- canClear?: boolean
21
- className?: string
22
- style?: CSSProperties
23
- /* 自定义左侧快速选项 */
24
- customQuickSelectList?: QuickSelectListOptions[]
25
- /* 时间选择 */
26
- enabledTimeSelect?: boolean
27
- /* 时间间隔 */
28
- timeSpan?: number
29
- /* 开始时间约束 */
30
- beginTimeSelect?: Omit<TimeLimit, 'timeSpan'>
31
- /* 结束时间约束 */
32
- endTimeSelect?: Omit<TimeLimit, 'timeSpan'>
33
- }
34
-
35
- interface QuickSelectListOptions {
36
- /* 数组第一个元素为距离今天的天数,第二个元素固定为'day' */
37
- range: Array<[number, 'day']>
38
- /* 展示的文字 */
39
- text: string
40
- }
41
-
42
- export type { DateRangePickerProps, QuickSelectListOptions }
1
+ import { CSSProperties, ReactNode } from 'react'
2
+ import { TimeLimit } from '../date_picker/types'
3
+
4
+ interface DateRangePickerProps {
5
+ /* 开始日期 */
6
+ begin?: Date | null
7
+ /* 结束日期 */
8
+ end?: Date | null
9
+ /* 选择回调 */
10
+ onChange?(begin: Date | null, end: Date | null): void
11
+ disabled?: boolean
12
+ /* 最小可选日期 */
13
+ min?: Date
14
+ /* 最大可选日期 */
15
+ max?: Date
16
+ /* 自定义禁用日期,优先度高于min,max */
17
+ disabledDate?(date: Date, selected: { begin?: Date; end?: Date }): boolean
18
+ /* 自定义展示日期 */
19
+ renderDate?(begin: Date, end: Date): ReactNode
20
+ canClear?: boolean
21
+ className?: string
22
+ style?: CSSProperties
23
+ /* 自定义左侧快速选项 */
24
+ customQuickSelectList?: QuickSelectListOptions[]
25
+ /* 时间选择 */
26
+ enabledTimeSelect?: boolean
27
+ /* 时间间隔 */
28
+ timeSpan?: number
29
+ /* 开始时间约束 */
30
+ beginTimeSelect?: Omit<TimeLimit, 'timeSpan'>
31
+ /* 结束时间约束 */
32
+ endTimeSelect?: Omit<TimeLimit, 'timeSpan'>
33
+ }
34
+
35
+ interface QuickSelectListOptions {
36
+ /* 数组第一个元素为距离今天的天数,第二个元素固定为'day' */
37
+ range: Array<[number, 'day']>
38
+ /* 展示的文字 */
39
+ text: string
40
+ }
41
+
42
+ export type { DateRangePickerProps, QuickSelectListOptions }
@@ -1,11 +1,11 @@
1
- import moment, { Moment } from 'moment'
2
-
3
- const renderTime = (value: Moment): string => {
4
- const date = moment(value).format('YYYY-MM-DD')
5
- if (moment(value).add(1, 'ms').isSame(moment(date).add(1, 'd'))) {
6
- return '24:00'
7
- }
8
- return moment(value).format('HH:mm')
9
- }
10
-
11
- export { renderTime }
1
+ import moment, { Moment } from 'moment'
2
+
3
+ const renderTime = (value: Moment): string => {
4
+ const date = moment(value).format('YYYY-MM-DD')
5
+ if (moment(value).add(1, 'ms').isSame(moment(date).add(1, 'd'))) {
6
+ return '24:00'
7
+ }
8
+ return moment(value).format('HH:mm')
9
+ }
10
+
11
+ export { renderTime }