import React from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { mapToCssModules } from './utils'; const propTypes = { active: PropTypes.bool, block: PropTypes.bool, color: PropTypes.string, disabled: PropTypes.bool, outline: PropTypes.bool, tag: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), innerRef: PropTypes.oneOfType([PropTypes.func, PropTypes.string]), onClick: PropTypes.func, size: PropTypes.string, children: PropTypes.node, className: PropTypes.string, cssModule: PropTypes.object, }; const defaultProps = { color: 'secondary', tag: 'button', }; class Button extends React.Component { constructor(props) { super(props); this.onClick = this.onClick.bind(this); } onClick(e) { if (this.props.disabled) { e.preventDefault(); return; } if (this.props.onClick) { this.props.onClick(e); } } render() { let { active, block, className, cssModule, color, outline, size, tag: Tag, innerRef, ...attributes } = this.props; const classes = mapToCssModules(classNames( className, 'btn', `btn${outline ? '-outline' : ''}-${color}`, size ? `btn-${size}` : false, block ? 'btn-block' : false, { active, disabled: this.props.disabled } ), cssModule); if (attributes.href && Tag === 'button') { Tag = 'a'; } return ( ); } } Button.propTypes = propTypes; Button.defaultProps = defaultProps; export default Button;