import { existsSync, promises as fs } from 'fs'; import path from 'path'; import parse from '../../lib/markdown'; import DataRichDocument from '../../components/DataRichDocument'; import clientPromise from '../../lib/mddb'; import getConfig from 'next/config'; import { CKAN } from '@portaljs/ckan'; export const getStaticPaths = async () => { const contentDir = path.join(process.cwd(), '/content/'); const contentFolders = await fs.readdir(contentDir, 'utf8'); const paths = contentFolders.map((folder: string) => ({ params: { path: [folder.split('.')[0]] }, })); return { paths, fallback: false, }; }; const backend_url = getConfig().publicRuntimeConfig.DMS; export const getStaticProps = async (context) => { const mddb = await clientPromise; const storyFile = await mddb.getFileByUrl(context.params.path); const md = await fs.readFile( `${process.cwd()}/${storyFile.file_path}`, 'utf8' ); const ckan = new CKAN(backend_url); const datasets = storyFile.metadata.datasets ? await Promise.all( storyFile.metadata.datasets.map( async (datasetName: string) => await ckan.getDatasetDetails(datasetName) ) ) : []; const orgs = storyFile.metadata.orgs ? await Promise.all( storyFile.metadata.orgs.map( async (orgName: string) => await ckan.getOrgDetails(orgName) ) ) : []; let { mdxSource, frontMatter } = await parse(md, '.mdx', { datasets, orgs }); return { props: { mdxSource, frontMatter: JSON.stringify(frontMatter), }, }; }; export default function DatasetPage({ mdxSource, frontMatter }) { frontMatter = JSON.parse(frontMatter); return (
<>

{frontMatter.title}

{frontMatter.author && (

Author: {frontMatter.author}

)} {frontMatter.description && (

Description: {frontMatter.description}

)} {frontMatter.modified && (

Modified: {new Date(frontMatter.modified).toLocaleDateString()}

)} {frontMatter.files && (

Data files

{frontMatter.files.map((f) => { const fileName = f.split('/').slice(-1); return ( ); })}
File Format
{fileName} {fileName[0] .split('.') .slice(-1)[0] .toUpperCase()}
)}
); }