import React from 'react' import { connect } from 'react-redux' import marked from 'marked' import MediaOverlay from './Overlay/Media' const MEDIA_HIDDEN = -2 /** * Manages the presentation of props that come in from the store's app.cover. * These are documented in docs/custom-cover.md. * The component is a bit of a mess, keeping a lot of internal state and using * a couple of weird offset calculations... but it works for the time being. */ class TemplateCover extends React.Component { constructor (props) { super(props) this.state = { video: MEDIA_HIDDEN } } getVideo (index, headerEndIndex) { if (index < headerEndIndex) { return this.props.cover.headerVideos[index] } else if (index >= 0) { return this.props.cover.videos[index - headerEndIndex] } else { return null } } onVideoClickHandler (index) { const buffer = this.props.cover.headerVideos ? this.props.cover.headerVideos.length : 0 return () => { this.setState({ video: index + buffer }) } } renderHeaderVideos () { const { headerVideos } = this.props.cover return (
{ headerVideos.slice(0, 2).map((media, index) => (
this.setState({ video: index })}> {media.buttonTitle}
)) }
) } renderMediaOverlay () { const video = this.getVideo(this.state.video, this.props.cover.headerVideos ? this.props.cover.headerVideos.length : 0) return ( this.setState({ video: MEDIA_HIDDEN })} /> ) } render () { if (!this.props.cover) { return (
You haven't specified any cover props. Put them in the values that overwrite the store in app.cover
) } return (
{ this.props.cover.bgVideo ? (
) : null }

{this.props.cover.title}

{this.props.cover.subtitle}

{ this.props.cover.subsubtitle ? (
{this.props.cover.subsubtitle}
) : null }
{ this.props.cover.headerVideos ? this.renderHeaderVideos() : null }
EXPLORE
{ this.props.cover.videos ? (
{/* NOTE: only take first four videos, drop any others for style reasons */} { this.props.cover.videos.slice(0, 4).map((media, index) => (
{media.buttonTitle}
{media.buttonSubtitle}
)) }
) : null }
{ this.state.video !== MEDIA_HIDDEN ? this.renderMediaOverlay() : null }
) } } function mapStateToProps (state) { return { cover: state.app.cover } } export default connect(mapStateToProps)(TemplateCover)