dropdown.stories.jsx 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. import React from 'react';
  2. import Dropdown from '../index';
  3. import Avatar from '../../avatar';
  4. import Button from '@douyinfe/semi-ui/button/index';
  5. import InTableDemo from './inTable';
  6. import AutoClose from './AutoClose';
  7. import MultiDropdown from './MultiDropdown';
  8. import DisabledItem from './DisabledItem';
  9. import InHoverElements from './InHoverElements';
  10. import WrapAvatar from './WrapAvatar';
  11. import { IconChevronDown, IconBox, IconSimilarity } from '@douyinfe/semi-icons';
  12. import { IconBox, IconSimilarity, IconSetting, IconForward, IconColorPalette, IconRefresh, IconSearch, IconBranch } from '@douyinfe/semi-icons';
  13. export * from '../_story/C2D';
  14. export default {
  15. title: 'Dropdown',
  16. parameters: {
  17. chromatic: { disableSnapshot: true },
  18. }
  19. }
  20. export {
  21. InTableDemo,
  22. MultiDropdown,
  23. DisabledItem,
  24. InHoverElements,
  25. WrapAvatar
  26. }
  27. let style = {
  28. display: 'inline-block',
  29. padding: '20px',
  30. };
  31. const change = visible => {
  32. debugger;
  33. };
  34. export const Dropdown1 = () => (
  35. <div>
  36. <div style={style}>
  37. <Dropdown
  38. trigger="click"
  39. render={
  40. <Dropdown.Menu>
  41. <Dropdown.Item disabled>1111</Dropdown.Item>
  42. <Dropdown.Divider />
  43. <Dropdown.Item selected={true}>
  44. 2222 What if the text is super long? Longer than whatever you've known
  45. </Dropdown.Item>
  46. <Dropdown.Item>It looks OK</Dropdown.Item>
  47. </Dropdown.Menu>
  48. }
  49. >
  50. <div>分割线</div>
  51. </Dropdown>
  52. </div>
  53. <div style={style}>
  54. <Dropdown
  55. onVisibleChange={change}
  56. render={
  57. <Dropdown.Menu>
  58. <Dropdown.Item>333</Dropdown.Item>
  59. <Dropdown.Item>44444</Dropdown.Item>
  60. </Dropdown.Menu>
  61. }
  62. >
  63. hover
  64. </Dropdown>
  65. </div>
  66. <br />
  67. <div style={style}>
  68. <Dropdown
  69. position="bottomRight"
  70. render={
  71. <Dropdown.Menu>
  72. <Dropdown.Item>333</Dropdown.Item>
  73. <Dropdown.Item>44444</Dropdown.Item>
  74. </Dropdown.Menu>
  75. }
  76. >
  77. hover bottomRight
  78. </Dropdown>
  79. </div>
  80. <div style={style}>
  81. <Dropdown
  82. position="bottomLeft"
  83. render={
  84. <Dropdown.Menu>
  85. <Dropdown.Item>333</Dropdown.Item>
  86. <Dropdown.Item>44444</Dropdown.Item>
  87. </Dropdown.Menu>
  88. }
  89. >
  90. hover bottomLeft
  91. </Dropdown>
  92. </div>
  93. </div>
  94. );
  95. export const Dropdown2 = () => {
  96. return (
  97. <div>
  98. <Dropdown
  99. trigger="click"
  100. position="bottomLeft"
  101. render={
  102. <Dropdown.Menu>
  103. <Dropdown.Item disabled>1111</Dropdown.Item>
  104. <Dropdown.Divider />
  105. <Dropdown.Item selected={true}>
  106. 2222 What if the text is super long? Longer than whatever you've known
  107. </Dropdown.Item>
  108. <Dropdown.Item>It looks OK</Dropdown.Item>
  109. </Dropdown.Menu>
  110. }
  111. >
  112. <Button>Open dropdown</Button>
  113. </Dropdown>
  114. </div>
  115. );
  116. };
  117. export const AvatarDemo = () => {
  118. return (
  119. <div
  120. style={{
  121. display: 'flex',
  122. flexDirection: 'row-reverse',
  123. }}
  124. >
  125. <Dropdown
  126. autoAdjustOverflow={true}
  127. trigger="click"
  128. position="bottomRight"
  129. getPopupContainer={() => document.querySelector('#dropdown-container')}
  130. render={
  131. <Dropdown.Menu>
  132. <Dropdown.Item disabled>1111</Dropdown.Item>
  133. <Dropdown.Divider />
  134. <Dropdown.Item selected={true}>
  135. 2222 What if the text is super long? Longer than whatever you've known
  136. </Dropdown.Item>
  137. <Dropdown.Item>It looks OK</Dropdown.Item>
  138. </Dropdown.Menu>
  139. }
  140. >
  141. <div
  142. style={{
  143. display: 'inline-block',
  144. }}
  145. >
  146. <Avatar size="small" src="" />
  147. <IconChevronDown />
  148. </div>
  149. </Dropdown>
  150. <div id="dropdown-container" />
  151. </div>
  152. );
  153. };
  154. export const DropdownOnVisibleChange = () => {
  155. return (
  156. <div>
  157. <Dropdown
  158. trigger="click"
  159. onVisibleChange={(...args) => {
  160. console.log('onVisibleChange: ', ...args);
  161. }}
  162. render={
  163. <Dropdown.Menu>
  164. <Dropdown.Item disabled>1111</Dropdown.Item>
  165. <Dropdown.Divider />
  166. <Dropdown.Item selected={true}>
  167. 2222 What if the text is super long? Longer than whatever you've known
  168. </Dropdown.Item>
  169. <Dropdown.Item>It looks OK</Dropdown.Item>
  170. </Dropdown.Menu>
  171. }
  172. >
  173. <Button>Open dropdown</Button>
  174. </Dropdown>
  175. </div>
  176. );
  177. };
  178. export const DropdownAutoCloseWhenClicked = () => <AutoClose />;
  179. DropdownAutoCloseWhenClicked.story = {
  180. name: 'dropdown auto close when clicked',
  181. };
  182. export const DropdownItemType = () => (
  183. <>
  184. <Dropdown
  185. visible={true}
  186. trigger="custom"
  187. render={
  188. <Dropdown.Menu>
  189. <Dropdown.Item type="primary">primary</Dropdown.Item>
  190. <Dropdown.Item type="secondary">secondary</Dropdown.Item>
  191. <Dropdown.Item type="tertiary">tertiary</Dropdown.Item>
  192. <Dropdown.Item type="warning">warning</Dropdown.Item>
  193. <Dropdown.Item type="danger">danger</Dropdown.Item>
  194. <Dropdown.Item>default</Dropdown.Item>
  195. </Dropdown.Menu>
  196. }
  197. >
  198. Different type Item
  199. </Dropdown>
  200. <Dropdown
  201. visible={true}
  202. trigger="custom"
  203. showTick
  204. render={
  205. <Dropdown.Menu>
  206. <Dropdown.Item type="primary" active>
  207. primary
  208. </Dropdown.Item>
  209. <Dropdown.Item type="secondary">secondary</Dropdown.Item>
  210. <Dropdown.Item type="tertiary">tertiary</Dropdown.Item>
  211. <Dropdown.Item type="warning">warning</Dropdown.Item>
  212. <Dropdown.Item type="danger" active>
  213. 编辑danger
  214. </Dropdown.Item>
  215. <Dropdown.Item>default</Dropdown.Item>
  216. </Dropdown.Menu>
  217. }
  218. >
  219. Different type Item
  220. </Dropdown>
  221. </>
  222. );
  223. export function DropdownItemPropsDemo() {
  224. return (
  225. <div>
  226. <Dropdown
  227. trigger="custom"
  228. position="bottomLeft"
  229. visible
  230. render={
  231. <Dropdown.Menu>
  232. <Dropdown.Item icon={<IconBox />}>Menu Item 1</Dropdown.Item>
  233. <Dropdown.Item iconType="setting">Menu Item 2</Dropdown.Item>
  234. <Dropdown.Item disabled iconType="forward">
  235. Menu Item 3
  236. </Dropdown.Item>
  237. <Dropdown.Item type="primary" iconType="branch">
  238. primary
  239. </Dropdown.Item>
  240. <Dropdown.Item iconType="color_palette" type="secondary">
  241. secondary
  242. </Dropdown.Item>
  243. <Dropdown.Item iconType="refresh" type="tertiary">
  244. tertiary
  245. </Dropdown.Item>
  246. <Dropdown.Item iconType="search" type="warning">
  247. warning
  248. </Dropdown.Item>
  249. <Dropdown.Item
  250. icon={
  251. <IconSimilarity
  252. style={{
  253. color: 'var(--semi-color-tertiary)',
  254. }}
  255. />
  256. }
  257. type="danger"
  258. >
  259. danger
  260. </Dropdown.Item>
  261. </Dropdown.Menu>
  262. }
  263. >
  264. <Button>始终展示</Button>
  265. </Dropdown>
  266. <Dropdown
  267. trigger="custom"
  268. position="bottomLeft"
  269. showTick
  270. visible
  271. render={
  272. <Dropdown.Menu>
  273. <Dropdown.Item active icon={<IconBox />}>
  274. Menu Item 1
  275. </Dropdown.Item>
  276. <Dropdown.Item iconType="setting">Menu Item 2</Dropdown.Item>
  277. <Dropdown.Item disabled iconType="forward">
  278. Menu Item 3
  279. </Dropdown.Item>
  280. <Dropdown.Item type="primary" iconType="branch">
  281. primary
  282. </Dropdown.Item>
  283. <Dropdown.Item iconType="color_palette" type="secondary">
  284. secondary
  285. </Dropdown.Item>
  286. <Dropdown.Item iconType="refresh" type="tertiary">
  287. tertiary
  288. </Dropdown.Item>
  289. <Dropdown.Item iconType="search" type="warning">
  290. warning
  291. </Dropdown.Item>
  292. <Dropdown.Item
  293. icon={
  294. <IconSimilarity
  295. style={{
  296. color: 'var(--semi-color-tertiary)',
  297. }}
  298. />
  299. }
  300. type="danger"
  301. >
  302. danger
  303. </Dropdown.Item>
  304. </Dropdown.Menu>
  305. }
  306. >
  307. <Button
  308. style={{
  309. marginLeft: 200,
  310. }}
  311. >
  312. 始终展示
  313. </Button>
  314. </Dropdown>
  315. </div>
  316. );
  317. }
  318. ShowTick.storyName = 'showTick';
  319. export function ShowTick() {
  320. return (
  321. <div>
  322. <Dropdown
  323. trigger="custom"
  324. position="bottomLeft"
  325. showTick
  326. visible
  327. motion={false}
  328. render={
  329. <Dropdown.Menu>
  330. <Dropdown.Item icon={<IconBox />} active>
  331. Menu Item 1
  332. </Dropdown.Item>
  333. <Dropdown.Item icon={<IconSetting />}>Menu Item 2</Dropdown.Item>
  334. <Dropdown.Item disabled icon={<IconForward />}>
  335. Menu Item 3
  336. </Dropdown.Item>
  337. <Dropdown.Item icon={<IconBranch />} type="primary">
  338. primary
  339. </Dropdown.Item>
  340. <Dropdown.Item icon={<IconColorPalette />} type="secondary">
  341. secondary
  342. </Dropdown.Item>
  343. <Dropdown.Item icon={<IconRefresh />} type="tertiary">
  344. tertiary
  345. </Dropdown.Item>
  346. <Dropdown.Item icon={<IconSearch />} type="warning">
  347. warning
  348. </Dropdown.Item>
  349. <Dropdown.Item
  350. icon={<IconSimilarity style={{ color: 'var(--semi-color-tertiary)' }} />}
  351. type="danger"
  352. >
  353. danger
  354. </Dropdown.Item>
  355. </Dropdown.Menu>
  356. }
  357. >
  358. <Button style={{ marginLeft: 90 }}>ShowTick+始终展示</Button>
  359. </Dropdown>
  360. </div>
  361. );
  362. }