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 { FlatUiTable } from '@portaljs/components'; import Breadcrumbs from '@/components/Breadcrumbs'; import { ReactMarkdown } from 'react-markdown/lib/react-markdown'; import remarkFrontmatter from 'remark-frontmatter'; import Layout from '@/components/Layout'; import { format } from 'timeago.js'; // Request a weekday along with a long date const options = { year: 'numeric', month: 'long', day: 'numeric', } as const; export default function DatasetPage({ dataset, }: { dataset: Dataset & { readme: string | null; }; }) { return ( <>

{dataset.name}

related content last updated
{dataset.readme && ( <> {dataset.readme && ( {dataset.readme} )} )}

Files

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

Data Previews

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

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

))} )}
); } export function DesktopItem({ dataset }: { dataset: Dataset }) { return ( <> {dataset.articles.map((article, index) => ( {article.title} {format(article.date).includes('years') ? new Date(article.date).toLocaleString('en-US', options) : format(article.date)} {index === 0 && ( info )} ))} ); } 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' }; } // change href base check datahub-next 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, }, }, }; };