breadcrumb.stories.jsx 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. /* argus-disable unPkgSensitiveInfo */
  2. import React from 'react';
  3. import Breadcrumb from '../index';
  4. import Popover from '../../popover';
  5. import {
  6. IconMore,
  7. IconArrowRight,
  8. IconHome,
  9. IconArticle,
  10. IconChevronRight,
  11. } from '@douyinfe/semi-icons';
  12. export default {
  13. title: 'Breadcrumb',
  14. }
  15. export const Default = () => (
  16. <div>
  17. <Breadcrumb
  18. routes={[
  19. {
  20. path: '/home',
  21. name: 'home',
  22. },
  23. 'breadcrumb',
  24. 'default',
  25. ]}
  26. aria-label='example-1'
  27. onClick={item => console.log(item)}
  28. />
  29. <Breadcrumb
  30. aria-label='example-2'
  31. routes={[
  32. {
  33. path: '/home',
  34. icon: <IconHome />,
  35. href: '#',
  36. },
  37. {
  38. path: '/breadcrumb',
  39. name: 'breadcrumb',
  40. icon: <IconChevronRight />,
  41. },
  42. 'icon',
  43. ]}
  44. onClick={item => console.log(item)}
  45. />
  46. <Breadcrumb
  47. aria-label='example-3'
  48. routes={[
  49. {
  50. path: '/home',
  51. name: 'home',
  52. },
  53. 'breadcrumb',
  54. 'separator',
  55. 'string',
  56. ]}
  57. onClick={item => console.log(item)}
  58. separator={'>'}
  59. />
  60. <Breadcrumb
  61. aria-label='example-4'
  62. routes={[
  63. {
  64. path: '/home',
  65. name: 'home',
  66. },
  67. 'breadcrumb',
  68. 'separator',
  69. 'with icon',
  70. ]}
  71. onClick={item => console.log(item)}
  72. separator={<IconArrowRight size={'small'} />}
  73. />
  74. <Breadcrumb
  75. aria-label='example-5'
  76. routes={['首页', '当这个页面标题很长时需要省略', '详情页']}
  77. onClick={item => console.log(item)}
  78. />
  79. <Breadcrumb
  80. aria-label='example-6'
  81. routes={[
  82. '首页',
  83. '当层级很多的时候',
  84. '又一层很长需要省略的时候',
  85. '再一层',
  86. '上上一层',
  87. '上一层',
  88. '详情页',
  89. ]}
  90. onClick={item => console.log(item)}
  91. />
  92. </div>
  93. );
  94. export const Compact = () => (
  95. <div>
  96. <Breadcrumb
  97. aria-label='example-1'
  98. routes={[
  99. {
  100. path: '/home',
  101. name: 'home',
  102. },
  103. 'breadcrumb',
  104. 'compact',
  105. ]}
  106. onClick={item => console.log(item)}
  107. compact={true}
  108. />
  109. <Breadcrumb
  110. aria-label='example-2'
  111. routes={[
  112. {
  113. path: '/home',
  114. icon: <IconHome />,
  115. },
  116. {
  117. path: '/breadcrumb',
  118. name: 'breadcrumb',
  119. icon: <IconChevronRight />,
  120. },
  121. 'icon',
  122. ]}
  123. onClick={item => console.log(item)}
  124. compact={true}
  125. />
  126. <Breadcrumb
  127. aria-label='example-3'
  128. routes={[
  129. {
  130. path: '/home',
  131. name: 'home',
  132. },
  133. 'breadcrumb',
  134. 'separator',
  135. 'string',
  136. ]}
  137. onClick={item => console.log(item)}
  138. separator={'>'}
  139. compact={true}
  140. />
  141. <Breadcrumb
  142. aria-label='example-4'
  143. routes={[
  144. {
  145. path: '/home',
  146. name: 'home',
  147. },
  148. 'breadcrumb',
  149. 'separator',
  150. 'icon',
  151. ]}
  152. onClick={item => console.log(item)}
  153. separator={<IconArrowRight size={'small'} />}
  154. compact={true}
  155. />
  156. <Breadcrumb
  157. aria-label='example-5'
  158. routes={['首页', '当这个页面标题很长时需要省略', '详情页']}
  159. onClick={item => console.log(item)}
  160. compact={true}
  161. />
  162. <Breadcrumb
  163. aria-label='example-6'
  164. routes={[
  165. '首页',
  166. '当层级很多的时候',
  167. '又一层很长需要省略的时候',
  168. '再一层',
  169. '上上一层',
  170. '上一层',
  171. '详情页',
  172. ]}
  173. onClick={item => console.log(item)}
  174. compact={true}
  175. />
  176. </div>
  177. );
  178. export const BreadcrumbItemJSX = () => (
  179. <div>
  180. <Breadcrumb aria-label='example-1' onClick={item => console.log(item)}>
  181. <Breadcrumb.Item onClick={item => console.log('child', item)}>home</Breadcrumb.Item>
  182. <Breadcrumb.Item href="#">breadcrumb</Breadcrumb.Item>
  183. <Breadcrumb.Item>default</Breadcrumb.Item>
  184. </Breadcrumb>
  185. <Breadcrumb aria-label='example-2' onClick={item => console.log(item)}>
  186. <Breadcrumb.Item icon={<IconHome />}></Breadcrumb.Item>
  187. <Breadcrumb.Item>breadcrumb</Breadcrumb.Item>
  188. <Breadcrumb.Item>default</Breadcrumb.Item>
  189. </Breadcrumb>
  190. <Breadcrumb aria-label='example-3' separator={'>'} onClick={item => console.log(item)}>
  191. <Breadcrumb.Item>home</Breadcrumb.Item>
  192. <Breadcrumb.Item href="#">breadcrumb</Breadcrumb.Item>
  193. <Breadcrumb.Item>separator</Breadcrumb.Item>
  194. </Breadcrumb>
  195. <Breadcrumb aria-label='example-4' compact={true} onClick={item => console.log(item)}>
  196. <Breadcrumb.Item>home</Breadcrumb.Item>
  197. <Breadcrumb.Item>breadcrumb</Breadcrumb.Item>
  198. <Breadcrumb.Item>compact</Breadcrumb.Item>
  199. </Breadcrumb>
  200. <Breadcrumb aria-label='example-5' onClick={item => console.log(item)}>
  201. <Breadcrumb.Item>首页</Breadcrumb.Item>
  202. <Breadcrumb.Item>当这个页面标题很长时需要省略</Breadcrumb.Item>
  203. <Breadcrumb.Item>详情页</Breadcrumb.Item>
  204. </Breadcrumb>
  205. <Breadcrumb aria-label='example-6' onClick={item => console.log(item)}>
  206. <Breadcrumb.Item>首页</Breadcrumb.Item>
  207. <Breadcrumb.Item>当层级很多的时候</Breadcrumb.Item>
  208. <Breadcrumb.Item>又一层很长需要省略的时候</Breadcrumb.Item>
  209. <Breadcrumb.Item>再一层</Breadcrumb.Item>
  210. <Breadcrumb.Item>上上一层</Breadcrumb.Item>
  211. <Breadcrumb.Item>上一层</Breadcrumb.Item>
  212. <Breadcrumb.Item>详情页</Breadcrumb.Item>
  213. </Breadcrumb>
  214. <Breadcrumb></Breadcrumb>
  215. </div>
  216. );
  217. export const Test = () => (
  218. <div>
  219. <Breadcrumb aria-label='example-1' onClick={item => console.log(item)}>
  220. <Breadcrumb.Item onClick={item => console.log('child', item)}>home jump</Breadcrumb.Item>
  221. <Breadcrumb.Item href="#">breadcrumb</Breadcrumb.Item>
  222. <Breadcrumb.Item>
  223. <h1>default</h1>
  224. </Breadcrumb.Item>
  225. </Breadcrumb>
  226. <Breadcrumb aria-label='example-2'>
  227. <Breadcrumb.Item icon={<IconHome />}></Breadcrumb.Item>
  228. <Breadcrumb.Item icon={<IconArticle />}>
  229. <h5>breadcrumb</h5>
  230. </Breadcrumb.Item>
  231. <Breadcrumb.Item>with icon</Breadcrumb.Item>
  232. </Breadcrumb>
  233. </div>
  234. );
  235. const separator = '-'; // 用于拼接 restItem 数组项的分隔符
  236. const renderMore = restItem => {
  237. const content = (
  238. <>
  239. {restItem.map((item, idx) => (
  240. <React.Fragment key={`restItem-${idx}`}>
  241. {item}
  242. {idx !== restItem.length - 1 && (
  243. <span
  244. style={{
  245. color: 'var(--semi-color-text-2)',
  246. marginRight: '6px',
  247. }}
  248. >
  249. {separator}
  250. </span>
  251. )}
  252. </React.Fragment>
  253. ))}
  254. </>
  255. );
  256. return (
  257. <Popover
  258. content={content}
  259. style={{
  260. padding: 12,
  261. }}
  262. showArrow
  263. >
  264. <IconMore />
  265. </Popover>
  266. );
  267. };
  268. export const RenderMore = () => (
  269. <div
  270. style={{
  271. margin: '100px',
  272. }}
  273. >
  274. <Breadcrumb
  275. aria-label='example-1'
  276. renderMore={restItem => renderMore(restItem)}
  277. onClick={(item, e) => console.log(item, e)}
  278. >
  279. <Breadcrumb.Item>首页</Breadcrumb.Item>
  280. <Breadcrumb.Item>当层级很多的时候</Breadcrumb.Item>
  281. <Breadcrumb.Item>又一层</Breadcrumb.Item>
  282. <Breadcrumb.Item>再一层</Breadcrumb.Item>
  283. <Breadcrumb.Item>上上一层</Breadcrumb.Item>
  284. <Breadcrumb.Item>上一层</Breadcrumb.Item>
  285. <Breadcrumb.Item>详情页</Breadcrumb.Item>
  286. </Breadcrumb>
  287. <br />
  288. <br />
  289. <div>
  290. <Breadcrumb
  291. aria-label='example-2'
  292. renderMore={restItem => renderMore(restItem)}
  293. onClick={(item, e) => console.log(item, e)}
  294. routes={[
  295. {
  296. path: '/',
  297. href: '/',
  298. icon: <IconHome />,
  299. },
  300. {
  301. path: '/breadcrumb',
  302. href: '/components/breadcrumb',
  303. name: 'breadcrumb',
  304. icon: <IconArticle />,
  305. },
  306. {
  307. path: '/breadcrumb',
  308. href: '/components/breadcrumb',
  309. name: 'breadcrumb',
  310. icon: <IconArticle />,
  311. },
  312. {
  313. path: '/breadcrumb',
  314. href: '/components/breadcrumb',
  315. name: 'breadcrumb',
  316. icon: <IconArticle />,
  317. },
  318. 'with icon',
  319. ]}
  320. />
  321. </div>
  322. </div>
  323. );