|
|
|
@ -1,4 +1,4 @@ |
|
|
|
|
import React from "react"; |
|
|
|
|
import React, { ComponentType, ReactNode, useState } from "react"; |
|
|
|
|
import { MDXProvider } from "@mdx-js/react"; |
|
|
|
|
import { Image } from "../../components/Image"; |
|
|
|
|
import { TeamMemberCard } from "../../components/TeamMemberCard"; |
|
|
|
@ -27,7 +27,6 @@ import MaxErenberg, { |
|
|
|
|
} from "../../content/meet-the-team/execs/Max-Erenberg.team-member.mdx"; |
|
|
|
|
|
|
|
|
|
// TODO: get hotdog for elections
|
|
|
|
|
// mobile
|
|
|
|
|
|
|
|
|
|
export default function MeetTheTeam() { |
|
|
|
|
return ( |
|
|
|
@ -78,11 +77,11 @@ export default function MeetTheTeam() { |
|
|
|
|
</TeamMemberCard> |
|
|
|
|
</div> |
|
|
|
|
<div className={styles.execsMobile} id="execs"> |
|
|
|
|
<TeamMember {...KallenMetadata} size="medium" /> |
|
|
|
|
<TeamMember {...GordonMetadata} size="medium" /> |
|
|
|
|
<TeamMember {...RavinduMetadata} size="medium" /> |
|
|
|
|
<TeamMember {...NeilMetadata} size="medium" /> |
|
|
|
|
<TeamMember {...MaxMetadata} size="medium" /> |
|
|
|
|
<MobileExec metadata={KallenMetadata} content={KallenTu} /> |
|
|
|
|
<MobileExec metadata={GordonMetadata} content={GordonLe} /> |
|
|
|
|
<MobileExec metadata={RavinduMetadata} content={RavinduAngammana} /> |
|
|
|
|
<MobileExec metadata={NeilMetadata} content={NeilParikh} /> |
|
|
|
|
<MobileExec metadata={MaxMetadata} content={MaxErenberg} /> |
|
|
|
|
</div> |
|
|
|
|
<div className={styles.programme} id="programme"> |
|
|
|
|
<h2 className={styles.subheading}>Programme Committee</h2> |
|
|
|
@ -115,6 +114,15 @@ interface Metadata { |
|
|
|
|
image?: string; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
interface MobileExecProps { |
|
|
|
|
metadata: Metadata; |
|
|
|
|
content: ComponentType; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
interface Propup extends MobileExecProps { |
|
|
|
|
handleClose: () => void; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function MembersList(props: MembersProps) { |
|
|
|
|
return ( |
|
|
|
|
<div className={styles.members}> |
|
|
|
@ -125,6 +133,49 @@ function MembersList(props: MembersProps) { |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function MobileExec(props: MobileExecProps) { |
|
|
|
|
const [isOpen, setIsOpen] = useState(false); |
|
|
|
|
const togglePopup = () => { |
|
|
|
|
setIsOpen(!isOpen); |
|
|
|
|
}; |
|
|
|
|
return ( |
|
|
|
|
<> |
|
|
|
|
<button |
|
|
|
|
className={styles.reset_button + " " + styles.execButton} |
|
|
|
|
onClick={togglePopup} |
|
|
|
|
> |
|
|
|
|
<TeamMember {...props.metadata} size="medium" /> |
|
|
|
|
</button> |
|
|
|
|
{isOpen && ( |
|
|
|
|
<> |
|
|
|
|
<div className={styles.popup_background} onClick={togglePopup}></div> |
|
|
|
|
<ExecPopup |
|
|
|
|
metadata={props.metadata} |
|
|
|
|
content={props.content} |
|
|
|
|
handleClose={togglePopup} |
|
|
|
|
/> |
|
|
|
|
</> |
|
|
|
|
)} |
|
|
|
|
</> |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
function ExecPopup(props: Propup) { |
|
|
|
|
return ( |
|
|
|
|
<div className={styles.popup_container}> |
|
|
|
|
<div className={styles.popup_content}> |
|
|
|
|
<button className={styles.reset_button} onClick={props.handleClose}> |
|
|
|
|
<Image src="images/team/popup-close.svg" className={styles.close} /> |
|
|
|
|
</button> |
|
|
|
|
<div className={styles.exec}> |
|
|
|
|
<TeamMember {...props.metadata} size="medium" /> |
|
|
|
|
<props.content /> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// -- Dynamic Import logic --
|
|
|
|
|
|
|
|
|
|
// import { readdirSync } from "fs";
|
|
|
|
|