All files / TestButton TestButton.tsx

100% Statements 22/22
100% Branches 2/2
100% Functions 4/4
100% Lines 21/21

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 711x 1x 1x 1x 1x 1x                           1x 1x                   1x 1x 1x 1x   2x 1x                       1x   1x   1x       1x             1x       1x   1x  
import MuiButton, { ButtonClassKey } from '@material-ui/core/Button';
import { withStyles } from '@material-ui/core/styles';
import * as _ from 'lodash';
import * as PropTypes from 'prop-types';
import * as React from 'react';
import styled from 'styled-components';
 
interface ClassesProp {
  className?: string;
  classes: Record<ButtonClassKey | 'wrapper', string>;
}
 
interface TestButtonProps
  extends Pick<ClassesProp, Exclude<keyof ClassesProp, 'classes'>> {
  bg?: string;
  classes?: { [key: string]: any };
  onClick(): void;
}
 
const styles = () => {
  return {
    root: {
      color: '#eee',
    },
    wrapper: {
      color: 'blue',
    },
  };
};
 
const ClassesNesting: React.SFC<ClassesProp> = ({
  className,
  classes,
  ...otherProps
}) => {
  const muiClasses = _.pickBy(classes, (item, key) => key !== 'wrapper');
  return (
    // accept global css, className
    <div className={`${classes.wrapper} ${className}`}>
      <MuiButton
        classes={muiClasses}
        variant="contained"
        color="secondary"
        {...otherProps}
      />
    </div>
  );
};
const WithStyleButton = withStyles(styles)(ClassesNesting);
 
const TestButton = styled(WithStyleButton)<TestButtonProps>`
  && {
    background: ${props => props.bg};
  }
`;
 
TestButton.propTypes = {
  bg: PropTypes.string,
  className: PropTypes.string,
  classes: PropTypes.objectOf(PropTypes.string),
  onClick: PropTypes.func.isRequired,
};
 
TestButton.defaultProps = {
  bg: '#ffa',
};
 
TestButton.displayName = 'TestButton';
 
export default TestButton;