diff --git a/components/home/Recent.tsx b/components/home/Recent.tsx index fc02cd50..bf83cb5c 100644 --- a/components/home/Recent.tsx +++ b/components/home/Recent.tsx @@ -1,53 +1,66 @@ import Link from 'next/link'; +import ErrorMessage from '../Error'; +import { useQuery } from '@apollo/react-hooks'; +import gql from 'graphql-tag'; + +export const QUERY = gql` + query search($q: String, $sort: String) { + search(q: $q, sort: $sort) + @rest(type: "Search", path: "package_search?{args}") { + result { + results { + name + title + organization { + name + title + description + } + } + } + } + } +`; + +function Recent() { + const { loading, error, data } = useQuery(QUERY, { + variables: { sort: 'metadata_created desc' }, + // 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, + }); + + if (error) return ; + if (loading) return
Loading
; + + const { result } = data.search; -export default function Recent() { return (

Recent Datasets

-
-

Our World in Data - COVID 19

-

Dataset

-

- data collected and managed by Our World in Data - COVID 19 pulled - from GitHub on 06/10/2020 https://ourworldindata.org/coronavirus -

- - - {' '} - View Dataset{' '} - - -
-
-

Our World in Data - COVID 19

-

Dataset

-

- data collected and managed by Our World in Data - COVID 19 pulled - from GitHub on 06/10/2020 https://ourworldindata.org/coronavirus -

- - - {' '} - View Dataset{' '} - - -
-
-

Our World in Data - COVID 19

-

Dataset

-

- data collected and managed by Our World in Data - COVID 19 pulled - from GitHub on 06/10/2020 https://ourworldindata.org/coronavirus -

- - - {' '} - View Dataset{' '} - - -
+ {result.results.map((resource, index) => ( +
+

{resource.title}

+

{resource.organization.description}

+ + + View Dataset + + +
+ ))}
); } + +export default Recent; diff --git a/mocks/index.js b/mocks/index.js index 8c4c15ff..ff42cde6 100644 --- a/mocks/index.js +++ b/mocks/index.js @@ -89,6 +89,18 @@ module.exports.initMocks = function () { results: [gdp], search_facets: {}, }, + }) + // 3. Call for recent packages. + .get('/package_search?sort=metadata_created%20desc') + .reply(200, { + success: true, + result: { + count: 2, + sort: 'metadata_created desc', + facets: {}, + results: [gdp, population], + search_facets: {}, + }, }); // "package_show" mocks diff --git a/pages/index.tsx b/pages/index.tsx index b409d100..dfb9c05c 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -1,9 +1,11 @@ +import { GetServerSideProps } from 'next'; +import { initializeApollo } from '../lib/apolloClient'; import Head from 'next/head'; import Nav from '../components/home/Nav'; -import Recent from '../components/home/Recent'; +import Recent, { QUERY } from '../components/home/Recent'; import Form from '../components/search/Form'; -export default function Home() { +function Home({ datapackages }) { return (
@@ -32,3 +34,22 @@ export default function Home() {
); } + +export const getServerSideProps: GetServerSideProps = async (context) => { + const apolloClient = initializeApollo(); + + await apolloClient.query({ + query: QUERY, + variables: { + sort: 'metadata_created desc', + }, + }); + + return { + props: { + initialApolloState: apolloClient.cache.extract(), + }, + }; +}; + +export default Home;