import { NextSeo } from 'next-seo'; import { promises as fs } from 'fs'; import path from 'path'; import getConfig from 'next/config'; import { getProject, GithubProject } from '../../../lib/octokit'; import ReactMarkdown from 'react-markdown'; import remarkGfm from 'remark-gfm'; import Breadcrumbs from '../../../components/_shared/Breadcrumbs'; export default function ProjectPage({ project }) { const repoId = `@${project.repo_config.owner}/${project.repo_config.repo}` return ( <> {project.repo_config.name || repoId} Repository: {project.html_url} Files Name Size {project.files.map((file) => ( {file.name} {file.size} Bytes ))} {project.readmeContent && <> Readme {project.readmeContent} >} > ); } // Generates `/posts/1` and `/posts/2` export async function getStaticPaths() { const jsonDirectory = path.join( process.cwd(), 'datasets.json' ); const repos = await fs.readFile(jsonDirectory, 'utf8'); return { paths: JSON.parse(repos).map((repo) => { const projectPath = repo.readme && repo.readme.split('/').length > 1 ? repo.readme.split('/').slice(0, -1) : null; let path = [repo.repo]; if (projectPath) { projectPath.forEach((element) => { path.push(element); }); } return { params: { org: repo.owner, path }, }; }), fallback: false, // can also be true or 'blocking' }; } export async function getStaticProps({ params }) { const jsonDirectory = path.join( process.cwd(), 'datasets.json' ); const reposFile = await fs.readFile(jsonDirectory, 'utf8'); const repos: GithubProject[] = JSON.parse(reposFile); const repo = repos.find((_repo) => { const projectPath = _repo.readme && _repo.readme.split('/').length > 1 ? _repo.readme.split('/').slice(0, -1) : null; let path = [_repo.repo]; if (projectPath) { projectPath.forEach((element) => { path.push(element); }); } return ( _repo.owner == params.org && JSON.stringify(path) === JSON.stringify(params.path) ); }); const github_pat = getConfig().serverRuntimeConfig.github_pat; const project = await getProject(repo, github_pat); return { props: { project: { ...project, repo_config: repo }, }, }; }
Repository: {project.html_url}