@douyinfe/semi-ui 2.1.3 → 2.1.4-alpha.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 (752) hide show
  1. package/_base/_story/index.scss +14 -0
  2. package/_base/_story/index.stories.js +118 -0
  3. package/_base/_story/index.stories.tsx +55 -0
  4. package/_base/base.scss +3 -0
  5. package/_base/base.ts +36 -0
  6. package/_base/baseComponent.tsx +78 -0
  7. package/_base/reactUtils.ts +43 -0
  8. package/_portal/_story/portal.stories.js +17 -0
  9. package/_portal/index.tsx +112 -0
  10. package/_test_/utils/dom/index.js +9 -0
  11. package/_test_/utils/function/index.js +1 -0
  12. package/_test_/utils/function/sleep.js +9 -0
  13. package/_test_/utils/index.js +4 -0
  14. package/_test_/utils/table/index.js +310 -0
  15. package/_test_/utils/tooltip/index.js +39 -0
  16. package/_utils/index.ts +157 -0
  17. package/anchor/__test__/anchor.test.js +59 -0
  18. package/anchor/_story/anchor.stories.js +266 -0
  19. package/anchor/_story/anchor.stories.tsx +165 -0
  20. package/anchor/anchor-context.ts +13 -0
  21. package/anchor/index.tsx +296 -0
  22. package/anchor/link.tsx +136 -0
  23. package/autoComplete/__test__/autoComplete.test.js +456 -0
  24. package/autoComplete/_story/CustomTrigger/index.jsx +106 -0
  25. package/autoComplete/_story/autoComplete.stories.js +349 -0
  26. package/autoComplete/_story/autoComplete.stories.tsx +87 -0
  27. package/autoComplete/index.tsx +476 -0
  28. package/avatar/__test__/avatar.test.js +363 -0
  29. package/avatar/__test__/avatarGroup.test.js +193 -0
  30. package/avatar/_story/Demo.tsx +22 -0
  31. package/avatar/_story/avatar.stories.js +191 -0
  32. package/avatar/_story/avatar.stories.tsx +7 -0
  33. package/avatar/avatarGroup.tsx +81 -0
  34. package/avatar/index.tsx +163 -0
  35. package/avatar/interface.ts +51 -0
  36. package/backtop/__test__/backtop.test.js +49 -0
  37. package/backtop/_story/backtop.stories.js +37 -0
  38. package/backtop/_story/backtop.stories.tsx +30 -0
  39. package/backtop/index.tsx +112 -0
  40. package/badge/__test__/badge.test.js +123 -0
  41. package/badge/_story/Demo.tsx +16 -0
  42. package/badge/_story/badge.stories.js +91 -0
  43. package/badge/_story/badge.stories.tsx +8 -0
  44. package/badge/index.tsx +80 -0
  45. package/banner/__test__/banner.test.js +58 -0
  46. package/banner/_story/Demo.tsx +14 -0
  47. package/banner/_story/banner.stories.js +45 -0
  48. package/banner/_story/banner.stories.tsx +8 -0
  49. package/banner/index.tsx +172 -0
  50. package/breadcrumb/__test__/breadcrumb.test.js +219 -0
  51. package/breadcrumb/_story/Demo.tsx +24 -0
  52. package/breadcrumb/_story/breadcrumb.stories.js +317 -0
  53. package/breadcrumb/_story/breadcrumb.stories.tsx +45 -0
  54. package/breadcrumb/bread-context.tsx +13 -0
  55. package/breadcrumb/index.tsx +293 -0
  56. package/breadcrumb/item.tsx +207 -0
  57. package/button/Button.tsx +125 -0
  58. package/button/__test__/button.test.js +49 -0
  59. package/button/_story/Demo.tsx +51 -0
  60. package/button/_story/button.stories.js +280 -0
  61. package/button/_story/button.stories.tsx +10 -0
  62. package/button/buttonGroup.tsx +47 -0
  63. package/button/index.tsx +38 -0
  64. package/button/splitButtonGroup.tsx +27 -0
  65. package/calendar/__test__/calendar.test.js +163 -0
  66. package/calendar/_story/Demo.tsx +20 -0
  67. package/calendar/_story/calendar.stories.js +405 -0
  68. package/calendar/_story/calendar.stories.tsx +5 -0
  69. package/calendar/dayCalendar.tsx +191 -0
  70. package/calendar/dayCol.tsx +156 -0
  71. package/calendar/index.tsx +61 -0
  72. package/calendar/interface.ts +42 -0
  73. package/calendar/monthCalendar.tsx +399 -0
  74. package/calendar/rangeCalendar.tsx +270 -0
  75. package/calendar/timeCol.tsx +64 -0
  76. package/calendar/weekCalendar.tsx +271 -0
  77. package/card/__test__/card.test.js +202 -0
  78. package/card/_story/card.stories.js +555 -0
  79. package/card/_story/card.stories.tsx +100 -0
  80. package/card/cardGroup.tsx +63 -0
  81. package/card/index.tsx +243 -0
  82. package/card/meta.tsx +73 -0
  83. package/cascader/__test__/cascader.test.js +1030 -0
  84. package/cascader/_story/CustomTrigger/index.jsx +63 -0
  85. package/cascader/_story/Demo.tsx +63 -0
  86. package/cascader/_story/cascader.stories.js +1213 -0
  87. package/cascader/_story/cascader.stories.tsx +6 -0
  88. package/cascader/index.tsx +901 -0
  89. package/cascader/item.tsx +301 -0
  90. package/checkbox/__test__/checkbox.test.js +85 -0
  91. package/checkbox/__test__/checkboxGroup.test.js +148 -0
  92. package/checkbox/_story/Demo.tsx +27 -0
  93. package/checkbox/_story/checkbox.stories.js +943 -0
  94. package/checkbox/_story/checkbox.stories.tsx +8 -0
  95. package/checkbox/checkbox.tsx +200 -0
  96. package/checkbox/checkboxGroup.tsx +171 -0
  97. package/checkbox/checkboxInner.tsx +88 -0
  98. package/checkbox/context.ts +14 -0
  99. package/checkbox/index.tsx +19 -0
  100. package/collapse/__test__/collapse.test.js +148 -0
  101. package/collapse/_story/Demo.tsx +28 -0
  102. package/collapse/_story/accordion.stories.js +143 -0
  103. package/collapse/_story/accordion.stories.tsx +8 -0
  104. package/collapse/collapse-context.tsx +18 -0
  105. package/collapse/index.tsx +119 -0
  106. package/collapse/item.tsx +139 -0
  107. package/collapsible/_story/Demo.tsx +41 -0
  108. package/collapsible/_story/Nested/index.js +101 -0
  109. package/collapsible/_story/collapsible.stories.js +588 -0
  110. package/collapsible/_story/collapsible.stories.tsx +7 -0
  111. package/collapsible/index.tsx +156 -0
  112. package/configProvider/_story/ChangeTimeZone/index.js +183 -0
  113. package/configProvider/_story/GetPopupContainer/index.js +194 -0
  114. package/configProvider/_story/RTLDirection/RTLForm.jsx +313 -0
  115. package/configProvider/_story/RTLDirection/RTLTable.jsx +94 -0
  116. package/configProvider/_story/RTLDirection/RTLWrapper.tsx +27 -0
  117. package/configProvider/_story/configProvider.stories.js +30 -0
  118. package/configProvider/context.tsx +14 -0
  119. package/configProvider/index.tsx +48 -0
  120. package/datePicker/__test__/datePicker.test.js +873 -0
  121. package/datePicker/_story/AllTypes/index.js +19 -0
  122. package/datePicker/_story/AutoSwitchDate/index.jsx +14 -0
  123. package/datePicker/_story/Autofocus/index.js +11 -0
  124. package/datePicker/_story/BetterRangePicker/index.jsx +172 -0
  125. package/datePicker/_story/Callbacks/index.jsx +24 -0
  126. package/datePicker/_story/ControlledDemo/index.js +149 -0
  127. package/datePicker/_story/CustomTrigger/index.jsx +36 -0
  128. package/datePicker/_story/Cycled/index.jsx +11 -0
  129. package/datePicker/_story/DateOffset/index.js +83 -0
  130. package/datePicker/_story/DatePickerSlot/index.jsx +83 -0
  131. package/datePicker/_story/DatePickerSlot/index.scss +7 -0
  132. package/datePicker/_story/DatePickerTimeZone/index.jsx +27 -0
  133. package/datePicker/_story/Density/index.jsx +69 -0
  134. package/datePicker/_story/DisabledDate/index.js +189 -0
  135. package/datePicker/_story/ExceptionDemo/index.js +20 -0
  136. package/datePicker/_story/Multiple/index.jsx +24 -0
  137. package/datePicker/_story/NeedConfirm/index.jsx +94 -0
  138. package/datePicker/_story/OnChangeWithDateFirst/index.jsx +37 -0
  139. package/datePicker/_story/OverPopover/index.jsx +22 -0
  140. package/datePicker/_story/RenderDate/index.js +21 -0
  141. package/datePicker/_story/RenderFullDate/index.js +56 -0
  142. package/datePicker/_story/RenderFullDate/index.scss +23 -0
  143. package/datePicker/_story/SyncSwitchMonth/index.js +45 -0
  144. package/datePicker/_story/TimePickerOpts/index.jsx +16 -0
  145. package/datePicker/_story/datePicker.stories.js +636 -0
  146. package/datePicker/_story/datePicker.stories.tsx +230 -0
  147. package/datePicker/dateInput.tsx +358 -0
  148. package/datePicker/datePicker.tsx +647 -0
  149. package/datePicker/footer.tsx +29 -0
  150. package/datePicker/index.tsx +71 -0
  151. package/datePicker/month.tsx +388 -0
  152. package/datePicker/monthsGrid.tsx +615 -0
  153. package/datePicker/navigation.tsx +120 -0
  154. package/datePicker/quickControl.tsx +54 -0
  155. package/datePicker/yearAndMonth.tsx +228 -0
  156. package/descriptions/__test__/descriptions.test.js +167 -0
  157. package/descriptions/_story/Demo.tsx +36 -0
  158. package/descriptions/_story/descriptions.stories.js +95 -0
  159. package/descriptions/_story/descriptions.stories.tsx +6 -0
  160. package/descriptions/descriptions-context.ts +11 -0
  161. package/descriptions/index.tsx +82 -0
  162. package/descriptions/item.tsx +63 -0
  163. package/dist/umd/semi-ui.js +253 -257
  164. package/dist/umd/semi-ui.js.map +1 -1
  165. package/dist/umd/semi-ui.min.js +1 -1
  166. package/dist/umd/semi-ui.min.js.map +1 -1
  167. package/dropdown/__test__/dropdown.test.js +308 -0
  168. package/dropdown/_story/AutoClose/index.js +120 -0
  169. package/dropdown/_story/DisabledItem/index.js +31 -0
  170. package/dropdown/_story/InHoverElements/index.js +25 -0
  171. package/dropdown/_story/InHoverElements/index.scss +16 -0
  172. package/dropdown/_story/MultiDropdown/index.js +34 -0
  173. package/dropdown/_story/WrapAvatar/index.jsx +10 -0
  174. package/dropdown/_story/dropdown.stories.js +331 -0
  175. package/dropdown/_story/dropdown.stories.tsx +28 -0
  176. package/dropdown/_story/inTable/index.js +194 -0
  177. package/dropdown/context.ts +6 -0
  178. package/dropdown/dropdownDivider.tsx +23 -0
  179. package/dropdown/dropdownItem.tsx +104 -0
  180. package/dropdown/dropdownMenu.tsx +28 -0
  181. package/dropdown/dropdownTitle.tsx +36 -0
  182. package/dropdown/index.tsx +239 -0
  183. package/empty/__test__/empty.test.js +63 -0
  184. package/empty/_story/Demo.tsx +10 -0
  185. package/empty/_story/empty.stories.js +53 -0
  186. package/empty/_story/empty.stories.tsx +8 -0
  187. package/empty/index.tsx +127 -0
  188. package/form/__test__/arrayField.test.js +204 -0
  189. package/form/__test__/baseForm/baseForm.test.js +628 -0
  190. package/form/__test__/baseForm/onChange.test.js +144 -0
  191. package/form/__test__/errorMessage.test.js +59 -0
  192. package/form/__test__/field.test.js +426 -0
  193. package/form/__test__/formApi.test.js +422 -0
  194. package/form/__test__/group.test.js +108 -0
  195. package/form/__test__/hoc.test.js +24 -0
  196. package/form/__test__/label.test.js +69 -0
  197. package/form/__test__/section.test.js +49 -0
  198. package/form/__test__/slot.test.js +108 -0
  199. package/form/_story/Debug/bugDemo.jsx +219 -0
  200. package/form/_story/Debug/childDidMount.jsx +30 -0
  201. package/form/_story/Debug/myRadio.jsx +32 -0
  202. package/form/_story/DynamicField/arrayFieldDemo.jsx +320 -0
  203. package/form/_story/DynamicField/nestArrayField.jsx +159 -0
  204. package/form/_story/FieldProps/bigNumberFieldPath.jsx +73 -0
  205. package/form/_story/FieldProps/convert.jsx +100 -0
  206. package/form/_story/FieldProps/fieldRef.jsx +74 -0
  207. package/form/_story/FieldProps/helpAndExtra.jsx +136 -0
  208. package/form/_story/FieldProps/pureField.jsx +0 -0
  209. package/form/_story/FieldProps/rulesUpdateDemo.js +116 -0
  210. package/form/_story/FormApi/arrayDemo.jsx +97 -0
  211. package/form/_story/FormApi/formApiDemo.jsx +82 -0
  212. package/form/_story/FormApi/resetDemo.jsx +41 -0
  213. package/form/_story/FormApi/setValuesDemo.jsx +133 -0
  214. package/form/_story/HOC/displayName.jsx +19 -0
  215. package/form/_story/HOC/withFieldDemo.jsx +216 -0
  216. package/form/_story/Hook/hookDemo.jsx +195 -0
  217. package/form/_story/Layout/layoutDemo.jsx +348 -0
  218. package/form/_story/Layout/modalFormDemo.jsx +94 -0
  219. package/form/_story/Layout/slotDemo.jsx +126 -0
  220. package/form/_story/Performance/performanceDemo.jsx +440 -0
  221. package/form/_story/Performance/selectUseReactNode.jsx +110 -0
  222. package/form/_story/Reference/inform.test.js +110 -0
  223. package/form/_story/Validate/validateDemo.jsx +421 -0
  224. package/form/_story/demo.jsx +397 -0
  225. package/form/_story/form.stories.js +506 -0
  226. package/form/_story/form.stories.tsx +176 -0
  227. package/form/arrayField.tsx +199 -0
  228. package/form/baseForm.tsx +290 -0
  229. package/form/context.tsx +18 -0
  230. package/form/errorMessage.tsx +80 -0
  231. package/form/field.tsx +79 -0
  232. package/form/group.tsx +91 -0
  233. package/form/hoc/withField.tsx +559 -0
  234. package/form/hoc/withFormApi.tsx +11 -0
  235. package/form/hoc/withFormState.tsx +11 -0
  236. package/form/hooks/index.ts +12 -0
  237. package/form/hooks/useArrayFieldState.tsx +9 -0
  238. package/form/hooks/useFieldApi.tsx +21 -0
  239. package/form/hooks/useFieldState.tsx +18 -0
  240. package/form/hooks/useFormApi.tsx +6 -0
  241. package/form/hooks/useFormState.tsx +9 -0
  242. package/form/hooks/useFormUpdater.tsx +6 -0
  243. package/form/hooks/useStateWithGetter.ts +13 -0
  244. package/form/index.tsx +42 -0
  245. package/form/interface.ts +132 -0
  246. package/form/label.tsx +79 -0
  247. package/form/section.tsx +38 -0
  248. package/form/slot.tsx +165 -0
  249. package/getBabelConfig.js +37 -0
  250. package/grid/__test__/calculateGutter.test.js +50 -0
  251. package/grid/_story/demo.scss +23 -0
  252. package/grid/_story/grid.stories.js +290 -0
  253. package/grid/_story/grid.stories.tsx +15 -0
  254. package/grid/col.tsx +133 -0
  255. package/grid/index.tsx +7 -0
  256. package/grid/row.tsx +174 -0
  257. package/gulpfile.js +116 -0
  258. package/iconButton/_story/iconButton.stories.tsx +16 -0
  259. package/iconButton/index.tsx +130 -0
  260. package/icons/_story/Others/add-template-icon.jsx +0 -0
  261. package/icons/_story/Others/add-template-icon.svg +10 -0
  262. package/icons/_story/Others/hangup.svg +3 -0
  263. package/icons/_story/Others/index.js +24 -0
  264. package/icons/_story/Others/xianglin.svg +3 -0
  265. package/icons/_story/icon.stories.js +63 -0
  266. package/icons/_story/icon.stories.tsx +46 -0
  267. package/icons/index.tsx +5 -0
  268. package/index.ts +94 -0
  269. package/input/__test__/input.test.js +245 -0
  270. package/input/__test__/textArea.test.js +119 -0
  271. package/input/_story/Demo.tsx +33 -0
  272. package/input/_story/TextareaDemo.tsx +27 -0
  273. package/input/_story/input.scss +0 -0
  274. package/input/_story/input.stories.js +887 -0
  275. package/input/_story/input.stories.tsx +11 -0
  276. package/input/index.tsx +444 -0
  277. package/input/inputGroup.tsx +119 -0
  278. package/input/textarea.tsx +330 -0
  279. package/inputNumber/__test__/inputNumber.test.js +370 -0
  280. package/inputNumber/_story/input.stories.tsx +17 -0
  281. package/inputNumber/_story/inputNumber.scss +10 -0
  282. package/inputNumber/_story/inputNumber.stories.js +643 -0
  283. package/inputNumber/index.tsx +480 -0
  284. package/layout/Sider.tsx +116 -0
  285. package/layout/__test__/layout.test.js +51 -0
  286. package/layout/_story/layout.stories.js +305 -0
  287. package/layout/_story/layout.stories.tsx +13 -0
  288. package/layout/index.tsx +126 -0
  289. package/layout/layout-context.ts +18 -0
  290. package/lib/cjs/datePicker/dateInput.d.ts +1 -1
  291. package/lib/cjs/datePicker/datePicker.d.ts +1 -1
  292. package/lib/cjs/datePicker/monthsGrid.d.ts +1 -1
  293. package/lib/cjs/radio/radio.d.ts +1 -1
  294. package/lib/cjs/radio/radioGroup.d.ts +1 -1
  295. package/lib/cjs/timePicker/TimePicker.d.ts +2 -2
  296. package/lib/cjs/timePicker/TimeShape.d.ts +1 -1
  297. package/lib/cjs/timePicker/index.d.ts +2 -2
  298. package/lib/cjs/typography/title.d.ts +1 -1
  299. package/lib/cjs/upload/index.d.ts +1 -1
  300. package/lib/es/datePicker/dateInput.d.ts +1 -1
  301. package/lib/es/datePicker/datePicker.d.ts +1 -1
  302. package/lib/es/datePicker/monthsGrid.d.ts +1 -1
  303. package/lib/es/radio/radio.d.ts +1 -1
  304. package/lib/es/radio/radioGroup.d.ts +1 -1
  305. package/lib/es/timePicker/TimePicker.d.ts +2 -2
  306. package/lib/es/timePicker/TimeShape.d.ts +1 -1
  307. package/lib/es/timePicker/index.d.ts +2 -2
  308. package/lib/es/typography/title.d.ts +1 -1
  309. package/lib/es/upload/index.d.ts +1 -1
  310. package/list/__test__/list.test.js +264 -0
  311. package/list/_story/list.stories.js +920 -0
  312. package/list/_story/list.stories.tsx +26 -0
  313. package/list/index.tsx +173 -0
  314. package/list/item.tsx +109 -0
  315. package/list/list-context.ts +15 -0
  316. package/locale/README.md +53 -0
  317. package/locale/_story/locale.stories.js +221 -0
  318. package/locale/_story/locale.stories.tsx +57 -0
  319. package/locale/context.tsx +5 -0
  320. package/locale/interface.ts +152 -0
  321. package/locale/localeConsumer.tsx +58 -0
  322. package/locale/localeProvider.tsx +35 -0
  323. package/locale/source/ar.ts +156 -0
  324. package/locale/source/en_GB.ts +156 -0
  325. package/locale/source/en_US.ts +156 -0
  326. package/locale/source/id_ID.ts +157 -0
  327. package/locale/source/ja_JP.ts +157 -0
  328. package/locale/source/ko_KR.ts +157 -0
  329. package/locale/source/ms_MY.ts +156 -0
  330. package/locale/source/pt_BR.ts +164 -0
  331. package/locale/source/ru_RU.ts +159 -0
  332. package/locale/source/th_TH.ts +160 -0
  333. package/locale/source/tr_TR.ts +156 -0
  334. package/locale/source/vi_VN.ts +159 -0
  335. package/locale/source/zh_CN.ts +157 -0
  336. package/locale/source/zh_TW.ts +157 -0
  337. package/modal/ConfirmModal.tsx +89 -0
  338. package/modal/Modal.tsx +415 -0
  339. package/modal/ModalContent.tsx +276 -0
  340. package/modal/__test__/confirm.test.js +203 -0
  341. package/modal/__test__/modal.test.js +324 -0
  342. package/modal/_story/CollapsibleInModal/index.jsx +100 -0
  343. package/modal/_story/DynamicContext/context.js +8 -0
  344. package/modal/_story/DynamicContext/index.jsx +30 -0
  345. package/modal/_story/modal.stories.js +251 -0
  346. package/modal/_story/modal.stories.tsx +41 -0
  347. package/modal/confirm.tsx +121 -0
  348. package/modal/index.tsx +13 -0
  349. package/modal/useModal/HookModal.tsx +62 -0
  350. package/modal/useModal/index.tsx +72 -0
  351. package/motions/Rotate.tsx +64 -0
  352. package/navigation/CollapseButton.tsx +47 -0
  353. package/navigation/Footer.tsx +72 -0
  354. package/navigation/Header.tsx +80 -0
  355. package/navigation/Item.tsx +274 -0
  356. package/navigation/OpenIconTransition.tsx +57 -0
  357. package/navigation/README.md +10 -0
  358. package/navigation/SubNav.tsx +376 -0
  359. package/navigation/SubNavTransition.tsx +58 -0
  360. package/navigation/__test__/navigation.test.js +274 -0
  361. package/navigation/_story/AutoOpen/index.js +69 -0
  362. package/navigation/_story/ControlledSelectedKeys/index.js +78 -0
  363. package/navigation/_story/DisabledNav/index.js +46 -0
  364. package/navigation/_story/ItemsChange/index.js +41 -0
  365. package/navigation/_story/LinkNav/index.jsx +90 -0
  366. package/navigation/_story/MountUnmount/index.js +57 -0
  367. package/navigation/_story/WithChildren/index.js +119 -0
  368. package/navigation/_story/WithRouter/index.js +111 -0
  369. package/navigation/_story/navigation.stories.js +330 -0
  370. package/navigation/_story/navigation.stories.tsx +101 -0
  371. package/navigation/index.tsx +427 -0
  372. package/navigation/nav-context.ts +9 -0
  373. package/notification/NoticeTransition.tsx +68 -0
  374. package/notification/__test__/notification.test.js +325 -0
  375. package/notification/_story/Demo.tsx +29 -0
  376. package/notification/_story/notification.stories.js +225 -0
  377. package/notification/_story/notification.stories.tsx +6 -0
  378. package/notification/_story/useNotification/context.js +3 -0
  379. package/notification/_story/useNotification/index.jsx +29 -0
  380. package/notification/index.tsx +265 -0
  381. package/notification/notice.tsx +185 -0
  382. package/notification/useNotification/HookNotice.tsx +36 -0
  383. package/notification/useNotification/index.tsx +94 -0
  384. package/overflowList/__test__/overflowList.test.js +31 -0
  385. package/overflowList/_story/Demo.tsx +36 -0
  386. package/overflowList/_story/overflowList.stories.js +356 -0
  387. package/overflowList/_story/overflowList.stories.tsx +7 -0
  388. package/overflowList/index.tsx +279 -0
  389. package/overflowList/intersectionObserver.tsx +93 -0
  390. package/package.json +2 -7
  391. package/pagination/__test__/pagination.test.js +255 -0
  392. package/pagination/_story/pagination.stories.js +148 -0
  393. package/pagination/_story/pagination.stories.tsx +11 -0
  394. package/pagination/index.tsx +450 -0
  395. package/popconfirm/__test__/popconfirm.test.js +131 -0
  396. package/popconfirm/_story/DynamicDisable/index.jsx +25 -0
  397. package/popconfirm/_story/InTable/index.js +75 -0
  398. package/popconfirm/_story/ShowArrow/index.jsx +141 -0
  399. package/popconfirm/_story/TitlePopconfirm/index.js +130 -0
  400. package/popconfirm/_story/TypesConfirm/index.jsx +121 -0
  401. package/popconfirm/_story/popconfirm.stories.js +170 -0
  402. package/popconfirm/_story/popconfirm.stories.tsx +20 -0
  403. package/popconfirm/index.tsx +239 -0
  404. package/popover/Arrow.tsx +66 -0
  405. package/popover/__test__/popover.test.js +52 -0
  406. package/popover/_story/ArrowPointAtCenter/index.jsx +138 -0
  407. package/popover/_story/BtnClose/index.jsx +80 -0
  408. package/popover/_story/NestedPopover/index.js +41 -0
  409. package/popover/_story/PopRight/index.js +25 -0
  410. package/popover/_story/PopRight/index.scss +25 -0
  411. package/popover/_story/SelectInPopover/index.jsx +38 -0
  412. package/popover/_story/popover.stories.js +574 -0
  413. package/popover/_story/popover.stories.tsx +53 -0
  414. package/popover/index.tsx +156 -0
  415. package/progress/__test__/progress.test.js +127 -0
  416. package/progress/_story/progress.stories.js +71 -0
  417. package/progress/_story/progress.stories.tsx +11 -0
  418. package/progress/index.tsx +245 -0
  419. package/radio/__test__/radio.test.jsx +91 -0
  420. package/radio/__test__/radioGroup.test.jsx +164 -0
  421. package/radio/_story/Demo.tsx +34 -0
  422. package/radio/_story/radio.scss +4 -0
  423. package/radio/_story/radio.stories.js +857 -0
  424. package/radio/_story/radio.stories.tsx +7 -0
  425. package/radio/context.ts +25 -0
  426. package/radio/index.tsx +12 -0
  427. package/radio/radio.tsx +244 -0
  428. package/radio/radioGroup.tsx +204 -0
  429. package/radio/radioInner.tsx +130 -0
  430. package/rating/__test__/rating.test.js +265 -0
  431. package/rating/_story/rating.stories.js +97 -0
  432. package/rating/_story/rating.stories.tsx +11 -0
  433. package/rating/index.tsx +283 -0
  434. package/rating/item.tsx +111 -0
  435. package/resizeObserver/index.tsx +115 -0
  436. package/scripts/compileDist.js +52 -0
  437. package/scripts/compileLib.js +13 -0
  438. package/scripts/compileScss.js +25 -0
  439. package/scrollList/__test__/scrollList.test.js +226 -0
  440. package/scrollList/_story/ScrollList/index.js +66 -0
  441. package/scrollList/_story/WheelList/index.js +116 -0
  442. package/scrollList/_story/scrolllist.stories.js +26 -0
  443. package/scrollList/_story/scrolllist.stories.tsx +131 -0
  444. package/scrollList/index.tsx +65 -0
  445. package/scrollList/scrollItem.tsx +509 -0
  446. package/select/__test__/select.test.js +1266 -0
  447. package/select/_story/CustomTrigger/index.jsx +21 -0
  448. package/select/_story/select.scss +51 -0
  449. package/select/_story/select.stories.js +2852 -0
  450. package/select/_story/select.stories.tsx +195 -0
  451. package/select/index.tsx +1121 -0
  452. package/select/option.tsx +157 -0
  453. package/select/optionGroup.tsx +42 -0
  454. package/select/utils.tsx +76 -0
  455. package/select/virtualRow.tsx +13 -0
  456. package/sideSheet/SideSheetContent.tsx +174 -0
  457. package/sideSheet/SideSheetTransition.tsx +104 -0
  458. package/sideSheet/__test__/sideSheet.test.js +319 -0
  459. package/sideSheet/_story/sideSheet.stories.js +379 -0
  460. package/sideSheet/_story/sideSheet.stories.tsx +48 -0
  461. package/sideSheet/index.tsx +268 -0
  462. package/skeleton/__test__/skeleton.test.js +32 -0
  463. package/skeleton/_story/skeleton.stories.js +82 -0
  464. package/skeleton/_story/skeleton.stories.tsx +61 -0
  465. package/skeleton/index.tsx +62 -0
  466. package/skeleton/item.tsx +82 -0
  467. package/slider/__test__/__snapshots__/slider.test.js.snap +5 -0
  468. package/slider/__test__/slider.test.js +155 -0
  469. package/slider/_story/Demo.scss +3 -0
  470. package/slider/_story/Demo.tsx +28 -0
  471. package/slider/_story/slider.stories.js +404 -0
  472. package/slider/_story/slider.stories.tsx +7 -0
  473. package/slider/index.tsx +561 -0
  474. package/space/__test__/space.test.js +99 -0
  475. package/space/_story/space.stories.js +254 -0
  476. package/space/_story/space.stories.tsx +26 -0
  477. package/space/index.tsx +95 -0
  478. package/space/utils.ts +24 -0
  479. package/spin/__test__/spin.test.js +46 -0
  480. package/spin/_story/Demo.tsx +10 -0
  481. package/spin/_story/spin.stories.js +92 -0
  482. package/spin/_story/spin.stories.tsx +6 -0
  483. package/spin/icon.tsx +54 -0
  484. package/spin/index.tsx +131 -0
  485. package/steps/__test__/steps.test.js +372 -0
  486. package/steps/_story/steps.stories.js +306 -0
  487. package/steps/_story/steps.stories.tsx +17 -0
  488. package/steps/basicStep.tsx +130 -0
  489. package/steps/basicSteps.tsx +110 -0
  490. package/steps/context.ts +7 -0
  491. package/steps/fillStep.tsx +113 -0
  492. package/steps/fillSteps.tsx +96 -0
  493. package/steps/index.tsx +69 -0
  494. package/steps/navStep.tsx +63 -0
  495. package/steps/navSteps.tsx +73 -0
  496. package/steps/step.tsx +37 -0
  497. package/switch/__test__/switch.test.js +128 -0
  498. package/switch/_story/switch.stories.js +160 -0
  499. package/switch/_story/switch.stories.tsx +124 -0
  500. package/switch/index.tsx +155 -0
  501. package/table/Body/BaseRow.tsx +361 -0
  502. package/table/Body/ExpandedRow.tsx +155 -0
  503. package/table/Body/SectionRow.tsx +200 -0
  504. package/table/Body/index.tsx +842 -0
  505. package/table/ColGroup.tsx +66 -0
  506. package/table/Column.tsx +17 -0
  507. package/table/ColumnFilter.tsx +203 -0
  508. package/table/ColumnSelection.tsx +88 -0
  509. package/table/ColumnShape.ts +33 -0
  510. package/table/ColumnSorter.tsx +58 -0
  511. package/table/CustomExpandIcon.tsx +95 -0
  512. package/table/HeadTable.tsx +118 -0
  513. package/table/ResizableHeaderCell.tsx +44 -0
  514. package/table/ResizableTable.tsx +176 -0
  515. package/table/Table.tsx +1384 -0
  516. package/table/TableCell.tsx +355 -0
  517. package/table/TableContextProvider.tsx +53 -0
  518. package/table/TableHeader.tsx +183 -0
  519. package/table/TableHeaderRow.tsx +180 -0
  520. package/table/TablePagination.tsx +52 -0
  521. package/table/__test__/table.test.js +1887 -0
  522. package/table/_story/BetterScrollbar.tsx +115 -0
  523. package/table/_story/ChildrenData/index.js +251 -0
  524. package/table/_story/ChildrenDataInnerSelected/index.js +221 -0
  525. package/table/_story/ChildrenDataSelected/index.js +247 -0
  526. package/table/_story/ControlledPagination/index.jsx +232 -0
  527. package/table/_story/ControlledSortOrder/index.jsx +85 -0
  528. package/table/_story/CustomComponents/index.js +101 -0
  529. package/table/_story/CustomExpandIcons/index.js +97 -0
  530. package/table/_story/CustomFilterDropdownItem/index.jsx +98 -0
  531. package/table/_story/DefaultSortOrder.tsx +120 -0
  532. package/table/_story/Demos/columnRender.jsx +131 -0
  533. package/table/_story/Demos/controlledPagination.jsx +125 -0
  534. package/table/_story/Demos/customFilter.jsx +110 -0
  535. package/table/_story/Demos/default.jsx +82 -0
  536. package/table/_story/Demos/dynamic.jsx +594 -0
  537. package/table/_story/Demos/expand.jsx +114 -0
  538. package/table/_story/Demos/filterAndSorter.jsx +102 -0
  539. package/table/_story/Demos/fixed.jsx +117 -0
  540. package/table/_story/Demos/fullRender.jsx +131 -0
  541. package/table/_story/Demos/group.jsx +109 -0
  542. package/table/_story/Demos/headerMerge.jsx +121 -0
  543. package/table/_story/Demos/headerMergeJSX.jsx +83 -0
  544. package/table/_story/Demos/infiniteScroll.jsx +118 -0
  545. package/table/_story/Demos/onRow.jsx +114 -0
  546. package/table/_story/Demos/pagination.jsx +101 -0
  547. package/table/_story/Demos/resizable copy.jsx +102 -0
  548. package/table/_story/Demos/resizable.jsx +183 -0
  549. package/table/_story/Demos/rowSelection.jsx +130 -0
  550. package/table/_story/Demos/sortTree.jsx +218 -0
  551. package/table/_story/Demos/sortable.jsx +183 -0
  552. package/table/_story/Demos/span.jsx +155 -0
  553. package/table/_story/Demos/tree.jsx +109 -0
  554. package/table/_story/Demos/treeSelect.jsx +196 -0
  555. package/table/_story/Demos/virtualized.jsx +103 -0
  556. package/table/_story/Demos/zebra.jsx +124 -0
  557. package/table/_story/DragableTable/index.jsx +156 -0
  558. package/table/_story/DragableTable/index.scss +7 -0
  559. package/table/_story/DynamicFilters/data.json +105 -0
  560. package/table/_story/DynamicFilters/index.js +81 -0
  561. package/table/_story/DynamicTable/index.jsx +569 -0
  562. package/table/_story/EventTable/index.jsx +76 -0
  563. package/table/_story/Expand/index.js +85 -0
  564. package/table/_story/ExpandAllGroupRows/index.jsx +90 -0
  565. package/table/_story/ExpandAllRows/index.jsx +111 -0
  566. package/table/_story/ExpandRowByClick.jsx +77 -0
  567. package/table/_story/FilterWithNewDataTable/index.jsx +108 -0
  568. package/table/_story/FixAllColumnsWithoutWidth.tsx +52 -0
  569. package/table/_story/FixRenderReturnProps.jsx +105 -0
  570. package/table/_story/FixedExpandedRows/index.js +105 -0
  571. package/table/_story/FixedGroups/index.js +80 -0
  572. package/table/_story/FixedTable/index.js +92 -0
  573. package/table/_story/FnTable/index.js +103 -0
  574. package/table/_story/FullRender/index.jsx +135 -0
  575. package/table/_story/GroupedCols/index.jsx +83 -0
  576. package/table/_story/GroupedColsFixed/index.jsx +95 -0
  577. package/table/_story/GroupedColsFixedJSX/index.jsx +122 -0
  578. package/table/_story/GroupedColsFixedVirtualized/index.jsx +107 -0
  579. package/table/_story/GroupedColsFixedVirtualizedGroups/index.jsx +110 -0
  580. package/table/_story/GroupedRows/index.js +83 -0
  581. package/table/_story/GroupedRowsFixed/index.js +81 -0
  582. package/table/_story/InSideSheet/index.jsx +90 -0
  583. package/table/_story/InfiniteScroll/index.js +115 -0
  584. package/table/_story/JSXAsyncData/index.jsx +47 -0
  585. package/table/_story/JSXColumnPropColumn.jsx +57 -0
  586. package/table/_story/JSXColumnsComplex.jsx +174 -0
  587. package/table/_story/JSXColumnsNest.tsx +74 -0
  588. package/table/_story/JSXColumnsSmiple.jsx +53 -0
  589. package/table/_story/JSXFixedTable/index.js +224 -0
  590. package/table/_story/JSXTitles/index.js +55 -0
  591. package/table/_story/LinkedScroll/index.jsx +137 -0
  592. package/table/_story/LinkedScroll/index.scss +0 -0
  593. package/table/_story/MassiveColumns/index.jsx +109 -0
  594. package/table/_story/MassiveColumns/index.scss +9 -0
  595. package/table/_story/ModalTable/index.jsx +228 -0
  596. package/table/_story/PagintaionTable/index.js +123 -0
  597. package/table/_story/Perf/Render/complex.jsx +191 -0
  598. package/table/_story/Perf/Render/context.jsx +72 -0
  599. package/table/_story/Perf/Render/controlledSelection.jsx +103 -0
  600. package/table/_story/Perf/Render/index.jsx +95 -0
  601. package/table/_story/Perf/Render/onRow.jsx +112 -0
  602. package/table/_story/Perf/Render/resizableSelection.jsx +193 -0
  603. package/table/_story/Perf/Virtualized/index.jsx +65 -0
  604. package/table/_story/Perf/index.js +8 -0
  605. package/table/_story/RTL/AlignScrollBar.jsx +17 -0
  606. package/table/_story/RTL/index.js +2 -0
  607. package/table/_story/RenderPagination/index.jsx +161 -0
  608. package/table/_story/ResizableColumns/index.jsx +95 -0
  609. package/table/_story/ResizableColumns/index.scss +30 -0
  610. package/table/_story/ResizableTable/index.jsx +85 -0
  611. package/table/_story/ScrollBar/index.jsx +71 -0
  612. package/table/_story/SelectedRows/index.js +137 -0
  613. package/table/_story/TableSpan/index.jsx +117 -0
  614. package/table/_story/TabsTable/index.jsx +78 -0
  615. package/table/_story/TestClone/index.js +0 -0
  616. package/table/_story/VirtualTableOnCell/index.jsx +84 -0
  617. package/table/_story/VirtualizedDynamicData/index.jsx +111 -0
  618. package/table/_story/VirtualizedGroupedRows/index.jsx +135 -0
  619. package/table/_story/VirtualizedNotFixed/index.js +89 -0
  620. package/table/_story/VritualizedDataSelected/index.js +273 -0
  621. package/table/_story/WarnColumnWithoutDataIndex.tsx +71 -0
  622. package/table/_story/WithSideSheet/index.js +82 -0
  623. package/table/_story/data/big.json +8205 -0
  624. package/table/_story/data/big2.json +42271 -0
  625. package/table/_story/table.stories.js +595 -0
  626. package/table/_story/table.stories.tsx +382 -0
  627. package/table/_story/virtualized/index.js +92 -0
  628. package/table/_story/virtualizedFixed/index.js +131 -0
  629. package/table/getColumns.tsx +34 -0
  630. package/table/index.tsx +44 -0
  631. package/table/interface.ts +320 -0
  632. package/table/table-context.ts +28 -0
  633. package/table/utils.ts +123 -0
  634. package/tabs/TabBar.tsx +248 -0
  635. package/tabs/TabPane.tsx +116 -0
  636. package/tabs/TabPaneTransition.tsx +67 -0
  637. package/tabs/__test__/tabs.test.js +208 -0
  638. package/tabs/_story/Demo.tsx +30 -0
  639. package/tabs/_story/search.jsx +37 -0
  640. package/tabs/_story/tabs.stories.js +797 -0
  641. package/tabs/_story/tabs.stories.tsx +6 -0
  642. package/tabs/index.tsx +300 -0
  643. package/tabs/interface.ts +83 -0
  644. package/tabs/tabs-context.ts +6 -0
  645. package/tag/_story/Demo.tsx +22 -0
  646. package/tag/_story/tag.stories.js +234 -0
  647. package/tag/_story/tag.stories.tsx +6 -0
  648. package/tag/group.tsx +131 -0
  649. package/tag/index.tsx +132 -0
  650. package/tag/interface.ts +48 -0
  651. package/tagInput/__test__/tagInput.test.js +352 -0
  652. package/tagInput/_story/tagInput.stories.js +414 -0
  653. package/tagInput/_story/tagInput.stories.tsx +24 -0
  654. package/tagInput/index.tsx +440 -0
  655. package/timePicker/Combobox.tsx +331 -0
  656. package/timePicker/PanelShape.ts +8 -0
  657. package/timePicker/TimeInput.tsx +205 -0
  658. package/timePicker/TimePicker.tsx +531 -0
  659. package/timePicker/TimeShape.ts +19 -0
  660. package/timePicker/__test__/timePicker.test.js +283 -0
  661. package/timePicker/_story/Callbacks/index.jsx +24 -0
  662. package/timePicker/_story/CustomTrigger/index.jsx +35 -0
  663. package/timePicker/_story/DisabledTime/index.jsx +17 -0
  664. package/timePicker/_story/timepicker.stories.js +264 -0
  665. package/timePicker/_story/timepicker.stories.tsx +18 -0
  666. package/timePicker/index.tsx +47 -0
  667. package/timeline/__test__/timeline.test.js +237 -0
  668. package/timeline/_story/timeline.stories.js +171 -0
  669. package/timeline/_story/timeline.stories.tsx +15 -0
  670. package/timeline/index.tsx +96 -0
  671. package/timeline/item.tsx +76 -0
  672. package/toast/ToastTransition.tsx +43 -0
  673. package/toast/__test__/toast-command-call.test.js +63 -0
  674. package/toast/__test__/toast.test.js +104 -0
  675. package/toast/_story/Demo.tsx +22 -0
  676. package/toast/_story/toast.stories.js +98 -0
  677. package/toast/_story/toast.stories.tsx +7 -0
  678. package/toast/index.tsx +234 -0
  679. package/toast/toast.tsx +148 -0
  680. package/toast/useToast/HookToast.tsx +35 -0
  681. package/toast/useToast/index.tsx +79 -0
  682. package/tooltip/ArrowBoundingShape.ts +8 -0
  683. package/tooltip/TooltipStyledTransition.tsx +30 -0
  684. package/tooltip/TriangleArrow.tsx +12 -0
  685. package/tooltip/TriangleArrowVertical.tsx +12 -0
  686. package/tooltip/__test__/tooltip.test.js +320 -0
  687. package/tooltip/_story/ArrowPointAtCenter/index.jsx +137 -0
  688. package/tooltip/_story/ContainerPosition/index.jsx +15 -0
  689. package/tooltip/_story/ContainerPosition/index.scss +10 -0
  690. package/tooltip/_story/CustomContainer/index.jsx +39 -0
  691. package/tooltip/_story/DangerousHtml/index.js +30 -0
  692. package/tooltip/_story/Edge/index.js +16 -0
  693. package/tooltip/_story/InTable/index.jsx +86 -0
  694. package/tooltip/_story/Safari/autoAdjust.js +23 -0
  695. package/tooltip/_story/ScrollDemo/index.js +65 -0
  696. package/tooltip/_story/story.scss +50 -0
  697. package/tooltip/_story/tooltip.stories.js +690 -0
  698. package/tooltip/_story/tooltip.stories.tsx +54 -0
  699. package/tooltip/index.tsx +646 -0
  700. package/transfer/__test__/transfer.test.js +324 -0
  701. package/transfer/_story/transfer.scss +124 -0
  702. package/transfer/_story/transfer.stories.js +758 -0
  703. package/transfer/_story/transfer.stories.tsx +80 -0
  704. package/transfer/index.tsx +652 -0
  705. package/tree/__test__/autosizer.test.js +102 -0
  706. package/tree/__test__/tree.test.js +842 -0
  707. package/tree/__test__/treeMultiple.test.js +593 -0
  708. package/tree/__test__/treeNodeProps.test.js +192 -0
  709. package/tree/_story/BigData.jsx +58 -0
  710. package/tree/_story/Demo.tsx +72 -0
  711. package/tree/_story/bigDataGen.jsx +98 -0
  712. package/tree/_story/data.js +3 -0
  713. package/tree/_story/tree.stories.js +2172 -0
  714. package/tree/_story/tree.stories.tsx +7 -0
  715. package/tree/autoSizer.tsx +86 -0
  716. package/tree/collapse.tsx +144 -0
  717. package/tree/index.tsx +754 -0
  718. package/tree/interface.ts +141 -0
  719. package/tree/nodeList.tsx +87 -0
  720. package/tree/treeContext.tsx +49 -0
  721. package/tree/treeNode.tsx +401 -0
  722. package/tree/treeUtil.tsx +14 -0
  723. package/treeSelect/__test__/treeMultiple.test.js +676 -0
  724. package/treeSelect/__test__/treeSelect.test.js +783 -0
  725. package/treeSelect/_story/CustomTrigger/index.jsx +47 -0
  726. package/treeSelect/_story/Demo.tsx +83 -0
  727. package/treeSelect/_story/treeSelect.stories.js +1155 -0
  728. package/treeSelect/_story/treeSelect.stories.tsx +7 -0
  729. package/treeSelect/index.tsx +1288 -0
  730. package/trigger/__test__/trigger.test.js +17 -0
  731. package/trigger/index.tsx +45 -0
  732. package/tsconfig.json +32 -0
  733. package/typography/__test__/typography.test.js +74 -0
  734. package/typography/_story/typography.stories.js +629 -0
  735. package/typography/_story/typography.stories.tsx +175 -0
  736. package/typography/base.tsx +628 -0
  737. package/typography/copyable.tsx +135 -0
  738. package/typography/index.tsx +24 -0
  739. package/typography/interface.ts +27 -0
  740. package/typography/paragraph.tsx +77 -0
  741. package/typography/text.tsx +68 -0
  742. package/typography/title.tsx +74 -0
  743. package/typography/typography.tsx +41 -0
  744. package/typography/util.tsx +141 -0
  745. package/upload/__test__/dragUpload.test.js +122 -0
  746. package/upload/__test__/upload.test.js +896 -0
  747. package/upload/_story/upload.stories.js +943 -0
  748. package/upload/_story/upload.stories.tsx +13 -0
  749. package/upload/fileCard.tsx +270 -0
  750. package/upload/index.tsx +538 -0
  751. package/upload/interface.ts +59 -0
  752. package/webpack.config.js +86 -0
@@ -0,0 +1,2852 @@
1
+ import React, { useState, useRef, useEffect } from 'react';
2
+
3
+ import './select.scss';
4
+ import { Input, Select, Button, Icon, Avatar, Checkbox, Form, withField, Space } from '../../index';
5
+ import CustomTrigger from './CustomTrigger';
6
+ import classNames from 'classnames';
7
+ import { getHighLightTextHTML } from '../../_utils/index';
8
+ const Option = Select.Option;
9
+ import { IconSearch, IconGift } from '@douyinfe/semi-icons';
10
+
11
+ export default {
12
+ title: 'Select',
13
+ parameters: {
14
+ chromatic: { disableSnapshot: true },
15
+ },
16
+ }
17
+
18
+ let Test = () => {
19
+ let [options, setOptions] = useState([1, 2, 3, 4]);
20
+
21
+ function add() {
22
+ let newOptions = Array.from(
23
+ {
24
+ length: Math.floor(Math.random() * 10),
25
+ },
26
+ (v, i) => i + 1
27
+ );
28
+ setOptions(newOptions);
29
+ }
30
+
31
+ let style = {
32
+ width: 150,
33
+ margin: 20,
34
+ };
35
+ let slotStyle = {
36
+ backgroundColor: 'whitesmoke',
37
+ height: '40px',
38
+ display: 'flex',
39
+ justifyContent: 'center',
40
+ alignItems: 'center',
41
+ borderRadius: '0 0 6px 6px',
42
+ };
43
+ let outSlotStyle = {
44
+ backgroundColor: 'whitesmoke',
45
+ height: '29px',
46
+ display: 'flex',
47
+ justifyContent: 'center',
48
+ alignItems: 'center',
49
+ cursor: 'pointer',
50
+ };
51
+
52
+ const click = e => {};
53
+
54
+ let outSlotNode = (
55
+ <div onClick={e => click(e)}>
56
+ <Checkbox>sendLarkNotification</Checkbox>
57
+ <div>
58
+ <Button theme="solid">confirm</Button>
59
+ </div>
60
+ </div>
61
+ );
62
+ return (
63
+ <>
64
+ <Select
65
+ style={style}
66
+ dropdownClassName="test-dropdown"
67
+ dropdownStyle={{
68
+ width: 150,
69
+ }}
70
+ filter
71
+ placeholder="fefe"
72
+ position="rightTop"
73
+ innerBottomSlot={
74
+ <div style={slotStyle}>
75
+ <Button
76
+ size="small"
77
+ style={{
78
+ margin: 0,
79
+ }}
80
+ >
81
+ 申请其他地区权限
82
+ </Button>
83
+ </div>
84
+ }
85
+ >
86
+ {options.map(option => (
87
+ <Option value={option} key={option} className="fefe">
88
+ {option}
89
+ </Option>
90
+ ))}
91
+ </Select>
92
+ <Select
93
+ style={{
94
+ marginTop: 20,
95
+ width: 200,
96
+ }}
97
+ dropdownClassName="test-dropdown"
98
+ dropdownStyle={{
99
+ width: 150,
100
+ }}
101
+ filter
102
+ placeholder="fefe"
103
+ position="rightTop"
104
+ outerBottomSlot={outSlotNode}
105
+ >
106
+ {options.map(option => (
107
+ <Option value={option} key={option} className="fefe">
108
+ {option}
109
+ </Option>
110
+ ))}
111
+ </Select>
112
+ </>
113
+ );
114
+ };
115
+
116
+ const AutoFocusDemo = () => {
117
+ return (
118
+ <>
119
+ <Select
120
+ autoFocus
121
+ style={{
122
+ width: 200,
123
+ }}
124
+ onFocus={() => console.log('onFocus')}
125
+ onBlur={() => console.log('onBlur')}
126
+ >
127
+ <Option value="abc">抖音</Option>
128
+ <Option value="hotsoon">火山</Option>
129
+ <Option value="pipixia">皮皮虾</Option>
130
+ <Option value="duoshan">多闪</Option>
131
+ <Option value="xigua">西瓜视频</Option>
132
+ </Select>
133
+ <div className="test-div">test-div</div>
134
+ </>
135
+ );
136
+ };
137
+
138
+ export const AutoFocus = () => <AutoFocusDemo />;
139
+
140
+ AutoFocus.story = {
141
+ name: 'autoFocus',
142
+ };
143
+
144
+ export const InnerBottomSlotOuterBottomSlot = () => <Test />;
145
+
146
+ InnerBottomSlotOuterBottomSlot.story = {
147
+ name: 'innerBottomSlot / outerBottomSlot',
148
+ };
149
+
150
+ export const InnerTopSlotOuterTopSlot = () => {
151
+ const slot = <div>未找到应用?</div>;
152
+ return (
153
+ <div>
154
+ innerTopSlot
155
+ <div>
156
+ <Select
157
+ innerTopSlot={slot}
158
+ style={{
159
+ width: 250,
160
+ }}
161
+ maxHeight={150}
162
+ >
163
+ <Option value="abc">抖音</Option>
164
+ <Option value="hotsoon">火山</Option>
165
+ <Option value="pipixia">皮皮虾</Option>
166
+ <Option value="duoshan">多闪</Option>
167
+ <Option value="xigua">西瓜视频</Option>
168
+ </Select>
169
+ </div>
170
+ outerTopSlot
171
+ <div>
172
+ <Select
173
+ outerTopSlot={slot}
174
+ style={{
175
+ width: 250,
176
+ }}
177
+ maxHeight={150}
178
+ >
179
+ <Option value="abc">抖音</Option>
180
+ <Option value="hotsoon">火山</Option>
181
+ <Option value="pipixia">皮皮虾</Option>
182
+ <Option value="duoshan">多闪</Option>
183
+ <Option value="xigua">西瓜视频</Option>
184
+ </Select>
185
+ </div>
186
+ </div>
187
+ );
188
+ };
189
+
190
+ InnerTopSlotOuterTopSlot.story = {
191
+ name: 'innerTopSlot / outerTopSlot',
192
+ };
193
+
194
+ export const OneOptionJsxWithOtherOptionArray = () => (
195
+ <Select
196
+ defaultValue={'all'}
197
+ style={{
198
+ width: 250,
199
+ }}
200
+ >
201
+ <Option value="all" key="all">
202
+ all
203
+ </Option>
204
+ {[1, 2, 3].map(item => (
205
+ <Option value={`type${item}`} key={item}>{`type${item}`}</Option>
206
+ ))}
207
+ </Select>
208
+ );
209
+
210
+ OneOptionJsxWithOtherOptionArray.story = {
211
+ name: 'one option jsx with other option array',
212
+ };
213
+
214
+ let options = [
215
+ {
216
+ value: 'all',
217
+ label: '全部',
218
+ otherKey: 'all semi',
219
+ },
220
+ {
221
+ value: 'abc',
222
+ label: '抖音',
223
+ otherKey: 'abc semi',
224
+ },
225
+ {
226
+ value: 'hotsoon',
227
+ label: '火山小视频',
228
+ otherKey: 'hostsoom semi',
229
+ },
230
+ {
231
+ value: 'pipixia',
232
+ label: '皮皮虾',
233
+ otherKey: 'pif',
234
+ },
235
+ {
236
+ value: 'toutiao',
237
+ label: '今日头条',
238
+ otherKey: 'toutiao semi',
239
+ },
240
+ {
241
+ value: 'rd',
242
+ label: 'rd',
243
+ otherKey: 'semi rd',
244
+ },
245
+ {
246
+ value: 'ued',
247
+ label: 'ued',
248
+ otherKey: 'semi ued',
249
+ },
250
+ {
251
+ value: 'ued',
252
+ label: 'japan',
253
+ otherKey: 'semi ued',
254
+ },
255
+ {
256
+ value: '+86',
257
+ label: '+86',
258
+ otherKey: 'semi',
259
+ },
260
+ ];
261
+ let longOptions = options.concat({
262
+ value: 'long',
263
+ label: 'Semi Design 是一个设计系统,它定义了一套中后台设计与前端基础组',
264
+ });
265
+
266
+ export const SelectSize = () => (
267
+ <div
268
+ style={{
269
+ margin: 20,
270
+ }}
271
+ >
272
+ <h4>
273
+ 使用方不设width时,下拉菜单根据内容自动适配宽度(不推荐这样使用,select的宽度会动态变化)
274
+ </h4>
275
+ <Select
276
+ defaultValue={'all'}
277
+ optionList={options}
278
+ style={{
279
+ margin: 10,
280
+ }}
281
+ ></Select>
282
+ <Select
283
+ defaultValue={'long'}
284
+ optionList={longOptions}
285
+ style={{
286
+ margin: 10,
287
+ }}
288
+ ></Select>
289
+ <Select
290
+ defaultValue={'abc'}
291
+ size="large"
292
+ optionList={options}
293
+ style={{
294
+ margin: 10,
295
+ }}
296
+ ></Select>
297
+ {/* <Select defaultValue={'+86'} size="large" optionList={options} style={{margin: 10}}>
298
+ </Select> */}
299
+ <h4>通过style设width的</h4>
300
+ 90px:{' '}
301
+ <Select
302
+ defaultValue={'all'}
303
+ style={{
304
+ width: 90,
305
+ marign: 10,
306
+ }}
307
+ optionList={options}
308
+ ></Select>
309
+ 120px:{' '}
310
+ <Select
311
+ defaultValue={'all'}
312
+ style={{
313
+ width: 120,
314
+ margin: 10,
315
+ }}
316
+ optionList={options}
317
+ ></Select>
318
+ 400px:{' '}
319
+ <Select
320
+ defaultValue={'all'}
321
+ style={{
322
+ width: 400,
323
+ margin: 10,
324
+ }}
325
+ optionList={options}
326
+ ></Select>
327
+ <br />
328
+ 100%:{' '}
329
+ <Select
330
+ defaultValue={'all'}
331
+ style={{
332
+ width: '100%',
333
+ margin: 10,
334
+ }}
335
+ optionList={options}
336
+ ></Select>
337
+ <br />
338
+ <h4>通过css设width的</h4>
339
+ <Select defaultValue={'all'} className="test-width" optionList={options}></Select>
340
+ <br />
341
+ <h4>dropdownMatchSelectWidth</h4>
342
+ <p>当该项设为true时,下拉菜单最小宽度会等于Select宽度(默认为true)</p>
343
+ <div
344
+ style={{
345
+ margin: 10,
346
+ }}
347
+ >
348
+ style方式指定90px:
349
+ <Select
350
+ defaultValue={'all'}
351
+ optionList={options}
352
+ dropdownMatchSelectWidth={true}
353
+ style={{
354
+ width: 90,
355
+ }}
356
+ />
357
+ </div>
358
+ <div
359
+ style={{
360
+ margin: 10,
361
+ }}
362
+ >
363
+ css方式声明130px:
364
+ <Select
365
+ defaultValue={'all'}
366
+ className="test-width"
367
+ optionList={options}
368
+ dropdownMatchSelectWidth={true}
369
+ ></Select>
370
+ </div>
371
+ <div>
372
+ <h4>需要强制下拉菜单与select同宽的时候</h4>
373
+ <p>通过dropdownStyle覆盖min-width,将其设成与select的width同样的值</p>
374
+ <Select
375
+ defaultValue={'all'}
376
+ style={{
377
+ width: 300,
378
+ margin: 10,
379
+ }}
380
+ dropdownStyle={{
381
+ width: 300,
382
+ }}
383
+ optionList={options}
384
+ />
385
+ </div>
386
+ </div>
387
+ );
388
+
389
+ SelectSize.story = {
390
+ name: 'select size',
391
+ };
392
+
393
+ export const WithPrefixSuffixInsetLabelShowClearShowArrow = () => (
394
+ <>
395
+ <h4>prefix & suffix</h4>
396
+ <Select
397
+ style={{
398
+ width: '250px',
399
+ }}
400
+ optionList={options}
401
+ prefix={<IconSearch />}
402
+ suffix={<IconGift></IconGift>}
403
+ ></Select>
404
+ <h4>insetLabel</h4>
405
+ <Select
406
+ style={{
407
+ width: '250px',
408
+ }}
409
+ optionList={options}
410
+ insetLabel={'业务线'}
411
+ ></Select>
412
+ <h4>showClear</h4>
413
+ <Select
414
+ style={{
415
+ width: '250px',
416
+ }}
417
+ optionList={options}
418
+ showClear
419
+ ></Select>
420
+ <h4>showArrow = false</h4>
421
+ <Select
422
+ style={{
423
+ width: '250px',
424
+ }}
425
+ optionList={options}
426
+ showArrow={false}
427
+ ></Select>
428
+
429
+ <h4>defaultValue是不存在的值</h4>
430
+ <Select
431
+ style={{
432
+ width: '250px',
433
+ }}
434
+ optionList={options}
435
+ defaultValue="+85"
436
+ ></Select>
437
+ </>
438
+ );
439
+
440
+ WithPrefixSuffixInsetLabelShowClearShowArrow.story = {
441
+ name: 'with prefix / suffix / insetLabel, showClear, showArrow',
442
+ };
443
+ WithPrefixSuffixInsetLabelShowClearShowArrow.parameters = {
444
+ chromatic: { disableSnapshot: false },
445
+ };
446
+
447
+ export const WithDefaultSelected = () => (
448
+ <Select
449
+ style={{
450
+ width: '250px',
451
+ }}
452
+ defaultValue={1}
453
+ >
454
+ <Option value={1}>opt1</Option>
455
+ <Option value={2}>opt2</Option>
456
+ <Option value={3}>opt3</Option>
457
+ <Option value="4">opt4</Option>
458
+ </Select>
459
+ );
460
+
461
+ WithDefaultSelected.story = {
462
+ name: 'with default selected',
463
+ };
464
+
465
+ export const WithScrollbar = () => (
466
+ <Select
467
+ style={{
468
+ width: '250px',
469
+ }}
470
+ defaultValue={1}
471
+ >
472
+ <Option value={1}>opt1</Option>
473
+ <Option value={2}>opt2</Option>
474
+ <Option value={3}>opt3</Option>
475
+ <Option value="4">opt4</Option>
476
+ <Option value={5}>opt5</Option>
477
+ <Option value={6}>opt6</Option>
478
+ <Option value={7}>opt7</Option>
479
+ <Option value="8">opt8</Option>
480
+ <Option value={9}>opt9</Option>
481
+ <Option value={10}>opt10dfsdfsdfdsfdsfsdf</Option>
482
+ <Option value={11}>opt11</Option>
483
+ <Option value="12">opt12jfldsjflsdjlfldjslfjhifsdfdsfdsffdsodsjlfhjl</Option>
484
+ </Select>
485
+ );
486
+
487
+ WithScrollbar.story = {
488
+ name: 'with scrollbar',
489
+ };
490
+
491
+ class Link extends React.Component {
492
+ get provinces() {
493
+ return ['Sichuan', 'Guangdong'];
494
+ }
495
+
496
+ get maps() {
497
+ return {
498
+ Sichuan: ['Chengdu', 'Dujiangyan'],
499
+ Guangdong: ['Guangzhou', 'Shenzhen', 'Dongguan'],
500
+ };
501
+ }
502
+
503
+ constructor() {
504
+ super();
505
+ this.state = {
506
+ provinces: this.provinces,
507
+ maps: this.maps,
508
+ citys: this.maps[this.provinces[0]],
509
+ city: this.maps[this.provinces[0]][0],
510
+ };
511
+ this.provinceChange = this.provinceChange.bind(this);
512
+ this.cityChange = this.cityChange.bind(this);
513
+ }
514
+
515
+ provinceChange(newProvince) {
516
+ const { maps } = this.state;
517
+ this.setState({
518
+ citys: maps[newProvince],
519
+ city: maps[newProvince][0],
520
+ });
521
+ }
522
+
523
+ cityChange(city) {
524
+ this.setState({
525
+ city,
526
+ });
527
+ }
528
+
529
+ render() {
530
+ const { provinces, citys, city } = this.state;
531
+ return (
532
+ <React.Fragment>
533
+ <Select
534
+ style={{
535
+ width: '150px',
536
+ margin: '10px',
537
+ }}
538
+ onChange={this.provinceChange}
539
+ defaultValue={provinces[0]}
540
+ >
541
+ {provinces.map(pro => (
542
+ <Option value={pro} key={pro}>
543
+ {pro}
544
+ </Option>
545
+ ))}
546
+ </Select>
547
+ <Select
548
+ style={{
549
+ width: '150px',
550
+ margin: '10px',
551
+ }}
552
+ value={city}
553
+ onChange={this.cityChange}
554
+ >
555
+ {citys.map(c => (
556
+ <Option value={c} key={c}>
557
+ {c}
558
+ </Option>
559
+ ))}
560
+ </Select>
561
+ </React.Fragment>
562
+ );
563
+ }
564
+ }
565
+
566
+ export const TwoSelectChangeAtTheSameTime = () => <Link />;
567
+
568
+ TwoSelectChangeAtTheSameTime.story = {
569
+ name: 'two select change at the same time',
570
+ };
571
+
572
+ export const SelectMultiple = () => (
573
+ <>
574
+ <Select
575
+ multiple={true}
576
+ max={10}
577
+ style={{
578
+ width: '180px',
579
+ }}
580
+ placeholder="fefe"
581
+ >
582
+ <Option value={1}>opt1</Option>
583
+ <Option value={2}>opt2</Option>
584
+ <Option value={3}>opt3</Option>
585
+ <Option value="4">opt4</Option>
586
+ <Option value={5}>opt5</Option>
587
+ <Option value={6}>opt6</Option>
588
+ <Option value={7}>opt7</Option>
589
+ <Option value={8}>opt8</Option>
590
+ </Select>
591
+ <br />
592
+ <br />
593
+ <Select
594
+ multiple={true}
595
+ style={{
596
+ width: '300px',
597
+ }}
598
+ defaultValue={[1, 2, 3]}
599
+ placeholder="fefe"
600
+ >
601
+ <Option value={1}>opt1</Option>
602
+ <Option value={2}>opt2</Option>
603
+ <Option value={3}>opt3</Option>
604
+ <Option value="4">opt4</Option>
605
+ <Option value={5}>opt5</Option>
606
+ <Option value={6}>opt6</Option>
607
+ <Option value={7}>opt7</Option>
608
+ <Option value={8}>opt8</Option>
609
+ </Select>
610
+ <br />
611
+ <br />
612
+ <Select
613
+ multiple={true}
614
+ style={{
615
+ width: '300px',
616
+ }}
617
+ defaultValue={[1, 2, 3]}
618
+ placeholder="fefe"
619
+ disabled
620
+ onSelect={(...res) => console.log(res)}
621
+ onDeselect={(...res) => console.log(res)}
622
+ >
623
+ <Option value={1}>opt1</Option>
624
+ <Option value={2}>opt2</Option>
625
+ <Option value={3}>opt3</Option>
626
+ <Option value="4">opt4</Option>
627
+ <Option value={5}>opt5</Option>
628
+ <Option value={6}>opt6</Option>
629
+ <Option value={7}>opt7</Option>
630
+ <Option value={8}>opt8</Option>
631
+ </Select>
632
+ <br />
633
+ <br />
634
+ maxTagCount = 3
635
+ <Select
636
+ multiple={true}
637
+ maxTagCount={3}
638
+ style={{
639
+ width: '350px',
640
+ }}
641
+ defaultValue={[1, 2, 3]}
642
+ placeholder="fefe"
643
+ insetLabel="标签"
644
+ onSelect={(...res) => console.log(res)}
645
+ onDeselect={(...res) => console.log(res)}
646
+ >
647
+ <Option value={1}>opt1</Option>
648
+ <Option value={2}>opt2</Option>
649
+ <Option value={3}>opt3</Option>
650
+ <Option value="4">opt4</Option>
651
+ <Option value={5}>opt5</Option>
652
+ <Option value={6}>opt6</Option>
653
+ <Option value={7}>opt7</Option>
654
+ <Option value={8}>opt8</Option>
655
+ </Select>
656
+ <br />
657
+ <br />
658
+ maxTagCount = 3, max=5
659
+ <Select
660
+ multiple={true}
661
+ maxTagCount={3}
662
+ max={5}
663
+ style={{
664
+ width: '350px',
665
+ }}
666
+ defaultValue={[1, 2, 3]}
667
+ placeholder="fefe"
668
+ insetLabel="标签"
669
+ onSelect={(...res) => console.log(res)}
670
+ onDeselect={(...res) => console.log(res)}
671
+ >
672
+ <Option value={1}>opt1</Option>
673
+ <Option value={2}>opt2</Option>
674
+ <Option value={3}>opt3</Option>
675
+ <Option value="4">opt4</Option>
676
+ <Option value={5}>opt5</Option>
677
+ <Option value={6}>opt6</Option>
678
+ <Option value={7}>opt7</Option>
679
+ <Option value={8}>opt8</Option>
680
+ </Select>
681
+ </>
682
+ );
683
+
684
+ SelectMultiple.story = {
685
+ name: 'select multiple',
686
+ };
687
+ SelectMultiple.parameters = {
688
+ chromatic: { disableSnapshot: false },
689
+ };
690
+
691
+ export const SelectDisabled = () => (
692
+ <Select
693
+ disabled
694
+ multiple={true}
695
+ max={10}
696
+ style={{
697
+ width: '250px',
698
+ }}
699
+ >
700
+ <Option value={1}>opt1</Option>
701
+ <Option value={2} disabled>
702
+ opt2
703
+ </Option>
704
+ <Option value={3}>opt3</Option>
705
+ <Option value="4">opt4</Option>
706
+ </Select>
707
+ );
708
+
709
+ SelectDisabled.story = {
710
+ name: 'select disabled',
711
+ };
712
+
713
+ function filter(input, option) {
714
+ console.log(option);
715
+ return option.label.includes(input);
716
+ }
717
+
718
+ const spanStyle = {
719
+ display: 'inline-block',
720
+ marginRight: '8px',
721
+ width: '16px',
722
+ height: '16px',
723
+ borderRadius: '50%',
724
+ border: '1px solid var(--semi-color-bg-1)',
725
+ };
726
+ const colorOptions = [
727
+ {
728
+ value: 'grey-1',
729
+ spanStyle: { ...spanStyle, backgroundColor: 'rgb(107, 116, 117)' },
730
+ },
731
+ {
732
+ value: 'purple-5',
733
+ spanStyle: { ...spanStyle, backgroundColor: 'rgb(158, 40, 179)' },
734
+ },
735
+ {
736
+ value: 'pink-2',
737
+ spanStyle: { ...spanStyle, backgroundColor: 'rgb(233, 30, 99)' },
738
+ },
739
+ {
740
+ value: 'blue-3',
741
+ spanStyle: { ...spanStyle, backgroundColor: 'rgb(0, 119, 250)' },
742
+ },
743
+ ];
744
+ const alignStyle = {
745
+ display: 'flex',
746
+ alignItems: 'center',
747
+ };
748
+
749
+ const customFilter = (input, option) => {
750
+ return option.value.includes(input);
751
+ };
752
+
753
+ export const SelectFilterSingle = () => (
754
+ <div>
755
+ <h5>默认筛选</h5>
756
+ <Select
757
+ filter
758
+ style={{
759
+ width: '250px',
760
+ margin: 10,
761
+ }}
762
+ autoFocus
763
+ onFocus={() => console.log('onFocus')}
764
+ onBlur={() => console.log('onBlur')}
765
+ >
766
+ <Option value={1}>opt1</Option>
767
+ <Option value={2} disabled>
768
+ disabled
769
+ </Option>
770
+ <Option value={3}>Lucy</Option>
771
+ <Option value="4">bay</Option>
772
+ <Option value="5">sert</Option>
773
+ <Option value="6">wym</Option>
774
+ <Option value="7" disabled>
775
+ meno
776
+ </Option>
777
+ <Option value="8">opts</Option>
778
+ </Select>
779
+ <h5>自定义筛选函数</h5>
780
+ <Select
781
+ style={{
782
+ width: '250px',
783
+ margin: 10,
784
+ }}
785
+ filter={filter}
786
+ onBlur={() => console.log('onBlur')}
787
+ onFocus={() => console.log('onFocus')}
788
+ >
789
+ <Option value={1}>opt1(value:1)</Option>
790
+ <Option value={2}>mike(value:2)</Option>
791
+ <Option value={3}>Lucy(value:3)</Option>
792
+ <Option value={4}>bay(value:4)</Option>
793
+ </Select>
794
+ <h5>filter为true,但option label为node时</h5>
795
+ <Select
796
+ style={{
797
+ width: '250px',
798
+ margin: 10,
799
+ }}
800
+ filter={customFilter}
801
+ onChange={v => console.log(v)}
802
+ insetLabel="insetLabel"
803
+ onFocus={() => console.log('onFocus')}
804
+ onBlur={() => console.log('onBlur')}
805
+ >
806
+ {colorOptions.map(option => (
807
+ <Option value={option.value} key={option.value}>
808
+ <div style={alignStyle}>
809
+ <span style={option.spanStyle}></span>
810
+ {option.value}
811
+ </div>
812
+ </Option>
813
+ ))}
814
+ </Select>
815
+ </div>
816
+ );
817
+
818
+ SelectFilterSingle.story = {
819
+ name: 'select filter single',
820
+ };
821
+
822
+ export const SelectFilterMultiple = () => (
823
+ <>
824
+ <Select
825
+ filter
826
+ multiple={true}
827
+ style={{
828
+ width: '250px',
829
+ }}
830
+ placeholder="fefe"
831
+ >
832
+ <Option value={1}>opt1</Option>
833
+ <Option value={2}>opt2</Option>
834
+ <Option value={3}>opt22</Option>
835
+ <Option value={3}>opt3</Option>
836
+ <Option value={4}>opt4</Option>
837
+ <Option value={5}>opt5</Option>
838
+ <Option value={6}>opt6</Option>
839
+ <Option value={7}>opt7</Option>
840
+ <Option value={8}>opt8</Option>
841
+ </Select>
842
+ <Select
843
+ filter
844
+ multiple={true}
845
+ maxTagCount={3}
846
+ style={{
847
+ width: '270px',
848
+ }}
849
+ placeholder="fefe"
850
+ >
851
+ <Option value={1}>opt1</Option>
852
+ <Option value={2}>opt2</Option>
853
+ <Option value={3}>opt22</Option>
854
+ <Option value={3}>opt3</Option>
855
+ <Option value={4}>opt4</Option>
856
+ <Option value={5}>opt5</Option>
857
+ <Option value={6}>opt6</Option>
858
+ <Option value={7}>opt7</Option>
859
+ <Option value={8}>opt8</Option>
860
+ </Select>
861
+ </>
862
+ );
863
+
864
+ SelectFilterMultiple.story = {
865
+ name: 'select filter multiple',
866
+ };
867
+
868
+ const OptionLabelProp = () => {
869
+ const [value, setValue] = useState(1);
870
+ return (
871
+ <>
872
+ 设置optionLabelProp属性(默认为'children')为'value'时,回填到选择框中的文本会是Option.value
873
+ <br></br>
874
+ <Select
875
+ style={{
876
+ width: '250px',
877
+ }}
878
+ defaultValue={1}
879
+ optionLabelProp="value"
880
+ >
881
+ <Option value={1}>opt1</Option>
882
+ <Option value={2}>opt2</Option>
883
+ <Option value={3}>
884
+ <span
885
+ style={{
886
+ color: 'pink',
887
+ }}
888
+ >
889
+ opt3 Node
890
+ </span>
891
+ </Option>
892
+ <Option value="4">
893
+ <span
894
+ style={{
895
+ color: 'red',
896
+ }}
897
+ >
898
+ testNode
899
+ </span>
900
+ </Option>
901
+ </Select>
902
+ <br />
903
+ <br />
904
+ <Select
905
+ style={{
906
+ width: '250px',
907
+ }}
908
+ value={value}
909
+ optionLabelProp="value"
910
+ onChange={setValue}
911
+ >
912
+ <Option value={1}>opt1</Option>
913
+ <Option value={2}>opt2</Option>
914
+ <Option value={3}>
915
+ <span
916
+ style={{
917
+ color: 'pink',
918
+ }}
919
+ >
920
+ opt3 Node
921
+ </span>
922
+ </Option>
923
+ <Option value="4">
924
+ <span
925
+ style={{
926
+ color: 'red',
927
+ }}
928
+ >
929
+ testNode
930
+ </span>
931
+ </Option>
932
+ </Select>
933
+ <br />
934
+ <br />
935
+ <Select
936
+ style={{
937
+ width: '250px',
938
+ }}
939
+ defaultValue={1}
940
+ >
941
+ <Option value={1}>children Label Text 1</Option>
942
+ <Option value={2}>opt2</Option>
943
+ <Option value={3}>opt3</Option>
944
+ <Option value="4">
945
+ <span
946
+ style={{
947
+ color: 'red',
948
+ }}
949
+ >
950
+ testNode
951
+ </span>
952
+ </Option>
953
+ </Select>
954
+ <Select
955
+ style={{
956
+ width: '250px',
957
+ }}
958
+ defaultValue={1}
959
+ filter
960
+ optionLabelProp="value"
961
+ >
962
+ <Option value={1}>children Label Text 1</Option>
963
+ <Option value={2}>opt2</Option>
964
+ <Option value={3}>opt3</Option>
965
+ <Option value="4">
966
+ <span
967
+ style={{
968
+ color: 'red',
969
+ }}
970
+ >
971
+ testNode
972
+ </span>
973
+ </Option>
974
+ </Select>
975
+ <br />
976
+ <br />
977
+ 多选
978
+ <Select
979
+ style={{
980
+ width: '250px',
981
+ }}
982
+ multiple
983
+ filter
984
+ optionLabelProp="value"
985
+ >
986
+ <Option value={1}>children Label Text 1</Option>
987
+ <Option value={2}>opt2</Option>
988
+ <Option value={3}>opt3</Option>
989
+ <Option value="4">
990
+ <span
991
+ style={{
992
+ color: 'red',
993
+ }}
994
+ >
995
+ testNode
996
+ </span>
997
+ </Option>
998
+ </Select>
999
+ </>
1000
+ );
1001
+ };
1002
+
1003
+ class CustomRender extends React.Component {
1004
+ constructor() {
1005
+ super();
1006
+ this.state = {
1007
+ list: [
1008
+ {
1009
+ name: '夏可漫',
1010
+ email: 'xiakeman@example.com',
1011
+ abbr: 'XK',
1012
+ color: 'amber',
1013
+ },
1014
+ {
1015
+ name: '申悦',
1016
+ email: 'shenyue@example.com',
1017
+ abbr: 'SY',
1018
+ color: 'indigo',
1019
+ },
1020
+ {
1021
+ name: '曲晨一',
1022
+ email: 'quchenyi@example.com',
1023
+ abbr: 'CY',
1024
+ color: 'blue',
1025
+ },
1026
+ {
1027
+ name: '文嘉茂',
1028
+ email: 'wenjiamao@example.com',
1029
+ abbr: 'JM',
1030
+ color: 'cyan',
1031
+ },
1032
+ ],
1033
+ };
1034
+ }
1035
+
1036
+ renderCustomOption(item) {
1037
+ let optionStyle = {
1038
+ display: 'flex',
1039
+ };
1040
+ return (
1041
+ <Option value={item.name} style={optionStyle} showTick={false} {...item}>
1042
+ <Avatar color={item.color} size="small">
1043
+ {item.abbr}
1044
+ </Avatar>
1045
+ <div
1046
+ style={{
1047
+ marginLeft: 4,
1048
+ }}
1049
+ >
1050
+ <p
1051
+ style={{
1052
+ fontSize: 14,
1053
+ margin: 4,
1054
+ }}
1055
+ >
1056
+ {item.name}
1057
+ </p>
1058
+ <p
1059
+ style={{
1060
+ margin: 4,
1061
+ }}
1062
+ >
1063
+ {item.email}
1064
+ </p>
1065
+ </div>
1066
+ </Option>
1067
+ );
1068
+ }
1069
+
1070
+ renderSelectedItem(optionNode) {
1071
+ return (
1072
+ <div>
1073
+ <Avatar color={optionNode.color} size="small">
1074
+ {optionNode.abbr}
1075
+ </Avatar>
1076
+ <span
1077
+ style={{
1078
+ margin: 8,
1079
+ }}
1080
+ >
1081
+ {optionNode.email}
1082
+ </span>
1083
+ </div>
1084
+ );
1085
+ }
1086
+
1087
+ renderMultipleSelectedItem(optionNode) {
1088
+ let content = (
1089
+ <div>
1090
+ <Avatar color={optionNode.color} size="small">
1091
+ {optionNode.abbr}
1092
+ </Avatar>
1093
+ </div>
1094
+ );
1095
+ return {
1096
+ isRenderInTag: true,
1097
+ content,
1098
+ };
1099
+ }
1100
+
1101
+ renderMultipleWithoutTag(optionNode, { onClose, index }) {
1102
+ let content = (
1103
+ <div>
1104
+ <Avatar color={optionNode.color} size="small">
1105
+ {optionNode.abbr}
1106
+ </Avatar>
1107
+ </div>
1108
+ );
1109
+ return {
1110
+ isRenderInTag: false,
1111
+ content,
1112
+ };
1113
+ }
1114
+
1115
+ render() {
1116
+ const { list } = this.state;
1117
+ return (
1118
+ <React.Fragment>
1119
+ <Select
1120
+ style={{
1121
+ width: 300,
1122
+ height: 40,
1123
+ }}
1124
+ onChange={this.provinceChange}
1125
+ defaultValue={'夏可漫'}
1126
+ renderSelectedItem={this.renderSelectedItem}
1127
+ >
1128
+ {list.map(item => this.renderCustomOption(item))}
1129
+ </Select>
1130
+ <Select
1131
+ style={{
1132
+ width: 360,
1133
+ height: 60,
1134
+ marginTop: 20,
1135
+ }}
1136
+ onChange={this.provinceChange}
1137
+ defaultValue={['夏可漫', '申悦']}
1138
+ multiple
1139
+ renderSelectedItem={this.renderMultipleSelectedItem}
1140
+ >
1141
+ {list.map(item => this.renderCustomOption(item))}
1142
+ </Select>
1143
+ <Select
1144
+ style={{
1145
+ width: 360,
1146
+ height: 60,
1147
+ marginTop: 20,
1148
+ }}
1149
+ onChange={this.provinceChange}
1150
+ defaultValue={['夏可漫', '申悦']}
1151
+ multiple
1152
+ renderSelectedItem={this.renderMultipleWithoutTag}
1153
+ >
1154
+ {list.map(item => this.renderCustomOption(item))}
1155
+ </Select>
1156
+ </React.Fragment>
1157
+ );
1158
+ }
1159
+ }
1160
+
1161
+ export const RenderSelectedItem = () => (
1162
+ <>
1163
+ renderSelectedItem
1164
+ <CustomRender />
1165
+ <br />
1166
+ <br />
1167
+ OptionLabelProp
1168
+ <OptionLabelProp />
1169
+ </>
1170
+ );
1171
+
1172
+ RenderSelectedItem.story = {
1173
+ name: 'renderSelectedItem',
1174
+ };
1175
+
1176
+ RenderSelectedItem.parameters = {
1177
+ chromatic: { disableSnapshot: false },
1178
+ };
1179
+
1180
+ const ControledSelect = () => {
1181
+ const [value, setValue] = useState('nick');
1182
+ const [value2, setValue2] = useState('jerry');
1183
+ const [value3, setValue3] = useState();
1184
+ const [value4, setValue4] = useState(['nick']);
1185
+ const [value5, setValue5] = useState();
1186
+ return (
1187
+ <>
1188
+ <span>value + onChange</span>
1189
+ <Select
1190
+ value={value}
1191
+ onChange={setValue}
1192
+ style={{
1193
+ width: 200,
1194
+ }}
1195
+ >
1196
+ <Option value="nick">nick</Option>
1197
+ <Option value="jerry">jerry</Option>
1198
+ <Option value="mark">mark</Option>
1199
+ </Select>
1200
+
1201
+ <br />
1202
+ <br />
1203
+ <span>只传value,不传onChange</span>
1204
+ <Select
1205
+ value={value2}
1206
+ style={{
1207
+ width: 200,
1208
+ }}
1209
+ >
1210
+ <Option value="nick">nick</Option>
1211
+ <Option value="jerry">jerry</Option>
1212
+ <Option value="mark">mark</Option>
1213
+ </Select>
1214
+ <br />
1215
+ <br />
1216
+
1217
+ <span>value + onChange , 多选</span>
1218
+ <Select
1219
+ value={value3}
1220
+ onChange={setValue3}
1221
+ multiple
1222
+ style={{
1223
+ width: 200,
1224
+ }}
1225
+ >
1226
+ <Option value="nick">nick</Option>
1227
+ <Option value="jerry">jerry</Option>
1228
+ <Option value="mark">mark</Option>
1229
+ <Option value="nick2">nick2</Option>
1230
+ <Option value="jerry2">jerry2</Option>
1231
+ <Option value="mark2">mark2</Option>
1232
+ </Select>
1233
+ <br />
1234
+ <br />
1235
+
1236
+ <span>value, 多选</span>
1237
+ <Select
1238
+ value={value4}
1239
+ multiple
1240
+ style={{
1241
+ width: 200,
1242
+ }}
1243
+ >
1244
+ <Option value="nick">nick</Option>
1245
+ <Option value="jerry">jerry</Option>
1246
+ <Option value="mark">mark</Option>
1247
+ </Select>
1248
+
1249
+ <br />
1250
+ <h5>filter为true,但option label为node时</h5>
1251
+ <Select
1252
+ style={{
1253
+ width: '250px',
1254
+ }}
1255
+ filter={customFilter}
1256
+ onChange={v => console.log(v)}
1257
+ insetLabel="insetLabel"
1258
+ value={value5}
1259
+ onChange={setValue5}
1260
+ >
1261
+ {colorOptions.map(option => (
1262
+ <Option value={option.value} key={option.value}>
1263
+ <div style={alignStyle}>
1264
+ <span style={option.spanStyle}></span>
1265
+ {option.value}
1266
+ </div>
1267
+ </Option>
1268
+ ))}
1269
+ </Select>
1270
+ </>
1271
+ );
1272
+ };
1273
+
1274
+ export const Controlled = () => <ControledSelect></ControledSelect>;
1275
+
1276
+ Controlled.story = {
1277
+ name: 'controlled',
1278
+ };
1279
+
1280
+ const UnControledSelect = () => {
1281
+ const onChange = value => {
1282
+ console.log(value);
1283
+ };
1284
+
1285
+ return (
1286
+ <>
1287
+ <h5>defaultValue在list中不存在</h5>
1288
+ <Select
1289
+ defaultValue={90}
1290
+ onChange={onChange}
1291
+ style={{
1292
+ width: 200,
1293
+ }}
1294
+ >
1295
+ <Option value={20}>nick</Option>
1296
+ <Option value={10}>jerry</Option>
1297
+ <Option value={5}>mark</Option>
1298
+ </Select>
1299
+ <h5>defaultValue在list中存在</h5>
1300
+ <Select
1301
+ defaultValue={10}
1302
+ onChange={onChange}
1303
+ style={{
1304
+ width: 200,
1305
+ }}
1306
+ >
1307
+ <Option value={20}>nick</Option>
1308
+ <Option value={10}>jerry</Option>
1309
+ <Option value={5}>mark</Option>
1310
+ </Select>
1311
+ </>
1312
+ );
1313
+ };
1314
+
1315
+ export { UnControledSelect };
1316
+ UnControledSelect.story = {
1317
+ name: '非受控组件'
1318
+ };
1319
+
1320
+ export const TestScroll = () => (
1321
+ <div
1322
+ style={{
1323
+ marginTop: '600px',
1324
+ marginBottom: '50px',
1325
+ }}
1326
+ >
1327
+ <Select
1328
+ style={{
1329
+ width: '150px',
1330
+ }}
1331
+ >
1332
+ <Option value="tony">IronMan</Option>
1333
+ <Option value="Thor" disabled>
1334
+ Thor
1335
+ </Option>
1336
+ <Option value="steve">Caption</Option>
1337
+ <Option value="peter">SpiderBoy</Option>
1338
+ </Select>
1339
+ </div>
1340
+ );
1341
+
1342
+ TestScroll.story = {
1343
+ name: 'test scroll',
1344
+ };
1345
+
1346
+ let optionList = [
1347
+ {
1348
+ value: 'tony',
1349
+ label: 'Ironman',
1350
+ },
1351
+ {
1352
+ value: 'Thor',
1353
+ label: 'Thor',
1354
+ },
1355
+ {
1356
+ value: 'steve',
1357
+ label: 'Caption',
1358
+ },
1359
+ {
1360
+ value: 'peter',
1361
+ label: 'SpiderBoy',
1362
+ },
1363
+ ];
1364
+
1365
+ export const OptionList = () => (
1366
+ <Select
1367
+ style={{
1368
+ width: '100px',
1369
+ }}
1370
+ optionList={optionList}
1371
+ ></Select>
1372
+ );
1373
+
1374
+ OptionList.story = {
1375
+ name: 'optionList',
1376
+ };
1377
+
1378
+ export const InsetLabel = () => (
1379
+ <>
1380
+ <Select
1381
+ style={{
1382
+ width: 300,
1383
+ }}
1384
+ insetLabel="主播类型"
1385
+ placeholder="请选择"
1386
+ optionList={optionList}
1387
+ ></Select>
1388
+ <Select
1389
+ style={{
1390
+ width: 300,
1391
+ }}
1392
+ multiple
1393
+ insetLabel="主播类型"
1394
+ optionList={optionList}
1395
+ ></Select>
1396
+ <Select
1397
+ style={{
1398
+ width: 300,
1399
+ }}
1400
+ filter
1401
+ insetLabel="主播类型"
1402
+ optionList={optionList}
1403
+ ></Select>
1404
+ <Select
1405
+ style={{
1406
+ width: 300,
1407
+ }}
1408
+ filter
1409
+ multiple
1410
+ insetLabel="主播类型"
1411
+ optionList={optionList}
1412
+ ></Select>
1413
+ </>
1414
+ );
1415
+
1416
+ InsetLabel.story = {
1417
+ name: 'insetLabel',
1418
+ };
1419
+
1420
+ export const ChangeOptionDynamic = () => {
1421
+ function App() {
1422
+ let [options, setOptions] = useState([]);
1423
+ let [index, setIndex] = useState(0);
1424
+
1425
+ const addOption = () => {
1426
+ const randomItem = optionList[index];
1427
+ index = index + 1;
1428
+ setIndex(index);
1429
+ options = [...options, { ...randomItem }];
1430
+ setOptions(options);
1431
+ };
1432
+
1433
+ const reset = () => {
1434
+ setOptions([]);
1435
+ setIndex(0);
1436
+ };
1437
+
1438
+ return (
1439
+ <div>
1440
+ <Select
1441
+ style={{
1442
+ width: '150px',
1443
+ }}
1444
+ defaultValue="tony"
1445
+ >
1446
+ {options.map((option, idx) => (
1447
+ <Select.Option key={option.key || idx} value={option.value}>
1448
+ {option.label}
1449
+ </Select.Option>
1450
+ ))}
1451
+ </Select>
1452
+ <h4>多选</h4>
1453
+ <Select
1454
+ style={{
1455
+ width: '150px',
1456
+ }}
1457
+ multiple
1458
+ defaultValue={['tony']}
1459
+ >
1460
+ {options.map((option, idx) => (
1461
+ <Select.Option key={option.key || idx} value={option.value}>
1462
+ {option.label}
1463
+ </Select.Option>
1464
+ ))}
1465
+ </Select>
1466
+ <button onClick={addOption}>add option</button>
1467
+ <button onClick={reset}>reset</button>
1468
+ </div>
1469
+ );
1470
+ }
1471
+
1472
+ return <App />;
1473
+ };
1474
+
1475
+ ChangeOptionDynamic.story = {
1476
+ name: 'change option dynamic',
1477
+ };
1478
+
1479
+ let list = [
1480
+ {
1481
+ value: 'tony',
1482
+ label: 'Ironman',
1483
+ otherKey: {
1484
+ role: 1,
1485
+ },
1486
+ },
1487
+ {
1488
+ value: 'Thor',
1489
+ label: 'Thor',
1490
+ otherKey: {
1491
+ role: 2,
1492
+ },
1493
+ },
1494
+ {
1495
+ value: 'steve',
1496
+ label: 'Caption',
1497
+ otherKey: {
1498
+ role: 3,
1499
+ },
1500
+ },
1501
+ {
1502
+ value: 'peter',
1503
+ label: 'SpiderBoy',
1504
+ otherKey: {
1505
+ role: 4,
1506
+ },
1507
+ },
1508
+ ];
1509
+
1510
+ const SearchDemo1 = () => {
1511
+ const [optionList, setOptionList] = useState(list);
1512
+ const [loading, setLoading] = useState(false);
1513
+
1514
+ const handleSearch = value => {
1515
+ setLoading(true);
1516
+ let length = Math.ceil(Math.random() * 10);
1517
+ let result = Array.from(
1518
+ {
1519
+ length,
1520
+ },
1521
+ (v, i) => {
1522
+ return {
1523
+ value: value + i,
1524
+ label: value + i,
1525
+ otherKey: {
1526
+ role: i,
1527
+ },
1528
+ };
1529
+ }
1530
+ );
1531
+ setTimeout(() => {
1532
+ setOptionList(result);
1533
+ setLoading(false);
1534
+ }, 1000);
1535
+ };
1536
+
1537
+ const [value, setValue] = useState(optionList[0].value);
1538
+
1539
+ const onChange = value => {
1540
+ console.log(value);
1541
+ setValue(value);
1542
+ };
1543
+
1544
+ return (
1545
+ <div>
1546
+ 受控:
1547
+ <Select
1548
+ filter
1549
+ style={{
1550
+ width: '150px',
1551
+ }}
1552
+ onSearch={v => handleSearch(v)}
1553
+ optionList={optionList}
1554
+ value={value}
1555
+ loading={loading}
1556
+ onChange={onChange}
1557
+ ></Select>
1558
+ 非受控:
1559
+ <Select
1560
+ style={{
1561
+ width: '150px',
1562
+ }}
1563
+ filter
1564
+ onSearch={v => handleSearch(v)}
1565
+ optionList={optionList}
1566
+ loading={loading}
1567
+ onChange={onChange}
1568
+ ></Select>
1569
+ 多选非受控
1570
+ <Select
1571
+ style={{
1572
+ width: '150px',
1573
+ }}
1574
+ filter
1575
+ multiple
1576
+ onSearch={v => handleSearch(v)}
1577
+ optionList={optionList}
1578
+ loading={loading}
1579
+ onChange={onChange}
1580
+ ></Select>
1581
+ </div>
1582
+ );
1583
+ };
1584
+
1585
+ import debounce from 'lodash/debounce';
1586
+
1587
+ class SearchDemo2 extends React.Component {
1588
+ constructor() {
1589
+ super();
1590
+ this.state = {
1591
+ loading: false,
1592
+ optionList: [
1593
+ {
1594
+ value: 'abc',
1595
+ label: '抖音',
1596
+ type: 1,
1597
+ },
1598
+ {
1599
+ value: 'hotsoon',
1600
+ label: '火山小视频',
1601
+ type: 2,
1602
+ },
1603
+ {
1604
+ value: 'pipixia',
1605
+ label: '皮皮虾',
1606
+ type: 3,
1607
+ },
1608
+ {
1609
+ value: 'toutiao',
1610
+ label: '今日头条',
1611
+ type: 4,
1612
+ },
1613
+ ],
1614
+ value: [],
1615
+ };
1616
+ this.handleSearch = debounce(this.handleSearch, 800).bind(this);
1617
+ this.onChange = this.onChange.bind(this);
1618
+ this.customRender = this.customRender.bind(this);
1619
+ }
1620
+
1621
+ handleSearch(inputValue) {
1622
+ this.setState({
1623
+ loading: true,
1624
+ });
1625
+ let length = Math.ceil(Math.random() * 100);
1626
+ let result = Array.from(
1627
+ {
1628
+ length,
1629
+ },
1630
+ (v, i) => {
1631
+ return {
1632
+ value: inputValue + i,
1633
+ label: 'label' + i,
1634
+ type: i + 1,
1635
+ };
1636
+ }
1637
+ );
1638
+ setTimeout(() => {
1639
+ this.setState({
1640
+ optionList: result,
1641
+ loading: false,
1642
+ });
1643
+ }, 2000);
1644
+ }
1645
+
1646
+ onChange(value) {
1647
+ this.setState({
1648
+ value,
1649
+ });
1650
+ console.log(value);
1651
+ }
1652
+
1653
+ customRender(optionNode) {
1654
+ return optionNode.value + optionNode.label;
1655
+ }
1656
+
1657
+ render() {
1658
+ const { loading, optionList, value } = this.state;
1659
+ return (
1660
+ <div>
1661
+ <Select
1662
+ style={{
1663
+ width: 150,
1664
+ }}
1665
+ filter
1666
+ labelInValue
1667
+ onSearch={this.handleSearch}
1668
+ optionList={optionList}
1669
+ loading={loading}
1670
+ onChange={this.onChange}
1671
+ placeholder="请选择"
1672
+ ></Select>
1673
+ <br />
1674
+ <br />
1675
+ <Select
1676
+ style={{
1677
+ width: 180,
1678
+ }}
1679
+ filter // labelInValue
1680
+ multiple
1681
+ value={value}
1682
+ renderSelectedItem={this.customRender}
1683
+ onSearch={this.handleSearch}
1684
+ optionList={optionList}
1685
+ loading={loading}
1686
+ onChange={this.onChange}
1687
+ placeholder="请选择"
1688
+ ></Select>
1689
+ </div>
1690
+ );
1691
+ }
1692
+ }
1693
+
1694
+ export const Search = () => (
1695
+ <>
1696
+ <SearchDemo1 />
1697
+ <SearchDemo2 />
1698
+ </>
1699
+ );
1700
+
1701
+ Search.story = {
1702
+ name: 'search',
1703
+ };
1704
+
1705
+ export const IncomeDetail = ({ config = {}, params = {} }) => {
1706
+ const [detailList, setDetailList] = useState([]);
1707
+ const [hasMore, setHasMore] = useState(true);
1708
+ const [loading, setLoading] = useState();
1709
+ let lock;
1710
+
1711
+ const fetchData = (outParams = {}) => {
1712
+ if (lock) {
1713
+ return;
1714
+ }
1715
+
1716
+ setLoading(true); // 参数
1717
+ // 请求
1718
+
1719
+ fetch({
1720
+ url: URL.user_profit,
1721
+ method: 'get',
1722
+ baseURL: config.webcast_host,
1723
+ params,
1724
+ })
1725
+ .then(res => {
1726
+ lock = false;
1727
+ setLoading(false);
1728
+ console.log('++++', data);
1729
+ })
1730
+ .catch(() => {
1731
+ setLoading(false);
1732
+ Toast.show('网络异常,请稍后重试');
1733
+ });
1734
+ };
1735
+
1736
+ useEffect(fetchData, []); // 监听滚动设置吸顶 以及加载更多
1737
+
1738
+ useEffect(() => {
1739
+ window.addEventListener('scroll', function() {
1740
+ // 加载更多
1741
+ const scrollY = window.scrollY;
1742
+ const scrollHeight = document.documentElement.scrollHeight;
1743
+ const screenHeight = screen.height;
1744
+
1745
+ if (!loading && hasMore && scrollY + screenHeight + 300 > scrollHeight) {
1746
+ fetchData();
1747
+ }
1748
+ });
1749
+ }, [detailList.length]);
1750
+ return (
1751
+ <div>
1752
+ <Select></Select>
1753
+ </div>
1754
+ );
1755
+ };
1756
+
1757
+ export const AllowCreate = () => (
1758
+ <Select
1759
+ style={{
1760
+ width: 500,
1761
+ }}
1762
+ optionList={optionList}
1763
+ allowCreate={true}
1764
+ multiple={true}
1765
+ filter={true}
1766
+ onChange={v => console.log(v)}
1767
+ ></Select>
1768
+ );
1769
+
1770
+ AllowCreate.story = {
1771
+ name: 'allowCreate',
1772
+ };
1773
+
1774
+ export const AllowCreateCustomRender = () => (
1775
+ <Select
1776
+ style={{
1777
+ width: 500,
1778
+ }}
1779
+ optionList={optionList}
1780
+ allowCreate={true}
1781
+ multiple={true}
1782
+ filter={true}
1783
+ onChange={v => console.log(v)}
1784
+ renderCreateItem={v => `semi: ${v}`}
1785
+ ></Select>
1786
+ );
1787
+
1788
+ AllowCreateCustomRender.story = {
1789
+ name: 'allowCreate custom render',
1790
+ };
1791
+
1792
+ let AllowCreateControledDemo = () => {
1793
+ let [value, setValue] = useState();
1794
+ const optionList = [
1795
+ {
1796
+ value: 'abc',
1797
+ label: '抖音',
1798
+ },
1799
+ {
1800
+ value: 'hotsoon',
1801
+ label: '火山小视频',
1802
+ },
1803
+ {
1804
+ value: 'pipixia',
1805
+ label: '皮皮虾',
1806
+ },
1807
+ {
1808
+ value: 'toutiao',
1809
+ label: '今日头条',
1810
+ },
1811
+ ];
1812
+ const [list, setList] = useState(optionList);
1813
+
1814
+ const handleSelect = v => {
1815
+ var lastOne = v[v.length - 1];
1816
+
1817
+ if (lastOne && list.findIndex(item => item.value === lastOne) == -1) {
1818
+ list.push({
1819
+ value: lastOne,
1820
+ label: lastOne,
1821
+ });
1822
+ }
1823
+
1824
+ setList(list);
1825
+ setValue(v);
1826
+ };
1827
+
1828
+ return (
1829
+ <Select
1830
+ style={{
1831
+ width: 400,
1832
+ }}
1833
+ optionList={list}
1834
+ allowCreate={true}
1835
+ multiple={true}
1836
+ filter={true}
1837
+ value={value}
1838
+ onChange={handleSelect}
1839
+ ></Select>
1840
+ );
1841
+ };
1842
+
1843
+ const AllowCreateDemo = () => {
1844
+ let [value, setValue] = useState();
1845
+ const optionList = [
1846
+ {
1847
+ value: 'abc',
1848
+ label: '抖音',
1849
+ },
1850
+ {
1851
+ value: 'hotsoon',
1852
+ label: '火山小视频',
1853
+ },
1854
+ {
1855
+ value: 'pipixia',
1856
+ label: '皮皮虾',
1857
+ },
1858
+ {
1859
+ value: 'toutiao',
1860
+ label: '今日头条',
1861
+ },
1862
+ ];
1863
+ const [list, setList] = useState(optionList);
1864
+
1865
+ const handleSelect = v => {
1866
+ var lastOne = v[v.length - 1];
1867
+
1868
+ if (lastOne && list.findIndex(item => item.value === lastOne) == -1) {
1869
+ list.push({
1870
+ value: lastOne,
1871
+ label: lastOne,
1872
+ });
1873
+ }
1874
+
1875
+ setList(list); // setValue(v)
1876
+ };
1877
+
1878
+ return (
1879
+ <Select
1880
+ style={{
1881
+ width: 400,
1882
+ }}
1883
+ optionList={list}
1884
+ defaultValue={['abc', 'hotsoon']}
1885
+ allowCreate={true}
1886
+ multiple={true}
1887
+ filter={true}
1888
+ onChange={handleSelect}
1889
+ ></Select>
1890
+ );
1891
+ };
1892
+
1893
+ export const AllowCreateWithDefaultValue = () => <AllowCreateDemo />;
1894
+
1895
+ AllowCreateWithDefaultValue.story = {
1896
+ name: 'allowCreate with defaultValue',
1897
+ };
1898
+
1899
+ class HideDemo extends React.Component {
1900
+ constructor(props) {
1901
+ super(props);
1902
+ this.state = {
1903
+ optionList: [
1904
+ {
1905
+ value: 'abc',
1906
+ label: '抖音',
1907
+ },
1908
+ {
1909
+ value: 'hotsoon',
1910
+ label: '火山小视频',
1911
+ },
1912
+ {
1913
+ value: 'pipixia',
1914
+ label: '皮皮虾',
1915
+ },
1916
+ {
1917
+ value: 'toutiao',
1918
+ label: '今日头条',
1919
+ },
1920
+ ],
1921
+ selectedItems: [],
1922
+ };
1923
+ this.onChange = this.onChange.bind(this);
1924
+ }
1925
+
1926
+ onChange(selectedItems) {
1927
+ this.setState({
1928
+ selectedItems,
1929
+ });
1930
+ }
1931
+
1932
+ render() {
1933
+ let { optionList, selectedItems } = this.state;
1934
+ let filterOptions = optionList.filter(option => !selectedItems.includes(option.value));
1935
+ return (
1936
+ <Select
1937
+ value={selectedItems}
1938
+ multiple
1939
+ style={{
1940
+ width: 300,
1941
+ }}
1942
+ onChange={this.onChange}
1943
+ optionList={filterOptions}
1944
+ ></Select>
1945
+ );
1946
+ }
1947
+ }
1948
+
1949
+ export const AutoHiddenSelectedItem = () => <HideDemo></HideDemo>;
1950
+
1951
+ AutoHiddenSelectedItem.story = {
1952
+ name: 'auto hidden selected item',
1953
+ };
1954
+
1955
+ class CustomCreate extends React.Component {
1956
+ constructor(props) {
1957
+ super(props);
1958
+ this.state = {
1959
+ optionList: [
1960
+ {
1961
+ value: 'abc',
1962
+ label: '抖音',
1963
+ },
1964
+ {
1965
+ value: 'hotsoon',
1966
+ label: '火山小视频',
1967
+ },
1968
+ {
1969
+ value: 'pipixia',
1970
+ label: '皮皮虾',
1971
+ },
1972
+ {
1973
+ value: 'toutiao',
1974
+ label: '今日头条',
1975
+ },
1976
+ {
1977
+ value: 0,
1978
+ label: 0,
1979
+ },
1980
+ ],
1981
+ selectedItems: ['fefe'],
1982
+ };
1983
+ this.onChange = this.onChange.bind(this);
1984
+ this.customRender = this.customRender.bind(this);
1985
+ this.search = this.search.bind(this);
1986
+ }
1987
+
1988
+ onChange(selectedItems) {
1989
+ console.log(selectedItems); // this.setState({ selectedItems, optionList: [] });
1990
+
1991
+ this.setState({
1992
+ selectedItems,
1993
+ }); // this.setState({ optionList: [] });
1994
+ }
1995
+
1996
+ customRender(v) {
1997
+ return (
1998
+ <>
1999
+ <span>label:{v.label}</span>
2000
+ <span>value:{v.value}</span>
2001
+ </>
2002
+ );
2003
+ }
2004
+
2005
+ customCreate(inputValue, isFocus) {
2006
+ let style = {
2007
+ padding: 12,
2008
+ cursor: 'pointer',
2009
+ backgroundColor: isFocus ? 'var(--semi-color-fill-0)' : '#FFF',
2010
+ };
2011
+ return <div style={style}>{'create' + inputValue}</div>;
2012
+ }
2013
+
2014
+ search(inputValue) {
2015
+ let length = Math.ceil(Math.random() * 10);
2016
+ let result = Array.from(
2017
+ {
2018
+ length,
2019
+ },
2020
+ (v, i) => {
2021
+ return {
2022
+ value: inputValue + i,
2023
+ label: inputValue + i,
2024
+ type: i + 1,
2025
+ };
2026
+ }
2027
+ );
2028
+ console.log(result); // result = result.concat(selectedOption);
2029
+
2030
+ this.setState({
2031
+ optionList: result,
2032
+ });
2033
+ }
2034
+
2035
+ render() {
2036
+ let { optionList, selectedItems } = this.state;
2037
+ return (
2038
+ <>
2039
+ <Select
2040
+ defaultValue={['abc']}
2041
+ filter
2042
+ style={{
2043
+ width: 300,
2044
+ }}
2045
+ multiple
2046
+ optionList={optionList}
2047
+ onSearch={this.search}
2048
+ onChange={this.onChange}
2049
+ emptyContent={null} // onChangeWithObject
2050
+ ></Select>
2051
+ </>
2052
+ );
2053
+ }
2054
+ }
2055
+
2056
+ export const _CustomCreate = () => <CustomCreate></CustomCreate>;
2057
+
2058
+ _CustomCreate.story = {
2059
+ name: 'CustomCreate',
2060
+ };
2061
+
2062
+ class OptionGroupDemo extends React.Component {
2063
+ constructor(props) {
2064
+ super(props);
2065
+ this.handleSearch = this.handleSearch.bind(this);
2066
+ this.state = {
2067
+ groups: [
2068
+ {
2069
+ label: 'Asia',
2070
+ children: [
2071
+ {
2072
+ label: 'China',
2073
+ value: 'zhongguo',
2074
+ },
2075
+ {
2076
+ label: 'Koera',
2077
+ value: 'hanguo',
2078
+ },
2079
+ ],
2080
+ },
2081
+ {
2082
+ label: 'Europe',
2083
+ children: [
2084
+ {
2085
+ label: 'Germany',
2086
+ value: 'deguo',
2087
+ },
2088
+ {
2089
+ label: 'France',
2090
+ value: 'faguo',
2091
+ },
2092
+ ],
2093
+ },
2094
+ {
2095
+ label: 'Other',
2096
+ children: [
2097
+ {
2098
+ label: 'vf',
2099
+ value: 'Sourth',
2100
+ },
2101
+ ],
2102
+ },
2103
+ ],
2104
+ };
2105
+ }
2106
+
2107
+ handleSearch(input) {
2108
+ let groups = [1, 2, 3].map(i => {
2109
+ return {
2110
+ label: i,
2111
+ // label: Math.random(),
2112
+ children: [10, 20].map(j => {
2113
+ return {
2114
+ label: Math.random(),
2115
+ value: Math.random(),
2116
+ };
2117
+ }),
2118
+ };
2119
+ });
2120
+ this.setState({
2121
+ groups,
2122
+ });
2123
+ }
2124
+
2125
+ renderGroup(group) {
2126
+ let options = group.children.map(option => (
2127
+ <Select.Option value={option.value} label={option.label} key={option.label}></Select.Option>
2128
+ ));
2129
+ return <Select.OptGroup label={group.label}>{options}</Select.OptGroup>;
2130
+ }
2131
+
2132
+ render() {
2133
+ let { groups } = this.state;
2134
+ return (
2135
+ <>
2136
+ <Select
2137
+ placeholder=""
2138
+ style={{
2139
+ width: 180,
2140
+ }}
2141
+ filter
2142
+ onSearch={this.handleSearch}
2143
+ remote
2144
+ >
2145
+ {groups.map(group => this.renderGroup(group))}
2146
+ </Select>
2147
+ </>
2148
+ );
2149
+ }
2150
+ }
2151
+
2152
+ export const SelectOptionGroup = () => <OptionGroupDemo></OptionGroupDemo>;
2153
+
2154
+ SelectOptionGroup.story = {
2155
+ name: 'Select OptionGroup',
2156
+ };
2157
+
2158
+ const BlurDemo = () => {
2159
+ const onBlur = (value, e) => {
2160
+ console.log(value);
2161
+ console.log(e);
2162
+ };
2163
+
2164
+ const onFocus = (value, e) => {
2165
+ console.log(value);
2166
+ console.log(e);
2167
+ };
2168
+
2169
+ return (
2170
+ <>
2171
+ <Select
2172
+ filter
2173
+ placeholder=""
2174
+ style={{
2175
+ width: 180,
2176
+ }}
2177
+ onBlur={onBlur}
2178
+ onFocus={onFocus}
2179
+ >
2180
+ <Select.Option value="zhongguo">China</Select.Option>
2181
+ <Select.Option value="hanguo">Koera</Select.Option>
2182
+ <Select.Option value="deguo">Germany</Select.Option>
2183
+ <Select.Option value="faguo">France</Select.Option>
2184
+ </Select>
2185
+ </>
2186
+ );
2187
+ };
2188
+
2189
+ export const SelectOnBlurOnFocus = () => <BlurDemo></BlurDemo>;
2190
+
2191
+ SelectOnBlurOnFocus.story = {
2192
+ name: 'Select onBlur/onFocus',
2193
+ };
2194
+
2195
+ const AutoAdjustOverflowDemo = () => {
2196
+ const [list, setList] = useState([
2197
+ {
2198
+ value: 'abc',
2199
+ label: '1111',
2200
+ },
2201
+ {
2202
+ value: 'hotsoon',
2203
+ label: '1112',
2204
+ },
2205
+ {
2206
+ value: 'pipixia',
2207
+ label: '1113',
2208
+ },
2209
+ {
2210
+ value: 'toutiao',
2211
+ label: '1114',
2212
+ },
2213
+ ]);
2214
+
2215
+ const onSearch = () => {
2216
+ let newList = Array.from(
2217
+ {
2218
+ length: Math.floor(Math.random() * 10),
2219
+ },
2220
+ (v, i) => {
2221
+ return {
2222
+ value: i,
2223
+ label: i,
2224
+ };
2225
+ }
2226
+ );
2227
+ setList(newList);
2228
+ console.log(newList);
2229
+ };
2230
+
2231
+ return (
2232
+ <div
2233
+ style={{
2234
+ height: 180,
2235
+ margin: 250,
2236
+ border: '1px solid pink',
2237
+ }}
2238
+ >
2239
+ <Select
2240
+ optionList={list}
2241
+ filter={true}
2242
+ remote={true}
2243
+ onSearch={onSearch}
2244
+ style={{
2245
+ width: 200,
2246
+ }}
2247
+ multiple
2248
+ />
2249
+ </div>
2250
+ );
2251
+ };
2252
+
2253
+ export const AutoAdjustOverflow = () => <AutoAdjustOverflowDemo></AutoAdjustOverflowDemo>;
2254
+
2255
+ AutoAdjustOverflow.story = {
2256
+ name: 'autoAdjustOverflow',
2257
+ };
2258
+
2259
+ const AllowCreateWithFilter = () => {
2260
+ const [list, setList] = useState([
2261
+ {
2262
+ value: 'abc',
2263
+ label: 'abc',
2264
+ otherKey: 'abc',
2265
+ },
2266
+ {
2267
+ value: 'hotsoon',
2268
+ label: 'hotsoon',
2269
+ otherKey: 'efg',
2270
+ },
2271
+ {
2272
+ value: 'pipixia',
2273
+ label: 'pipixia',
2274
+ otherKey: 'hij',
2275
+ },
2276
+ {
2277
+ value: 'toutiao',
2278
+ label: 'toutiao',
2279
+ otherKey: 'klm',
2280
+ },
2281
+ ]);
2282
+
2283
+ const filter = (sugInput, option) => {
2284
+ let compareKey = option.otherKey ? option.otherKey.toUpperCase() : '';
2285
+ let sug = sugInput.toUpperCase();
2286
+ return compareKey.includes(sug);
2287
+ };
2288
+
2289
+ return (
2290
+ <div
2291
+ style={{
2292
+ height: 180,
2293
+ margin: 250,
2294
+ }}
2295
+ >
2296
+ <Select
2297
+ optionList={list}
2298
+ multiple
2299
+ filter={filter}
2300
+ style={{
2301
+ width: 200,
2302
+ }}
2303
+ allowCreate
2304
+ />
2305
+ </div>
2306
+ );
2307
+ };
2308
+
2309
+ export const FilterAllowCreate = () => <AllowCreateWithFilter></AllowCreateWithFilter>;
2310
+
2311
+ FilterAllowCreate.story = {
2312
+ name: 'Filter + allowCreate',
2313
+ };
2314
+
2315
+ const SelectRefDemo = () => {
2316
+ const ref = useRef();
2317
+ const secondRef = useRef();
2318
+ const [open, setOpen] = useState(false);
2319
+ const list = [
2320
+ {
2321
+ value: 'abc',
2322
+ label: 'Abc',
2323
+ },
2324
+ {
2325
+ value: 'hotsoon',
2326
+ label: 'Hotsoon',
2327
+ },
2328
+ {
2329
+ value: 'pipixia',
2330
+ label: 'Pipixia',
2331
+ },
2332
+ {
2333
+ value: 'toutiao',
2334
+ label: 'TooBuzz',
2335
+ },
2336
+ ];
2337
+
2338
+ const change = () => {
2339
+ if (!open) {
2340
+ ref.current.open();
2341
+ setOpen(true);
2342
+ } else {
2343
+ ref.current.close();
2344
+ setOpen(false);
2345
+ }
2346
+ };
2347
+
2348
+ const focus = () => {
2349
+ ref.current.focus();
2350
+ };
2351
+
2352
+ const clearInput = () => {
2353
+ ref.current.clearInput();
2354
+ };
2355
+
2356
+ const deselectAll = () => {
2357
+ ref.current.deselectAll();
2358
+ };
2359
+
2360
+ const selectAll = () => {
2361
+ ref.current.selectAll();
2362
+ };
2363
+
2364
+ return (
2365
+ <>
2366
+ <h4>onChangeWithObject = false</h4>
2367
+ <Select
2368
+ innerBottomSlot={
2369
+ <div>
2370
+ <Space>
2371
+ <Button onClick={change}>close</Button>
2372
+ <Button onClick={clearInput}>clearInput</Button>
2373
+ <Button onClick={deselectAll}>deselectAll</Button>
2374
+ <Button onClick={selectAll}>selectAll</Button>
2375
+ </Space>
2376
+ </div>
2377
+ }
2378
+ ref={ref}
2379
+ onChange={e => console.log(e)}
2380
+ placeholder="Business line"
2381
+ style={{
2382
+ width: 180,
2383
+ }}
2384
+ optionList={list}
2385
+ filter
2386
+ multiple
2387
+ ></Select>
2388
+ <Space>
2389
+ <Button onClick={change}>open</Button>
2390
+ <Button onClick={focus}>focus</Button>
2391
+ <Button onClick={clearInput}>clearInput</Button>
2392
+ <Button onClick={deselectAll}>deselectAll</Button>
2393
+ <Button onClick={selectAll}>selectAll</Button>
2394
+ </Space>
2395
+ <h4
2396
+ style={{
2397
+ marginTop: 20,
2398
+ }}
2399
+ >
2400
+ onChangeWithObject = true
2401
+ </h4>
2402
+ <Select
2403
+ innerBottomSlot={
2404
+ <div>
2405
+ <Space></Space>
2406
+ </div>
2407
+ }
2408
+ onChange={e => console.log(e)}
2409
+ onChangeWithObject
2410
+ ref={secondRef}
2411
+ placeholder="Business line"
2412
+ style={{
2413
+ width: 180,
2414
+ }}
2415
+ optionList={list}
2416
+ filter
2417
+ multiple
2418
+ ></Select>
2419
+ <Space>
2420
+ <Button onClick={() => secondRef.current.deselectAll()}>deselectAll</Button>
2421
+ <Button onClick={() => secondRef.current.selectAll()}>selectAll</Button>
2422
+ </Space>
2423
+ </>
2424
+ );
2425
+ };
2426
+
2427
+ export const Ref = () => <SelectRefDemo />;
2428
+
2429
+ Ref.story = {
2430
+ name: 'ref',
2431
+ };
2432
+
2433
+ export const CustomTriggerDemo = () => <CustomTrigger />;
2434
+ CustomTriggerDemo.story = {
2435
+ name: 'custom trigger'
2436
+ }
2437
+
2438
+ class VirtualizeClassDemo extends React.Component {
2439
+ constructor(props) {
2440
+ super(props);
2441
+ // this.handleSearch = this.handleSearch.bind(this);
2442
+ let newOptions = Array.from({ length: 1000 }, (v, i) => ({ label: `o-${i}`, value: `v-${v}-${i}` }));
2443
+ this.state = {
2444
+ optionList: newOptions,
2445
+ };
2446
+ }
2447
+ render() {
2448
+ let { groups, optionList } = this.state;
2449
+ let virtualize = {
2450
+ height: 300,
2451
+ widht: '100%',
2452
+ itemSize: 36,
2453
+ };
2454
+ return (
2455
+ <>
2456
+ <Select
2457
+ placeholder=""
2458
+ style={{ width: 180 }}
2459
+ filter
2460
+ onSearch={this.handleSearch}
2461
+ virtualize={virtualize}
2462
+ optionList={optionList}
2463
+ ></Select>
2464
+ </>
2465
+ );
2466
+ }
2467
+ }
2468
+
2469
+ export const VirtualizeDemo = () => <VirtualizeClassDemo />;
2470
+
2471
+ VirtualizeDemo.story = {
2472
+ name: 'virtualize select'
2473
+ }
2474
+
2475
+
2476
+ const SelectPosition = () => {
2477
+ return (
2478
+ <div
2479
+ style={{
2480
+ height: 500,
2481
+ border: '1px solid red',
2482
+ overflow: 'auto',
2483
+ }}
2484
+ >
2485
+ <p>p</p>
2486
+ <p>p</p>
2487
+ <p>p</p>
2488
+ <p>p</p>
2489
+ <p>p</p>
2490
+ <p>p</p>
2491
+ <p>p</p>
2492
+ <p>p</p>
2493
+ <p>p</p>
2494
+ <p>p</p>
2495
+ <p>p</p>
2496
+ <p>p</p>
2497
+ <p>p</p>
2498
+ <p>p</p>
2499
+ <p>p</p>
2500
+ <p>p</p>
2501
+ <p>p</p>
2502
+ <p>p</p>
2503
+ <p>p</p>
2504
+ <p>p</p>
2505
+ <p>p</p>
2506
+ <p>p</p>
2507
+ <p>p</p>
2508
+ <Select
2509
+ defaultValue="abc"
2510
+ style={{
2511
+ width: 120,
2512
+ }}
2513
+ >
2514
+ <Option value="abc">抖音</Option>
2515
+ <Option value="hotsoon">火山</Option>
2516
+ <Option value="pipixia" disabled>
2517
+ 皮皮虾
2518
+ </Option>
2519
+ <Option value="xigua">西瓜视频</Option>
2520
+ </Select>
2521
+ <p>p</p>
2522
+ <p>p</p>
2523
+ <p>p</p>
2524
+ <p>p</p>
2525
+ <p>p</p>
2526
+ <p>p</p>
2527
+ <p>p</p>
2528
+ <p>p</p>
2529
+ <p>p</p>
2530
+ <p>p</p>
2531
+ <p>p</p>
2532
+ <p>p</p>
2533
+ <p>p</p>
2534
+ <p>p</p>
2535
+ <p>p</p>
2536
+ <p>p</p>
2537
+ <p>p</p>
2538
+ <p>p</p>
2539
+ <p>p</p>
2540
+ <p>p</p>
2541
+ <p>p</p>
2542
+ <p>p</p>
2543
+ <p>p</p>
2544
+ <p>p</p>
2545
+ <p>p</p>
2546
+ <p>p</p>
2547
+ <p>p</p>
2548
+ <p>p</p>
2549
+ <p>p</p>
2550
+ <p>p</p>
2551
+ <p>p</p>
2552
+ <p>p</p>
2553
+ <p>p</p>
2554
+ <p>p</p>
2555
+ <p>p</p>
2556
+ <p>p</p>
2557
+ <p>p</p>
2558
+ <p>p</p>
2559
+ <p>p</p>
2560
+ <p>p</p>
2561
+ <p>p</p>
2562
+ <p>p</p>
2563
+ </div>
2564
+ );
2565
+ };
2566
+
2567
+ export { SelectPosition };
2568
+ SelectPosition.story = {
2569
+ name: 'Select position problem'
2570
+ }
2571
+
2572
+ const RenderOptionDemo = () => {
2573
+ const renderOptionItem = renderProps => {
2574
+ const {
2575
+ disabled,
2576
+ selected,
2577
+ label,
2578
+ value,
2579
+ focused,
2580
+ className,
2581
+ style,
2582
+ onMouseEnter,
2583
+ onClick,
2584
+ empty,
2585
+ emptyContent,
2586
+ ...rest
2587
+ } = renderProps;
2588
+ const optionCls = classNames({
2589
+ ['custom-option-render']: true,
2590
+ ['custom-option-render-focused']: focused,
2591
+ ['custom-option-render-disabled']: disabled,
2592
+ ['custom-option-render-selected']: selected,
2593
+ }); // Notice:
2594
+ // 1.props传入的style需在wrapper dom上进行消费,否则在虚拟化场景下会无法正常使用
2595
+ // 2.选中(selected)、聚焦(focused)、禁用(disabled)等状态的样式需自行加上,你可以从props中获取到相对的boolean值
2596
+ // 3.onMouseEnter需在wrapper dom上绑定,否则上下键盘操作时显示会有问题
2597
+
2598
+ return (
2599
+ <div
2600
+ style={style}
2601
+ className={optionCls}
2602
+ onClick={() => onClick()}
2603
+ onMouseEnter={e => onMouseEnter()}
2604
+ >
2605
+ <Checkbox checked={selected} />
2606
+ <div className="option-right">{label}</div>
2607
+ </div>
2608
+ );
2609
+ };
2610
+
2611
+ return (
2612
+ <>
2613
+ <Select
2614
+ filter
2615
+ dropdownClassName="components-select-demo-renderOptionItem"
2616
+ optionList={optionList}
2617
+ style={{
2618
+ width: 300,
2619
+ }}
2620
+ renderOptionItem={renderOptionItem}
2621
+ />
2622
+ <br />
2623
+ <br />
2624
+ <Select
2625
+ filter
2626
+ multiple
2627
+ dropdownClassName="components-select-demo-renderOptionItem"
2628
+ optionList={optionList}
2629
+ style={{
2630
+ width: 450,
2631
+ }}
2632
+ renderOptionItem={renderOptionItem}
2633
+ />
2634
+ </>
2635
+ );
2636
+ };
2637
+
2638
+ export const RenderOptionItem = () => <RenderOptionDemo />;
2639
+
2640
+ RenderOptionItem.story = {
2641
+ name: 'renderOptionItem',
2642
+ };
2643
+
2644
+ const FilterDefaultOpen = () => {
2645
+ const [value1, setValue1] = useState('a-1');
2646
+ return (
2647
+ <>
2648
+ <Select
2649
+ placeholder=""
2650
+ style={{
2651
+ width: 180,
2652
+ }}
2653
+ filter
2654
+ defaultOpen
2655
+ >
2656
+ <Select.OptGroup label="Asia">
2657
+ <Select.Option value="a-1">China</Select.Option>
2658
+ <Select.Option value="a-2">Koera</Select.Option>
2659
+ </Select.OptGroup>
2660
+ <Select.OptGroup label="Europe">
2661
+ <Select.Option value="b-1">Germany</Select.Option>
2662
+ <Select.Option value="b-2">France</Select.Option>
2663
+ </Select.OptGroup>
2664
+ <Select.OptGroup label="South America">
2665
+ <Select.Option value="c-1">Peru</Select.Option>
2666
+ </Select.OptGroup>
2667
+ </Select>
2668
+ <Select
2669
+ placeholder=""
2670
+ style={{
2671
+ width: 180,
2672
+ marginLeft: 20,
2673
+ }}
2674
+ filter
2675
+ defaultOpen
2676
+ defaultValue="a-2"
2677
+ >
2678
+ <Select.OptGroup label="Asia">
2679
+ <Select.Option value="a-1">China</Select.Option>
2680
+ <Select.Option value="a-2">Koera</Select.Option>
2681
+ </Select.OptGroup>
2682
+ <Select.OptGroup label="Europe">
2683
+ <Select.Option value="b-1">Germany</Select.Option>
2684
+ <Select.Option value="b-2">France</Select.Option>
2685
+ </Select.OptGroup>
2686
+ <Select.OptGroup label="South America">
2687
+ <Select.Option value="c-1">Peru</Select.Option>
2688
+ </Select.OptGroup>
2689
+ </Select>
2690
+ <Select
2691
+ placeholder=""
2692
+ style={{
2693
+ width: 180,
2694
+ marginLeft: 20,
2695
+ }}
2696
+ filter
2697
+ defaultOpen
2698
+ value={value1}
2699
+ onChange={val => setValue1(val)}
2700
+ >
2701
+ <Select.Option value="a-1">China</Select.Option>
2702
+ <Select.Option value="a-2">Koera</Select.Option>
2703
+ <Select.Option value="b-1">Germany</Select.Option>
2704
+ <Select.Option value="b-2">France</Select.Option>
2705
+ <Select.Option value="c-1">Peru</Select.Option>
2706
+ </Select>
2707
+ </>
2708
+ );
2709
+ };
2710
+
2711
+ export { FilterDefaultOpen };
2712
+ FilterDefaultOpen.story = {
2713
+ name: 'Filter + defaultOpen'
2714
+ };
2715
+
2716
+ const CustomSelect = props => {
2717
+ const { fieldRef, ...rest } = props;
2718
+ return <Select {...rest} ref={fieldRef} />;
2719
+ };
2720
+
2721
+ const CustomFieldSelect = withField(CustomSelect);
2722
+
2723
+ const RefDemo = () => {
2724
+ const fieldRef = useRef(null);
2725
+
2726
+ const onChange = () => {
2727
+ console.log(fieldRef);
2728
+ fieldRef.current.open();
2729
+ debugger;
2730
+ };
2731
+
2732
+ return (
2733
+ <Form>
2734
+ <CustomFieldSelect field="test" initValue="se" fieldRef={fieldRef}></CustomFieldSelect>
2735
+ <Button onClick={onChange}>change</Button>
2736
+ </Form>
2737
+ );
2738
+ };
2739
+
2740
+ export const RefFieldDemo = () => <RefDemo />;
2741
+
2742
+ RefFieldDemo.story = {
2743
+ name: 'Ref field demo',
2744
+ };
2745
+
2746
+ const ValueZeroDemo = () => {
2747
+ const list = [
2748
+ {
2749
+ value: 6,
2750
+ label: '抖音小视频',
2751
+ otherKey: 0,
2752
+ },
2753
+ {
2754
+ value: 1,
2755
+ label: '火山小视频',
2756
+ disabled: true,
2757
+ otherKey: 1,
2758
+ },
2759
+ {
2760
+ value: 'pipixia',
2761
+ label: '皮皮虾',
2762
+ otherKey: 2,
2763
+ },
2764
+ {
2765
+ value: 'toutiao',
2766
+ label: '今日头条',
2767
+ otherKey: 3,
2768
+ },
2769
+ ];
2770
+ return (
2771
+ <Select
2772
+ placeholder="请选择业务线"
2773
+ style={{
2774
+ width: 180,
2775
+ }}
2776
+ optionList={list}
2777
+ value={0}
2778
+ renderSelectedItem={option => option.label + 1}
2779
+ ></Select>
2780
+ );
2781
+ };
2782
+
2783
+ export const Value0 = () => <ValueZeroDemo />;
2784
+
2785
+ Value0.story = {
2786
+ name: 'value=0',
2787
+ };
2788
+
2789
+ const Highlight = () => {
2790
+ const searchWords = ['do', 'dollar'];
2791
+ const sourceString = 'aaa do dollar aaa';
2792
+ const result = getHighLightTextHTML({
2793
+ searchWords,
2794
+ sourceString,
2795
+ });
2796
+ const result2 = getHighLightTextHTML({
2797
+ searchWords: ['z'],
2798
+ sourceString: 'aaazaaazaaa',
2799
+ });
2800
+ return result2;
2801
+ };
2802
+
2803
+ export const _Highlight = () => <Highlight />;
2804
+
2805
+ _Highlight.story = {
2806
+ name: 'highlight',
2807
+ };
2808
+
2809
+ export const ScrollIntoView = () => (
2810
+ <div>
2811
+ <p>single selection</p>
2812
+ <Select defaultValue='v-11' defaultOpen style={{ width: 120, marginBottom: 300 }}>
2813
+ {new Array(50).fill(null).map((item, idx) => (
2814
+ <Option value={`v-${idx}`} key={idx}>{`option-${idx}`}</Option>
2815
+ ))}
2816
+ </Select>
2817
+ <p>single selection with no selected item</p>
2818
+ <Select style={{ marginBottom: 300, width: 120 }}>
2819
+ {new Array(50).fill(null).map((item, idx) => (
2820
+ <Option value={`v-${idx}`} key={idx}>{`option-${idx}`}</Option>
2821
+ ))}
2822
+ </Select>
2823
+ <p>The selected node is the last</p>
2824
+ <Select defaultValue='v-49' defaultOpen style={{ marginBottom: 300, width: 120 }}>
2825
+ {new Array(50).fill(null).map((item, idx) => (
2826
+ <Option value={`v-${idx}`} key={idx}>{`option-${idx}`}</Option>
2827
+ ))}
2828
+ </Select>
2829
+ <p>The selected node is the first</p>
2830
+ <Select defaultValue='v-0' style={{ marginBottom: 300, width: 120 }}>
2831
+ {new Array(50).fill(null).map((item, idx) => (
2832
+ <Option value={`v-${idx}`} key={idx}>{`option-${idx}`}</Option>
2833
+ ))}
2834
+ </Select>
2835
+ <p>multiple selection</p>
2836
+ <Select defaultValue={['v-25', 'v-9']} multiple style={{ marginBottom: 300, width: 220 }}>
2837
+ {new Array(30).fill(null).map((item, idx) => (
2838
+ <Option value={`v-${idx}`} key={idx}>{`option-${idx}`}</Option>
2839
+ ))}
2840
+ </Select>
2841
+ <p>multiple selection with no selected item</p>
2842
+ <Select multiple style={{ marginBottom: 300, width: 220 }}>
2843
+ {new Array(30).fill(null).map((item, idx) => (
2844
+ <Option value={`v-${idx}`} key={idx}>{`option-${idx}`}</Option>
2845
+ ))}
2846
+ </Select>
2847
+ </div>
2848
+ );
2849
+
2850
+ ScrollIntoView.story = {
2851
+ name: 'scroll into view',
2852
+ };