index.tsx 2.0 KB

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