# All files / react/ButtonAction index.jsx

100% Statements 5/5
90% Branches 9/10
100% Functions 1/1
100% Lines 5/5

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75

    1x

    14x
    14x

    1x

    1x

     import React from 'react'
    import cx from 'classnames'
    import PropTypes from 'prop-types'
    import styles from './styles.styl'
    import Icon from '../Icon'

    const ButtonAction = props => {
      const {
        type,
        disabled,
        children,
        label,
        leftIcon,
        rightIcon,
        compact,
        className,
        onClick,
        ...restProps
      } = props
      return (
        <button
          disabled={disabled}
          type="button"
          role="button"
          className={cx(
            styles['c-actionbtn'],
            {
              [styles[`c-actionbtn--${type}`]]: type,
              [styles[`c-actionbtn--compact`]]: compact
            },
            className
          )}
          onClick={onClick}
          title={compact ? label : undefined}
          {...restProps}
        >
          <span>
            {Icon.isProperIcon(leftIcon) ? <Icon icon={leftIcon} /> : leftIcon}
            {label && (
              <span data-action="label" className={styles['c-actionbtn-label']}>
                {label}
              </span>
            )}
            {rightIcon && (
              <span data-action="icon" className={styles['c-actionbtn-icon']}>
                {Icon.isProperIcon(rightIcon) ? (
                  <Icon icon={rightIcon} />
                ) : (
                  rightIcon
                )}
              </span>
            )}
            {children}
          </span>
        </button>
      )
    }

    ButtonAction.propTypes = {
      type: PropTypes.oneOf(['new', 'normal', 'error']).isRequired,
      label: PropTypes.node,
      leftIcon: PropTypes.node,
      rightIcon: PropTypes.node,
      disabled: PropTypes.bool,
      compact: PropTypes.bool
    }

    ButtonAction.defaultProps = {
      type: 'normal',
      disabled: false,
      compact: false
    }

    export default ButtonAction