From f8602184ce29a9e31f6690a2f3a02cc1b061d231 Mon Sep 17 00:00:00 2001 From: Rising Odegua Date: Fri, 21 May 2021 16:48:55 +0100 Subject: [PATCH] Refactor catalog example to use portal.js --- dist/index.cjs.js | 32 ++++----- dist/index.esm.js | 32 ++++----- examples/catalog/components/dataset/About.tsx | 37 +--------- examples/catalog/components/dataset/Org.tsx | 32 ++------- examples/catalog/components/home/Nav.tsx | 71 +++---------------- examples/catalog/components/home/Recent.tsx | 29 ++------ .../catalog/components/resource/About.tsx | 50 ++----------- examples/catalog/components/search/Form.tsx | 61 +++------------- examples/catalog/components/search/Item.tsx | 39 ++-------- examples/catalog/components/search/Total.tsx | 7 +- examples/catalog/pages/index.tsx | 19 +++-- src/components/dataset/KeyInfo.js | 18 ++--- src/components/dataset/ResourceInfo.js | 5 +- src/components/ui/Nav.js | 2 +- 14 files changed, 94 insertions(+), 340 deletions(-) diff --git a/dist/index.cjs.js b/dist/index.cjs.js index 9fc07386..1fee40bf 100644 --- a/dist/index.cjs.js +++ b/dist/index.cjs.js @@ -230,8 +230,8 @@ var KeyInfo = function KeyInfo(_ref) { var datasetSize = 0; if (resources) { - datasetSize = resources.length == 1 ? resources[0].size : resources.reduce(function (accumulator, currentValue) { - return accumulator.size + currentValue.size; + datasetSize = resources.length == 1 ? resources[0].size || 0 : resources.reduce(function (accumulator, currentValue) { + return (accumulator.size || 0) + (currentValue.size || 0); }); } @@ -266,22 +266,22 @@ var KeyInfo = function KeyInfo(_ref) { className: "text-1xl" }, resources.length)), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" - }, filesize__default['default'](datasetSize, { + }, datasetSize && filesize__default['default'](datasetSize, { bits: true }))), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" - }, resources[0].format, " zip")), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { + }, resources[0]["format"], " zip")), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" - }, descriptor.created)), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { + }, descriptor["created"])), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" - }, descriptor.updated)), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { + }, descriptor["updated"])), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" - }, descriptor.license)), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { + }, descriptor["license"])), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" }, /*#__PURE__*/React__default['default'].createElement("a", { className: "text-yellow-600", - href: descriptor.sources[0].web - }, descriptor.sources[0].title)))))); + href: descriptor["sources"] && descriptor["sources"][0]["web"] + }, descriptor["sources"] && descriptor["sources"][0]["title"])))))); }; KeyInfo.propTypes = { @@ -300,9 +300,7 @@ var ResourcesInfo = function ResourcesInfo(_ref) { return /*#__PURE__*/React__default['default'].createElement(React__default['default'].Fragment, null, /*#__PURE__*/React__default['default'].createElement("section", { className: "m-8", name: "file-list" - }, /*#__PURE__*/React__default['default'].createElement("h1", { - className: "text-2xl font-bold mb-4" - }, "Data Files"), /*#__PURE__*/React__default['default'].createElement("div", { + }, /*#__PURE__*/React__default['default'].createElement("div", { className: "grid grid-cols-7 gap-4" }, /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl font-bold mb-2" @@ -324,7 +322,7 @@ var ResourcesInfo = function ResourcesInfo(_ref) { className: "text-1xl" }, resource.description || "No description")), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" - }, filesize__default['default'](resource.size, { + }, resource.size && filesize__default['default'](resource.size, { bits: true }))), /*#__PURE__*/React__default['default'].createElement("div", null, /*#__PURE__*/React__default['default'].createElement("h3", { className: "text-1xl" @@ -333,9 +331,7 @@ var ResourcesInfo = function ResourcesInfo(_ref) { }, /*#__PURE__*/React__default['default'].createElement("a", { className: "text-yellow-600", href: "/dataset/".concat(resource.path) - }, resource.format, " (", filesize__default['default'](resource.size, { - bits: true - }), ")")))); + }, resource.format)))); }))); }; @@ -551,11 +547,13 @@ var Nav = function Nav(_ref) { className: "flex items-center justify-between flex-wrap bg-white p-4 border-b border-gray-200" }, /*#__PURE__*/React__default['default'].createElement("div", { className: "flex items-center flex-shrink-0 text-gray-700 mr-6" + }, /*#__PURE__*/React__default['default'].createElement(Link__default['default'], { + href: "/" }, /*#__PURE__*/React__default['default'].createElement("img", { src: logo, alt: "portal logo", width: "40" - })), /*#__PURE__*/React__default['default'].createElement("div", { + }))), /*#__PURE__*/React__default['default'].createElement("div", { className: "block lg:hidden mx-4" }, /*#__PURE__*/React__default['default'].createElement("button", { onClick: handleClick, diff --git a/dist/index.esm.js b/dist/index.esm.js index 35c2558b..23d38720 100644 --- a/dist/index.esm.js +++ b/dist/index.esm.js @@ -197,8 +197,8 @@ var KeyInfo = function KeyInfo(_ref) { var datasetSize = 0; if (resources) { - datasetSize = resources.length == 1 ? resources[0].size : resources.reduce(function (accumulator, currentValue) { - return accumulator.size + currentValue.size; + datasetSize = resources.length == 1 ? resources[0].size || 0 : resources.reduce(function (accumulator, currentValue) { + return (accumulator.size || 0) + (currentValue.size || 0); }); } @@ -233,22 +233,22 @@ var KeyInfo = function KeyInfo(_ref) { className: "text-1xl" }, resources.length)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" - }, filesize(datasetSize, { + }, datasetSize && filesize(datasetSize, { bits: true }))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" - }, resources[0].format, " zip")), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { + }, resources[0]["format"], " zip")), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" - }, descriptor.created)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { + }, descriptor["created"])), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" - }, descriptor.updated)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { + }, descriptor["updated"])), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" - }, descriptor.license)), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { + }, descriptor["license"])), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" }, /*#__PURE__*/React.createElement("a", { className: "text-yellow-600", - href: descriptor.sources[0].web - }, descriptor.sources[0].title)))))); + href: descriptor["sources"] && descriptor["sources"][0]["web"] + }, descriptor["sources"] && descriptor["sources"][0]["title"])))))); }; KeyInfo.propTypes = { @@ -267,9 +267,7 @@ var ResourcesInfo = function ResourcesInfo(_ref) { return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("section", { className: "m-8", name: "file-list" - }, /*#__PURE__*/React.createElement("h1", { - className: "text-2xl font-bold mb-4" - }, "Data Files"), /*#__PURE__*/React.createElement("div", { + }, /*#__PURE__*/React.createElement("div", { className: "grid grid-cols-7 gap-4" }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl font-bold mb-2" @@ -291,7 +289,7 @@ var ResourcesInfo = function ResourcesInfo(_ref) { className: "text-1xl" }, resource.description || "No description")), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" - }, filesize(resource.size, { + }, resource.size && filesize(resource.size, { bits: true }))), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("h3", { className: "text-1xl" @@ -300,9 +298,7 @@ var ResourcesInfo = function ResourcesInfo(_ref) { }, /*#__PURE__*/React.createElement("a", { className: "text-yellow-600", href: "/dataset/".concat(resource.path) - }, resource.format, " (", filesize(resource.size, { - bits: true - }), ")")))); + }, resource.format)))); }))); }; @@ -518,11 +514,13 @@ var Nav = function Nav(_ref) { className: "flex items-center justify-between flex-wrap bg-white p-4 border-b border-gray-200" }, /*#__PURE__*/React.createElement("div", { className: "flex items-center flex-shrink-0 text-gray-700 mr-6" + }, /*#__PURE__*/React.createElement(Link, { + href: "/" }, /*#__PURE__*/React.createElement("img", { src: logo, alt: "portal logo", width: "40" - })), /*#__PURE__*/React.createElement("div", { + }))), /*#__PURE__*/React.createElement("div", { className: "block lg:hidden mx-4" }, /*#__PURE__*/React.createElement("button", { onClick: handleClick, diff --git a/examples/catalog/components/dataset/About.tsx b/examples/catalog/components/dataset/About.tsx index bdaa1f85..50c2d3cb 100644 --- a/examples/catalog/components/dataset/About.tsx +++ b/examples/catalog/components/dataset/About.tsx @@ -1,38 +1,7 @@ import { useQuery } from '@apollo/react-hooks'; -import { Table, ErrorMessage } from '../_shared'; +import { ErrorMessage } from '../_shared'; import { GET_DATAPACKAGE_QUERY } from '../../graphql/queries'; - -const columns = [ - { - name: 'Files', - key: 'files', - render: ({ resources }) => (resources && resources.length) || 0, - }, - { - name: 'Size', - key: 'size', - }, - { - name: 'Format', - key: 'format', - }, - { - name: 'Created', - key: 'metadata_created', - }, - { - name: 'Updated', - key: 'metadata_modified', - }, - { - name: 'License', - key: 'license', - }, - { - name: 'Source', - key: 'source', - }, -]; +import { KeyInfo } from 'portal'; const About: React.FC<{ variables: any }> = ({ variables }) => { const { loading, error, data } = useQuery(GET_DATAPACKAGE_QUERY, { @@ -47,7 +16,7 @@ const About: React.FC<{ variables: any }> = ({ variables }) => { if (loading) return
Loading
; const { result } = data.dataset; - return ; + return ; }; export default About; diff --git a/examples/catalog/components/dataset/Org.tsx b/examples/catalog/components/dataset/Org.tsx index cf4f10af..a3fec592 100644 --- a/examples/catalog/components/dataset/Org.tsx +++ b/examples/catalog/components/dataset/Org.tsx @@ -1,9 +1,9 @@ -import Link from 'next/link'; import { useQuery } from '@apollo/react-hooks'; import { ErrorMessage } from '../_shared'; import { GET_ORG_QUERY } from '../../graphql/queries'; +import { Org } from 'portal'; -const Org: React.FC<{ variables: any }> = ({ variables }) => { +const OrgInfo: React.FC<{ variables: any }> = ({ variables }) => { const { loading, error, data } = useQuery(GET_ORG_QUERY, { variables, // Setting this value to true will make the component rerender when @@ -16,30 +16,8 @@ const Org: React.FC<{ variables: any }> = ({ variables }) => { if (loading) return
Loading
; const { organization } = data.dataset.result; - return ( - <> - {organization ? ( - <> - org_img - - {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */} - - {organization.title || organization.name} - - - - ) : ( - '' - )} - - ); + + return ; }; -export default Org; +export default OrgInfo; diff --git a/examples/catalog/components/home/Nav.tsx b/examples/catalog/components/home/Nav.tsx index 2422bec2..93ed7efa 100644 --- a/examples/catalog/components/home/Nav.tsx +++ b/examples/catalog/components/home/Nav.tsx @@ -1,65 +1,14 @@ -/* eslint-disable jsx-a11y/anchor-is-valid */ -import Link from 'next/link'; -import { useState } from 'react'; +import { Nav } from 'portal'; -const Nav: React.FC = () => { - const [open, setOpen] = useState(false); +const NavBar: React.FC = () => { + const navMenu = [ + { title: 'Blog', path: '/blog' }, + { title: 'Search', path: '/search' }, + { title: 'Docs', path: 'http://tech.datopian.com/frontend/' }, + { title: 'GitHub', path: 'https://github.com/datopian/portal' }, + ]; - const handleClick = (event) => { - event.preventDefault(); - setOpen(!open); - }; - - return ( - - ); + return
; + + return ; }; export default About; diff --git a/examples/catalog/components/search/Form.tsx b/examples/catalog/components/search/Form.tsx index 0824c8ff..27113f55 100644 --- a/examples/catalog/components/search/Form.tsx +++ b/examples/catalog/components/search/Form.tsx @@ -1,65 +1,20 @@ -import { useState } from 'react'; import { useRouter } from 'next/router'; +import { Form } from 'portal'; -const Form: React.FC = () => { +const SearchForm: React.FC = () => { const router = useRouter(); - const [q, setQ] = useState(router.query.q); - const [sort, setSort] = useState(router.query.sort); - const handleChange = (event) => { - if (event.target.name === 'q') { - setQ(event.target.value); - } else if (event.target.name === 'sort') { - setSort(event.target.value); - } - }; - - const handleSubmit = (event) => { - event.preventDefault(); + const handleSubmit = (q) => { router.push({ pathname: '/search', - query: { q, sort }, + query: { q }, }); }; - return ( -
-
- - -
-
- - -
- + <> +
+ ); }; -export default Form; +export default SearchForm; diff --git a/examples/catalog/components/search/Item.tsx b/examples/catalog/components/search/Item.tsx index bbd5ffae..2885c085 100644 --- a/examples/catalog/components/search/Item.tsx +++ b/examples/catalog/components/search/Item.tsx @@ -1,38 +1,7 @@ -/* eslint-disable jsx-a11y/anchor-is-valid */ -import Link from 'next/link'; +import { Item } from 'portal'; -const Item: React.FC<{ datapackage: any }> = ({ datapackage }) => { - return ( -
-

- - - {datapackage.title || datapackage.name} - - -

- - - {datapackage.organization - ? datapackage.organization.title - : 'dataset'} - - -
- {datapackage.description || datapackage.notes} -
-
- ); +const SearchItem: React.FC<{ datapackage: any }> = ({ datapackage }) => { + return ; }; -export default Item; +export default SearchItem; diff --git a/examples/catalog/components/search/Total.tsx b/examples/catalog/components/search/Total.tsx index 8b7a826a..a4b9c77e 100644 --- a/examples/catalog/components/search/Total.tsx +++ b/examples/catalog/components/search/Total.tsx @@ -1,6 +1,7 @@ import { useQuery } from '@apollo/react-hooks'; import { ErrorMessage } from '../_shared'; import { GET_TOTAL_COUNT_QUERY } from '../../graphql/queries'; +import { ItemTotal } from 'portal'; const Total: React.FC<{ variables: any }> = ({ variables }) => { const { loading, error, data } = useQuery(GET_TOTAL_COUNT_QUERY, { @@ -16,11 +17,7 @@ const Total: React.FC<{ variables: any }> = ({ variables }) => { const { result } = data.search; - return ( -

- {result.count} results found -

- ); + return ; }; export default Total; diff --git a/examples/catalog/pages/index.tsx b/examples/catalog/pages/index.tsx index df92eb56..bd21898d 100644 --- a/examples/catalog/pages/index.tsx +++ b/examples/catalog/pages/index.tsx @@ -1,19 +1,24 @@ import { GetServerSideProps } from 'next'; import Head from 'next/head'; import { initializeApollo } from '../lib/apolloClient'; -import Nav from '../components/home/Nav'; -import Recent from '../components/home/Recent'; -import Form from '../components/search/Form'; +import RecentDataset from '../components/home/Recent'; +import SearchForm from '../components/search/Form'; import { SEARCH_QUERY } from '../graphql/queries'; import { loadNamespaces } from './_app'; import useTranslation from 'next-translate/useTranslation'; +import NavBar from '../components/home/Nav'; const Home: React.FC<{ locale: any; locales: any }> = ({ locale, locales, }) => { const { t } = useTranslation(); - + const navMenu = [ + { title: 'Blog', path: '/blog' }, + { title: 'Search', path: '/search' }, + { title: 'Docs', path: 'http://tech.datopian.com/frontend/' }, + { title: 'GitHub', path: 'https://github.com/datopian/portal' }, + ]; return ( <>
@@ -21,7 +26,7 @@ const Home: React.FC<{ locale: any; locales: any }> = ({ {t(`common:title`)} -
); diff --git a/src/components/dataset/KeyInfo.js b/src/components/dataset/KeyInfo.js index 07139469..b00aa36b 100644 --- a/src/components/dataset/KeyInfo.js +++ b/src/components/dataset/KeyInfo.js @@ -22,9 +22,9 @@ const KeyInfo = ({ descriptor, resources }) => { let datasetSize = 0 if (resources) { datasetSize = resources.length == 1 ? - resources[0].size : + (resources[0].size || 0) : resources.reduce((accumulator, currentValue) => { - return accumulator.size + currentValue.size + return (accumulator.size || 0) + (currentValue.size || 0) }) } @@ -63,25 +63,25 @@ const KeyInfo = ({ descriptor, resources }) => {

{resources.length}

-

{filesize(datasetSize, { bits: true })}

+

{datasetSize && filesize(datasetSize, { bits: true })}

-

{resources[0].format} zip

+

{resources[0]["format"]} zip

-

{descriptor.created}

+

{descriptor["created"]}

-

{descriptor.updated}

+

{descriptor["updated"]}

-

{descriptor.license}

+

{descriptor["license"]}

- {descriptor.sources[0].title} + href={descriptor["sources"] && descriptor["sources"][0]["web"]}> + {descriptor["sources"] && descriptor["sources"][0]["title"]}

diff --git a/src/components/dataset/ResourceInfo.js b/src/components/dataset/ResourceInfo.js index e1c9f583..04eac149 100644 --- a/src/components/dataset/ResourceInfo.js +++ b/src/components/dataset/ResourceInfo.js @@ -11,7 +11,6 @@ const ResourcesInfo = ({ resources }) => { return ( <>
-

Data Files

File

@@ -40,7 +39,7 @@ const ResourcesInfo = ({ resources }) => {

{resource.description || "No description"}

-

{filesize(resource.size, { bits: true })}

+

{resource.size && filesize(resource.size, { bits: true })}

{resource.updated}

@@ -48,7 +47,7 @@ const ResourcesInfo = ({ resources }) => { diff --git a/src/components/ui/Nav.js b/src/components/ui/Nav.js index b5b488d3..e134b1d2 100644 --- a/src/components/ui/Nav.js +++ b/src/components/ui/Nav.js @@ -22,7 +22,7 @@ const Nav = ({ logo, navMenu }) => { return (