redbadger/website-honestly

View on GitHub
site/components/picture/index.js

Summary

Maintainability
A
0 mins
Test Coverage
C
75%
// @flow
import React, { Component } from 'react';
import classnames from 'classnames/bind';
import { mediumScreen, largeScreen, containerMaxWidth } from '../../css/_sizes.css';

import styles from './style.css';

type PictureProps = {
  className?: string,
  xLargeSrc?: string,
  largeSrc?: string,
  mediumSrc?: string,
  smallSrc: string,
  alt?: string,
};

const cx = classnames.bind(styles);

class Picture extends Component<PictureProps> {
  componentDidMount() {
    if (window && window.picturefill) window.picturefill();
  }

  render() {
    const { className, xLargeSrc, largeSrc, mediumSrc, smallSrc, alt } = this.props;
    return (
      <picture className={styles.picture}>
        {xLargeSrc && (
          <source srcSet={xLargeSrc} media={`screen and (min-width: ${containerMaxWidth})`} />
        )}
        {largeSrc && <source srcSet={largeSrc} media={largeScreen} />}
        {mediumSrc && <source srcSet={mediumSrc} media={mediumScreen} />}
        <img className={cx(styles.img, className)} srcSet={smallSrc} alt={alt || ''} />
      </picture>
    );
  }
}

export default Picture;