import { graphql } from 'react-apollo' import gql from 'graphql-tag' import ErrorMessage from './ErrorMessage' import PostUpvoter from './PostUpvoter' const POSTS_PER_PAGE = 10 function PostList ({ data: { loading, error, allPosts, _allPostsMeta }, loadMorePosts }) { if (error) return if (allPosts && allPosts.length) { const areMorePosts = allPosts.length < _allPostsMeta.count return (
{areMorePosts ? ( ) : ( '' )}
) } return
Loading
} export const allPosts = gql` query allPosts($first: Int!, $skip: Int!) { allPosts(orderBy: createdAt_DESC, first: $first, skip: $skip) { id title votes url createdAt } _allPostsMeta { count } } ` export const allPostsQueryVars = { skip: 0, first: POSTS_PER_PAGE } // The `graphql` wrapper executes a GraphQL query and makes the results // available on the `data` prop of the wrapped component (PostList) export default graphql(allPosts, { options: { variables: allPostsQueryVars }, props: ({ data }) => ({ data, loadMorePosts: () => { return data.fetchMore({ variables: { skip: data.allPosts.length }, updateQuery: (previousResult, { fetchMoreResult }) => { if (!fetchMoreResult) { return previousResult } return Object.assign({}, previousResult, { // Append the new posts results to the old one allPosts: [...previousResult.allPosts, ...fetchMoreResult.allPosts] }) } }) } }) })(PostList)