import React, { useState } from 'react'; import { gql, useQuery } from 'urql'; const limit = 5; const query = 'graphql'; const NPM_SEARCH = gql` query Search($query: String!, $first: Int!, $after: String) { search(query: $query, first: $first, after: $after) { nodes { id name } pageInfo { hasNextPage endCursor } } } `; const SearchResultPage = ({ variables, onLoadMore, isLastPage }) => { const [result] = useQuery({ query: NPM_SEARCH, variables }); const { data, fetching, error } = result; const searchResults = data?.search; return (
{error &&

Oh no... {error.message}

} {fetching &&

Loading...

} {searchResults && ( <> {searchResults.nodes.map(packageInfo => (
{packageInfo.id}: {packageInfo.name}
))} {isLastPage && searchResults.pageInfo.hasNextPage && ( )} )}
); }; const PaginatedNpmSearch = () => { const [pageVariables, setPageVariables] = useState([ { query, first: limit, after: '', }, ]); return (
{pageVariables.map((variables, i) => ( setPageVariables([...pageVariables, { after, first: limit, query }]) } /> ))}
); }; export default PaginatedNpmSearch;