index.tsx 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React, { Component } from 'react';
  2. import PropTypes from 'prop-types';
  3. import '@douyinfe/semi-foundation/steps/steps.scss';
  4. import Step from './step';
  5. import FillSteps, { FillStepsProps } from './fillSteps';
  6. import BasicSteps, { BasicStepsProps } from './basicSteps';
  7. import NavSteps, { NavStepsProps } from './navSteps';
  8. import Context from './context';
  9. export type { Status, Size, BasicStepProps } from './basicStep';
  10. export type { Direction, BasicStepsProps } from './basicSteps';
  11. export type { FillStepProps } from './fillStep';
  12. export type { FillStepsProps } from './fillSteps';
  13. export type { NavStepProps } from './navStep';
  14. export type { NavStepsProps } from './navSteps';
  15. export type { StepProps } from './step';
  16. export interface FillStepsAllProps extends FillStepsProps {
  17. type?: 'fill'
  18. }
  19. export interface BasicStepsAllProps extends BasicStepsProps {
  20. type?: 'basic'
  21. }
  22. export interface NavStepsAllProps extends NavStepsProps {
  23. type?: 'nav'
  24. }
  25. export type StepsProps = FillStepsAllProps | BasicStepsAllProps | NavStepsAllProps;
  26. class Steps extends Component<StepsProps> {
  27. static Step = Step;
  28. static propTypes = {
  29. onChange: PropTypes.func,
  30. type: PropTypes.oneOf(['fill', 'basic', 'nav']),
  31. size: PropTypes.oneOf(['small', 'default'])
  32. };
  33. static defaultProps = {
  34. type: 'fill',
  35. size: 'default'
  36. };
  37. renderComponent() {
  38. const { type, ...restProps } = this.props;
  39. switch (type) {
  40. case 'fill':
  41. return <FillSteps {...restProps} />;
  42. case 'basic':
  43. return <BasicSteps {...restProps} />;
  44. case 'nav':
  45. return <NavSteps {...restProps} />;
  46. default:
  47. return null;
  48. }
  49. }
  50. render() {
  51. const { type } = this.props;
  52. return (
  53. <Context.Provider value={{ type }}>
  54. {this.renderComponent()}
  55. </Context.Provider>
  56. );
  57. }
  58. }
  59. export default Steps;