bastienrobert/la-ferme

View on GitHub
packages/components/src/elements/Button/Button.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import React, { FC } from 'react'
import styled from 'styled-components'

import Background from './Background'
import {
  ButtonSharedProps,
  variants,
  defaultSize,
  defaultVariant
} from './Button.shared'
import styles from './Button.styles'

export interface ButtonProps extends ButtonSharedProps {
  /** Callback on click */
  onClick?: (e) => void
}

const Button: FC<ButtonProps> = ({ children, variant, ...style }) => {
  return (
    <StyledButton {...style}>
      <Background color={variants[variant]} />
      <ButtonText>{children}</ButtonText>
    </StyledButton>
  )
}

Button.defaultProps = {
  size: defaultSize,
  variant: defaultVariant
}

export { Button }

const StyledButton = styled.button<any>`
  ${({ disabled }) => styles.box(true, disabled)}
  ${props => styles.text(props.size)}
  ${styles.commons.box}
  ${styles.web.box}

  &:disabled {
    ${styles.commons.disabled}
    ${styles.web.disabled}
  }
`

const ButtonText = styled.span`
  position: relative;
  z-index: 1;
`