import { promises as fs } from 'fs'; import path from 'path'; import { GithubProject, getProjectDataPackage } from '../lib/octokit'; import getConfig from 'next/config'; import ExternalLinkIcon from '../components/icons/ExternalLinkIcon'; import TimeAgo from 'react-timeago'; import Link from 'next/link'; import { Hero } from '../components/Hero'; import { Header } from '../components/Header'; import { Container } from '../components/Container'; import { FiscalDataPackage } from '../lib/datapackage.interface'; import { loadDataPackage } from '../lib/loader'; import { Project } from '../lib/project.interface'; import { Index } from 'flexsearch'; import { useForm } from 'react-hook-form'; export async function getStaticProps() { const jsonDirectory = path.join(process.cwd(), '/datasets.json'); const repos = await fs.readFile(jsonDirectory, 'utf8'); const github_pat = getConfig().serverRuntimeConfig.github_pat; const datapackages = await Promise.all( JSON.parse(repos).map( async (_repo: GithubProject) => await getProjectDataPackage(_repo.owner, _repo.name, 'main', github_pat) ) ); const projects = datapackages.map( (datapackage: FiscalDataPackage & { repo: string }) => loadDataPackage(datapackage, 'os-data', datapackage.name) ); return { props: { projects, }, }; } export function Datasets({ projects }) { const index = new Index({ tokenize: 'full' }); projects.forEach((project: Project) => index.add( project.name, `${project.repo} ${project.name} ${project.title} ${project.author} ${project.title} ${project.cityCode} ${project.fiscalPeriod?.start} ${project.fiscalPeriod?.end}` ) ); const { register, watch, handleSubmit, reset } = useForm({ defaultValues: { searchTerm: '', }, }); return (
Find spending data about countries all around the world.
| Name | Repository | Author | Fiscal Year | ||
|---|---|---|---|---|---|
| {project.name} |
@{project.owner.name}/{project.repo.name}{' '}
|
{project.author} | {project.fiscalPeriod ? ({project.fiscalPeriod.start} -{' '} {project.fiscalPeriod.end} | ) : (No data | )}info |