@appearhere/bloom
Version:
Appear Here's pattern library and styleguide
113 lines (101 loc) • 2.85 kB
JavaScript
import PropTypes from 'prop-types';
import React from 'react';
import cx from 'classnames';
import LeftRight from '../LeftRight/LeftRight';
import Circle from '../Animate/Circle';
import Icon from '../Icon/Icon';
import m from '../../globals/modifiers.css';
import defaultCss from './ProgressSteps.css';
const Step = props => {
const { step, completed, title, children, css, icon, ...rest } = props;
const leftClassName = cx(
m.valignt,
defaultCss.stepIconContainer,
css.stepIconContainer,
completed ? defaultCss.stepIconContainerCompleted : null,
completed ? css.stepIconContainerCompleted : null,
);
const rightClassName = cx(
m.valignt,
defaultCss.stepContent,
css.stepContent,
completed ? defaultCss.stepContentCompleted : null,
completed ? css.stepContentCompleted : null,
);
const stepIconClassName = cx(
defaultCss.stepIcon,
css.stepIcon,
completed ? defaultCss.stepIconCompleted : null,
completed ? css.stepIconCompleted : null,
);
const stepTitleClassName = cx(
defaultCss.stepTitle,
css.stepTitle,
completed ? defaultCss.stepTitleCompleted : null,
completed ? css.stepTitleCompleted : null,
);
const stepBodyClassName = cx(
defaultCss.stepBody,
css.stepBody,
completed ? defaultCss.stepBodyCompleted : null,
completed ? css.stepBodyCompleted : null,
);
return (
<LeftRight
{...rest}
className={cx(defaultCss.step, css.step)}
leftClassName={leftClassName}
rightClassName={rightClassName}
leftChildren={
icon ? (
<Icon className={defaultCss.icon} name={icon} />
) : (
<Circle
circleClassName={css.stepIconCircle}
className={stepIconClassName}
completed={completed}
>
{step}
</Circle>
)
}
rightChildren={
<div>
<dt className={stepTitleClassName}>{title}</dt>
<dd className={stepBodyClassName}>{children}</dd>
</div>
}
primarySide="right"
/>
);
};
Step.propTypes = {
completed: PropTypes.bool,
title: PropTypes.node,
children: PropTypes.node,
css: PropTypes.shape({
stepIconContainer: PropTypes.string,
stepIconContainerCompleted: PropTypes.string,
stepIcon: PropTypes.string,
stepIconCompleted: PropTypes.string,
stepTitle: PropTypes.string,
stepTitleCompleted: PropTypes.string,
stepBody: PropTypes.string,
stepBodyCompleted: PropTypes.string,
}),
step: PropTypes.node,
icon: PropTypes.string,
};
Step.defaultProps = {
css: {
stepIconContainer: '',
stepIconContainerCompleted: '',
stepIcon: '',
stepIconCompleted: '',
stepTitle: '',
stepTitleCompleted: '',
stepBody: '',
stepBodyCompleted: '',
},
};
export default Step;