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,
getExecNames,
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 execNames = await getExecNames();
const execs = (await Promise.all(
execNames.map((name) => getExec(name))
)) 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 },
};
};