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 }) {
- | Files |
- Size |
- Format |
- Created |
- Updated |
- License |
- Source |
+ {columns.map(({ name }) => (
+
+ {name}
+ |
+ ))}
- | {result.resources.length} |
- {result.size || 'NA'} |
- |
- {result.metadata_created} |
- {result.metadata_modified} |
- |
- |
+ {columns.map(({ name, render }) => (
+
+ {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 }) {
- | File |
- Format |
- Created |
- Updated |
- Link |
+ {columns.map(({ name }) => (
+ {name} |
+ ))}
- {result.resources.map((resource, index) => (
-
- |
-
- {resource.title || resource.name}
-
- |
- {resource.format} |
- {resource.created} |
- {resource.last_modified} |
-
-
- Preview
-
- |
+ {/* Do not use array index as key */}
+ {result.resources.map((resource) => (
+
+ {columns.map(({ name, render }) => (
+ |
+ {render(resource, result)}
+ |
+ ))}
))}
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 }) {
- | Name |
- Title |
- Description |
- Format |
- Size |
- Created |
- Updated |
- Download |
+ {columns.map(({ key, name }) => (
+
+ {name}
+ |
+ ))}
- | {resource.name || resource.id} |
- {resource.title || ''} |
- {resource.description || ''} |
- {resource.format} |
- {resource.size} |
- {resource.created} |
- {resource.last_modified || ''} |
-
-
- {resource.format}
-
- |
+ {columns.map(({ key, render }) => (
+
+ {(render && typeof render === 'function' && render(resource)) ||
+ resource[key]}
+ |
+ ))}