diff --git a/components/dataset/About.tsx b/components/dataset/About.tsx index 188aba21..7f166e38 100644 --- a/components/dataset/About.tsx +++ b/components/dataset/About.tsx @@ -1,23 +1,37 @@ -import ErrorMessage from '../Error'; import { useQuery } from '@apollo/react-hooks'; -import gql from 'graphql-tag'; +import ErrorMessage from '../Error'; +import { GET_DATAPACKAGE_QUERY } from '../../graphql/queries'; -export const GET_DATAPACKAGE_QUERY = gql` - query dataset($id: String) { - dataset(id: $id) @rest(type: "Response", path: "package_show?{args}") { - result { - name - title - size - metadata_created - metadata_modified - resources { - name - } - } - } - } -`; +const columns = [ + { + name: 'Files', + render: ({ resources }) => (resources && resources.length) || 0, + }, + { + name: 'Size', + render: ({ size }) => size || 'N/A', + }, + { + name: 'Format', + render: () => null, + }, + { + name: 'Created', + render: ({ metadata_created: created }) => created || 'N/A', + }, + { + name: 'Updated', + render: ({ metadata_modified: updated }) => updated || 'N/A', + }, + { + name: 'License', + render: () => null, + }, + { + name: 'Source', + render: () => null, + }, +]; export default function About({ variables }) { const { loading, error, data } = useQuery(GET_DATAPACKAGE_QUERY, { @@ -37,24 +51,20 @@ export default function About({ variables }) { - - - - - - - + {columns.map(({ name }) => ( + + ))} - - - - - - - + {columns.map(({ name, render }) => ( + + ))}
FilesSizeFormatCreatedUpdatedLicenseSource + {name} +
{result.resources.length}{result.size || 'NA'}{result.metadata_created}{result.metadata_modified} + {render(result)} +
diff --git a/components/dataset/Resources.tsx b/components/dataset/Resources.tsx index d5214545..d44b65f8 100644 --- a/components/dataset/Resources.tsx +++ b/components/dataset/Resources.tsx @@ -3,6 +3,36 @@ import { useQuery } from '@apollo/react-hooks'; import ErrorMessage from '../Error'; import { GET_RESOURCES_QUERY } from '../../graphql/queries'; +const columns = [ + { + name: 'File', + render: ({ name: resName, title }, { name }) => ( + + {title || resName} + + ), + }, + { + name: 'Format', + render: ({ format }) => format, + }, + { + name: 'Created', + render: ({ created }) => created, + }, + { + name: 'Updated', + render: ({ last_modified }) => last_modified, + }, + { + name: 'Link', + render: ({ name }, { name: resName }) => ( + + Preview + + ), + }, +]; export default function Resources({ variables }) { const { loading, error, data } = useQuery(GET_RESOURCES_QUERY, { variables, @@ -23,29 +53,20 @@ export default function Resources({ variables }) { - - - - - + {columns.map(({ name }) => ( + + ))} - {result.resources.map((resource, index) => ( - - - - - - + {/* Do not use array index as key */} + {result.resources.map((resource) => ( + + {columns.map(({ name, render }) => ( + + ))} ))} diff --git a/components/resource/About.tsx b/components/resource/About.tsx index ab13094c..1faebe39 100644 --- a/components/resource/About.tsx +++ b/components/resource/About.tsx @@ -2,6 +2,52 @@ import { useQuery } from '@apollo/react-hooks'; import ErrorMessage from '../Error'; import { GET_RESOURCES_QUERY } from '../../graphql/queries'; +const columns = [ + { + name: 'Name', + key: 'name', + render: ({ name, id }) => { + name || id; + }, + }, + { + name: 'Title', + key: 'title', + }, + { + name: 'Description', + key: 'description', + }, + { + name: 'Format', + key: 'format', + }, + { + name: 'Size', + key: 'size', + }, + { + name: 'Created', + key: 'created', + }, + { + name: 'Updated', + key: 'last_modified', + }, + { + name: 'Download', + key: 'download', + render: ({ url, format }) => ( + + {format} + + ), + }, +]; + export default function About({ variables }) { const { loading, error, data } = useQuery(GET_RESOURCES_QUERY, { variables, @@ -23,33 +69,21 @@ export default function About({ variables }) {
FileFormatCreatedUpdatedLink{name}
- - {resource.title || resource.name} - - {resource.format}{resource.created}{resource.last_modified} - - Preview - -
+ {render(resource, result)} +
- - - - - - - - + {columns.map(({ key, name }) => ( + + ))} - - - - - - - - + {columns.map(({ key, render }) => ( + + ))}
NameTitleDescriptionFormatSizeCreatedUpdatedDownload + {name} +
{resource.name || resource.id}{resource.title || ''}{resource.description || ''}{resource.format}{resource.size}{resource.created}{resource.last_modified || ''} - - {resource.format} - - + {(render && typeof render === 'function' && render(resource)) || + resource[key]} +