From ba6f616dd6878c97b444dd77d9320589c46190d9 Mon Sep 17 00:00:00 2001 From: Rising Odegua Date: Mon, 31 Jan 2022 13:11:58 +0100 Subject: [PATCH 1/2] Add proper error handling and mesage --- examples/dataset-frictionless/lib/dataset.js | 80 +++++++++++++++----- 1 file changed, 59 insertions(+), 21 deletions(-) diff --git a/examples/dataset-frictionless/lib/dataset.js b/examples/dataset-frictionless/lib/dataset.js index 356d37e8..5a1e04af 100644 --- a/examples/dataset-frictionless/lib/dataset.js +++ b/examples/dataset-frictionless/lib/dataset.js @@ -5,28 +5,66 @@ import toArray from 'stream-to-array' export async function getDataset(directory) { - // get dataset descriptor and resources - const f11sDataset = await Dataset.load(directory) - const descriptor = f11sDataset.descriptor + try { - const resources = await Promise.all(f11sDataset.resources.map(async (resource) => { - let _tmp = resource.descriptor - let rowStream = await resource.rows({ keyed: true }) - _tmp.sample = await toArray(rowStream) - _tmp.size = resource.size - return _tmp - })) - const readme = descriptor.readme - const processed = await remark() - .use(html) - .process(readme) + if (!directory) { + throw new Error('No directory provided.') + } - const readmeHtml = processed.toString() - const dataset = { - readme: readme, - readmeHtml: readmeHtml, - descriptor: descriptor, - resources: resources + const f11sDataset = await Dataset.load(directory) + const descriptor = f11sDataset.descriptor + + const resources = await Promise.all(f11sDataset.resources.map(async (resource) => { + let _tmp = resource.descriptor + let rowStream = await resource.rows({ keyed: true }) + _tmp.sample = await toArray(rowStream) + _tmp.size = resource.size + return _tmp + })) + + const readme = descriptor.readme || "" + + const processed = await remark() + .use(html) + .process(readme) + + const readmeHtml = processed.toString() + + + const dataset = { + readme: readme, + readmeHtml: readmeHtml, + descriptor: descriptor, + resources: resources, + hasError: false, + errorMsg: "" + } + return dataset + } catch (err) { + console.log(err) + return { + hasError: true, + errorMsg: errorMessageMappings[err.message] || err.message + } } - return dataset } + + +const errorMessageMappings = { + "No datapackage.json at destination.": + ` +
+

No datapackage.json file in the data directory!

+

You need to add a datapackage.json file describing your dataset to the root folder.

+

For more information, see the documentation

+
+ `, + "No directory provided.": + ` +
+

No data directory found!

+

You need to provide a data directory with CSV data, datapackage.json, and optionally a ReadMe file.

+

For more information, see the documentation

+
+ `, +} \ No newline at end of file From 3ac0ee46532c4d6b0f8cc2130b886faa9c3f5f98 Mon Sep 17 00:00:00 2001 From: Rising Odegua Date: Mon, 31 Jan 2022 13:12:14 +0100 Subject: [PATCH 2/2] Update page to properly display error message --- examples/dataset-frictionless/pages/index.js | 45 +++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) diff --git a/examples/dataset-frictionless/pages/index.js b/examples/dataset-frictionless/pages/index.js index 067c1c82..2b8931b1 100644 --- a/examples/dataset-frictionless/pages/index.js +++ b/examples/dataset-frictionless/pages/index.js @@ -14,7 +14,7 @@ const datasetsDirectory = process.env.PORTAL_DATASET_PATH || path.join(process.c export default function Home({ dataset, specs }) { - if (!dataset) { + if (!dataset || dataset.hasError) { return (
@@ -23,8 +23,10 @@ export default function Home({ dataset, specs }) { -

- No dataset found in path +

) @@ -48,11 +50,11 @@ export default function Home({ dataset, specs }) { -
+
-
+
@@ -85,10 +87,18 @@ export default function Home({ dataset, specs }) { )}
-
-

README

- -
+ { + dataset.readmeHtml != "" ? ( +
+ +

README

+ +
+ ) : ( + "" + ) + } + ) @@ -96,12 +106,17 @@ export default function Home({ dataset, specs }) { export async function getStaticProps() { - if (!datasetsDirectory) { - return { props: {} } + const dataset = await getDataset(datasetsDirectory) + + if (dataset.hasError == true) { + return { + props: { + dataset + } + } + } else { + const datasetWithViews = addView(dataset) + return datasetWithViews } - const dataset = await getDataset(datasetsDirectory) - const datasetWithViews = addView(dataset) - return datasetWithViews - }