@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,873 @@
1
+ import React from 'react';
2
+ import DatePicker from '../index';
3
+ import BaseDatePicker from '../datePicker';
4
+ import ConfigProvider from '../../configProvider';
5
+ import * as _ from 'lodash';
6
+ import { clear } from 'jest-date-mock';
7
+ import { addDays, startOfWeek, endOfWeek, add, format, addWeeks, set } from 'date-fns';
8
+ import { zhCN, enUS } from "date-fns/locale";
9
+ import { zonedTimeToUtc } from 'date-fns-tz';
10
+ import { strings } from '../../../semi-foundation/datePicker/constants';
11
+ import { BASE_CLASS_PREFIX } from '../../../semi-foundation/base/constants';
12
+ import en_US from '../../locale/source/en_US';
13
+ import LocaleProvider from '../../locale/localeProvider';
14
+
15
+ import { genBeforeEach, genAfterEach, mount, sleep as baseSleep } from '../../_test_/utils';
16
+ import { utcToZonedTime, toIANA } from '../../../semi-foundation/utils/date-fns-extra';
17
+
18
+ const animationMs = 200;
19
+ const baseYear = 2019;
20
+ const baseDay = 8;
21
+ const baseMon = 8;
22
+ const baseDate = new Date(baseYear, baseMon, baseDay, 8, 8, 8, 8);
23
+
24
+ const popupSelector = `.${BASE_CLASS_PREFIX}-popover .${BASE_CLASS_PREFIX}-datepicker`;
25
+
26
+ const sleep = (ms = 200) => baseSleep(ms);
27
+
28
+ const getRandomIANATimeZone = function () {
29
+ const TIME_ZONE = Array.from({ length: 26 }).map((_, index) => index - 11);
30
+ const offset = Math.floor(Math.random() * TIME_ZONE.length);
31
+ const timeZone = toIANA(TIME_ZONE[offset]);
32
+ return [timeZone, offset];
33
+ };
34
+
35
+ describe(`DatePicker`, () => {
36
+ beforeEach(() => {
37
+ clear();
38
+ genBeforeEach()();
39
+ });
40
+
41
+ afterEach(genAfterEach());
42
+
43
+ it(`test appearance`, () => {
44
+ const defaultValue = new Date();
45
+
46
+ /**
47
+ * with default value
48
+ */
49
+ const elem = mount(<DatePicker defaultValue={defaultValue} />);
50
+ expect(elem.find(`.${BASE_CLASS_PREFIX}-datepicker`).length).toBe(1);
51
+ expect(elem.find(`.${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-input-wrapper-clearable`).length).toBe(1);
52
+ });
53
+
54
+ it(`test defaultOpen`, async () => {
55
+ const defaultValue = new Date();
56
+ const open = true;
57
+ const motion = false;
58
+
59
+ const elem = mount(<DatePicker motion={motion} defaultOpen={open} defaultValue={defaultValue} />);
60
+
61
+ expect(document.querySelectorAll(popupSelector).length).toBe(1);
62
+
63
+ // document.body.click();
64
+ document.dispatchEvent(new Event('mousedown', { bubbles: true }));
65
+
66
+ await sleep();
67
+ expect(document.querySelectorAll(popupSelector).length).toBe(0);
68
+ });
69
+
70
+ it(`test open`, async () => {
71
+ const defaultValue = new Date();
72
+ const open = true;
73
+ const motion = false;
74
+
75
+ const elem = mount(<DatePicker motion={motion} open={open} defaultValue={defaultValue} />);
76
+
77
+ expect(document.querySelectorAll(popupSelector).length).toBe(1);
78
+
79
+ /**
80
+ * click body without reset open
81
+ */
82
+ document.body.click();
83
+ await sleep();
84
+ expect(document.querySelectorAll(popupSelector).length).toBe(1);
85
+
86
+ /**
87
+ * click body and set open
88
+ */
89
+ elem.setProps({ open: false });
90
+ document.body.click();
91
+
92
+ await sleep();
93
+ expect(document.querySelectorAll(popupSelector).length).toBe(0);
94
+ });
95
+
96
+ it(`test presets`, async () => {
97
+ const dayOffset = 1;
98
+ const presets = [
99
+ {
100
+ text: 'Today',
101
+ start: new Date(baseDate),
102
+ end: new Date(baseDate),
103
+ },
104
+ {
105
+ text: 'Next Day',
106
+ start: addDays(new Date(baseDate), dayOffset),
107
+ end: addDays(new Date(baseDate), dayOffset),
108
+ },
109
+ ];
110
+ const defaultValue = new Date(addDays(new Date(baseDate), -dayOffset));
111
+ const open = true;
112
+ const motion = false;
113
+
114
+ const demo = mount(<DatePicker presets={presets} motion={motion} open={open} defaultValue={defaultValue} />);
115
+ const elem = demo.find(BaseDatePicker);
116
+
117
+ const btns = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-quick-control-item`);
118
+
119
+ /**
120
+ * click next day
121
+ */
122
+ btns[1].click();
123
+ let value = elem.state('value');
124
+ expect(value[0].getDate() - defaultValue.getDate()).toEqual(dayOffset * 2);
125
+
126
+ /**
127
+ * click current day
128
+ */
129
+ btns[0].click();
130
+ value = elem.state('value');
131
+ expect(value[0].getDate()).toEqual(defaultValue.getDate() + 1);
132
+ });
133
+
134
+ it(`test value`, async () => {
135
+ const currentValue = new Date(baseDate);
136
+ const open = true;
137
+ const motion = false;
138
+ const dayOffset = 3;
139
+
140
+ const onChange = sinon.spy(async (date, str) => {
141
+ expect(date.getDate()).toBe(currentValue.getDate() + dayOffset);
142
+ elem.setProps({ value: date });
143
+
144
+ await sleep();
145
+ expect(_.first(datePickerElem.state('value')).getDate() - baseDate.getDate()).toBe(dayOffset);
146
+ });
147
+
148
+ const elem = mount(<DatePicker motion={motion} open={open} value={currentValue} onChange={onChange} />);
149
+ const datePickerElem = elem.find(BaseDatePicker);
150
+ const popup = document.querySelector(`.${BASE_CLASS_PREFIX}-popover .${BASE_CLASS_PREFIX}-datepicker`);
151
+ const selectedDayElem = popup.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-day-selected`);
152
+
153
+ const nextOffsetDayElem = _.times(dayOffset).reduce(node => node.nextElementSibling, selectedDayElem);
154
+
155
+ nextOffsetDayElem.click();
156
+
157
+ await sleep(animationMs * 3);
158
+ expect(onChange.called).toBeTruthy();
159
+ });
160
+
161
+ it(`test needConfirm`, async () => {
162
+ const currentValue = new Date(baseDate);
163
+ const open = true;
164
+ const motion = false;
165
+ const type = 'dateTime';
166
+ const needConfirm = true;
167
+ const dayOffset = 3;
168
+
169
+ const demo = mount(
170
+ <DatePicker motion={motion} defaultValue={currentValue} open={open} type={type} needConfirm={needConfirm} />
171
+ );
172
+ const elem = demo.find(BaseDatePicker);
173
+
174
+ const btns = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-popover .${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-datepicker-footer .${BASE_CLASS_PREFIX}-button`);
175
+
176
+ expect(btns.length).toBe(2);
177
+
178
+ const selectedDayElem = document.querySelector(`.${BASE_CLASS_PREFIX}-popover .${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-datepicker-day-selected`);
179
+ const nextOffsetDayElem = _.times(dayOffset).reduce(node => node.nextElementSibling, selectedDayElem);
180
+
181
+ /**
182
+ * click next day
183
+ */
184
+ nextOffsetDayElem.click();
185
+ await sleep();
186
+ expect(_.first(elem.state('value')).getDate() === currentValue.getDate()).toBeTruthy();
187
+
188
+ /**
189
+ * click cancel button
190
+ */
191
+ btns[0].click();
192
+ await sleep();
193
+ expect(_.first(elem.state('value')).getDate() === currentValue.getDate()).toBeTruthy();
194
+
195
+ /**
196
+ * click ensure button
197
+ */
198
+ btns[1].click();
199
+ await sleep();
200
+ expect(_.first(elem.state('value')).getDate() - currentValue.getDate()).toBe(dayOffset);
201
+
202
+ demo.unmount();
203
+ });
204
+
205
+ it(`test events`, async () => {
206
+ const currentValue = new Date(baseDate);
207
+ const open = true;
208
+ const motion = false;
209
+ const type = 'dateTime';
210
+ const needConfirm = true;
211
+ const dayOffset = 3;
212
+
213
+ const onOpenChange = sinon.spy();
214
+ const onChange = sinon.spy();
215
+
216
+ const elem = mount(
217
+ <DatePicker
218
+ onOpenChange={onOpenChange}
219
+ motion={motion}
220
+ defaultValue={currentValue}
221
+ type={type}
222
+ needConfirm={needConfirm}
223
+ onChange={onChange}
224
+ />
225
+ );
226
+
227
+ /**
228
+ * click outside
229
+ */
230
+ document.body.click();
231
+ await sleep();
232
+ expect(onOpenChange.called).toBeFalsy();
233
+
234
+ /**
235
+ * click datePicker
236
+ */
237
+ const inputWrapper = document.querySelector(`.${BASE_CLASS_PREFIX}-input-wrapper`);
238
+ const dateInputDom = inputWrapper.parentElement;
239
+ dateInputDom.click();
240
+ await sleep();
241
+ expect(onOpenChange.called).toBeTruthy();
242
+
243
+ /**
244
+ * input value change
245
+ */
246
+ elem.find(`.${BASE_CLASS_PREFIX}-input-wrapper input`).simulate('change', { target: { value: '2019-10-02 08:30:02' } });
247
+ expect(onChange.called).toBeTruthy();
248
+ });
249
+
250
+ it(`test range picker`, async () => {
251
+ const open = true;
252
+ const motion = false;
253
+ const type = 'dateTimeRange';
254
+ const needConfirm = false;
255
+ const dayOffset = 3;
256
+ const leftPrevClickTimes = 3;
257
+ const currentValue = [new Date(baseDate), new Date(baseDate).setDate(baseDay + dayOffset)];
258
+
259
+ const demo = mount(
260
+ <DatePicker
261
+ motion={motion}
262
+ defaultOpen={open}
263
+ defaultValue={currentValue}
264
+ type={type}
265
+ needConfirm={needConfirm}
266
+ />
267
+ );
268
+ const elem = demo.find(BaseDatePicker);
269
+
270
+ const startDayDom = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-day-selected-start`);
271
+ const endDayDom = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-day-selected-end`);
272
+
273
+ /**
274
+ * check started day and ended day's gap offset
275
+ */
276
+ expect(_.times(dayOffset).reduce(cur => cur.nextElementSibling, startDayDom)).toBe(endDayDom);
277
+
278
+ const leftPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-left`);
279
+ const leftNavBtns = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-navigation .${BASE_CLASS_PREFIX}-button`);
280
+ const rightPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-right`);
281
+ const rightNavBtns = rightPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-navigation .${BASE_CLASS_PREFIX}-button`);
282
+
283
+ _.get(rightNavBtns, 1).click();
284
+ await sleep();
285
+
286
+ _.times(leftPrevClickTimes).forEach(() => _.first(leftNavBtns).click());
287
+
288
+ const leftSecondWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
289
+ const leftSecondWeekDays = leftSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
290
+ const startIndex = 0;
291
+
292
+ /**
293
+ * select 2019-06-02 ~ 2019-06-05
294
+ */
295
+ demo.find('input').at(0).simulate('focus');
296
+ leftSecondWeekDays[startIndex].click();
297
+ demo.find('input').at(1).simulate('focus');
298
+ leftSecondWeekDays[startIndex + dayOffset].click();
299
+
300
+ const value = elem.state('value');
301
+ const startDay = 2;
302
+ expect(value[0].getMonth()).toBe(baseMon - leftPrevClickTimes);
303
+ expect(value[0].getDate()).toBe(startDay);
304
+ expect(value[1].getMonth()).toBe(baseMon - leftPrevClickTimes);
305
+ expect(value[1].getDate()).toBe(startDay + dayOffset);
306
+ });
307
+
308
+ it(`test change panel in range picker`, async () => {
309
+ const motion = false;
310
+ const type = 'dateRange';
311
+ const needConfirm = false;
312
+ const dayOffset = 3;
313
+ const currentValue = [new Date(baseDate), new Date(baseDate).setDate(baseDay + dayOffset)];
314
+
315
+ const demo = mount(
316
+ <DatePicker
317
+ motion={motion}
318
+ defaultOpen={open}
319
+ defaultValue={currentValue}
320
+ type={type}
321
+ needConfirm={needConfirm}
322
+ />
323
+ );
324
+ const elem = demo.find(BaseDatePicker);
325
+
326
+ const leftPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-left`);
327
+ const leftSecondWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
328
+ const leftSecondWeekDays = leftSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
329
+ const startIndex = 0;
330
+
331
+ demo.find('input').at(0).simulate('focus');
332
+ leftSecondWeekDays[startIndex].click();
333
+ await sleep();
334
+ expect(elem.state('rangeInputFocus')).toBe('rangeEnd');
335
+ expect(elem.instance().focusRecordsRef.current.rangeStart).toBe(true);
336
+ leftSecondWeekDays[startIndex + dayOffset].click();
337
+ await sleep();
338
+ expect(elem.instance().focusRecordsRef.current.rangeStart).toBe(false);
339
+ expect(elem.instance().focusRecordsRef.current.rangeEnd).toBe(false);
340
+ expect(elem.state('rangeInputFocus')).toBe(false);
341
+ });
342
+
343
+ it(`test change panel in range picker with start greater than endTime`, async () => {
344
+ const motion = false;
345
+ const type = 'dateRange';
346
+ const needConfirm = false;
347
+ const dayOffset = 3;
348
+ const currentValue = [new Date(baseDate), new Date(baseDate).setDate(baseDay + dayOffset)];
349
+
350
+ const demo = mount(
351
+ <DatePicker
352
+ motion={motion}
353
+ defaultOpen={open}
354
+ defaultValue={currentValue}
355
+ type={type}
356
+ needConfirm={needConfirm}
357
+ />
358
+ );
359
+ const elem = demo.find(BaseDatePicker);
360
+
361
+ const leftPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-left`);
362
+ const leftThirdWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[2];
363
+ const leftThirdWeekDays = leftThirdWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
364
+ const startIndex = 0;
365
+
366
+ demo.find('input').at(0).simulate('focus');
367
+ leftThirdWeekDays[startIndex].click();
368
+ await sleep();
369
+ expect(elem.state('rangeInputFocus')).toBe('rangeEnd');
370
+ const inputValue = elem.state('inputValue');
371
+ expect(inputValue.split('~')[1].trim()).toBe('');
372
+ });
373
+
374
+ /**
375
+ * this test suite won't end up with result
376
+ */
377
+ it.skip(`test year or month picker`, async () => {
378
+ const open = true;
379
+ const motion = false;
380
+ const type = 'month';
381
+ const monOffset = 2;
382
+ const yearOffset = 3;
383
+ const currentValue = new Date(baseDate);
384
+
385
+ const elem = mount(<DatePicker motion={motion} defaultOpen={open} defaultValue={currentValue} type={type} />);
386
+
387
+ await sleep();
388
+
389
+ const lists = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-scrolllist-item-wheel`);
390
+ /**
391
+ * select year
392
+ */
393
+ const currentSelectedYear = lists[0].querySelector(`ul .${BASE_CLASS_PREFIX}-scrolllist-item-selected`);
394
+ _.times(yearOffset)
395
+ .reduce(cur => cur.nextElementSibling, currentSelectedYear)
396
+ .click();
397
+
398
+ /**
399
+ * select month
400
+ */
401
+ const currentSelectedMon = lists[1].querySelector(`ul .${BASE_CLASS_PREFIX}-scrolllist-item-selected`);
402
+ _.times(monOffset)
403
+ .reduce(cur => cur.nextElementSibling, currentSelectedMon)
404
+ .click();
405
+
406
+ await sleep();
407
+ const value = elem.state('value');
408
+ expect(value[0].getYear()).toBe(baseYear + yearOffset);
409
+ expect(value[0].getMonth()).toBe(baseMon + monOffset);
410
+ });
411
+
412
+ it('test week select', async () => {
413
+ const demo = mount(
414
+ <DatePicker
415
+ type="dateRange"
416
+ defaultOpen={open}
417
+ weekStartsOn={1}
418
+ startDateOffset={date => startOfWeek(date, { weekStartsOn: 1 })}
419
+ endDateOffset={date => endOfWeek(date, { weekStartsOn: 1 })}
420
+ />
421
+ );
422
+ const elem = demo.find(BaseDatePicker);
423
+
424
+ const leftPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-left`);
425
+ const leftSecondWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
426
+ const leftSecondWeekDays = leftSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
427
+ const startIndex = 3;
428
+
429
+ /**
430
+ * 点击当前月第二个星期的第四天
431
+ */
432
+ leftSecondWeekDays[startIndex].click();
433
+
434
+ const now = new Date();
435
+ const year = now.getFullYear();
436
+ const month = now.getMonth();
437
+ const monthFirstDay = add(new Date(year, 0, 1, 0, 0, 0), { months: month });
438
+ const clickDay = addDays(startOfWeek(addWeeks(monthFirstDay, 1), { weekStartsOn: 1 }), 3);
439
+ const value = elem.state('value');
440
+ const dateFormat = 'yyyy-MM-dd';
441
+
442
+ expect(format(value[0], dateFormat)).toBe(format(startOfWeek(clickDay, { weekStartsOn: 1 }), dateFormat));
443
+ expect(format(value[1], dateFormat)).toBe(format(endOfWeek(clickDay, { weekStartsOn: 1 }), dateFormat));
444
+ });
445
+
446
+ it('test autoFocus', async () => {
447
+ const motion = false;
448
+ const elem = mount(<DatePicker motion={motion} autoFocus={true} />);
449
+ const elem2 = mount(<DatePicker motion={motion} autoFocus={false} />);
450
+
451
+ expect(elem.find(`.${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-input-wrapper-focus`).length).toBe(1);
452
+ expect(elem2.find(`.${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-input-wrapper-focus`).length).toBe(0);
453
+ });
454
+
455
+ it('custom dropdownClassName & dropdownStyle', async () => {
456
+ let props = {
457
+ dropdownClassName: 'my-datePicker',
458
+ dropdownStyle: {
459
+ color: 'red',
460
+ },
461
+ defaultOpen: true,
462
+ motion: false,
463
+ };
464
+ const elem = mount(<DatePicker {...props} />);
465
+ expect(elem.exists('.my-datePicker')).toEqual(true);
466
+ expect(elem.find('.my-datePicker')).toHaveStyle('color', 'red');
467
+ });
468
+
469
+ it('onClear', async () => {
470
+ const onClear = sinon.spy();
471
+ let props = {
472
+ defaultOpen: true,
473
+ motion: false,
474
+ autoFocus: true,
475
+ defaultValue: baseDate,
476
+ showClear: true,
477
+ onClear: onClear,
478
+ };
479
+ const elem = mount(<DatePicker {...props} />);
480
+ const clearBtn = elem.find('.semi-input-clearbtn');
481
+ clearBtn.simulate('mouseDown', { target: { value: 'test' } });
482
+ expect(onClear.called).toBeTruthy();
483
+ });
484
+
485
+ it('input disabled date should not trigger onChange', async () => {
486
+ const onChange = sinon.spy();
487
+ const defaultValue = '2021-04-12';
488
+ const disabeldDate = '2021-04-15';
489
+ const notDisabledDate = '2021-04-13';
490
+ let props = {
491
+ defaultOpen: true,
492
+ motion: false,
493
+ value: defaultValue,
494
+ onChange,
495
+ disabledDate: dateStr => {
496
+ const date = new Date(dateStr);
497
+ const day = date.getDate();
498
+ if (day === 15) {
499
+ return true;
500
+ }
501
+ return false;
502
+ }
503
+ };
504
+ const elem = mount(<DatePicker {...props} />);
505
+ elem.find(`.${BASE_CLASS_PREFIX}-input-wrapper input`).simulate('change', { target: { value: disabeldDate } });
506
+ await sleep();
507
+ expect(onChange.called).toBeFalsy();
508
+ elem.find(`.${BASE_CLASS_PREFIX}-input-wrapper input`).simulate('change', { target: { value: notDisabledDate } });
509
+ await sleep();
510
+ expect(onChange.called).toBeTruthy();
511
+ });
512
+
513
+ it('click presets disabled date should not trigger onChange', async () => {
514
+ const onChange = sinon.spy();
515
+ const defaultValue = '2021-04-12';
516
+ const disabledValue = '2021-04-15';
517
+ const notDisabledValue = '2021-04-30';
518
+ const defaultDate = new Date(`${defaultValue} 00:00:00`);
519
+ const disableDate = new Date(`${disabledValue} 00:00:00`);
520
+ const notDisabledDate = new Date(`${notDisabledValue} 00:00:00`);
521
+ let props = {
522
+ open: true,
523
+ motion: false,
524
+ defaultValue,
525
+ onChange,
526
+ disabledDate: date => {
527
+ const day = date.getDate();
528
+ if (day === 15) {
529
+ return true;
530
+ }
531
+ return false;
532
+ },
533
+ presets: [
534
+ {
535
+ text: 'disabled date',
536
+ start: disableDate,
537
+ },
538
+ {
539
+ text: 'valid date',
540
+ start: notDisabledValue,
541
+ },
542
+ ],
543
+ };
544
+ const demo = mount(<DatePicker {...props} />);
545
+ const elem = demo.find(BaseDatePicker);
546
+ const btns = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-quick-control-item`);
547
+
548
+ // click disabled date
549
+ btns[0].click();
550
+ let value = elem.state('value');
551
+ expect(value[0].getDate()).toEqual(defaultDate.getDate());
552
+ expect(onChange.called).toBeFalsy();
553
+
554
+ // click valid date
555
+ btns[1].click();
556
+ await sleep();
557
+ value = elem.state('value');
558
+ expect(value[0].getDate()).toEqual(notDisabledDate.getDate());
559
+ expect(onChange.called).toBeTruthy();
560
+ });
561
+
562
+ it('check inputValue is correct when change timeZone', async () => {
563
+ const today = set(new Date(), { hours: 22, minutes: 0, seconds: 0 });
564
+ const [originZone, originOffset] = getRandomIANATimeZone();
565
+ const [newZone, newOffset] = getRandomIANATimeZone();
566
+
567
+ const elem = mount(
568
+ <ConfigProvider timeZone={originZone}>
569
+ <DatePicker type="dateTime" defaultOpen={true} motion={false} defaultPickerValue={today} />
570
+ </ConfigProvider>
571
+ );
572
+
573
+ const demo = elem.find(BaseDatePicker);
574
+
575
+ // 选中一个日期
576
+ const days = document.querySelectorAll('.semi-datepicker-day');
577
+ // 6 无实际意义,第一行的第7个肯定是有效日期,如第一行最后一天是月首
578
+ days[6].click();
579
+ await sleep();
580
+ // 查看value值
581
+ expect(elem.find('.semi-datepicker-day-selected')).toBeTruthy();
582
+ const selectedDay = demo.state('value')[0];
583
+ const input = document.querySelector('.semi-input');
584
+ expect(input.value).toEqual(format(selectedDay, strings.FORMAT_DATE_TIME));
585
+ // 切换时区
586
+ elem.setProps({ timeZone: newZone });
587
+ const newZoneDate = add(selectedDay, { hours: newOffset - originOffset })
588
+ const formatNewZoneDate = format(newZoneDate, strings.FORMAT_DATE_TIME);
589
+ expect(input.value).toEqual(formatNewZoneDate);
590
+ });
591
+
592
+ it('check inputValue in controlled mode when change timeZone', async () => {
593
+ const now = new Date();
594
+ const [originZone, originOffset] = getRandomIANATimeZone();
595
+ const [newZone, newOffset] = getRandomIANATimeZone();
596
+
597
+ // 给定一个时区下的date value
598
+ const originZoneDate = zonedTimeToUtc(now, originZone);
599
+ const elem = mount(
600
+ <ConfigProvider timeZone={originZone}>
601
+ <DatePicker type="dateTime" defaultOpen={true} motion={false} value={originZoneDate} />
602
+ </ConfigProvider>
603
+ );
604
+
605
+ const input = document.querySelector('.semi-input');
606
+ const originFormatDate = format(now, strings.FORMAT_DATE_TIME);
607
+ expect(input.value).toEqual(originFormatDate);
608
+ // 切换时区
609
+ elem.setProps({ timeZone: newZone });
610
+ const newZoneDate = add(now, { hours: newOffset - originOffset })
611
+ const formatNewZoneDate = format(newZoneDate, strings.FORMAT_DATE_TIME);
612
+ expect(input.value).toEqual(formatNewZoneDate);
613
+ });
614
+
615
+ it(`test locale format default`, () => {
616
+ const localeFormatten = 'yyyy-MM-dd EEEE';
617
+ const defaultValue = new Date('2021-04-30');
618
+ const localeValue = format(defaultValue, localeFormatten, { locale: zhCN })
619
+
620
+ // 默认为中文
621
+ const elem = mount(<DatePicker format={localeFormatten} defaultValue={defaultValue} />);
622
+ expect(elem.find(`.${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-input`).instance().value).toBe(localeValue);
623
+ });
624
+
625
+ it(`test locale format enUS`, () => {
626
+ const localeFormatten = 'yyyy-MM-dd EEEE';
627
+ const defaultValue = new Date('2021-04-30');
628
+ const localeValue = format(defaultValue, localeFormatten, { locale: enUS })
629
+
630
+ // 英文
631
+ const elem = mount(
632
+ <LocaleProvider locale={en_US}>
633
+ <DatePicker format={localeFormatten} defaultValue={defaultValue} />
634
+ </LocaleProvider>
635
+ );
636
+ expect(elem.find(`.${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-input`).instance().value).toBe(localeValue);
637
+ });
638
+
639
+ it(`test onPresetClick`, async () => {
640
+ const dayOffset = 1;
641
+ const presets = [
642
+ {
643
+ text: 'Today',
644
+ start: new Date(baseDate),
645
+ end: new Date(baseDate),
646
+ },
647
+ {
648
+ text: 'Next Day',
649
+ start: addDays(new Date(baseDate), dayOffset),
650
+ end: addDays(new Date(baseDate), dayOffset),
651
+ },
652
+ ];
653
+ const defaultValue = new Date(addDays(new Date(baseDate), -dayOffset));
654
+ const open = true;
655
+ const motion = false;
656
+ const handlePresetClick = sinon.spy();
657
+
658
+ const demo = mount(<DatePicker onPresetClick={handlePresetClick} presets={presets} motion={motion} open={open} defaultValue={defaultValue} />);
659
+ const elem = demo.find(BaseDatePicker);
660
+
661
+ const btns = document.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-quick-control-item`);
662
+
663
+ btns[0].click();
664
+ btns[1].click();
665
+ expect(handlePresetClick.calledTwice).toBeTruthy();
666
+ const args0 = handlePresetClick.getCall(0).args;
667
+ const args1 = handlePresetClick.getCall(1).args;
668
+ expect(args0[0]).toEqual(presets[0]);
669
+ expect(args0[1] instanceof Event).toBeTruthy;
670
+ expect(args1[0]).toEqual(presets[1]);
671
+ expect(args1[1] instanceof Event).toBeTruthy;
672
+ });
673
+
674
+ it(`test range type click one not trigger notifyChange`, async () => {
675
+ const onChange = sinon.spy(async (date, str) => {
676
+ elem.setProps({ value: date });
677
+ });
678
+ let props = {
679
+ defaultOpen: true,
680
+ motion: false,
681
+ value: undefined,
682
+ onChange,
683
+ defaultPickerValue: '2021-08-13',
684
+ type: 'dateRange'
685
+ };
686
+ const elem = mount(<DatePicker {...props} />);
687
+ const leftPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-left`);
688
+ const leftSecondWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
689
+ const leftSecondWeekDays = leftSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
690
+ const startIndex = 0;
691
+ const endIndex = 2;
692
+
693
+ elem.find('input').at(0).simulate('focus');
694
+ leftSecondWeekDays[startIndex].click();
695
+ expect(onChange.calledOnce).toBe(false);
696
+ elem.find('input').at(1).simulate('focus');
697
+ leftSecondWeekDays[endIndex].click();
698
+ expect(onChange.calledOnce).toBe(true);
699
+ const [rangeStart, rangeEnd] = onChange.getCall(0).args[0];
700
+ const dateFormat = 'yyyy-MM-dd';
701
+ expect(format(rangeStart, dateFormat)).toBe('2021-08-08');
702
+ expect(format(rangeEnd, dateFormat)).toBe('2021-08-10');
703
+ const inputs = elem.find(`.${BASE_CLASS_PREFIX}-datepicker .${BASE_CLASS_PREFIX}-input`);
704
+ expect(inputs.at(0).instance().value).toBe('2021-08-08');
705
+ expect(inputs.at(1).instance().value).toBe('2021-08-10');
706
+ });
707
+
708
+ /**
709
+ * test disabled rangeStart and select a not disabled range end
710
+ * e.g.
711
+ * You can select a no disabled date(like one day of september) when defaultValue=['2021-08-06', '2021-08-15'] and disabled august.
712
+ */
713
+ it('test rangeStart disabled and select rangeEnd', async () => {
714
+ const onChange = sinon.spy();
715
+ const defaultValue = ['2021-08-06', '2021-08-15'];
716
+ let props = {
717
+ type: 'dateRange',
718
+ defaultOpen: true,
719
+ motion: false,
720
+ defaultValue,
721
+ onChange,
722
+ // disabled august
723
+ disabledDate: dateStr => {
724
+ const date = new Date(dateStr);
725
+ const month = date.getMonth();
726
+ if (month === 7) {
727
+ return true;
728
+ }
729
+ return false;
730
+ },
731
+ style: { width: 300 }
732
+ };
733
+ const elem = mount(<DatePicker {...props} />);
734
+ const baseElem = elem.find(BaseDatePicker);
735
+ const rightPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-right`);
736
+ const rightSecondWeek = rightPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
737
+ const rightSecondWeekDays = rightSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
738
+
739
+ /**
740
+ * select 2021-09-10 as rangeEnd
741
+ */
742
+ elem.find('input').at(1).simulate('focus');
743
+ const endIndex = 5; // 2021-09-10
744
+ rightSecondWeekDays[endIndex].click();
745
+ const value = baseElem.state('value');
746
+
747
+ // test rangeEnd is selected
748
+ expect(value[0].getMonth()).toBe(7);
749
+ expect(value[0].getDate()).toBe(6);
750
+ expect(value[1].getMonth()).toBe(8);
751
+ expect(value[1].getDate()).toBe(10);
752
+ // test input value is same with state value
753
+ expect(elem.find('input').at(0).instance().value).toBe(defaultValue[0]);
754
+ expect(elem.find('input').at(1).instance().value).toBe('2021-09-10');
755
+ // test event is called
756
+ expect(onChange.calledOnce).toBe(true);
757
+ });
758
+
759
+ /**
760
+ * test disabled some day and select a no disabled day in multiple mode
761
+ */
762
+ it('test disabled multiple select', async () => {
763
+ const onChange = sinon.spy();
764
+ const defaultValue = ['2021-08-06', '2021-08-15'];
765
+ let props = {
766
+ type: 'date',
767
+ multiple: true,
768
+ defaultOpen: true,
769
+ motion: false,
770
+ defaultValue,
771
+ onChange,
772
+ // disabled august
773
+ disabledDate: dateStr => {
774
+ const date = new Date(dateStr);
775
+ const day = date.getDate();
776
+ if (day > 20 && day < 25) {
777
+ return true;
778
+ }
779
+ return false;
780
+ },
781
+ style: { width: 300 }
782
+ };
783
+ const elem = mount(<DatePicker {...props} />);
784
+ const baseElem = elem.find(BaseDatePicker);
785
+ const leftPanel = document.querySelector(`.${BASE_CLASS_PREFIX}-datepicker-month-grid-left`);
786
+ const leftSecondWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[1];
787
+ const leftSecondWeekDays = leftSecondWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
788
+
789
+ /**
790
+ * select 2021-08-10(not disabled)
791
+ */
792
+ leftSecondWeekDays[2].click();
793
+ let value = baseElem.state('value');
794
+
795
+ // test 2021-08-10 is selected
796
+ expect(value.length).toBe(3);
797
+ expect(value[2].getMonth()).toBe(7);
798
+ expect(value[2].getDate()).toBe(10);
799
+ // test input value is same with state value
800
+ expect(elem.find('input').at(0).instance().value).toBe('2021-08-06,2021-08-15,2021-08-10');
801
+ // test event is called
802
+ expect(onChange.calledOnce).toBe(true);
803
+
804
+ /**
805
+ * select 2021-08-21(disabled)
806
+ */
807
+ const leftThirdWeek = leftPanel.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-week`)[2];
808
+ const leftThirdWeekDays = leftThirdWeek.querySelectorAll(`.${BASE_CLASS_PREFIX}-datepicker-day`);
809
+ leftThirdWeekDays[6].click();
810
+ await sleep();
811
+ value = baseElem.state('value');
812
+
813
+ // test 2021-08-21 is not selected
814
+ expect(value.length).toBe(3);
815
+ expect(elem.find('input').at(0).instance().value).toBe('2021-08-06,2021-08-15,2021-08-10');
816
+ expect(onChange.calledOnce).toBe(true); // still calledOnce
817
+ });
818
+
819
+
820
+ it('test disabled time callback', async () => {
821
+ const disabledTime = sinon.spy((date, panelType) => {
822
+ if (panelType === 'left') {
823
+ return { disabledHours: () => [17, 18] };
824
+ } else {
825
+ return { disabledHours: () => [12, 13, 14, 15, 16, 17, 18] };
826
+ }
827
+ });
828
+ let props = {
829
+ type: 'dateTimeRange',
830
+ defaultValue: ['2021-09-08', '2021-10-03'],
831
+ defaultOpen: true,
832
+ motion: false,
833
+ disabledTime,
834
+ style: { width: 400 },
835
+ timePickerOpts: {
836
+ scrollItemProps: { cycled: false }
837
+ }
838
+ };
839
+ const elem = mount(<DatePicker {...props} />);
840
+ elem.find('.semi-datepicker-month-grid-left .semi-datepicker-switch-time').simulate('click');
841
+ const args = disabledTime.lastCall.args;
842
+ expect(args[0].length).toBe(2);
843
+ expect(args[1]).toBe('left');
844
+
845
+ elem.setProps({ type: 'dateTime' });
846
+ elem.update();
847
+ elem.find('.semi-datepicker-month-grid-left .semi-datepicker-switch-time').simulate('click');
848
+ const args2 = disabledTime.lastCall.args;
849
+ expect(Array.isArray(args2[0])).toBe(false);
850
+ expect(args2[1]).toBe('left');
851
+ });
852
+
853
+ it('test rangeSeparator', async () => {
854
+ const rangeSeparator = '-'
855
+ const defaultValue = ['2021-08-06', '2021-08-15'];
856
+ let props = {
857
+ type: 'dateRange',
858
+ motion: false,
859
+ defaultValue,
860
+ style: { width: 300 },
861
+ rangeSeparator,
862
+ };
863
+ const elem = mount(
864
+ <div>
865
+ <DatePicker {...props} />
866
+ <DatePicker {...props} type="dateTimeRange" />
867
+ </div>
868
+ );
869
+ const allSeparators = document.querySelectorAll('.semi-datepicker-range-input-separator');
870
+ expect(allSeparators[0].textContent.trim()).toBe(rangeSeparator);
871
+ expect(allSeparators[1].textContent.trim()).toBe(rangeSeparator);
872
+ });
873
+ });