import { gql, useQuery, NetworkStatus } from '@apollo/client' import ErrorMessage from './ErrorMessage' import PostUpvoter from './PostUpvoter' export const ALL_POSTS_QUERY = 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: 10, } export default function PostList() { const { loading, error, data, fetchMore, networkStatus } = useQuery( ALL_POSTS_QUERY, { variables: allPostsQueryVars, // Setting this value to true will make the component rerender when // the "networkStatus" changes, so we are able to know if it is fetching // more data notifyOnNetworkStatusChange: true, } ) const loadingMorePosts = networkStatus === NetworkStatus.fetchMore const loadMorePosts = () => { fetchMore({ variables: { skip: allPosts.length, }, }) } if (error) return if (loading && !loadingMorePosts) return
Loading
const { allPosts, _allPostsMeta } = data const areMorePosts = allPosts.length < _allPostsMeta.count return (
{areMorePosts && ( )}
) }