@gmfe/react 2.14.20 → 2.14.26-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 (377) hide show
  1. package/LICENSE.md +4 -0
  2. package/package.json +3 -3
  3. package/src/common/hooks/index.js +3 -3
  4. package/src/common/hooks/use_mutation_observer.js +25 -25
  5. package/src/common/util.js +52 -52
  6. package/src/component/affix/affix.stories.js +13 -13
  7. package/src/component/affix/index.js +21 -21
  8. package/src/component/box/box.js +31 -31
  9. package/src/component/box/box.stories.js +94 -94
  10. package/src/component/box/box_form.js +77 -77
  11. package/src/component/box/box_panel.js +91 -91
  12. package/src/component/box/box_table.js +51 -51
  13. package/src/component/box/index.js +6 -6
  14. package/src/component/box/style.less +39 -39
  15. package/src/component/button/button.stories.js +91 -91
  16. package/src/component/button/index.js +92 -92
  17. package/src/component/button/style.less +114 -114
  18. package/src/component/calendar/calendar.js +52 -52
  19. package/src/component/calendar/calendar.stories.js +57 -57
  20. package/src/component/calendar/content.js +89 -89
  21. package/src/component/calendar/day.js +109 -109
  22. package/src/component/calendar/head.js +243 -243
  23. package/src/component/calendar/index.js +4 -4
  24. package/src/component/calendar/range_calendar.js +150 -150
  25. package/src/component/calendar/style.less +140 -140
  26. package/src/component/calendar/week.js +27 -27
  27. package/src/component/carousel/carousel.js +178 -178
  28. package/src/component/carousel/stories.js +50 -50
  29. package/src/component/carousel/style.less +48 -48
  30. package/src/component/cascader/cascader.js +441 -443
  31. package/src/component/cascader/cascader.select.js +195 -195
  32. package/src/component/cascader/stories.js +240 -240
  33. package/src/component/cascader/style.less +122 -122
  34. package/src/component/checkbox/checkbox.js +86 -86
  35. package/src/component/checkbox/checkbox_group.js +66 -66
  36. package/src/component/checkbox/index.js +4 -4
  37. package/src/component/checkbox/stories.js +103 -103
  38. package/src/component/checkbox/style.less +88 -88
  39. package/src/component/collapse/collapse.stories.js +18 -18
  40. package/src/component/collapse/index.js +36 -36
  41. package/src/component/color_picker/index.js +190 -190
  42. package/src/component/color_picker/stories.js +17 -17
  43. package/src/component/color_picker/style.less +41 -41
  44. package/src/component/date_picker/date_picker.stories.js +102 -102
  45. package/src/component/date_picker/index.js +217 -217
  46. package/src/component/date_picker/overlay.js +119 -119
  47. package/src/component/date_picker/style.less +22 -22
  48. package/src/component/date_picker/time_select.js +62 -62
  49. package/src/component/date_range_picker/date_range_picker.stories.js +196 -196
  50. package/src/component/date_range_picker/index.js +206 -206
  51. package/src/component/date_range_picker/left.js +127 -127
  52. package/src/component/date_range_picker/overlay.js +202 -202
  53. package/src/component/date_range_picker/style.less +46 -46
  54. package/src/component/date_range_picker/time_range_select.js +150 -150
  55. package/src/component/date_range_picker/two.js +129 -129
  56. package/src/component/date_range_picker/util.js +42 -42
  57. package/src/component/dialog/index.js +240 -240
  58. package/src/component/dialog/stories.js +125 -125
  59. package/src/component/divider/index.js +28 -28
  60. package/src/component/divider/stories.js +5 -5
  61. package/src/component/divider/style.less +15 -15
  62. package/src/component/drawer/index.js +107 -107
  63. package/src/component/drawer/style.less +43 -43
  64. package/src/component/drop_down/drop_down.js +84 -84
  65. package/src/component/drop_down/drop_down_item.js +43 -43
  66. package/src/component/drop_down/drop_down_items.js +22 -22
  67. package/src/component/drop_down/index.js +5 -5
  68. package/src/component/drop_down/stories.js +38 -38
  69. package/src/component/drop_down/style.less +21 -21
  70. package/src/component/drop_select/index.js +208 -208
  71. package/src/component/drop_select/style.less +69 -69
  72. package/src/component/dropper/index.js +62 -62
  73. package/src/component/dropper/style.less +18 -18
  74. package/src/component/editable_text/editable_text.stories.js +47 -47
  75. package/src/component/editable_text/index.js +106 -106
  76. package/src/component/editable_text/style.less +29 -29
  77. package/src/component/filter_select/filter.select.js +416 -416
  78. package/src/component/filter_select/multiple.filter.select.js +425 -425
  79. package/src/component/filter_select/style.less +117 -117
  80. package/src/component/flex/index.js +132 -132
  81. package/src/component/flex/stories.js +13 -13
  82. package/src/component/flex/style.less +101 -101
  83. package/src/component/flip_number/index.js +196 -196
  84. package/src/component/flip_number/stories.js +25 -25
  85. package/src/component/flip_number/utils.js +50 -50
  86. package/src/component/form/form.js +153 -153
  87. package/src/component/form/form.stories.js +553 -553
  88. package/src/component/form/form_block.js +59 -59
  89. package/src/component/form/form_button.js +29 -29
  90. package/src/component/form/form_group.js +173 -173
  91. package/src/component/form/form_item.js +174 -163
  92. package/src/component/form/form_panel.js +71 -71
  93. package/src/component/form/index.js +8 -8
  94. package/src/component/form/style.less +130 -130
  95. package/src/component/form/util.js +13 -13
  96. package/src/component/function_set/function_set.stories.js +91 -91
  97. package/src/component/function_set/index.js +98 -98
  98. package/src/component/function_set/overlay.js +56 -56
  99. package/src/component/grid/col.js +72 -72
  100. package/src/component/grid/grid.stories.js +123 -123
  101. package/src/component/grid/index.js +4 -4
  102. package/src/component/grid/mixin.less +48 -48
  103. package/src/component/grid/row.js +44 -44
  104. package/src/component/grid/style.less +26 -26
  105. package/src/component/grid/util.js +11 -11
  106. package/src/component/icon_down_up/index.js +28 -28
  107. package/src/component/icon_down_up/stories.js +18 -18
  108. package/src/component/icon_down_up/style.less +8 -8
  109. package/src/component/image_preview/index.js +20 -20
  110. package/src/component/image_preview/preview_modal.js +193 -193
  111. package/src/component/image_preview/style.less +119 -119
  112. package/src/component/img_uploader/index.js +149 -149
  113. package/src/component/img_uploader/index.stories.js +51 -51
  114. package/src/component/img_uploader/style.less +22 -22
  115. package/src/component/input/index.js +19 -19
  116. package/src/component/input_number/index.js +73 -73
  117. package/src/component/input_number/number.js +158 -158
  118. package/src/component/input_number/stories.js +21 -21
  119. package/src/component/input_number/style.less +10 -10
  120. package/src/component/layout_root/index.js +165 -165
  121. package/src/component/lazy_img/index.js +68 -68
  122. package/src/component/level_list/index.js +120 -120
  123. package/src/component/level_list/level_item.js +64 -64
  124. package/src/component/level_list/level_list.stories.js +139 -139
  125. package/src/component/level_list/style.less +47 -47
  126. package/src/component/level_list/util.js +22 -22
  127. package/src/component/level_select/index.js +240 -240
  128. package/src/component/level_select/level_select.stories.js +67 -67
  129. package/src/component/list/base.js +155 -155
  130. package/src/component/list/index.js +93 -93
  131. package/src/component/list/list.stories.js +99 -99
  132. package/src/component/list/style.less +58 -58
  133. package/src/component/loading/index.js +45 -45
  134. package/src/component/loading/loading_chunk.js +59 -59
  135. package/src/component/loading/loading_full_screen.js +62 -62
  136. package/src/component/loading/stories.js +46 -46
  137. package/src/component/loading/style.less +92 -92
  138. package/src/component/mask/index.js +34 -34
  139. package/src/component/mask/style.less +10 -10
  140. package/src/component/modal/clean_modal.js +36 -36
  141. package/src/component/modal/index.js +293 -293
  142. package/src/component/modal/right_side_modal.js +37 -37
  143. package/src/component/modal/stories.js +96 -96
  144. package/src/component/modal/style.less +145 -145
  145. package/src/component/more_select/base.js +517 -517
  146. package/src/component/more_select/index.js +91 -91
  147. package/src/component/more_select/stories.js +261 -261
  148. package/src/component/more_select/style.less +130 -130
  149. package/src/component/nav/index.js +269 -269
  150. package/src/component/nav/nav.stories.js +133 -133
  151. package/src/component/nav/style.less +156 -156
  152. package/src/component/nprogress/index.js +34 -34
  153. package/src/component/nprogress/stories.js +22 -22
  154. package/src/component/nprogress/style.less +39 -39
  155. package/src/component/pagination/base.js +67 -67
  156. package/src/component/pagination/left.js +65 -65
  157. package/src/component/pagination/page.js +120 -120
  158. package/src/component/pagination/page_peek.js +96 -96
  159. package/src/component/pagination/pagination.js +54 -54
  160. package/src/component/pagination/pagination.stories.js +104 -104
  161. package/src/component/pagination/pagination_text.js +71 -71
  162. package/src/component/pagination/pagination_v2.js +30 -30
  163. package/src/component/pagination/right.js +67 -67
  164. package/src/component/pagination/style.less +52 -52
  165. package/src/component/pagination/util.js +5 -5
  166. package/src/component/picture_preview/index.js +21 -21
  167. package/src/component/popover/index.js +373 -373
  168. package/src/component/popover/stories.js +101 -101
  169. package/src/component/popup/index.js +4 -4
  170. package/src/component/popup/popup.js +172 -172
  171. package/src/component/popup/popup_content_confirm.js +67 -67
  172. package/src/component/popup/style.less +105 -105
  173. package/src/component/price/index.js +147 -147
  174. package/src/component/price/stories.js +34 -34
  175. package/src/component/progress/index.js +101 -101
  176. package/src/component/progress/stories.js +60 -60
  177. package/src/component/progress/style.less +88 -88
  178. package/src/component/progress_circle/index.js +116 -116
  179. package/src/component/progress_circle/stories.js +54 -54
  180. package/src/component/progress_circle/style.less +17 -17
  181. package/src/component/radio/index.js +4 -4
  182. package/src/component/radio/radio.js +76 -76
  183. package/src/component/radio/radio_group.js +51 -51
  184. package/src/component/radio/stories.js +80 -80
  185. package/src/component/radio/style.less +63 -63
  186. package/src/component/recommend_input/index.js +118 -118
  187. package/src/component/recommend_input/recommend_input.stories.js +56 -56
  188. package/src/component/recommend_input/style.less +25 -25
  189. package/src/component/select/index.js +4 -4
  190. package/src/component/select/option.js +22 -22
  191. package/src/component/select/select.js +186 -186
  192. package/src/component/select/select.stories.js +79 -79
  193. package/src/component/select/style.less +4 -4
  194. package/src/component/selection/index.js +132 -132
  195. package/src/component/selection/selection.stories.js +41 -41
  196. package/src/component/selection/style.less +67 -67
  197. package/src/component/sheet/index.js +7 -7
  198. package/src/component/sheet/sheet.js +348 -348
  199. package/src/component/sheet/sheet_action.js +16 -16
  200. package/src/component/sheet/sheet_batch_action.js +16 -16
  201. package/src/component/sheet/sheet_column.js +21 -21
  202. package/src/component/sheet/sheet_select.js +31 -31
  203. package/src/component/sheet/stories.js +210 -210
  204. package/src/component/sheet/style.less +95 -95
  205. package/src/component/steps/index.js +66 -66
  206. package/src/component/steps/steps.stories.js +15 -15
  207. package/src/component/steps/style.less +39 -39
  208. package/src/component/storage/index.js +54 -54
  209. package/src/component/storage/stories.js +38 -38
  210. package/src/component/switch/index.js +118 -118
  211. package/src/component/switch/stories.js +7 -7
  212. package/src/component/switch/style.less +70 -70
  213. package/src/component/table_select/index.js +152 -152
  214. package/src/component/table_select/style.less +12 -12
  215. package/src/component/table_select/table_select.stories.js +91 -91
  216. package/src/component/table_select/util.js +21 -21
  217. package/src/component/tabs/style.less +33 -33
  218. package/src/component/tabs/tabs.js +97 -97
  219. package/src/component/tabs/tabs.stories.js +48 -48
  220. package/src/component/time_span/style.less +45 -45
  221. package/src/component/time_span/time_span.js +183 -183
  222. package/src/component/time_span/time_span.stories.js +66 -66
  223. package/src/component/time_span/time_span_picker.js +112 -112
  224. package/src/component/time_span/time_span_picker.stories.js +71 -71
  225. package/src/component/tip/index.js +168 -168
  226. package/src/component/tip/stories.js +54 -54
  227. package/src/component/tip/style.less +41 -41
  228. package/src/component/tool_tip/index.js +58 -58
  229. package/src/component/tool_tip/stories.js +36 -36
  230. package/src/component/transfer/box.js +186 -186
  231. package/src/component/transfer/index.js +4 -4
  232. package/src/component/transfer/stories.js +108 -108
  233. package/src/component/transfer/style.less +34 -34
  234. package/src/component/transfer/transfer.js +181 -181
  235. package/src/component/transfer/transfer_group.js +178 -178
  236. package/src/component/transfer_v2/index.js +171 -171
  237. package/src/component/transfer_v2/transfer_v2.stories.js +226 -226
  238. package/src/component/tree/bottom.js +41 -41
  239. package/src/component/tree/index.js +205 -205
  240. package/src/component/tree/item.js +154 -154
  241. package/src/component/tree/list.js +151 -151
  242. package/src/component/tree/style.less +147 -147
  243. package/src/component/tree/tree.stories.js +241 -241
  244. package/src/component/tree/util.js +24 -24
  245. package/src/component/tree_v2/bottom.js +40 -40
  246. package/src/component/tree_v2/index.js +260 -260
  247. package/src/component/tree_v2/list.js +230 -230
  248. package/src/component/tree_v2/style.less +38 -38
  249. package/src/component/tree_v2/tree.stories.js +419 -419
  250. package/src/component/tree_v2/util.js +185 -185
  251. package/src/component/uploader/index.js +108 -108
  252. package/src/component/uploader/style.less +24 -24
  253. package/src/component/uploader/uploader.stories.js +51 -51
  254. package/src/css/arrow.less +56 -56
  255. package/src/css/bg.less +52 -52
  256. package/src/css/border.less +40 -40
  257. package/src/css/cover.less +236 -236
  258. package/src/css/cursor.less +19 -19
  259. package/src/css/display.less +16 -16
  260. package/src/css/distance.less +324 -324
  261. package/src/css/error.less +10 -10
  262. package/src/css/other.less +16 -16
  263. package/src/css/overflow.less +23 -23
  264. package/src/css/position.less +11 -11
  265. package/src/css/rotate.less +28 -28
  266. package/src/css/shadow.less +11 -11
  267. package/src/css/stories.js +104 -104
  268. package/src/css/svg.less +51 -51
  269. package/src/css/text.less +120 -120
  270. package/src/css/variables.less +62 -62
  271. package/src/event_type.js +16 -16
  272. package/src/fonts/glyphicons-halflings-regular.svg +542 -542
  273. package/src/index.js +237 -237
  274. package/src/index.less +108 -108
  275. package/src/less/.csscomb.json +304 -304
  276. package/src/less/.csslintrc +19 -19
  277. package/src/less/alerts.less +72 -72
  278. package/src/less/badges.less +65 -65
  279. package/src/less/bootstrap.less +51 -51
  280. package/src/less/breadcrumbs.less +25 -25
  281. package/src/less/button-groups.less +253 -253
  282. package/src/less/buttons.less +186 -186
  283. package/src/less/carousel.less +269 -269
  284. package/src/less/close.less +33 -33
  285. package/src/less/code.less +68 -68
  286. package/src/less/component-animations.less +39 -39
  287. package/src/less/custom.less +37 -37
  288. package/src/less/dropdowns.less +215 -215
  289. package/src/less/forms.less +612 -612
  290. package/src/less/glyphicons.less +1614 -1614
  291. package/src/less/grid.less +76 -76
  292. package/src/less/input-groups.less +175 -175
  293. package/src/less/jumbotron.less +53 -53
  294. package/src/less/labels.less +64 -64
  295. package/src/less/list-group.less +126 -126
  296. package/src/less/media.less +66 -66
  297. package/src/less/mixins/alerts.less +14 -14
  298. package/src/less/mixins/background-variant.less +9 -9
  299. package/src/less/mixins/border-radius.less +21 -21
  300. package/src/less/mixins/buttons.less +65 -65
  301. package/src/less/mixins/center-block.less +7 -7
  302. package/src/less/mixins/clearfix.less +22 -22
  303. package/src/less/mixins/forms.less +84 -84
  304. package/src/less/mixins/gradients.less +59 -59
  305. package/src/less/mixins/grid-framework.less +96 -96
  306. package/src/less/mixins/grid.less +134 -134
  307. package/src/less/mixins/hide-text.less +21 -21
  308. package/src/less/mixins/image.less +25 -25
  309. package/src/less/mixins/labels.less +12 -12
  310. package/src/less/mixins/list-group.less +30 -30
  311. package/src/less/mixins/nav-divider.less +10 -10
  312. package/src/less/mixins/nav-vertical-align.less +9 -9
  313. package/src/less/mixins/opacity.less +8 -8
  314. package/src/less/mixins/pagination.less +24 -24
  315. package/src/less/mixins/panels.less +24 -24
  316. package/src/less/mixins/progress-bar.less +10 -10
  317. package/src/less/mixins/reset-filter.less +8 -8
  318. package/src/less/mixins/reset-text.less +18 -18
  319. package/src/less/mixins/resize.less +6 -6
  320. package/src/less/mixins/responsive-visibility.less +21 -21
  321. package/src/less/mixins/size.less +10 -10
  322. package/src/less/mixins/tab-focus.less +9 -9
  323. package/src/less/mixins/table-row.less +28 -28
  324. package/src/less/mixins/text-emphasis.less +9 -9
  325. package/src/less/mixins/text-overflow.less +8 -8
  326. package/src/less/mixins/vendor-prefixes.less +254 -254
  327. package/src/less/mixins.less +36 -36
  328. package/src/less/modals.less +163 -163
  329. package/src/less/navbar.less +651 -651
  330. package/src/less/navs.less +236 -236
  331. package/src/less/normalize.less +424 -424
  332. package/src/less/pager.less +54 -54
  333. package/src/less/pagination.less +90 -90
  334. package/src/less/panels.less +274 -274
  335. package/src/less/popovers.less +140 -140
  336. package/src/less/print.less +103 -103
  337. package/src/less/progress-bars.less +92 -92
  338. package/src/less/responsive-embed.less +35 -35
  339. package/src/less/responsive-utilities.less +209 -209
  340. package/src/less/scaffolding.less +154 -154
  341. package/src/less/tables.less +228 -228
  342. package/src/less/theme.less +344 -344
  343. package/src/less/thumbnails.less +35 -35
  344. package/src/less/tooltip.less +115 -115
  345. package/src/less/type.less +352 -352
  346. package/src/less/utilities.less +57 -57
  347. package/src/less/variables.less +833 -833
  348. package/src/less/wells.less +29 -29
  349. package/src/sotries.js +4 -4
  350. package/src/validator/index.js +10 -10
  351. package/src/validator/rules.js +66 -66
  352. package/src/validator/type.js +10 -10
  353. package/src/validator/validator.js +86 -86
  354. package/src/var.less +4 -4
  355. package/svg/calendar-month.svg +8 -8
  356. package/svg/calendar-year.svg +13 -13
  357. package/svg/calendar.svg +17 -17
  358. package/svg/check-detail.svg +18 -18
  359. package/svg/close-circle.svg +13 -13
  360. package/svg/closeup.svg +20 -20
  361. package/svg/delete.svg +10 -10
  362. package/svg/down-small.svg +1 -1
  363. package/svg/down.svg +1 -1
  364. package/svg/edit-box.svg +17 -17
  365. package/svg/edit-pen.svg +17 -17
  366. package/svg/empty.svg +27 -27
  367. package/svg/expand.svg +21 -21
  368. package/svg/left-small.svg +1 -1
  369. package/svg/more.svg +10 -10
  370. package/svg/next.svg +40 -40
  371. package/svg/pen.svg +12 -12
  372. package/svg/remove.svg +1 -1
  373. package/svg/right-small.svg +1 -1
  374. package/svg/search.svg +8 -8
  375. package/svg/setting.svg +17 -17
  376. package/svg/up-small.svg +1 -1
  377. package/svg/up.svg +1 -1
@@ -1,150 +1,150 @@
1
- import React from 'react'
2
- import PropTypes from 'prop-types'
3
- import moment from 'moment'
4
-
5
- import Flex from '../flex'
6
- import TimeSpanPicker from '../time_span/time_span_picker'
7
- import { setTimes, renderTime } from './util'
8
-
9
- const TimeRangeSelect = props => {
10
- const {
11
- begin,
12
- end,
13
- enabledTimeSelect,
14
- beginTimeSelect,
15
- endTimeSelect,
16
- onSelect,
17
- timeSpan
18
- } = props
19
-
20
- let b = <span className='gm-text-desc'>开始日期</span>
21
- let e = <span className='gm-text-desc'>结束日期</span>
22
-
23
- if (begin) {
24
- b = moment(begin).format('YYYY-MM-DD')
25
- }
26
-
27
- if (end) {
28
- e = moment(end).format('YYYY-MM-DD')
29
- }
30
-
31
- const handleTimeSelect = (time, type) => {
32
- let b = begin
33
- let e = end
34
- let updateEndTime = false
35
-
36
- if (type === 'begin') {
37
- b = setTimes(begin, time)
38
- // 选择开始时间后,结束时间可选范围可能有变动,判断当前给出的结束时间是否需要更新
39
- updateEndTime =
40
- (endTimeSelect && endTimeSelect.disabledSpan(end, { begin: b, end })) ||
41
- false
42
- }
43
-
44
- if (type === 'end') {
45
- e = setTimes(end, time)
46
- }
47
-
48
- // 选择防止同一天出现 开始 > 结束, 做一下判断
49
- if (moment(b).isAfter(moment(e))) {
50
- e = setTimes(end, time)
51
- }
52
-
53
- onSelect(b, e, updateEndTime)
54
- }
55
-
56
- // 做一步处理,防止不同日期可选时间段不同
57
- const handleDisabledSpan = (time, type) => {
58
- if (type === 'begin') {
59
- if (beginTimeSelect && beginTimeSelect.disabledSpan) {
60
- const date = setTimes(begin, time)
61
- return beginTimeSelect.disabledSpan(date, { begin, end })
62
- }
63
- return false
64
- }
65
-
66
- if (type === 'end') {
67
- const date = setTimes(end, time)
68
- let isAfterBeginTime = true
69
- // 同一天,结束时间小于/等于开始时间
70
- if (moment(begin).isSame(moment(end), 'day')) {
71
- isAfterBeginTime = moment(date).isSameOrAfter(moment(begin))
72
- }
73
-
74
- if (endTimeSelect && endTimeSelect.disabledSpan) {
75
- return (
76
- endTimeSelect.disabledSpan(date, { begin, end }) || !isAfterBeginTime
77
- )
78
- }
79
- return !isAfterBeginTime
80
- }
81
- }
82
-
83
- const renderTimeSelect = type => {
84
- const isDisabled = enabledTimeSelect && begin && end
85
- let time = null
86
-
87
- if (type === 'begin') {
88
- time = begin
89
- }
90
-
91
- if (type === 'end') {
92
- time = end
93
- }
94
-
95
- return (
96
- isDisabled && (
97
- <TimeSpanPicker
98
- date={time}
99
- onChange={value => handleTimeSelect(value, type)}
100
- span={timeSpan}
101
- disabledSpan={date => handleDisabledSpan(date, type)}
102
- renderItem={renderTime}
103
- enabledEndTimeOfDay
104
- isInPopup
105
- >
106
- <button className='gm-date-range-picker-bottom-time'>
107
- {renderTime(time)}
108
- </button>
109
- </TimeSpanPicker>
110
- )
111
- )
112
- }
113
-
114
- return (
115
- <Flex
116
- alignCenter
117
- justifyBetween
118
- style={{ height: '25px', margin: '0px 5px 8px 15px' }}
119
- >
120
- <div className='gm-text-bold gm-date-range-picker-bottom-text'>
121
- <span>{b}</span>
122
- {enabledTimeSelect && renderTimeSelect('begin')}
123
- &nbsp;~&nbsp;
124
- <span>{e}</span>
125
- {enabledTimeSelect && renderTimeSelect('end')}
126
- </div>
127
- </Flex>
128
- )
129
- }
130
-
131
- TimeRangeSelect.propTypes = {
132
- begin: PropTypes.object,
133
- end: PropTypes.object,
134
- enabledTimeSelect: PropTypes.bool,
135
- onSelectDateAndTime: PropTypes.func,
136
- onSelect: PropTypes.func,
137
- renderTime: PropTypes.func,
138
- timeSpan: PropTypes.number,
139
- beginTimeSelect: PropTypes.shape({
140
- defaultTime: PropTypes.object,
141
- /** 禁用时间段函数,传入参数为Date对象,返回时间段 */
142
- disabledSpan: PropTypes.func
143
- }),
144
- endTimeSelect: PropTypes.shape({
145
- defaultTime: PropTypes.object,
146
- disabledSpan: PropTypes.funcxs
147
- })
148
- }
149
-
150
- export default TimeRangeSelect
1
+ import React from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import moment from 'moment'
4
+
5
+ import Flex from '../flex'
6
+ import TimeSpanPicker from '../time_span/time_span_picker'
7
+ import { setTimes, renderTime } from './util'
8
+
9
+ const TimeRangeSelect = props => {
10
+ const {
11
+ begin,
12
+ end,
13
+ enabledTimeSelect,
14
+ beginTimeSelect,
15
+ endTimeSelect,
16
+ onSelect,
17
+ timeSpan
18
+ } = props
19
+
20
+ let b = <span className='gm-text-desc'>开始日期</span>
21
+ let e = <span className='gm-text-desc'>结束日期</span>
22
+
23
+ if (begin) {
24
+ b = moment(begin).format('YYYY-MM-DD')
25
+ }
26
+
27
+ if (end) {
28
+ e = moment(end).format('YYYY-MM-DD')
29
+ }
30
+
31
+ const handleTimeSelect = (time, type) => {
32
+ let b = begin
33
+ let e = end
34
+ let updateEndTime = false
35
+
36
+ if (type === 'begin') {
37
+ b = setTimes(begin, time)
38
+ // 选择开始时间后,结束时间可选范围可能有变动,判断当前给出的结束时间是否需要更新
39
+ updateEndTime =
40
+ (endTimeSelect && endTimeSelect.disabledSpan(end, { begin: b, end })) ||
41
+ false
42
+ }
43
+
44
+ if (type === 'end') {
45
+ e = setTimes(end, time)
46
+ }
47
+
48
+ // 选择防止同一天出现 开始 > 结束, 做一下判断
49
+ if (moment(b).isAfter(moment(e))) {
50
+ e = setTimes(end, time)
51
+ }
52
+
53
+ onSelect(b, e, updateEndTime)
54
+ }
55
+
56
+ // 做一步处理,防止不同日期可选时间段不同
57
+ const handleDisabledSpan = (time, type) => {
58
+ if (type === 'begin') {
59
+ if (beginTimeSelect && beginTimeSelect.disabledSpan) {
60
+ const date = setTimes(begin, time)
61
+ return beginTimeSelect.disabledSpan(date, { begin, end })
62
+ }
63
+ return false
64
+ }
65
+
66
+ if (type === 'end') {
67
+ const date = setTimes(end, time)
68
+ let isAfterBeginTime = true
69
+ // 同一天,结束时间小于/等于开始时间
70
+ if (moment(begin).isSame(moment(end), 'day')) {
71
+ isAfterBeginTime = moment(date).isSameOrAfter(moment(begin))
72
+ }
73
+
74
+ if (endTimeSelect && endTimeSelect.disabledSpan) {
75
+ return (
76
+ endTimeSelect.disabledSpan(date, { begin, end }) || !isAfterBeginTime
77
+ )
78
+ }
79
+ return !isAfterBeginTime
80
+ }
81
+ }
82
+
83
+ const renderTimeSelect = type => {
84
+ const isDisabled = enabledTimeSelect && begin && end
85
+ let time = null
86
+
87
+ if (type === 'begin') {
88
+ time = begin
89
+ }
90
+
91
+ if (type === 'end') {
92
+ time = end
93
+ }
94
+
95
+ return (
96
+ isDisabled && (
97
+ <TimeSpanPicker
98
+ date={time}
99
+ onChange={value => handleTimeSelect(value, type)}
100
+ span={timeSpan}
101
+ disabledSpan={date => handleDisabledSpan(date, type)}
102
+ renderItem={renderTime}
103
+ enabledEndTimeOfDay
104
+ isInPopup
105
+ >
106
+ <button className='gm-date-range-picker-bottom-time'>
107
+ {renderTime(time)}
108
+ </button>
109
+ </TimeSpanPicker>
110
+ )
111
+ )
112
+ }
113
+
114
+ return (
115
+ <Flex
116
+ alignCenter
117
+ justifyBetween
118
+ style={{ height: '25px', margin: '0px 5px 8px 15px' }}
119
+ >
120
+ <div className='gm-text-bold gm-date-range-picker-bottom-text'>
121
+ <span>{b}</span>
122
+ {enabledTimeSelect && renderTimeSelect('begin')}
123
+ &nbsp;~&nbsp;
124
+ <span>{e}</span>
125
+ {enabledTimeSelect && renderTimeSelect('end')}
126
+ </div>
127
+ </Flex>
128
+ )
129
+ }
130
+
131
+ TimeRangeSelect.propTypes = {
132
+ begin: PropTypes.object,
133
+ end: PropTypes.object,
134
+ enabledTimeSelect: PropTypes.bool,
135
+ onSelectDateAndTime: PropTypes.func,
136
+ onSelect: PropTypes.func,
137
+ renderTime: PropTypes.func,
138
+ timeSpan: PropTypes.number,
139
+ beginTimeSelect: PropTypes.shape({
140
+ defaultTime: PropTypes.object,
141
+ /** 禁用时间段函数,传入参数为Date对象,返回时间段 */
142
+ disabledSpan: PropTypes.func
143
+ }),
144
+ endTimeSelect: PropTypes.shape({
145
+ defaultTime: PropTypes.object,
146
+ disabledSpan: PropTypes.funcxs
147
+ })
148
+ }
149
+
150
+ export default TimeRangeSelect
@@ -1,129 +1,129 @@
1
- import React, { useState, useEffect } from 'react'
2
- import PropTypes from 'prop-types'
3
- import moment from 'moment'
4
- import Flex from '../flex'
5
- import RangeCalendar from '../calendar/range_calendar'
6
-
7
- const Two = props => {
8
- const {
9
- begin,
10
- end,
11
- onSelect,
12
- min,
13
- max,
14
- disabledDate,
15
- enabledTimeSelect
16
- } = props
17
-
18
- const _will = begin || moment().toDate()
19
- let _will_end = null
20
-
21
- // 判断 begin && end 是否同月份,确定 日历2 应该显示的月份
22
- if (begin && end) {
23
- const isSameMonth = moment(begin).month() === moment(end).month()
24
- _will_end = isSameMonth
25
- ? moment(begin)
26
- .add(1, 'month')
27
- .toDate()
28
- : end
29
- } else {
30
- _will_end = moment()
31
- .add(1, 'month')
32
- .toDate()
33
- }
34
-
35
- // 告诉 日历1 应该显示的月份
36
- const [will, setWill] = useState(_will)
37
- // 告诉 日历2 应该显示的月份
38
- const [will_end, setWillEnd] = useState(_will_end)
39
- // 告诉 此时hover的日期
40
- const [hoverDay, setHoverDay] = useState(null)
41
-
42
- // 可以选择时间时,针对快速选择日期项需要更新日历
43
- useEffect(() => {
44
- const beginMonth = moment(begin).month()
45
- const endMonth = moment(end).month()
46
-
47
- if (enabledTimeSelect && begin && end) {
48
- // begin && end 同月份
49
- if (beginMonth === endMonth) {
50
- const willMonth = moment(will).month()
51
- const willEndMonth = moment(will_end).month()
52
- // 当前选择月份不在展示中 -- 针对快速选择
53
- if (beginMonth !== willMonth && beginMonth !== willEndMonth) {
54
- setWill(begin)
55
- setWillEnd(moment(begin).add(1, 'month'))
56
- }
57
- } else {
58
- setWill(begin)
59
- setWillEnd(end)
60
- }
61
- }
62
- }, [begin, end])
63
-
64
- const handleWillChange = date => {
65
- setWill(date)
66
- }
67
-
68
- const handleWillChangeByEnd = date => {
69
- setWillEnd(date)
70
- }
71
-
72
- const disabledYearOrMonth = () => {
73
- // 两个日历显示为 同年相邻月份,disabled相应的 年 / 月 切换按钮
74
- const _begin = moment(will)
75
- .startOf('month')
76
- .add(1, 'month')
77
- .toDate()
78
- const _end = moment(will_end)
79
- .startOf('month')
80
- .toDate()
81
-
82
- return +_begin === +_end
83
- }
84
-
85
- return (
86
- <Flex className='gm-padding-5'>
87
- <RangeCalendar
88
- className='gm-date-range-picker-overlay-calendar'
89
- begin={begin}
90
- end={end}
91
- willActiveSelected={will}
92
- onWillActiveSelected={handleWillChange}
93
- onSelect={(begin, end) => onSelect(begin, end, true)}
94
- min={min}
95
- max={max}
96
- disabledDate={disabledDate}
97
- disabledYearAndMonth={disabledYearOrMonth() ? 'right' : undefined}
98
- hoverDay={hoverDay}
99
- onHoverDay={setHoverDay}
100
- />
101
- <RangeCalendar
102
- className='gm-date-range-picker-overlay-calendar'
103
- begin={begin}
104
- end={end}
105
- willActiveSelected={will_end}
106
- onWillActiveSelected={handleWillChangeByEnd}
107
- onSelect={(begin, end) => onSelect(begin, end, true)}
108
- min={min}
109
- max={max}
110
- disabledDate={disabledDate}
111
- disabledYearAndMonth={disabledYearOrMonth() ? 'left' : undefined}
112
- hoverDay={hoverDay}
113
- onHoverDay={setHoverDay}
114
- />
115
- </Flex>
116
- )
117
- }
118
-
119
- Two.propTypes = {
120
- begin: PropTypes.object,
121
- end: PropTypes.object,
122
- onSelect: PropTypes.func.isRequired,
123
- min: PropTypes.object,
124
- max: PropTypes.object,
125
- disabledDate: PropTypes.func,
126
- enabledTimeSelect: PropTypes.bool
127
- }
128
-
129
- export default Two
1
+ import React, { useState, useEffect } from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import moment from 'moment'
4
+ import Flex from '../flex'
5
+ import RangeCalendar from '../calendar/range_calendar'
6
+
7
+ const Two = props => {
8
+ const {
9
+ begin,
10
+ end,
11
+ onSelect,
12
+ min,
13
+ max,
14
+ disabledDate,
15
+ enabledTimeSelect
16
+ } = props
17
+
18
+ const _will = begin || moment().toDate()
19
+ let _will_end = null
20
+
21
+ // 判断 begin && end 是否同月份,确定 日历2 应该显示的月份
22
+ if (begin && end) {
23
+ const isSameMonth = moment(begin).month() === moment(end).month()
24
+ _will_end = isSameMonth
25
+ ? moment(begin)
26
+ .add(1, 'month')
27
+ .toDate()
28
+ : end
29
+ } else {
30
+ _will_end = moment()
31
+ .add(1, 'month')
32
+ .toDate()
33
+ }
34
+
35
+ // 告诉 日历1 应该显示的月份
36
+ const [will, setWill] = useState(_will)
37
+ // 告诉 日历2 应该显示的月份
38
+ const [will_end, setWillEnd] = useState(_will_end)
39
+ // 告诉 此时hover的日期
40
+ const [hoverDay, setHoverDay] = useState(null)
41
+
42
+ // 可以选择时间时,针对快速选择日期项需要更新日历
43
+ useEffect(() => {
44
+ const beginMonth = moment(begin).month()
45
+ const endMonth = moment(end).month()
46
+
47
+ if (enabledTimeSelect && begin && end) {
48
+ // begin && end 同月份
49
+ if (beginMonth === endMonth) {
50
+ const willMonth = moment(will).month()
51
+ const willEndMonth = moment(will_end).month()
52
+ // 当前选择月份不在展示中 -- 针对快速选择
53
+ if (beginMonth !== willMonth && beginMonth !== willEndMonth) {
54
+ setWill(begin)
55
+ setWillEnd(moment(begin).add(1, 'month'))
56
+ }
57
+ } else {
58
+ setWill(begin)
59
+ setWillEnd(end)
60
+ }
61
+ }
62
+ }, [begin, end])
63
+
64
+ const handleWillChange = date => {
65
+ setWill(date)
66
+ }
67
+
68
+ const handleWillChangeByEnd = date => {
69
+ setWillEnd(date)
70
+ }
71
+
72
+ const disabledYearOrMonth = () => {
73
+ // 两个日历显示为 同年相邻月份,disabled相应的 年 / 月 切换按钮
74
+ const _begin = moment(will)
75
+ .startOf('month')
76
+ .add(1, 'month')
77
+ .toDate()
78
+ const _end = moment(will_end)
79
+ .startOf('month')
80
+ .toDate()
81
+
82
+ return +_begin === +_end
83
+ }
84
+
85
+ return (
86
+ <Flex className='gm-padding-5'>
87
+ <RangeCalendar
88
+ className='gm-date-range-picker-overlay-calendar'
89
+ begin={begin}
90
+ end={end}
91
+ willActiveSelected={will}
92
+ onWillActiveSelected={handleWillChange}
93
+ onSelect={(begin, end) => onSelect(begin, end, true)}
94
+ min={min}
95
+ max={max}
96
+ disabledDate={disabledDate}
97
+ disabledYearAndMonth={disabledYearOrMonth() ? 'right' : undefined}
98
+ hoverDay={hoverDay}
99
+ onHoverDay={setHoverDay}
100
+ />
101
+ <RangeCalendar
102
+ className='gm-date-range-picker-overlay-calendar'
103
+ begin={begin}
104
+ end={end}
105
+ willActiveSelected={will_end}
106
+ onWillActiveSelected={handleWillChangeByEnd}
107
+ onSelect={(begin, end) => onSelect(begin, end, true)}
108
+ min={min}
109
+ max={max}
110
+ disabledDate={disabledDate}
111
+ disabledYearAndMonth={disabledYearOrMonth() ? 'left' : undefined}
112
+ hoverDay={hoverDay}
113
+ onHoverDay={setHoverDay}
114
+ />
115
+ </Flex>
116
+ )
117
+ }
118
+
119
+ Two.propTypes = {
120
+ begin: PropTypes.object,
121
+ end: PropTypes.object,
122
+ onSelect: PropTypes.func.isRequired,
123
+ min: PropTypes.object,
124
+ max: PropTypes.object,
125
+ disabledDate: PropTypes.func,
126
+ enabledTimeSelect: PropTypes.bool
127
+ }
128
+
129
+ export default Two
@@ -1,42 +1,42 @@
1
- import moment from 'moment'
2
-
3
- // 设置moment的时间值
4
- const setTimes = (date, time) => {
5
- // 没有设置时间
6
- if (!time) {
7
- return moment(date)
8
- }
9
-
10
- const year = moment(date).year()
11
- const month = moment(date).month()
12
- const day = moment(date).date()
13
-
14
- const res = moment(time).set({ year, month, date: day })
15
- return res
16
- }
17
-
18
- const getTimeCells = span => {
19
- let time = moment().startOf('day')
20
- const cells = []
21
-
22
- while (time <= moment().endOf('day')) {
23
- cells.push(time)
24
- time = moment(time + span)
25
- }
26
- cells.push(moment().endOf('day'))
27
- return cells
28
- }
29
-
30
- const renderTime = value => {
31
- const date = moment(value).format('YYYY-MM-DD')
32
- if (
33
- moment(value)
34
- .add(1, 'ms')
35
- .isSame(moment(date).add(1, 'd'))
36
- ) {
37
- return '24:00'
38
- }
39
- return moment(value).format('HH:mm')
40
- }
41
-
42
- export { setTimes, getTimeCells, renderTime }
1
+ import moment from 'moment'
2
+
3
+ // 设置moment的时间值
4
+ const setTimes = (date, time) => {
5
+ // 没有设置时间
6
+ if (!time) {
7
+ return moment(date)
8
+ }
9
+
10
+ const year = moment(date).year()
11
+ const month = moment(date).month()
12
+ const day = moment(date).date()
13
+
14
+ const res = moment(time).set({ year, month, date: day })
15
+ return res
16
+ }
17
+
18
+ const getTimeCells = span => {
19
+ let time = moment().startOf('day')
20
+ const cells = []
21
+
22
+ while (time <= moment().endOf('day')) {
23
+ cells.push(time)
24
+ time = moment(time + span)
25
+ }
26
+ cells.push(moment().endOf('day'))
27
+ return cells
28
+ }
29
+
30
+ const renderTime = value => {
31
+ const date = moment(value).format('YYYY-MM-DD')
32
+ if (
33
+ moment(value)
34
+ .add(1, 'ms')
35
+ .isSame(moment(date).add(1, 'd'))
36
+ ) {
37
+ return '24:00'
38
+ }
39
+ return moment(value).format('HH:mm')
40
+ }
41
+
42
+ export { setTimes, getTimeCells, renderTime }