Last active
October 12, 2017 20:28
-
-
Save tonyspiro/911c76171e755046fadc62d5c381d55f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import axios from 'axios' | |
import _ from 'lodash' | |
import Footer from './partials/footer' | |
import Header from './partials/header' | |
import helpers from '../helpers' | |
import config from '../config' | |
export default class extends React.Component { | |
static async getInitialProps({ req }) { | |
const query = `{ | |
objects(bucket_slug: "${config.bucket.slug}") { | |
_id | |
type_slug | |
slug | |
title | |
metadata | |
created_at | |
} | |
}` | |
return await axios.post(`https://graphql.cosmicjs.com/v1`, { query }) | |
.then(function (response) { | |
return { | |
cosmic: { | |
posts: _.filter(response.data.data.objects, { type_slug: 'posts' }), | |
global: _.keyBy(_.filter(response.data.data.objects, { type_slug: 'globals' }), 'slug') | |
} | |
} | |
}) | |
.catch(function (error) { | |
console.log(error) | |
}) | |
} | |
render() { | |
if (!this.props.cosmic) | |
return <div>Loading...</div> | |
return ( | |
<div> | |
<Header cosmic={ this.props.cosmic }/> | |
<main className="container"> | |
{ | |
this.props.cosmic.posts && | |
this.props.cosmic.posts.map(post => { | |
const friendly_date = helpers.friendlyDate(new Date(post.created_at)) | |
post.friendly_date = friendly_date.month + ' ' + friendly_date.date | |
return ( | |
<div className="card" data-href={`/${post.slug}`} key={post._id}> | |
{ | |
post.metadata.hero.imgix_url && | |
<a href={`/${post.slug}`} className="blog-post-hero blog-post-hero--short" style={{ backgroundImage: `url(${post.metadata.hero.imgix_url})`}}></a> | |
} | |
<div className="card-padding"> | |
<h2 className="blog__title blog__title--small"> | |
<a href={`/${post.slug}`}>{post.title}</a> | |
</h2> | |
<div className="blog__author"> | |
<a href={`/author/${post.metadata.author.slug}`}> | |
<div className="blog__author-image" style={{ backgroundImage: `url(${post.metadata.author.metafields[0].imgix_url}?w=100)`}}></div> | |
</a> | |
<div className="blog__author-title">by <a href={`/author/${post.metadata.author.slug}`}>{post.metadata.author.title}</a> on {post.friendly_date}</div> | |
<div className="clearfix"></div> | |
</div> | |
<div className="blog__teaser droid" dangerouslySetInnerHTML={{__html: post.metadata.teaser}}></div> | |
<div className="blog__read-more"> | |
<a href={`/${post.slug}`}>Read more...</a> | |
</div> | |
</div> | |
</div> | |
) | |
}) | |
} | |
</main> | |
<Footer /> | |
</div> | |
) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment