@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,185 +1,185 @@
1
- import _ from 'lodash'
2
- import { pinYinFilter } from '@gm-common/tool'
3
- import { filterGroupListNode } from '../../common/util'
4
-
5
- // 这里做一层 cache
6
- const _cache = []
7
- const filterWithQuery = (list, query, withFilter) => {
8
- let processList
9
- if (withFilter === true) {
10
- processList = filterGroupListNode(list, v => {
11
- const field = `${query}______${v.text}`
12
- if (_cache[field] === undefined) {
13
- _cache[field] = pinYinFilter([v], query, v => v.text).length > 0
14
- }
15
-
16
- return _cache[field]
17
- })
18
- } else if (withFilter) {
19
- processList = withFilter(list, query)
20
- } else {
21
- processList = list
22
- }
23
-
24
- return processList
25
- }
26
-
27
- // 把 list 打平,并附加额外数据 isLeaf level 辅助
28
- function listToFlat(
29
- list,
30
- pushCondition,
31
- childrenCondition,
32
- result = [],
33
- level = 0
34
- ) {
35
- _.each(list, item => {
36
- if (pushCondition(item)) {
37
- result.push({
38
- isLeaf: !item.children,
39
- level,
40
- data: item,
41
- leafValues: getLeafValues(item.children || [])
42
- })
43
- }
44
-
45
- if (childrenCondition(item)) {
46
- listToFlat(
47
- item.children,
48
- pushCondition,
49
- childrenCondition,
50
- result,
51
- level + 1
52
- )
53
- }
54
- })
55
-
56
- return result
57
- }
58
-
59
- function listToFlatFilterWithGroupSelected(list, groupSelected) {
60
- return listToFlat(
61
- list,
62
- () => true,
63
- item => {
64
- return groupSelected.includes(item.value)
65
- }
66
- )
67
- }
68
-
69
- function getUnLeafValues(list) {
70
- const flat = listToFlat(
71
- list,
72
- item => !!item.children,
73
- () => true
74
- )
75
-
76
- return _.map(flat, item => item.data.value)
77
- }
78
-
79
- function getLeafValues(list) {
80
- const flat = listToFlat(
81
- list,
82
- item => !item.children,
83
- () => true
84
- )
85
-
86
- // 这里再加一个过滤禁用的
87
- return _.map(
88
- flat.filter(item => !item?.data?.disabled),
89
- item => item.data.value
90
- )
91
- }
92
-
93
- // 用find,高效。深度遍历,找到存在没选的就终止遍历。
94
- function unSelectAll(list, selectedValues) {
95
- const unSelected = _.find(list, item => {
96
- if (item.children) {
97
- return unSelectAll(item.children, selectedValues)
98
- } else {
99
- return !selectedValues.includes(item.value)
100
- }
101
- })
102
-
103
- return !!unSelected
104
- }
105
-
106
- /**
107
- * 获取滚动高度,需要标明虚拟列表每项的高度 itemHeight ,因为用 scrollTo 滚动
108
- * @param {object} data 搜索项
109
- * @param {number} itemHeight 虚拟列表中每项的高度
110
- * @param {number} box_height 容器的高度
111
- * @param {object} list 搜索的数据
112
- * @param {object} group_select 已展开的id
113
- */
114
- function getItemOffsetHeight(data, itemHeight, box_height, list, group_select) {
115
- const flat = listToFlat(
116
- list,
117
- () => true,
118
- () => true
119
- )
120
-
121
- let height = 0
122
- let flag = false
123
- // 最大限制高度
124
- const max_height = _.reduce(
125
- flat,
126
- (res, item) => {
127
- const exist = _.includes(group_select, item.data.value)
128
- if (item.data.value === data.value) {
129
- height = res - itemHeight
130
- }
131
-
132
- if (exist) {
133
- flag = true
134
- res = res + itemHeight
135
- } else if (!item.isLeaf && flag) {
136
- flag = false
137
- res = res + itemHeight
138
- } else if (!item.isLeaf && !flag) {
139
- res = res + itemHeight
140
- } else if (item.isLeaf && flag) {
141
- res = res + itemHeight
142
- }
143
- return res
144
- },
145
- 0
146
- )
147
- const limit_height = max_height < box_height ? 0 : max_height - box_height
148
- // 限制高度
149
- const item_scroll_height = height < limit_height ? height : limit_height
150
- return item_scroll_height
151
- }
152
-
153
- /**
154
- * getFindGroupSelected 获取定位的展开id
155
- * @param {object} list 列表到数据
156
- * @param {object} find_list 搜索的数据
157
- * @return 对应到树节点到id数组
158
- */
159
- function getFindGroupSelected(list, find_list) {
160
- const flat = listToFlat(
161
- list,
162
- () => true,
163
- () => true
164
- )
165
- const find_list_value = _.map(find_list, i => i.value)
166
- return _.reduce(
167
- flat,
168
- (res, item) => {
169
- const same = _.intersection(item.leafValues, find_list_value)
170
- return same.length > 0 ? _.concat(res, item.data.value) : res
171
- },
172
- []
173
- )
174
- }
175
-
176
- export {
177
- getUnLeafValues,
178
- getLeafValues,
179
- filterWithQuery,
180
- listToFlatFilterWithGroupSelected,
181
- unSelectAll,
182
- getItemOffsetHeight,
183
- listToFlat,
184
- getFindGroupSelected
185
- }
1
+ import _ from 'lodash'
2
+ import { pinYinFilter } from '@gm-common/tool'
3
+ import { filterGroupListNode } from '../../common/util'
4
+
5
+ // 这里做一层 cache
6
+ const _cache = []
7
+ const filterWithQuery = (list, query, withFilter) => {
8
+ let processList
9
+ if (withFilter === true) {
10
+ processList = filterGroupListNode(list, v => {
11
+ const field = `${query}______${v.text}`
12
+ if (_cache[field] === undefined) {
13
+ _cache[field] = pinYinFilter([v], query, v => v.text).length > 0
14
+ }
15
+
16
+ return _cache[field]
17
+ })
18
+ } else if (withFilter) {
19
+ processList = withFilter(list, query)
20
+ } else {
21
+ processList = list
22
+ }
23
+
24
+ return processList
25
+ }
26
+
27
+ // 把 list 打平,并附加额外数据 isLeaf level 辅助
28
+ function listToFlat(
29
+ list,
30
+ pushCondition,
31
+ childrenCondition,
32
+ result = [],
33
+ level = 0
34
+ ) {
35
+ _.each(list, item => {
36
+ if (pushCondition(item)) {
37
+ result.push({
38
+ isLeaf: !item.children,
39
+ level,
40
+ data: item,
41
+ leafValues: getLeafValues(item.children || [])
42
+ })
43
+ }
44
+
45
+ if (childrenCondition(item)) {
46
+ listToFlat(
47
+ item.children,
48
+ pushCondition,
49
+ childrenCondition,
50
+ result,
51
+ level + 1
52
+ )
53
+ }
54
+ })
55
+
56
+ return result
57
+ }
58
+
59
+ function listToFlatFilterWithGroupSelected(list, groupSelected) {
60
+ return listToFlat(
61
+ list,
62
+ () => true,
63
+ item => {
64
+ return groupSelected.includes(item.value)
65
+ }
66
+ )
67
+ }
68
+
69
+ function getUnLeafValues(list) {
70
+ const flat = listToFlat(
71
+ list,
72
+ item => !!item.children,
73
+ () => true
74
+ )
75
+
76
+ return _.map(flat, item => item.data.value)
77
+ }
78
+
79
+ function getLeafValues(list) {
80
+ const flat = listToFlat(
81
+ list,
82
+ item => !item.children,
83
+ () => true
84
+ )
85
+
86
+ // 这里再加一个过滤禁用的
87
+ return _.map(
88
+ flat.filter(item => !item?.data?.disabled),
89
+ item => item.data.value
90
+ )
91
+ }
92
+
93
+ // 用find,高效。深度遍历,找到存在没选的就终止遍历。
94
+ function unSelectAll(list, selectedValues) {
95
+ const unSelected = _.find(list, item => {
96
+ if (item.children) {
97
+ return unSelectAll(item.children, selectedValues)
98
+ } else {
99
+ return !selectedValues.includes(item.value)
100
+ }
101
+ })
102
+
103
+ return !!unSelected
104
+ }
105
+
106
+ /**
107
+ * 获取滚动高度,需要标明虚拟列表每项的高度 itemHeight ,因为用 scrollTo 滚动
108
+ * @param {object} data 搜索项
109
+ * @param {number} itemHeight 虚拟列表中每项的高度
110
+ * @param {number} box_height 容器的高度
111
+ * @param {object} list 搜索的数据
112
+ * @param {object} group_select 已展开的id
113
+ */
114
+ function getItemOffsetHeight(data, itemHeight, box_height, list, group_select) {
115
+ const flat = listToFlat(
116
+ list,
117
+ () => true,
118
+ () => true
119
+ )
120
+
121
+ let height = 0
122
+ let flag = false
123
+ // 最大限制高度
124
+ const max_height = _.reduce(
125
+ flat,
126
+ (res, item) => {
127
+ const exist = _.includes(group_select, item.data.value)
128
+ if (item.data.value === data.value) {
129
+ height = res - itemHeight
130
+ }
131
+
132
+ if (exist) {
133
+ flag = true
134
+ res = res + itemHeight
135
+ } else if (!item.isLeaf && flag) {
136
+ flag = false
137
+ res = res + itemHeight
138
+ } else if (!item.isLeaf && !flag) {
139
+ res = res + itemHeight
140
+ } else if (item.isLeaf && flag) {
141
+ res = res + itemHeight
142
+ }
143
+ return res
144
+ },
145
+ 0
146
+ )
147
+ const limit_height = max_height < box_height ? 0 : max_height - box_height
148
+ // 限制高度
149
+ const item_scroll_height = height < limit_height ? height : limit_height
150
+ return item_scroll_height
151
+ }
152
+
153
+ /**
154
+ * getFindGroupSelected 获取定位的展开id
155
+ * @param {object} list 列表到数据
156
+ * @param {object} find_list 搜索的数据
157
+ * @return 对应到树节点到id数组
158
+ */
159
+ function getFindGroupSelected(list, find_list) {
160
+ const flat = listToFlat(
161
+ list,
162
+ () => true,
163
+ () => true
164
+ )
165
+ const find_list_value = _.map(find_list, i => i.value)
166
+ return _.reduce(
167
+ flat,
168
+ (res, item) => {
169
+ const same = _.intersection(item.leafValues, find_list_value)
170
+ return same.length > 0 ? _.concat(res, item.data.value) : res
171
+ },
172
+ []
173
+ )
174
+ }
175
+
176
+ export {
177
+ getUnLeafValues,
178
+ getLeafValues,
179
+ filterWithQuery,
180
+ listToFlatFilterWithGroupSelected,
181
+ unSelectAll,
182
+ getItemOffsetHeight,
183
+ listToFlat,
184
+ getFindGroupSelected
185
+ }
@@ -1,108 +1,108 @@
1
- import React, { useRef } from 'react'
2
- import PropTypes from 'prop-types'
3
- import { is } from '@gm-common/tool'
4
- import classNames from 'classnames'
5
- import SVGPlus from '../../../svg/plus.svg'
6
- import Flex from '../flex'
7
-
8
- const Uploader = ({
9
- onUpload,
10
- accept,
11
- multiple,
12
- className,
13
- children,
14
- disabled,
15
- ...rest
16
- }) => {
17
- const refInput = useRef(null)
18
- const handleUpload = e => {
19
- e.preventDefault()
20
-
21
- const uploadedFiles = e.dataTransfer ? e.dataTransfer.files : e.target.files
22
-
23
- const max = multiple ? uploadedFiles.length : 1
24
- const files = []
25
-
26
- for (let i = 0; i < max; i++) {
27
- const file = uploadedFiles[i]
28
- file.preview = window.URL.createObjectURL(file)
29
- files.push(file)
30
- }
31
- onUpload(files, e)
32
- }
33
-
34
- const handleClick = () => {
35
- if (disabled) return
36
-
37
- refInput.current.value = null
38
- refInput.current.click()
39
- }
40
-
41
- return (
42
- <div
43
- {...rest}
44
- className={classNames(
45
- 'gm-uploader',
46
- {
47
- disabled
48
- },
49
- className
50
- )}
51
- onClick={handleClick}
52
- >
53
- {children || <Default />}
54
- <input
55
- ref={refInput}
56
- type='file'
57
- className='gm-uploader-input'
58
- multiple={!is.weixin() && multiple}
59
- accept={accept}
60
- onChange={handleUpload}
61
- />
62
- </div>
63
- )
64
- }
65
-
66
- const Default = ({ className, children, ...rest }) => {
67
- return (
68
- <Flex
69
- {...rest}
70
- alignCenter
71
- justifyCenter
72
- className={classNames('gm-uploader-default gm-text-primary', className)}
73
- >
74
- {children || <SVGPlus />}
75
- </Flex>
76
- )
77
- }
78
-
79
- Default.propTypes = {
80
- className: PropTypes.string
81
- }
82
-
83
- const DefaultImage = ({ className, children, ...rest }) => {
84
- return (
85
- <Default {...rest} className={classNames('gm-text-12', className)}>
86
- {children || '+ 加图'}
87
- </Default>
88
- )
89
- }
90
-
91
- DefaultImage.propTypes = {
92
- className: PropTypes.string
93
- }
94
-
95
- Uploader.Default = Default
96
- Uploader.DefaultImage = DefaultImage
97
-
98
- Uploader.propTypes = {
99
- onUpload: PropTypes.func.isRequired,
100
- disabled: PropTypes.bool,
101
- accept: PropTypes.string,
102
- multiple: PropTypes.bool,
103
- className: PropTypes.string,
104
- style: PropTypes.object,
105
- children: PropTypes.any
106
- }
107
-
108
- export default Uploader
1
+ import React, { useRef } from 'react'
2
+ import PropTypes from 'prop-types'
3
+ import { is } from '@gm-common/tool'
4
+ import classNames from 'classnames'
5
+ import SVGPlus from '../../../svg/plus.svg'
6
+ import Flex from '../flex'
7
+
8
+ const Uploader = ({
9
+ onUpload,
10
+ accept,
11
+ multiple,
12
+ className,
13
+ children,
14
+ disabled,
15
+ ...rest
16
+ }) => {
17
+ const refInput = useRef(null)
18
+ const handleUpload = e => {
19
+ e.preventDefault()
20
+
21
+ const uploadedFiles = e.dataTransfer ? e.dataTransfer.files : e.target.files
22
+
23
+ const max = multiple ? uploadedFiles.length : 1
24
+ const files = []
25
+
26
+ for (let i = 0; i < max; i++) {
27
+ const file = uploadedFiles[i]
28
+ file.preview = window.URL.createObjectURL(file)
29
+ files.push(file)
30
+ }
31
+ onUpload(files, e)
32
+ }
33
+
34
+ const handleClick = () => {
35
+ if (disabled) return
36
+
37
+ refInput.current.value = null
38
+ refInput.current.click()
39
+ }
40
+
41
+ return (
42
+ <div
43
+ {...rest}
44
+ className={classNames(
45
+ 'gm-uploader',
46
+ {
47
+ disabled
48
+ },
49
+ className
50
+ )}
51
+ onClick={handleClick}
52
+ >
53
+ {children || <Default />}
54
+ <input
55
+ ref={refInput}
56
+ type='file'
57
+ className='gm-uploader-input'
58
+ multiple={!is.weixin() && multiple}
59
+ accept={accept}
60
+ onChange={handleUpload}
61
+ />
62
+ </div>
63
+ )
64
+ }
65
+
66
+ const Default = ({ className, children, ...rest }) => {
67
+ return (
68
+ <Flex
69
+ {...rest}
70
+ alignCenter
71
+ justifyCenter
72
+ className={classNames('gm-uploader-default gm-text-primary', className)}
73
+ >
74
+ {children || <SVGPlus />}
75
+ </Flex>
76
+ )
77
+ }
78
+
79
+ Default.propTypes = {
80
+ className: PropTypes.string
81
+ }
82
+
83
+ const DefaultImage = ({ className, children, ...rest }) => {
84
+ return (
85
+ <Default {...rest} className={classNames('gm-text-12', className)}>
86
+ {children || '+ 加图'}
87
+ </Default>
88
+ )
89
+ }
90
+
91
+ DefaultImage.propTypes = {
92
+ className: PropTypes.string
93
+ }
94
+
95
+ Uploader.Default = Default
96
+ Uploader.DefaultImage = DefaultImage
97
+
98
+ Uploader.propTypes = {
99
+ onUpload: PropTypes.func.isRequired,
100
+ disabled: PropTypes.bool,
101
+ accept: PropTypes.string,
102
+ multiple: PropTypes.bool,
103
+ className: PropTypes.string,
104
+ style: PropTypes.object,
105
+ children: PropTypes.any
106
+ }
107
+
108
+ export default Uploader
@@ -1,24 +1,24 @@
1
- .gm-uploader {
2
- display: inline-block;
3
-
4
- .gm-uploader-input[type='file'] {
5
- display: none;
6
- }
7
-
8
- .gm-uploader-default {
9
- width: 64px;
10
- height: 64px;
11
- font-size: 30px;
12
- border: 1px dashed fadeout(@gm-frame-border-color, 50%);
13
- border-radius: 4px;
14
- cursor: pointer;
15
- }
16
-
17
- &.disabled {
18
- cursor: not-allowed;
19
-
20
- .gm-uploader-default {
21
- .gm-disabled();
22
- }
23
- }
24
- }
1
+ .gm-uploader {
2
+ display: inline-block;
3
+
4
+ .gm-uploader-input[type='file'] {
5
+ display: none;
6
+ }
7
+
8
+ .gm-uploader-default {
9
+ width: 64px;
10
+ height: 64px;
11
+ font-size: 30px;
12
+ border: 1px dashed fadeout(@gm-frame-border-color, 50%);
13
+ border-radius: 4px;
14
+ cursor: pointer;
15
+ }
16
+
17
+ &.disabled {
18
+ cursor: not-allowed;
19
+
20
+ .gm-uploader-default {
21
+ .gm-disabled();
22
+ }
23
+ }
24
+ }