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/meet-the-team/programme-committee.json";
import systemsData from "../../content/meet-the-team/systems-committee.json";
import websiteData from "../../content/meet-the-team/website-committee.json";
import styles from "./team.module.css";
interface SerializedExec {
content: MDXRemoteSerializeResult;
metadata: Metadata;
}
interface Props {
execs: SerializedExec[];
programme: Metadata[];
website: Metadata[];
systems: Metadata[];
}
export default function Team({ execs, programme, website, systems }: Props) {
return (
<>
Team
Meet the Team!
The Executives
Programme Committee
Website Committee
Systems Committee
The Executives
{execs.map((exec) => {
return (
);
})}
Programme Committee
Website Committee
Systems 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] = await Promise.all([
getTeamWithImages(programmeData),
getTeamWithImages(websiteData),
getTeamWithImages(systemsData),
]);
return {
props: { execs, programme, website, systems },
};
};