diff --git a/src/Button.js b/src/Button.js index 8d24b37b1..e8d216f02 100644 --- a/src/Button.js +++ b/src/Button.js @@ -2,6 +2,7 @@ import React, { useCallback } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; import { mapToCssModules, tagPropType } from './utils'; +import CloseButton from './CloseButton'; const propTypes = { active: PropTypes.bool, @@ -54,13 +55,20 @@ function Button(props) { ...attributes } = props; + if (close) { + return ( + + ) + } + const btnOutlineColor = `btn${outline ? '-outline' : ''}-${color}`; const classes = mapToCssModules(classNames( className, - close && 'btn-close', - close || 'btn', - close || btnOutlineColor, + 'btn', + btnOutlineColor, size ? `btn-${size}` : false, block ? 'd-block w-100' : false, { active, disabled: props.disabled } @@ -70,8 +78,6 @@ function Button(props) { Tag = 'a'; } - const defaultAriaLabel = close ? 'Close' : null; - return ( ); } diff --git a/src/CloseButton.js b/src/CloseButton.js new file mode 100644 index 000000000..2eae50c30 --- /dev/null +++ b/src/CloseButton.js @@ -0,0 +1,44 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import classNames from 'classnames'; +import { mapToCssModules } from './utils'; + +const propTypes = { + active: PropTypes.bool, + 'aria-label': PropTypes.string, + onClick: PropTypes.func, + variant: PropTypes.oneOf(['white']) +} + +const defaultProps = { + 'aria-label': 'close' +} + +const CloseButton = (props) => { + const { + className, + cssModule, + variant, + innerRef, + ...attributes + } = props; + + const classes = mapToCssModules(classNames( + className, + 'btn-close', + variant && `btn-close-${variant}` + )) + + return ( +