diff --git a/website/meta/recordUniverse.tsx b/website/meta/recordUniverse.tsx index 3216b5672..588b0b9c0 100644 --- a/website/meta/recordUniverse.tsx +++ b/website/meta/recordUniverse.tsx @@ -3,3 +3,7 @@ import universe from './universe.json' export const recordUniverseCategories = Object.fromEntries( universe.categories.flatMap((category) => category.items.map((item) => [item.id, item])) ) + +export const recordUniverseResources = Object.fromEntries( + universe.resources.map((resource) => [resource.id, resource]) +) diff --git a/website/pages/universe/project/[slug].tsx b/website/pages/universe/project/[slug].tsx new file mode 100644 index 000000000..66c126c1d --- /dev/null +++ b/website/pages/universe/project/[slug].tsx @@ -0,0 +1,48 @@ +import { GetStaticPaths, GetStaticProps } from 'next' +import recordSections from '../../../meta/recordSections' +import { recordUniverseResources } from '../../../meta/recordUniverse' +import universe from '../../../meta/universe.json' +import Layout from '../../../src/components/layout' + +type ParsedUrlQuery = { + slug: string +} + +type PropsPage = { + slug: ReadonlyArray + sectionTitle: string | null + theme: string | null + section: string + isIndex: boolean +} + +export default Layout + +export const getStaticPaths: GetStaticPaths = async () => { + return { + paths: universe.resources.flatMap((resource) => `/universe/project/${resource.id}`), + fallback: false, + } +} + +export const getStaticProps: GetStaticProps = async (args) => { + if (!args.params) { + return { notFound: true } + } + + const resource = recordUniverseResources[args.params.slug] + + return { + props: { + id: resource.id, + title: resource.title || resource.id, + teaser: resource.slogan, + slug: args.params.slug.split('/'), + isIndex: false, + data: { ...resource, isProject: true }, + section: 'universe', + sectionTitle: recordSections.universe.title, + theme: recordSections.universe.theme, + }, + } +}