text: /**
   * Copyright (c) Facebook, Inc. and its affiliates.
   *
   * This source code is licensed under the MIT license found in the
   * LICENSE file in the root directory of this source tree.
   */
  
  const React = require('react');
  const classNames = require('classnames');
  
  const MarkdownBlock = require('./MarkdownBlock.js');
  
  class GridBlock extends React.Component {
    renderBlock(origBlock) {
      const blockDefaults = {
        imageAlign: 'left',
      };
  
      const block = {
        ...blockDefaults,
        ...origBlock,
      };
  
      const blockClasses = classNames('blockElement', this.props.className, {
        alignCenter: this.props.align === 'center',
        alignRight: this.props.align === 'right',
        fourByGridBlock: this.props.layout === 'fourColumn',
        imageAlignSide:
          block.image &&
          (block.imageAlign === 'left' || block.imageAlign === 'right'),
        imageAlignTop: block.image && block.imageAlign === 'top',
        imageAlignRight: block.image && block.imageAlign === 'right',
        imageAlignBottom: block.image && block.imageAlign === 'bottom',
        imageAlignLeft: block.image && block.imageAlign === 'left',
        threeByGridBlock: this.props.layout === 'threeColumn',
        twoByGridBlock: this.props.layout === 'twoColumn',
      });
  
      const topLeftImage =
        (block.imageAlign === 'top' || block.imageAlign === 'left') &&
        this.renderBlockImage(block.image, block.imageLink, block.imageAlt);
  
      const bottomRightImage =
        (block.imageAlign === 'bottom' || block.imageAlign === 'right') &&
        this.renderBlockImage(block.image, block.imageLink, block.imageAlt);
  
      return (
        <div className={blockClasses} key={block.title}>
          {topLeftImage}
          <div className="blockContent">
            {this.renderBlockTitle(block.title)}
            <MarkdownBlock>{block.content}</MarkdownBlock>
          </div>
          {bottomRightImage}
        </div>
      );
    }
  
    renderBlockImage(image, imageLink, imageAlt) {
      if (!image) {
        return null;
      }
  
      return (
        <div className="blockImage">
          {imageLink ? (
            <a href={imageLink}>
              <img src={image} alt={imageAlt} />
            </a>
          ) : (
            <img src={image} alt={imageAlt} />
          )}
        </div>
      );
    }
  
    renderBlockTitle(title) {
      if (!title) {
        return null;
      }
  
      return (
        <h2>
          <MarkdownBlock>{title}</MarkdownBlock>
        </h2>
      );
    }
  
    render() {
      return (
        <div className="gridBlock">
          {this.props.contents.map(this.renderBlock, this)}
        </div>
      );
    }
  }
  
  GridBlock.defaultProps = {
    align: 'left',
    contents: [],
    layout: 'twoColumn',
  };
  
  module.exports = GridBlock;
  