import { NextSeo } from 'next-seo'; import { promises as fs } from 'fs'; import path from 'path'; import getConfig from 'next/config'; import { getProjectReadme, GithubProject } from '@/lib/octokit'; import remarkGfm from 'remark-gfm'; import extract from 'remark-extract-frontmatter'; import { Dataset } from '..'; import { GetStaticProps } from 'next'; import { Table } from '@portaljs/components'; import Breadcrumbs from '@/components/Breadcrumbs'; import { ReactMarkdown } from 'react-markdown/lib/react-markdown'; import remarkFrontmatter from 'remark-frontmatter'; export default function DatasetPage({ dataset, }: { dataset: Dataset & { readme: string | null; }; }) { return ( <>

{dataset.name}

Repository:{' '} {dataset.url}

FILES

{dataset.files?.map((file) => ( ))}
Name
{file.split('/').slice(-1)}
{dataset.files && dataset.files.length > 0 && ( <>

DATA PREVIEWS

{dataset.files?.map((file) => (

{file.split('/').slice(-1)}

))} )} {dataset.readme && ( <>

Readme

{dataset.readme && ( {dataset.readme} )} )} ); } export async function getStaticPaths() { const datasetsFile = path.join(process.cwd(), 'datasets.json'); const datasets = await fs.readFile(datasetsFile, 'utf8'); return { paths: JSON.parse(datasets).map((dataset: Dataset) => { return { params: { datasetName: dataset.name }, }; }), fallback: false, // can also be true or 'blocking' }; } export const getStaticProps: GetStaticProps = async ({ params }) => { const datasetsFile = path.join(process.cwd(), 'datasets.json'); const datasetsString = await fs.readFile(datasetsFile, 'utf8'); const datasets: Dataset[] = JSON.parse(datasetsString); const dataset: Dataset | undefined = datasets.find( (_dataset) => _dataset.name === params?.datasetName ); const github_pat = getConfig().serverRuntimeConfig.github_pat; const readmes = await Promise.all(['/README.md', '/readme.md', '/Readme.md'].map(async (readme) => await getProjectReadme( 'fivethirtyeight', 'data', 'master', dataset?.name + readme, github_pat ))); const readme = readmes.find(item => item !== null) if (!readme) console.log('Readme not found for ' + dataset?.name) return { props: { dataset: { ...dataset, readme, files: dataset && dataset.files ? dataset.files : null, }, }, }; };