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 (

Datasets

Find spending data about countries all around the world.

{projects .filter((project: Project) => watch().searchTerm && watch().searchTerm !== '' ? index .search(watch().searchTerm) .includes(project.name) : true ) .map((project: Project) => ( {project.fiscalPeriod ? ( ) : ( )} ))}
Name Repository Author Fiscal Year
{project.name} @{project.owner.name}/{project.repo.name}{' '} {project.author} {project.fiscalPeriod.start} -{' '} {project.fiscalPeriod.end} No data info
); } export default Datasets;