diff --git a/package-lock.json b/package-lock.json index 34eb7304..ba314f56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "www-new", + "name": "website", "version": "0.1.0", "lockfileVersion": 2, "requires": true, diff --git a/pages/events/[year]/[term]/[event].tsx b/pages/events/[year]/[term]/[event].tsx new file mode 100644 index 00000000..21bfce26 --- /dev/null +++ b/pages/events/[year]/[term]/[event].tsx @@ -0,0 +1,69 @@ +import { ParsedUrlQuery } from "querystring"; + +import { GetStaticPaths, GetStaticProps } from "next"; +import { MDXRemote } from "next-mdx-remote"; +import React from "react"; + +import { EventCard } from "@/components/EventCard"; +import { + Event, + getEventYears, + getEventTermsByYear, + getEventsByTerm, + getEventBySlug, +} from "@/lib/events"; + +export default function EventInfoPage(props: Props) { + return ( + + + + ); +} + +interface Props { + event: Event; +} + +interface Params extends ParsedUrlQuery { + year: string; + term: string; + event: string; +} + +export const getStaticProps: GetStaticProps = async ( + context +) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const { year, term, event } = context.params!; + return { props: { event: await getEventBySlug(year, term, event) } }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const years = await getEventYears(); + const events = ( + await Promise.all( + years.map(async (year) => { + const termsInYear = await getEventTermsByYear(year); + return await Promise.all( + termsInYear.map(async (term) => { + const eventsInTerm = await getEventsByTerm(year, term); + return eventsInTerm.map((event) => ({ + year, + term, + event, + })); + }) + ); + }) + ) + ).flat(2); + + return { + paths: events.map((params) => ({ params })), + fallback: false, + }; +};