import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { withRouter } from 'react-router-dom'; import { Image } from 'react-bootstrap'; import Helmet from 'react-helmet'; import { getFeaturedList } from '../../utils/ajax'; import { Loader, Spacer } from '../../../common/app/helperComponents'; import BannerWide from '../../components/BannerWide'; import ArticleMeta from '../../components/ArticleMeta'; const propTypes = { history: PropTypes.shape({ push: PropTypes.func.isRequired }) }; const styles = ` .featured-list { list-style: none; padding-left: 0; margin-top: 40px; } .featured-list-item { padding-bottom: 20px; } .featured-list-item .title { color: #333; padding-bottom: 20px; } .featured-list-item a { padding-top: 5px; } .featured-list-image { margin: 0 auto; } .featured-list-item a:hover, .featured-list-item a:focus { text-decoration: none; text-decoration-line: none; text-decoration-color: transparaent; } .featured-list-item a:hover > .meta-wrapper, .featured-list-item a:focus > .meta-wrapper { color: #006400; } `; class Featured extends Component { constructor(props) { super(props); this.state = { fetchState: { pending: false, complete: false, errored: false, error: null }, featuredList: [] }; this.fetchFeaturedList = this.fetchFeaturedList.bind(this); } componentDidMount() { return this.fetchFeaturedList(); } fetchFeaturedList() { return this.setState( { fetchState: { pending: true, complete: false, errored: false } }, () => getFeaturedList().then(({ data }) => this.setState({ featuredList: data, fetchState: { pending: false, complete: true, errored: false, error: null } }) ) ); } createHandleArticleClick(slug, article) { const { history } = this.props; return e => { e.preventDefault(); return history.push({ pathname: slug, state: { article } }); }; } renderFeatured(articles) { return articles.map(article => { const slug = `/${article.author.username}/`.concat( article.slugPart, '--', article.shortId ); const { featureImage, shortId, title } = article; return (
  • {title}

    {featureImage && featureImage.src ? ( ) : ( )}
  • ); }); } render() { const { fetchState: { pending, complete, errored }, featuredList } = this.state; if (pending || !complete) { return (
    ); } if (complete && errored) { return

    Oh noes!! Something went wrong!

    ; } return (
    Featured | freeCodeCamp News
    ); } } Featured.displayName = 'Featured'; Featured.propTypes = propTypes; export default withRouter(Featured);