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 { Link } from "@/components/Link"; import { MiniEventCard } from "@/components/MiniEventCard"; import { Event, getEventsPageProps, getEventYears, getEventTermsByYear, } from "@/lib/events"; import styles from "./index.module.css"; export interface Props { year: string; term: string; pastEvents: Event[]; futureEvents: Event[]; isCurrentTerm: boolean; pastTerms: { year: string; term: string }[]; futureTerms: { year: string; term: string }[]; } export default function Term(props: Props) { let headerTerms = [{ year: props.year, term: props.term }]; // p, Current, f if (props.pastTerms.length > 0 && props.futureTerms.length > 0) { headerTerms = [ ...props.pastTerms.slice(-1), ...headerTerms, ...props.futureTerms.slice(0, 1), ]; } // p, p, Current else if (props.pastTerms.length > 0) { headerTerms = [...props.pastTerms.slice(-2), ...headerTerms]; } // Current, f, f else { headerTerms = [...headerTerms, ...props.futureTerms.slice(0, 2)]; } headerTerms.reverse(); const hasPastEvents = props.pastEvents.length !== 0; const hasFutureEvents = props.futureEvents.length !== 0; return (
{headerTerms.map((link) => ( ))} Archive
{hasFutureEvents && ( <>

Upcoming Events

{props.futureEvents.map(({ content, metadata }) => ( ))}
)} {hasPastEvents && props.isCurrentTerm &&

Past Events

} {hasPastEvents && !props.isCurrentTerm && (

Events Archive: {` ${capitalize(props.term)} ${props.year}`}

)} {!hasFutureEvents && !hasPastEvents && ( <>

Events

There are no upcoming or past events for the{" "} {`${capitalize(props.term)} ${props.year}`} term. Please check back later! )}
{props.pastEvents.map(({ content, metadata }) => ( } key={metadata.name + metadata.date.toString()} /> ))}
); } function HeaderLink(props: { year: string; term: string; isCurrentTerm?: boolean; }) { return ( {`${capitalize(props.term)} ${props.year}`} ); } interface Params extends ParsedUrlQuery { year: string; term: string; } export const getStaticProps: GetStaticProps = async ( context ) => { // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return { props: await getEventsPageProps(context.params!) }; }; export const getStaticPaths: GetStaticPaths = async () => { const years = await getEventYears(); const paths = ( await Promise.all( years.map(async (year) => { const terms = await getEventTermsByYear(year); return terms.map((curTerm) => ({ params: { year: year, term: curTerm }, })); }) ) ).flat(); return { paths: paths, fallback: false, }; }; function capitalize(str: string) { return str.slice(0, 1).toUpperCase() + str.slice(1); }