@gmfe/react 2.14.17 → 2.14.19-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 (376) hide show
  1. package/package.json +3 -3
  2. package/src/common/hooks/index.js +3 -3
  3. package/src/common/hooks/use_mutation_observer.js +25 -25
  4. package/src/common/util.js +52 -52
  5. package/src/component/affix/affix.stories.js +13 -13
  6. package/src/component/affix/index.js +21 -21
  7. package/src/component/box/box.js +31 -31
  8. package/src/component/box/box.stories.js +94 -94
  9. package/src/component/box/box_form.js +77 -77
  10. package/src/component/box/box_panel.js +91 -91
  11. package/src/component/box/box_table.js +51 -51
  12. package/src/component/box/index.js +6 -6
  13. package/src/component/box/style.less +39 -39
  14. package/src/component/button/button.stories.js +91 -91
  15. package/src/component/button/index.js +92 -92
  16. package/src/component/button/style.less +114 -114
  17. package/src/component/calendar/calendar.js +52 -52
  18. package/src/component/calendar/calendar.stories.js +57 -57
  19. package/src/component/calendar/content.js +89 -89
  20. package/src/component/calendar/day.js +109 -109
  21. package/src/component/calendar/head.js +243 -243
  22. package/src/component/calendar/index.js +4 -4
  23. package/src/component/calendar/range_calendar.js +150 -150
  24. package/src/component/calendar/style.less +140 -140
  25. package/src/component/calendar/week.js +27 -27
  26. package/src/component/carousel/carousel.js +178 -178
  27. package/src/component/carousel/stories.js +50 -50
  28. package/src/component/carousel/style.less +48 -48
  29. package/src/component/cascader/cascader.js +443 -443
  30. package/src/component/cascader/cascader.select.js +195 -195
  31. package/src/component/cascader/stories.js +240 -240
  32. package/src/component/cascader/style.less +122 -122
  33. package/src/component/checkbox/checkbox.js +86 -86
  34. package/src/component/checkbox/checkbox_group.js +66 -66
  35. package/src/component/checkbox/index.js +4 -4
  36. package/src/component/checkbox/stories.js +103 -103
  37. package/src/component/checkbox/style.less +88 -88
  38. package/src/component/collapse/collapse.stories.js +18 -18
  39. package/src/component/collapse/index.js +36 -36
  40. package/src/component/color_picker/index.js +190 -190
  41. package/src/component/color_picker/stories.js +17 -17
  42. package/src/component/color_picker/style.less +41 -41
  43. package/src/component/date_picker/date_picker.stories.js +102 -102
  44. package/src/component/date_picker/index.js +217 -217
  45. package/src/component/date_picker/overlay.js +119 -119
  46. package/src/component/date_picker/style.less +22 -22
  47. package/src/component/date_picker/time_select.js +62 -62
  48. package/src/component/date_range_picker/date_range_picker.stories.js +196 -196
  49. package/src/component/date_range_picker/index.js +206 -206
  50. package/src/component/date_range_picker/left.js +127 -127
  51. package/src/component/date_range_picker/overlay.js +202 -202
  52. package/src/component/date_range_picker/style.less +46 -46
  53. package/src/component/date_range_picker/time_range_select.js +150 -150
  54. package/src/component/date_range_picker/two.js +129 -129
  55. package/src/component/date_range_picker/util.js +42 -42
  56. package/src/component/dialog/index.js +240 -240
  57. package/src/component/dialog/stories.js +125 -125
  58. package/src/component/divider/index.js +28 -28
  59. package/src/component/divider/stories.js +5 -5
  60. package/src/component/divider/style.less +15 -15
  61. package/src/component/drawer/index.js +107 -107
  62. package/src/component/drawer/style.less +43 -43
  63. package/src/component/drop_down/drop_down.js +84 -84
  64. package/src/component/drop_down/drop_down_item.js +43 -43
  65. package/src/component/drop_down/drop_down_items.js +22 -22
  66. package/src/component/drop_down/index.js +5 -5
  67. package/src/component/drop_down/stories.js +38 -38
  68. package/src/component/drop_down/style.less +21 -21
  69. package/src/component/drop_select/index.js +208 -208
  70. package/src/component/drop_select/style.less +69 -69
  71. package/src/component/dropper/index.js +62 -62
  72. package/src/component/dropper/style.less +18 -18
  73. package/src/component/editable_text/editable_text.stories.js +47 -47
  74. package/src/component/editable_text/index.js +106 -106
  75. package/src/component/editable_text/style.less +29 -29
  76. package/src/component/filter_select/filter.select.js +416 -416
  77. package/src/component/filter_select/multiple.filter.select.js +425 -425
  78. package/src/component/filter_select/style.less +117 -117
  79. package/src/component/flex/index.js +132 -132
  80. package/src/component/flex/stories.js +13 -13
  81. package/src/component/flex/style.less +101 -101
  82. package/src/component/flip_number/index.js +196 -196
  83. package/src/component/flip_number/stories.js +25 -25
  84. package/src/component/flip_number/utils.js +50 -50
  85. package/src/component/form/form.js +153 -153
  86. package/src/component/form/form.stories.js +553 -553
  87. package/src/component/form/form_block.js +59 -59
  88. package/src/component/form/form_button.js +29 -29
  89. package/src/component/form/form_group.js +173 -173
  90. package/src/component/form/form_item.js +163 -163
  91. package/src/component/form/form_panel.js +71 -71
  92. package/src/component/form/index.js +8 -8
  93. package/src/component/form/style.less +130 -130
  94. package/src/component/form/util.js +13 -13
  95. package/src/component/function_set/function_set.stories.js +91 -91
  96. package/src/component/function_set/index.js +98 -98
  97. package/src/component/function_set/overlay.js +56 -56
  98. package/src/component/grid/col.js +72 -72
  99. package/src/component/grid/grid.stories.js +123 -123
  100. package/src/component/grid/index.js +4 -4
  101. package/src/component/grid/mixin.less +48 -48
  102. package/src/component/grid/row.js +44 -44
  103. package/src/component/grid/style.less +26 -26
  104. package/src/component/grid/util.js +11 -11
  105. package/src/component/icon_down_up/index.js +28 -28
  106. package/src/component/icon_down_up/stories.js +18 -18
  107. package/src/component/icon_down_up/style.less +8 -8
  108. package/src/component/image_preview/index.js +20 -20
  109. package/src/component/image_preview/preview_modal.js +193 -193
  110. package/src/component/image_preview/style.less +119 -119
  111. package/src/component/img_uploader/index.js +149 -149
  112. package/src/component/img_uploader/index.stories.js +51 -51
  113. package/src/component/img_uploader/style.less +22 -22
  114. package/src/component/input/index.js +19 -19
  115. package/src/component/input_number/index.js +73 -73
  116. package/src/component/input_number/number.js +158 -158
  117. package/src/component/input_number/stories.js +21 -21
  118. package/src/component/input_number/style.less +10 -10
  119. package/src/component/layout_root/index.js +165 -165
  120. package/src/component/lazy_img/index.js +68 -68
  121. package/src/component/level_list/index.js +120 -120
  122. package/src/component/level_list/level_item.js +64 -64
  123. package/src/component/level_list/level_list.stories.js +139 -139
  124. package/src/component/level_list/style.less +47 -47
  125. package/src/component/level_list/util.js +22 -22
  126. package/src/component/level_select/index.js +240 -240
  127. package/src/component/level_select/level_select.stories.js +67 -67
  128. package/src/component/list/base.js +155 -155
  129. package/src/component/list/index.js +93 -93
  130. package/src/component/list/list.stories.js +99 -99
  131. package/src/component/list/style.less +58 -58
  132. package/src/component/loading/index.js +45 -45
  133. package/src/component/loading/loading_chunk.js +59 -59
  134. package/src/component/loading/loading_full_screen.js +62 -62
  135. package/src/component/loading/stories.js +46 -46
  136. package/src/component/loading/style.less +92 -92
  137. package/src/component/mask/index.js +34 -34
  138. package/src/component/mask/style.less +10 -10
  139. package/src/component/modal/clean_modal.js +36 -36
  140. package/src/component/modal/index.js +293 -293
  141. package/src/component/modal/right_side_modal.js +37 -37
  142. package/src/component/modal/stories.js +96 -96
  143. package/src/component/modal/style.less +145 -145
  144. package/src/component/more_select/base.js +517 -517
  145. package/src/component/more_select/index.js +91 -91
  146. package/src/component/more_select/stories.js +261 -261
  147. package/src/component/more_select/style.less +130 -130
  148. package/src/component/nav/index.js +269 -269
  149. package/src/component/nav/nav.stories.js +133 -133
  150. package/src/component/nav/style.less +156 -156
  151. package/src/component/nprogress/index.js +34 -34
  152. package/src/component/nprogress/stories.js +22 -22
  153. package/src/component/nprogress/style.less +39 -39
  154. package/src/component/pagination/base.js +67 -67
  155. package/src/component/pagination/left.js +65 -65
  156. package/src/component/pagination/page.js +120 -120
  157. package/src/component/pagination/page_peek.js +96 -96
  158. package/src/component/pagination/pagination.js +54 -54
  159. package/src/component/pagination/pagination.stories.js +104 -104
  160. package/src/component/pagination/pagination_text.js +71 -71
  161. package/src/component/pagination/pagination_v2.js +30 -30
  162. package/src/component/pagination/right.js +67 -67
  163. package/src/component/pagination/style.less +52 -52
  164. package/src/component/pagination/util.js +5 -5
  165. package/src/component/picture_preview/index.js +21 -21
  166. package/src/component/popover/index.js +373 -373
  167. package/src/component/popover/stories.js +101 -101
  168. package/src/component/popup/index.js +4 -4
  169. package/src/component/popup/popup.js +172 -172
  170. package/src/component/popup/popup_content_confirm.js +67 -67
  171. package/src/component/popup/style.less +105 -105
  172. package/src/component/price/index.js +147 -147
  173. package/src/component/price/stories.js +34 -34
  174. package/src/component/progress/index.js +101 -101
  175. package/src/component/progress/stories.js +60 -60
  176. package/src/component/progress/style.less +88 -88
  177. package/src/component/progress_circle/index.js +116 -116
  178. package/src/component/progress_circle/stories.js +54 -54
  179. package/src/component/progress_circle/style.less +17 -17
  180. package/src/component/radio/index.js +4 -4
  181. package/src/component/radio/radio.js +76 -76
  182. package/src/component/radio/radio_group.js +51 -51
  183. package/src/component/radio/stories.js +80 -80
  184. package/src/component/radio/style.less +63 -63
  185. package/src/component/recommend_input/index.js +118 -118
  186. package/src/component/recommend_input/recommend_input.stories.js +56 -56
  187. package/src/component/recommend_input/style.less +25 -25
  188. package/src/component/select/index.js +4 -4
  189. package/src/component/select/option.js +22 -22
  190. package/src/component/select/select.js +186 -186
  191. package/src/component/select/select.stories.js +79 -79
  192. package/src/component/select/style.less +4 -4
  193. package/src/component/selection/index.js +132 -132
  194. package/src/component/selection/selection.stories.js +41 -41
  195. package/src/component/selection/style.less +67 -67
  196. package/src/component/sheet/index.js +7 -7
  197. package/src/component/sheet/sheet.js +348 -348
  198. package/src/component/sheet/sheet_action.js +16 -16
  199. package/src/component/sheet/sheet_batch_action.js +16 -16
  200. package/src/component/sheet/sheet_column.js +21 -21
  201. package/src/component/sheet/sheet_select.js +31 -31
  202. package/src/component/sheet/stories.js +210 -210
  203. package/src/component/sheet/style.less +95 -95
  204. package/src/component/steps/index.js +66 -66
  205. package/src/component/steps/steps.stories.js +15 -15
  206. package/src/component/steps/style.less +39 -39
  207. package/src/component/storage/index.js +54 -54
  208. package/src/component/storage/stories.js +38 -38
  209. package/src/component/switch/index.js +118 -118
  210. package/src/component/switch/stories.js +7 -7
  211. package/src/component/switch/style.less +70 -70
  212. package/src/component/table_select/index.js +152 -152
  213. package/src/component/table_select/style.less +12 -12
  214. package/src/component/table_select/table_select.stories.js +91 -91
  215. package/src/component/table_select/util.js +21 -21
  216. package/src/component/tabs/style.less +33 -33
  217. package/src/component/tabs/tabs.js +97 -97
  218. package/src/component/tabs/tabs.stories.js +48 -48
  219. package/src/component/time_span/style.less +45 -45
  220. package/src/component/time_span/time_span.js +183 -183
  221. package/src/component/time_span/time_span.stories.js +66 -66
  222. package/src/component/time_span/time_span_picker.js +112 -112
  223. package/src/component/time_span/time_span_picker.stories.js +71 -71
  224. package/src/component/tip/index.js +168 -168
  225. package/src/component/tip/stories.js +54 -54
  226. package/src/component/tip/style.less +41 -41
  227. package/src/component/tool_tip/index.js +58 -58
  228. package/src/component/tool_tip/stories.js +36 -36
  229. package/src/component/transfer/box.js +186 -141
  230. package/src/component/transfer/index.js +4 -4
  231. package/src/component/transfer/stories.js +108 -118
  232. package/src/component/transfer/style.less +34 -34
  233. package/src/component/transfer/transfer.js +181 -173
  234. package/src/component/transfer/transfer_group.js +178 -178
  235. package/src/component/transfer_v2/index.js +171 -171
  236. package/src/component/transfer_v2/transfer_v2.stories.js +226 -226
  237. package/src/component/tree/bottom.js +41 -41
  238. package/src/component/tree/index.js +205 -205
  239. package/src/component/tree/item.js +154 -154
  240. package/src/component/tree/list.js +151 -151
  241. package/src/component/tree/style.less +147 -147
  242. package/src/component/tree/tree.stories.js +241 -241
  243. package/src/component/tree/util.js +24 -24
  244. package/src/component/tree_v2/bottom.js +40 -40
  245. package/src/component/tree_v2/index.js +260 -260
  246. package/src/component/tree_v2/list.js +230 -230
  247. package/src/component/tree_v2/style.less +38 -38
  248. package/src/component/tree_v2/tree.stories.js +419 -419
  249. package/src/component/tree_v2/util.js +185 -185
  250. package/src/component/uploader/index.js +108 -108
  251. package/src/component/uploader/style.less +24 -24
  252. package/src/component/uploader/uploader.stories.js +51 -51
  253. package/src/css/arrow.less +56 -56
  254. package/src/css/bg.less +52 -52
  255. package/src/css/border.less +40 -40
  256. package/src/css/cover.less +236 -236
  257. package/src/css/cursor.less +19 -19
  258. package/src/css/display.less +16 -16
  259. package/src/css/distance.less +324 -324
  260. package/src/css/error.less +10 -10
  261. package/src/css/other.less +16 -16
  262. package/src/css/overflow.less +23 -23
  263. package/src/css/position.less +11 -11
  264. package/src/css/rotate.less +28 -28
  265. package/src/css/shadow.less +11 -11
  266. package/src/css/stories.js +104 -104
  267. package/src/css/svg.less +51 -51
  268. package/src/css/text.less +120 -120
  269. package/src/css/variables.less +62 -62
  270. package/src/event_type.js +16 -16
  271. package/src/fonts/glyphicons-halflings-regular.svg +542 -542
  272. package/src/index.js +237 -237
  273. package/src/index.less +108 -108
  274. package/src/less/.csscomb.json +304 -304
  275. package/src/less/.csslintrc +19 -19
  276. package/src/less/alerts.less +72 -72
  277. package/src/less/badges.less +65 -65
  278. package/src/less/bootstrap.less +51 -51
  279. package/src/less/breadcrumbs.less +25 -25
  280. package/src/less/button-groups.less +253 -253
  281. package/src/less/buttons.less +186 -186
  282. package/src/less/carousel.less +269 -269
  283. package/src/less/close.less +33 -33
  284. package/src/less/code.less +68 -68
  285. package/src/less/component-animations.less +39 -39
  286. package/src/less/custom.less +37 -37
  287. package/src/less/dropdowns.less +215 -215
  288. package/src/less/forms.less +612 -612
  289. package/src/less/glyphicons.less +1614 -1614
  290. package/src/less/grid.less +76 -76
  291. package/src/less/input-groups.less +175 -175
  292. package/src/less/jumbotron.less +53 -53
  293. package/src/less/labels.less +64 -64
  294. package/src/less/list-group.less +126 -126
  295. package/src/less/media.less +66 -66
  296. package/src/less/mixins/alerts.less +14 -14
  297. package/src/less/mixins/background-variant.less +9 -9
  298. package/src/less/mixins/border-radius.less +21 -21
  299. package/src/less/mixins/buttons.less +65 -65
  300. package/src/less/mixins/center-block.less +7 -7
  301. package/src/less/mixins/clearfix.less +22 -22
  302. package/src/less/mixins/forms.less +84 -84
  303. package/src/less/mixins/gradients.less +59 -59
  304. package/src/less/mixins/grid-framework.less +96 -96
  305. package/src/less/mixins/grid.less +134 -134
  306. package/src/less/mixins/hide-text.less +21 -21
  307. package/src/less/mixins/image.less +25 -25
  308. package/src/less/mixins/labels.less +12 -12
  309. package/src/less/mixins/list-group.less +30 -30
  310. package/src/less/mixins/nav-divider.less +10 -10
  311. package/src/less/mixins/nav-vertical-align.less +9 -9
  312. package/src/less/mixins/opacity.less +8 -8
  313. package/src/less/mixins/pagination.less +24 -24
  314. package/src/less/mixins/panels.less +24 -24
  315. package/src/less/mixins/progress-bar.less +10 -10
  316. package/src/less/mixins/reset-filter.less +8 -8
  317. package/src/less/mixins/reset-text.less +18 -18
  318. package/src/less/mixins/resize.less +6 -6
  319. package/src/less/mixins/responsive-visibility.less +21 -21
  320. package/src/less/mixins/size.less +10 -10
  321. package/src/less/mixins/tab-focus.less +9 -9
  322. package/src/less/mixins/table-row.less +28 -28
  323. package/src/less/mixins/text-emphasis.less +9 -9
  324. package/src/less/mixins/text-overflow.less +8 -8
  325. package/src/less/mixins/vendor-prefixes.less +254 -254
  326. package/src/less/mixins.less +36 -36
  327. package/src/less/modals.less +163 -163
  328. package/src/less/navbar.less +651 -651
  329. package/src/less/navs.less +236 -236
  330. package/src/less/normalize.less +424 -424
  331. package/src/less/pager.less +54 -54
  332. package/src/less/pagination.less +90 -90
  333. package/src/less/panels.less +274 -274
  334. package/src/less/popovers.less +140 -140
  335. package/src/less/print.less +103 -103
  336. package/src/less/progress-bars.less +92 -92
  337. package/src/less/responsive-embed.less +35 -35
  338. package/src/less/responsive-utilities.less +209 -209
  339. package/src/less/scaffolding.less +154 -154
  340. package/src/less/tables.less +228 -228
  341. package/src/less/theme.less +344 -344
  342. package/src/less/thumbnails.less +35 -35
  343. package/src/less/tooltip.less +115 -115
  344. package/src/less/type.less +352 -352
  345. package/src/less/utilities.less +57 -57
  346. package/src/less/variables.less +833 -833
  347. package/src/less/wells.less +29 -29
  348. package/src/sotries.js +4 -4
  349. package/src/validator/index.js +10 -10
  350. package/src/validator/rules.js +66 -66
  351. package/src/validator/type.js +10 -10
  352. package/src/validator/validator.js +86 -86
  353. package/src/var.less +4 -4
  354. package/svg/calendar-month.svg +8 -8
  355. package/svg/calendar-year.svg +13 -13
  356. package/svg/calendar.svg +17 -17
  357. package/svg/check-detail.svg +18 -18
  358. package/svg/close-circle.svg +13 -13
  359. package/svg/closeup.svg +20 -20
  360. package/svg/delete.svg +10 -10
  361. package/svg/down-small.svg +1 -1
  362. package/svg/down.svg +1 -1
  363. package/svg/edit-box.svg +17 -17
  364. package/svg/edit-pen.svg +17 -17
  365. package/svg/empty.svg +27 -27
  366. package/svg/expand.svg +21 -21
  367. package/svg/left-small.svg +1 -1
  368. package/svg/more.svg +10 -10
  369. package/svg/next.svg +40 -40
  370. package/svg/pen.svg +12 -12
  371. package/svg/remove.svg +1 -1
  372. package/svg/right-small.svg +1 -1
  373. package/svg/search.svg +8 -8
  374. package/svg/setting.svg +17 -17
  375. package/svg/up-small.svg +1 -1
  376. package/svg/up.svg +1 -1
@@ -1,178 +1,178 @@
1
- import React, { useState, useEffect, useRef } from 'react'
2
- import classNames from 'classnames'
3
- import Flex from '../flex'
4
- import PropTypes from 'prop-types'
5
- import _ from 'lodash'
6
- import { useMemo } from 'react'
7
-
8
- const Footer = ({ count, onSelect, onCancelSelect, currentIndex }) => {
9
- const _countArray = _.range(count)
10
-
11
- return (
12
- <ul className='gm-carousel-fade-footer'>
13
- {_.map(_countArray, (value, index) => {
14
- return (
15
- <li
16
- className={classNames(
17
- { 'gm-carousel-fade-footer-li-hover': currentIndex === index },
18
- 'gm-carousel-fade-footer-li'
19
- )}
20
- key={index}
21
- onMouseOver={() => onSelect(index)}
22
- onMouseLeave={onCancelSelect}
23
- />
24
- )
25
- })}
26
- </ul>
27
- )
28
- }
29
-
30
- Footer.propTypes = {
31
- currentIndex: PropTypes.number.isRequired,
32
- count: PropTypes.number.isRequired,
33
- onSelect: PropTypes.func.isRequired,
34
- onCancelSelect: PropTypes.func.isRequired
35
- }
36
-
37
- const Items = ({ transitionTime, currentIndex, children }) => {
38
- const fadeTransitionStyle = {
39
- transition: `all ${transitionTime}ms ease-in-out`
40
- }
41
-
42
- return (
43
- <>
44
- {React.Children.map(children, (thisArg, index) => {
45
- return React.cloneElement(thisArg, {
46
- style: Object.assign({}, thisArg.props.style, fadeTransitionStyle),
47
- className: classNames(
48
- 'gm-carousel-fade-item',
49
- { 'gm-carousel-fade-item-active': currentIndex === index },
50
- thisArg.props.className
51
- ),
52
- key: index
53
- })
54
- })}
55
- </>
56
- )
57
- }
58
-
59
- Items.propTypes = {
60
- transitionTime: PropTypes.number.isRequired,
61
- currentIndex: PropTypes.number.isRequired
62
- }
63
-
64
- const Carousel = props => {
65
- const {
66
- onIndexChange,
67
- className,
68
- transitionTime,
69
- defaultIndex,
70
- delay,
71
- children,
72
- isStopByHoverContent,
73
- ...rest
74
- } = props
75
-
76
- const [currentIndex, setCurrentIndex] = useState(defaultIndex)
77
- const timerRef = useRef(null)
78
-
79
- const _children = useMemo(() => {
80
- return React.Children.toArray(children).filter(v => v)
81
- }, [children])
82
-
83
- const _childCount = useMemo(() => {
84
- return React.Children.count(_children)
85
- }, [_children])
86
-
87
- useEffect(() => {
88
- if (_childCount > 0) {
89
- startCarousel()
90
- }
91
- }, [_childCount])
92
-
93
- useEffect(() => {
94
- return () => {
95
- clearInterval(timerRef.current)
96
- }
97
- }, [])
98
-
99
- useEffect(() => {
100
- if (onIndexChange && typeof onIndexChange === 'function') {
101
- onIndexChange(currentIndex)
102
- }
103
- }, [currentIndex, onIndexChange])
104
-
105
- const setTimerCurrentIndex = () => {
106
- setCurrentIndex(prevIndex => {
107
- let index = prevIndex
108
-
109
- if (index === _childCount - 1) {
110
- index = 0
111
- } else {
112
- index++
113
- }
114
-
115
- return index
116
- })
117
- }
118
-
119
- const startCarousel = () => {
120
- clearInterval(timerRef.current)
121
- timerRef.current = setInterval(setTimerCurrentIndex, delay)
122
- }
123
-
124
- const handleStopCarousel = () => {
125
- clearInterval(timerRef.current)
126
- timerRef.current = null
127
- }
128
-
129
- const handleSelect = index => {
130
- handleStopCarousel()
131
- setCurrentIndex(index)
132
- }
133
-
134
- const handleCancelSelect = () => {
135
- startCarousel()
136
- }
137
-
138
- return (
139
- <Flex
140
- {...rest}
141
- justifyCenter
142
- className={classNames('gm-carousel-fade', className)}
143
- onMouseOver={isStopByHoverContent ? handleStopCarousel : undefined}
144
- onMouseLeave={handleCancelSelect}
145
- >
146
- <Items currentIndex={currentIndex} transitionTime={transitionTime}>
147
- {_children}
148
- </Items>
149
-
150
- <Footer
151
- count={_childCount}
152
- onSelect={handleSelect}
153
- onCancelSelect={handleCancelSelect}
154
- currentIndex={currentIndex}
155
- />
156
- </Flex>
157
- )
158
- }
159
-
160
- Carousel.propTypes = {
161
- defaultIndex: PropTypes.number,
162
- delay: PropTypes.number,
163
- transitionTime: PropTypes.number,
164
- /** 支持element元素 */
165
- children: PropTypes.arrayOf(PropTypes.element),
166
- onIndexChange: PropTypes.func,
167
- className: PropTypes.string,
168
- isStopByHoverContent: PropTypes.bool
169
- }
170
-
171
- Carousel.defaultProps = {
172
- defaultIndex: 0, // 设置初始索引
173
- delay: 3000, // 轮播时延
174
- transitionTime: 1000, // 切换时间(ms)
175
- isStopByHoverContent: true // 鼠标悬浮content禁止轮播
176
- }
177
-
178
- export default Carousel
1
+ import React, { useState, useEffect, useRef } from 'react'
2
+ import classNames from 'classnames'
3
+ import Flex from '../flex'
4
+ import PropTypes from 'prop-types'
5
+ import _ from 'lodash'
6
+ import { useMemo } from 'react'
7
+
8
+ const Footer = ({ count, onSelect, onCancelSelect, currentIndex }) => {
9
+ const _countArray = _.range(count)
10
+
11
+ return (
12
+ <ul className='gm-carousel-fade-footer'>
13
+ {_.map(_countArray, (value, index) => {
14
+ return (
15
+ <li
16
+ className={classNames(
17
+ { 'gm-carousel-fade-footer-li-hover': currentIndex === index },
18
+ 'gm-carousel-fade-footer-li'
19
+ )}
20
+ key={index}
21
+ onMouseOver={() => onSelect(index)}
22
+ onMouseLeave={onCancelSelect}
23
+ />
24
+ )
25
+ })}
26
+ </ul>
27
+ )
28
+ }
29
+
30
+ Footer.propTypes = {
31
+ currentIndex: PropTypes.number.isRequired,
32
+ count: PropTypes.number.isRequired,
33
+ onSelect: PropTypes.func.isRequired,
34
+ onCancelSelect: PropTypes.func.isRequired
35
+ }
36
+
37
+ const Items = ({ transitionTime, currentIndex, children }) => {
38
+ const fadeTransitionStyle = {
39
+ transition: `all ${transitionTime}ms ease-in-out`
40
+ }
41
+
42
+ return (
43
+ <>
44
+ {React.Children.map(children, (thisArg, index) => {
45
+ return React.cloneElement(thisArg, {
46
+ style: Object.assign({}, thisArg.props.style, fadeTransitionStyle),
47
+ className: classNames(
48
+ 'gm-carousel-fade-item',
49
+ { 'gm-carousel-fade-item-active': currentIndex === index },
50
+ thisArg.props.className
51
+ ),
52
+ key: index
53
+ })
54
+ })}
55
+ </>
56
+ )
57
+ }
58
+
59
+ Items.propTypes = {
60
+ transitionTime: PropTypes.number.isRequired,
61
+ currentIndex: PropTypes.number.isRequired
62
+ }
63
+
64
+ const Carousel = props => {
65
+ const {
66
+ onIndexChange,
67
+ className,
68
+ transitionTime,
69
+ defaultIndex,
70
+ delay,
71
+ children,
72
+ isStopByHoverContent,
73
+ ...rest
74
+ } = props
75
+
76
+ const [currentIndex, setCurrentIndex] = useState(defaultIndex)
77
+ const timerRef = useRef(null)
78
+
79
+ const _children = useMemo(() => {
80
+ return React.Children.toArray(children).filter(v => v)
81
+ }, [children])
82
+
83
+ const _childCount = useMemo(() => {
84
+ return React.Children.count(_children)
85
+ }, [_children])
86
+
87
+ useEffect(() => {
88
+ if (_childCount > 0) {
89
+ startCarousel()
90
+ }
91
+ }, [_childCount])
92
+
93
+ useEffect(() => {
94
+ return () => {
95
+ clearInterval(timerRef.current)
96
+ }
97
+ }, [])
98
+
99
+ useEffect(() => {
100
+ if (onIndexChange && typeof onIndexChange === 'function') {
101
+ onIndexChange(currentIndex)
102
+ }
103
+ }, [currentIndex, onIndexChange])
104
+
105
+ const setTimerCurrentIndex = () => {
106
+ setCurrentIndex(prevIndex => {
107
+ let index = prevIndex
108
+
109
+ if (index === _childCount - 1) {
110
+ index = 0
111
+ } else {
112
+ index++
113
+ }
114
+
115
+ return index
116
+ })
117
+ }
118
+
119
+ const startCarousel = () => {
120
+ clearInterval(timerRef.current)
121
+ timerRef.current = setInterval(setTimerCurrentIndex, delay)
122
+ }
123
+
124
+ const handleStopCarousel = () => {
125
+ clearInterval(timerRef.current)
126
+ timerRef.current = null
127
+ }
128
+
129
+ const handleSelect = index => {
130
+ handleStopCarousel()
131
+ setCurrentIndex(index)
132
+ }
133
+
134
+ const handleCancelSelect = () => {
135
+ startCarousel()
136
+ }
137
+
138
+ return (
139
+ <Flex
140
+ {...rest}
141
+ justifyCenter
142
+ className={classNames('gm-carousel-fade', className)}
143
+ onMouseOver={isStopByHoverContent ? handleStopCarousel : undefined}
144
+ onMouseLeave={handleCancelSelect}
145
+ >
146
+ <Items currentIndex={currentIndex} transitionTime={transitionTime}>
147
+ {_children}
148
+ </Items>
149
+
150
+ <Footer
151
+ count={_childCount}
152
+ onSelect={handleSelect}
153
+ onCancelSelect={handleCancelSelect}
154
+ currentIndex={currentIndex}
155
+ />
156
+ </Flex>
157
+ )
158
+ }
159
+
160
+ Carousel.propTypes = {
161
+ defaultIndex: PropTypes.number,
162
+ delay: PropTypes.number,
163
+ transitionTime: PropTypes.number,
164
+ /** 支持element元素 */
165
+ children: PropTypes.arrayOf(PropTypes.element),
166
+ onIndexChange: PropTypes.func,
167
+ className: PropTypes.string,
168
+ isStopByHoverContent: PropTypes.bool
169
+ }
170
+
171
+ Carousel.defaultProps = {
172
+ defaultIndex: 0, // 设置初始索引
173
+ delay: 3000, // 轮播时延
174
+ transitionTime: 1000, // 切换时间(ms)
175
+ isStopByHoverContent: true // 鼠标悬浮content禁止轮播
176
+ }
177
+
178
+ export default Carousel
@@ -1,50 +1,50 @@
1
- import React from 'react'
2
- import { storiesOf } from '@storybook/react'
3
- import Carousel from './carousel'
4
- import { observable } from 'mobx'
5
-
6
- const store = observable({
7
- showOne: false,
8
- setShowOne(value) {
9
- console.log(value)
10
- this.showOne = value
11
- },
12
- })
13
-
14
- setTimeout(() => {
15
- store.setShowOne(true)
16
- }, 4000)
17
-
18
- storiesOf('Carousel', module).add('default', () => {
19
- const render1 = () => <div>111</div>
20
- return (
21
- <Carousel
22
- style={{ width: '1000px', height: '200px' }}
23
- onIndexChange={index => console.log(index, 'afterChangeIndex')}
24
- >
25
- <div style={{ backgroundColor: 'red', height: '100%', width: '100%' }}>
26
- <div>
27
- <img
28
- style={{ height: '200px', width: '800px' }}
29
- src='https://img.guanmai.cn/product_pic/da32d562de124462.png'
30
- />
31
- </div>
32
- </div>
33
- <div style={{ backgroundColor: 'green', height: '100%' }}>
34
- showCarousel1
35
- </div>
36
- <div style={{ backgroundColor: 'yellow', height: '100%' }}>
37
- showCarousel2
38
- </div>
39
- <div style={{ backgroundColor: 'blue', height: '100%' }}>
40
- showCarousel3
41
- </div>
42
- {store.showOne ? (
43
- <div style={{ backgroundColor: 'orange', height: '100%' }}>
44
- showCarousel4
45
- </div>
46
- ) : null}
47
- {render1()}
48
- </Carousel>
49
- )
50
- })
1
+ import React from 'react'
2
+ import { storiesOf } from '@storybook/react'
3
+ import Carousel from './carousel'
4
+ import { observable } from 'mobx'
5
+
6
+ const store = observable({
7
+ showOne: false,
8
+ setShowOne(value) {
9
+ console.log(value)
10
+ this.showOne = value
11
+ },
12
+ })
13
+
14
+ setTimeout(() => {
15
+ store.setShowOne(true)
16
+ }, 4000)
17
+
18
+ storiesOf('Carousel', module).add('default', () => {
19
+ const render1 = () => <div>111</div>
20
+ return (
21
+ <Carousel
22
+ style={{ width: '1000px', height: '200px' }}
23
+ onIndexChange={index => console.log(index, 'afterChangeIndex')}
24
+ >
25
+ <div style={{ backgroundColor: 'red', height: '100%', width: '100%' }}>
26
+ <div>
27
+ <img
28
+ style={{ height: '200px', width: '800px' }}
29
+ src='https://img.guanmai.cn/product_pic/da32d562de124462.png'
30
+ />
31
+ </div>
32
+ </div>
33
+ <div style={{ backgroundColor: 'green', height: '100%' }}>
34
+ showCarousel1
35
+ </div>
36
+ <div style={{ backgroundColor: 'yellow', height: '100%' }}>
37
+ showCarousel2
38
+ </div>
39
+ <div style={{ backgroundColor: 'blue', height: '100%' }}>
40
+ showCarousel3
41
+ </div>
42
+ {store.showOne ? (
43
+ <div style={{ backgroundColor: 'orange', height: '100%' }}>
44
+ showCarousel4
45
+ </div>
46
+ ) : null}
47
+ {render1()}
48
+ </Carousel>
49
+ )
50
+ })
@@ -1,48 +1,48 @@
1
- .gm-carousel-fade {
2
- position: relative;
3
-
4
- &-item {
5
- display: inline-block;
6
- position: absolute;
7
- opacity: 0;
8
- visibility: hidden;
9
-
10
- &-active {
11
- opacity: 1;
12
- visibility: visible;
13
- }
14
- }
15
-
16
- &-footer {
17
- bottom: 5px;
18
- height: 10px;
19
- position: absolute;
20
- list-style-type: none;
21
- padding-inline-start: 0;
22
-
23
- &-li {
24
- float: left;
25
- width: 10px;
26
- height: 10px;
27
- border-radius: 50%;
28
- cursor: pointer;
29
- background-color: #3a3f53;
30
- margin: 5px;
31
-
32
- &-hover {
33
- background-color: #fff;
34
- opacity: 0.6;
35
- border: 0;
36
- }
37
-
38
- &::after {
39
- clear: both;
40
- content: '.';
41
- display: block;
42
- width: 0;
43
- height: 0;
44
- visibility: hidden;
45
- }
46
- }
47
- }
48
- }
1
+ .gm-carousel-fade {
2
+ position: relative;
3
+
4
+ &-item {
5
+ display: inline-block;
6
+ position: absolute;
7
+ opacity: 0;
8
+ visibility: hidden;
9
+
10
+ &-active {
11
+ opacity: 1;
12
+ visibility: visible;
13
+ }
14
+ }
15
+
16
+ &-footer {
17
+ bottom: 5px;
18
+ height: 10px;
19
+ position: absolute;
20
+ list-style-type: none;
21
+ padding-inline-start: 0;
22
+
23
+ &-li {
24
+ float: left;
25
+ width: 10px;
26
+ height: 10px;
27
+ border-radius: 50%;
28
+ cursor: pointer;
29
+ background-color: #3a3f53;
30
+ margin: 5px;
31
+
32
+ &-hover {
33
+ background-color: #fff;
34
+ opacity: 0.6;
35
+ border: 0;
36
+ }
37
+
38
+ &::after {
39
+ clear: both;
40
+ content: '.';
41
+ display: block;
42
+ width: 0;
43
+ height: 0;
44
+ visibility: hidden;
45
+ }
46
+ }
47
+ }
48
+ }