From 656524eee77c825a9447ef5317c55a0ae38ab739 Mon Sep 17 00:00:00 2001 From: j285he Date: Fri, 27 Aug 2021 21:49:24 -0400 Subject: [PATCH] Add /events/[year] page (#151) Closes #112 Co-authored-by: Jared He <66887902+jaredjhe@users.noreply.github.com> Reviewed-on: https://git.csclub.uwaterloo.ca/www/www-new/pulls/151 Reviewed-by: Aditya Thakral Co-authored-by: j285he Co-committed-by: j285he --- pages/events/[year]/index.module.css | 21 ++++++++++ pages/events/[year]/index.tsx | 61 ++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 pages/events/[year]/index.module.css create mode 100644 pages/events/[year]/index.tsx diff --git a/pages/events/[year]/index.module.css b/pages/events/[year]/index.module.css new file mode 100644 index 00000000..ccb2efe0 --- /dev/null +++ b/pages/events/[year]/index.module.css @@ -0,0 +1,21 @@ +.main { + margin-top: calc(60rem / 16); +} + +.main > h2 { + padding-bottom: calc(1rem / 16); + border-bottom: 1px solid var(--primary-heading); +} + +.blue { + color: var(--primary-accent); +} + +.list { + list-style: none; + padding: 0; +} + +.list > li { + line-height: 3; +} diff --git a/pages/events/[year]/index.tsx b/pages/events/[year]/index.tsx new file mode 100644 index 00000000..a5cef72a --- /dev/null +++ b/pages/events/[year]/index.tsx @@ -0,0 +1,61 @@ +import { ParsedUrlQuery } from "querystring"; + +import { GetStaticPaths, GetStaticProps } from "next"; +import React from "react"; + +import { Link } from "@/components/Link"; +import { getEventYears, getEventTermsByYear } from "@/lib/events"; + +import styles from "./index.module.css"; + +interface Props { + year: string; + terms: string[]; +} + +export default function Year(props: Props) { + return ( +
+

+ Events Archive:{` ${props.year}`} +

+
    + {props.terms.map((term) => ( +
  • + + {`${term.charAt(0).toUpperCase()}${term.slice(1)}`} + +
  • + ))} +
+
+ ); +} + +interface Params extends ParsedUrlQuery { + year: string; +} + +export const getStaticProps: GetStaticProps = async ( + context +) => { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + const { year } = context.params!; + return { + props: { + year: year, + terms: await getEventTermsByYear(year), + }, + }; +}; + +export const getStaticPaths: GetStaticPaths = async () => { + const years = await getEventYears(); + const paths = years.map((curYear) => ({ + params: { year: curYear }, + })); + return { + paths: paths, + fallback: false, + }; +};