import { GetStaticProps } from "next"; import { MDXRemote, MDXRemoteSerializeResult } from "next-mdx-remote"; import React from "react"; import { Bubble } from "@/components/Bubble"; import { DefaultLayout } from "@/components/DefaultLayout"; import { Image } from "@/components/Image"; import { Link } from "@/components/Link"; import { TeamMember } from "@/components/TeamMember"; import { TeamMemberCard } from "@/components/TeamMemberCard"; import { Title } from "@/components/Title"; import { getExec, getExecNamePosPairs, Metadata, getMemberImagePath, } from "@/lib/team"; import programmeData from "../../content/team/programme-committee.json"; import systemsData from "../../content/team/systems-committee.json"; import terminalData from "../../content/team/terminal-committee.json"; import webData from "../../content/team/web-committee.json"; import styles from "./team.module.css"; interface SerializedExec { content: MDXRemoteSerializeResult; metadata: Metadata; } interface Props { execs: SerializedExec[]; programme: Metadata[]; website: Metadata[]; systems: Metadata[]; terminal: Metadata[]; } export default function Team({ execs, programme, website, systems, terminal, }: Props) { return ( <> Team

Meet the Team!

The Executives Programme Committee Website Committee Systems Committee Terminal Committee

The Executives

{execs.map((exec) => { return (
); })}

Programme Committee

Website Committee

Systems Committee

Terminal Committee

Elections

To find out when and where the next elections will be held, keep an eye on on the News.
For details on the elections, read our Constitution.
); } Team.Layout = function TeamLayout(props: { children: React.ReactNode }) { return
{props.children}
; }; interface MembersProps { team: Metadata[]; } function MembersList(props: MembersProps) { return (
{props.team.map((member) => ( ))}
); } type TeamMember = Omit & { image?: string }; async function getTeamWithImages(team: TeamMember[]) { return await Promise.all( team.map(async (member) => { const image = member.image ?? (await getMemberImagePath(member.name)); return { ...member, image, }; }) ); } export const getStaticProps: GetStaticProps = async () => { const execNamePosPairs = await getExecNamePosPairs(); const execs = (await Promise.all( execNamePosPairs.map((namePosPair) => getExec(namePosPair)) )) as SerializedExec[]; const [programme, website, systems, terminal] = await Promise.all([ getTeamWithImages(programmeData), getTeamWithImages(webData), getTeamWithImages(systemsData), getTeamWithImages(terminalData), ]); return { props: { execs, programme, website, systems, terminal }, }; };