From 9ae654dc71a4a7420c3e45efe17745a49e73c983 Mon Sep 17 00:00:00 2001 From: anuveyatsu Date: Fri, 19 Jun 2020 18:14:22 +0600 Subject: [PATCH] [dataset page][xl]: refactor to work with Apollo. --- components/dataset/About.tsx | 45 +++++++++++++++++++++++++++---- components/dataset/Org.tsx | 43 +++++++++++++++++++++++++---- components/dataset/Resources.tsx | 45 ++++++++++++++++++++++++++++--- pages/[org]/[dataset]/index.tsx | 46 +++++++++++++++++++++++--------- 4 files changed, 152 insertions(+), 27 deletions(-) diff --git a/components/dataset/About.tsx b/components/dataset/About.tsx index 9aac13db..3d59ee8d 100644 --- a/components/dataset/About.tsx +++ b/components/dataset/About.tsx @@ -1,4 +1,39 @@ -export default function About({ datapackage }) { +import ErrorMessage from '../Error'; +import { NetworkStatus } from 'apollo-client'; +import { useQuery } from '@apollo/react-hooks'; +import gql from 'graphql-tag'; + +export const GET_DATAPACKAGE_QUERY = gql` + query dataset($id: String!) { + dataset(id: $id) { + result { + name + metadata_created + metadata_modified + resources { + name + } + } + } + } +`; + +export default function About({ variables }) { + const { loading, error, data, fetchMore, networkStatus } = useQuery( + GET_DATAPACKAGE_QUERY, + { + variables, + // 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.dataset; return ( <> @@ -15,11 +50,11 @@ export default function About({ datapackage }) { - - + + - - + + diff --git a/components/dataset/Org.tsx b/components/dataset/Org.tsx index 0971532c..b8751dde 100644 --- a/components/dataset/Org.tsx +++ b/components/dataset/Org.tsx @@ -1,20 +1,53 @@ import Link from 'next/link'; +import ErrorMessage from '../Error'; +import { NetworkStatus } from 'apollo-client'; +import { useQuery } from '@apollo/react-hooks'; +import gql from 'graphql-tag'; -export default function Org({ org }) { +export const GET_ORG_QUERY = gql` + query dataset($id: String!) { + dataset(id: $id) { + result { + organization { + name + title + image_url + } + } + } + } +`; + +export default function Org({ variables }) { + const { loading, error, data, fetchMore, networkStatus } = useQuery( + GET_ORG_QUERY, + { + variables, + // 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 { organization } = data.dataset.result; return ( <> - {org ? ( + {organization ? ( <> - + - {org.title || org.name} + {organization.title || organization.name} diff --git a/components/dataset/Resources.tsx b/components/dataset/Resources.tsx index e4753de1..93a01e17 100644 --- a/components/dataset/Resources.tsx +++ b/components/dataset/Resources.tsx @@ -1,6 +1,43 @@ import Link from 'next/link'; +import ErrorMessage from '../Error'; +import { NetworkStatus } from 'apollo-client'; +import { useQuery } from '@apollo/react-hooks'; +import gql from 'graphql-tag'; + +export const DEFAULT_DATASET_QUERY = gql` + query dataset($id: String!) { + dataset(id: $id) { + result { + name + resources { + name + title + format + created + last_modified + } + } + } + } +`; + +export default function Resources({ variables }) { + const { loading, error, data, fetchMore, networkStatus } = useQuery( + DEFAULT_DATASET_QUERY, + { + variables, + // 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.dataset; -export default function Resources({ datapackage }) { return ( <>

Data Files

@@ -15,10 +52,10 @@ export default function Resources({ datapackage }) {
- {datapackage.resources.map((resource, index) => ( + {result.resources.map((resource, index) => ( @@ -26,7 +63,7 @@ export default function Resources({ datapackage }) { diff --git a/pages/[org]/[dataset]/index.tsx b/pages/[org]/[dataset]/index.tsx index 43210a48..967136e0 100644 --- a/pages/[org]/[dataset]/index.tsx +++ b/pages/[org]/[dataset]/index.tsx @@ -1,39 +1,59 @@ import { GetServerSideProps } from 'next'; +import { useQuery } from '@apollo/react-hooks'; +import { initializeApollo } from '../../../lib/apolloClient'; import config from '../../../config'; import utils from '../../../utils'; import Head from 'next/head'; import Nav from '../../../components/home/Nav'; import About from '../../../components/dataset/About'; import Org from '../../../components/dataset/Org'; -import Resources from '../../../components/dataset/Resources'; +import Resources, { + DEFAULT_DATASET_QUERY, +} from '../../../components/dataset/Resources'; + +function Dataset({ variables }) { + const { + data: { + dataset: { result }, + }, + } = useQuery(DEFAULT_DATASET_QUERY, { variables }); -function Dataset({ datapackage }) { return ( <> - Portal | {datapackage.title || datapackage.name} + Portal | {result.title || result.name}
{datapackage.resources.length}{datapackage.size || 'NA'}{result.resources.length}{result.size || 'NA'} {datapackage.created}{datapackage.modified}{result.metadata_created}{result.metadata_modified}
- + {resource.title || resource.name} {resource.created} {resource.last_modified} - + Preview