dropdown.stories.js 8.5 KB

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