steps.stories.jsx 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. import React, { useState } from 'react';
  2. import { Form } from '../../form';
  3. import Radio from '../../radio';
  4. import Step from '../step';
  5. import Steps from '../index';
  6. import Icon from '../../icons';
  7. import Button from '../../button';
  8. import { IconTriangleDown, IconClear, IconTick, IconClose, IconBell } from '@douyinfe/semi-icons';
  9. export default {
  10. title: 'Steps'
  11. }
  12. const sizes = ['default', 'small'];
  13. const AllSteps = () => {
  14. const [stepProps, setProps] = useState({
  15. type: 'basic',
  16. size: 'small',
  17. current: 0,
  18. hasLine: true,
  19. direction: 'horizontal',
  20. initial: 0,
  21. status: 'finish',
  22. });
  23. return (
  24. <>
  25. <Form
  26. layout="vertical"
  27. labelPosition="left"
  28. onValueChange={v => setProps({ ...v })}
  29. initValues={stepProps}
  30. >
  31. <Form.RadioGroup field="type">
  32. <Radio value="fill">fill</Radio>
  33. <Radio value="basic">basic</Radio>
  34. <Radio value="nav">nav</Radio>
  35. </Form.RadioGroup>
  36. <Form.RadioGroup field="size">
  37. <Radio value="small">small</Radio>
  38. <Radio value="default">default</Radio>
  39. </Form.RadioGroup>
  40. <Form.RadioGroup field="hasLine">
  41. <Radio value={true}>true</Radio>
  42. <Radio value={false}>false</Radio>
  43. </Form.RadioGroup>
  44. <Form.InputNumber field="current"></Form.InputNumber>
  45. <Form.RadioGroup field="direction">
  46. <Radio value="horizontal">horizontal</Radio>
  47. <Radio value="vertical">vertical</Radio>
  48. </Form.RadioGroup>
  49. <Form.InputNumber field="initial"></Form.InputNumber>
  50. <Form.RadioGroup field="status">
  51. <Radio value="wait">wait</Radio>
  52. <Radio value="process">process</Radio>
  53. <Radio value="finish">finish</Radio>
  54. <Radio value="error">error</Radio>
  55. <Radio value="warning">warning</Radio>
  56. </Form.RadioGroup>
  57. </Form>
  58. <Steps type="basic" {...stepProps}>
  59. <Step
  60. title="Step.1"
  61. icon={<IconBell />}
  62. description="This is a long descriptionThis is a long descriptionThis is a long descriptionThis is a long descriptionThis is a long descriptionThis is a long description"
  63. ></Step>
  64. <Step title="Step.2" description="This is some description"></Step>
  65. <Step title="Step.3"></Step>
  66. <Step title="Step.4" description="This is some description"></Step>
  67. </Steps>
  68. </>
  69. );
  70. };
  71. export const _AllSteps = () => <AllSteps></AllSteps>;
  72. _AllSteps.story = {
  73. name: 'all steps',
  74. };
  75. const FillStep = () => {
  76. return sizes.map(s => (
  77. <Steps key={s} size={s} current={1}>
  78. <Step title="中文" description="This is a description." />
  79. <Step title="In Progress" description="This is a description." />
  80. <Step title="Waiting" description="This is a description." />
  81. </Steps>
  82. ));
  83. };
  84. export const StepsDefaultFill = () => <FillStep />;
  85. StepsDefaultFill.story = {
  86. name: 'steps default fill',
  87. };
  88. const BasicStep = () => {
  89. return sizes.map(s => (
  90. <Steps key={s} size={s} type="basic" current={1}>
  91. <Step title="Step.1" description="This is a description.This is a description." />
  92. <Step title="Step.2" description="This is a description.This is a description." />
  93. <Step title="Step.3" description="This is a description.This is a description." />
  94. </Steps>
  95. ));
  96. };
  97. export const StepsBasic = () => <BasicStep />;
  98. StepsBasic.story = {
  99. name: 'steps basic',
  100. };
  101. export const StepsWithIcon = () => {
  102. return (
  103. <Steps>
  104. <Step status="finish" title="Login" icon={<IconTriangleDown />} />
  105. <Step status="finish" title="Verification" icon={<IconClear />} />
  106. <Step status="process" title="Pay" icon={<IconTick />} />
  107. <Step status="wait" title="Done" icon={<IconClose />} />
  108. </Steps>
  109. );
  110. };
  111. StepsWithIcon.story = {
  112. name: 'steps with icon',
  113. };
  114. const steps = [
  115. {
  116. title: 'First',
  117. content: 'First-content',
  118. },
  119. {
  120. title: 'Second',
  121. content: 'Second-content',
  122. },
  123. {
  124. title: 'Last',
  125. content: 'Last-content',
  126. },
  127. ];
  128. class StepsDemo extends React.Component {
  129. constructor(props) {
  130. super(props);
  131. this.state = {
  132. current: 0,
  133. };
  134. }
  135. next() {
  136. const current = this.state.current + 1;
  137. this.setState({
  138. current,
  139. });
  140. }
  141. prev() {
  142. const current = this.state.current - 1;
  143. this.setState({
  144. current,
  145. });
  146. }
  147. render() {
  148. const { current } = this.state;
  149. return (
  150. <div>
  151. <Steps current={current}>
  152. {steps.map(item => (
  153. <Step key={item.title} title={item.title} />
  154. ))}
  155. </Steps>
  156. <div className="steps-content">{steps[current].content}</div>
  157. <div className="steps-action">
  158. {current < steps.length - 1 && (
  159. <Button type="primary" onClick={() => this.next()}>
  160. Next
  161. </Button>
  162. )}
  163. {current === steps.length - 1 && (
  164. <Button type="primary" onClick={() => console.log('Processing complete!')}>
  165. Done
  166. </Button>
  167. )}
  168. {current > 0 && (
  169. <Button
  170. style={{
  171. marginLeft: 8,
  172. }}
  173. onClick={() => this.prev()}
  174. >
  175. Previous
  176. </Button>
  177. )}
  178. </div>
  179. </div>
  180. );
  181. }
  182. }
  183. export const StepsWithControlled = () => {
  184. return <StepsDemo></StepsDemo>;
  185. };
  186. StepsWithControlled.story = {
  187. name: 'steps with controlled',
  188. };
  189. class StepsWithonChange extends React.Component {
  190. constructor(props) {
  191. super(props);
  192. this.state = {
  193. current: 1,
  194. };
  195. }
  196. onChange(current) {
  197. this.setState({ current });
  198. }
  199. render() {
  200. const { current } = this.state;
  201. const { Step } = Steps;
  202. const steps = [
  203. {
  204. title: 'First',
  205. content: 'First-content',
  206. },
  207. {
  208. title: 'Second',
  209. content: 'Second-content',
  210. },
  211. {
  212. title: 'Last',
  213. content: 'Last-content',
  214. },
  215. ];
  216. return (
  217. <div>
  218. <Steps type="basic" current={current} onChange={current => this.onChange(current)}>
  219. {steps.map(item => (
  220. <Step key={item.title} title={item.title} />
  221. ))}
  222. </Steps>
  223. </div>
  224. );
  225. }
  226. }
  227. export const StepsWithOnChange = () => {
  228. return <StepsWithonChange />;
  229. };
  230. StepsWithOnChange.story = {
  231. name: 'steps with onChange',
  232. };
  233. const StatusStep = () => {
  234. return sizes.map(s => (
  235. <Steps key={s} size={s} current={1} status="error">
  236. <Step title="Finished" description="This is a description" />
  237. <Step title="In Process" description="This is a description" />
  238. <Step title="Waiting" description="This is a description" />
  239. </Steps>
  240. ));
  241. };
  242. export const StepsWithStatus = () => <StatusStep />;
  243. StepsWithStatus.story = {
  244. name: 'steps with status',
  245. };
  246. const VerticalStep = () => {
  247. return sizes.map(s => (
  248. <Steps key={s} size={s} current={1} status="error" direction="vertical">
  249. <Step title="Finished" description="This is a description" />
  250. <Step title="In Process" description="This is a description" />
  251. <Step title="Waiting" description="This is a description" />
  252. </Steps>
  253. ));
  254. };
  255. export const StepsVertical = () => <VerticalStep />;
  256. StepsVertical.story = {
  257. name: 'steps vertical',
  258. };
  259. const LineStep = () => {
  260. return sizes.map(s => (
  261. <Steps key={s} size={s} hasLine={false} current={1} status="error">
  262. <Step title="Finished" description="This is a description" />
  263. <Step title="In Process" description="This is a description" />
  264. <Step title="Waiting" description="This is a description" />
  265. </Steps>
  266. ));
  267. };
  268. export const StepsWithoutLine = () => <LineStep></LineStep>;
  269. StepsWithoutLine.story = {
  270. name: 'steps without line',
  271. };