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 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 - }