pr fixes yay
continuous-integration/drone/push Build is failing Details

This commit is contained in:
b38peng 2021-08-18 22:35:39 -03:00
parent bc27350e9d
commit aa47644d41
8 changed files with 137 additions and 123 deletions

View File

@ -4,9 +4,7 @@
"eslint.codeActionsOnSave.mode": "all", "eslint.codeActionsOnSave.mode": "all",
"[css]": { "[css]": {
"editor.suggest.insertMode": "replace", "editor.suggest.insertMode": "replace",
"gitlens.codeLens.scopes": [ "gitlens.codeLens.scopes": ["document"],
"document"
],
"editor.formatOnSave": true "editor.formatOnSave": true
}, },
"[javascript]": { "[javascript]": {
@ -38,5 +36,6 @@
"files.exclude": { "files.exclude": {
"node_modules": true "node_modules": true
}, },
"editor.tabSize": 2 "editor.tabSize": 2,
"files.eol": "\n"
} }

View File

@ -1,5 +1,7 @@
import React from "react"; import React from "react";
import { Image } from "./Image"; import { Image } from "./Image";
import styles from "./TeamMember.module.css"; import styles from "./TeamMember.module.css";
interface TeamMemberProps { interface TeamMemberProps {

View File

@ -1,6 +1,9 @@
import React, { useState } from "react"; import React, { useState } from "react";
import { useWindowDimension } from "@/hooks/useWindowDimension";
import { Image } from "./Image"; import { Image } from "./Image";
import { useWindowDimension } from "../hooks/useWindowDimension";
import styles from "./TeamMemberCard.module.css"; import styles from "./TeamMemberCard.module.css";
export interface TeamMemberCardProps { export interface TeamMemberCardProps {
@ -10,6 +13,35 @@ export interface TeamMemberCardProps {
children: React.ReactNode; children: React.ReactNode;
} }
interface TeamMemberInfoProps extends TeamMemberCardProps {
isPopup?: boolean;
}
function TeamMemberInfo({
name,
role,
image,
children,
isPopup = false,
}: TeamMemberInfoProps) {
return (
<>
<div className={styles.picture}>
<Image
className={isPopup ? styles.popupImage : styles.image}
src={image}
alt={`Picture of ${name}`}
/>
</div>
<h1 className={isPopup ? styles.popupName : styles.name}>{name}</h1>
<h2 className={isPopup ? styles.popupRole : styles.role}>{role}</h2>
<div className={isPopup ? styles.popupDescription : styles.description}>
{children}
</div>
</>
);
}
export function TeamMemberCard({ export function TeamMemberCard({
name, name,
role, role,
@ -26,17 +58,9 @@ export function TeamMemberCard({
return ( return (
<> <>
<article className={styles.card} onClick={handleClick}> <article className={styles.card} onClick={handleClick}>
<div className={styles.picture}> <TeamMemberInfo {...{ name, role, image }}>{children}</TeamMemberInfo>
<Image
className={styles.image}
src={image}
alt={`Picture of ${name}`}
/>
</div>
<h1 className={styles.name}>{name}</h1>
<h2 className={styles.role}>{role}</h2>
<div className={styles.description}>{children}</div>
</article> </article>
{isOpen && ( {isOpen && (
<ExecPopup <ExecPopup
name={name} name={name}
@ -64,16 +88,9 @@ function ExecPopup({ name, role, image, children, handleClick }: Propup) {
<Image src="images/team/popup-close.svg" /> <Image src="images/team/popup-close.svg" />
</button> </button>
<div className={styles.popupContent}> <div className={styles.popupContent}>
<div className={styles.picture}> <TeamMemberInfo {...{ name, role, image }} isPopup={true}>
<Image {children}
className={styles.popupImage} </TeamMemberInfo>
src={image}
alt={`Picture of ${name}`}
/>
</div>
<h1 className={styles.popupName}>{name}</h1>
<h2 className={styles.popupRole}>{role}</h2>
<div className={styles.popupDescription}>{children}</div>
</div> </div>
</div> </div>
</> </>

View File

@ -162,16 +162,16 @@ export function TeamMemberDemo() {
</div> </div>
<hr /> <hr />
<div className={styles.teamMembers}> <div className={styles.teamMembers}>
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
<TeamMember {...dogeMetadata} /> <TeamMember {...dogeMetadata} image="/images/playground/doge.jpg" />
</div> </div>
</div> </div>
); );
@ -180,7 +180,7 @@ export function TeamMemberDemo() {
export function TeamMemberCardDemo() { export function TeamMemberCardDemo() {
return ( return (
<div className={styles.teamMemberCardDemo}> <div className={styles.teamMemberCardDemo}>
<TeamMemberCard {...codeyMetadata}> <TeamMemberCard {...codeyMetadata} image="/images/playground/doge.jpg">
<CodeyInfo /> <CodeyInfo />
</TeamMemberCard> </TeamMemberCard>
</div> </div>

View File

@ -1,7 +1,8 @@
import { readFile, readdir, access } from "fs/promises"; import { readFile, readdir, access } from "fs/promises";
import { serialize } from "next-mdx-remote/serialize";
import path from "path"; import path from "path";
import matter from "gray-matter"; import matter from "gray-matter";
import { serialize } from "next-mdx-remote/serialize";
const EXECS_PATH = path.join("content", "meet-the-team", "execs"); const EXECS_PATH = path.join("content", "meet-the-team", "execs");
const fileType = ".md"; const fileType = ".md";

View File

@ -50,18 +50,14 @@
} }
.elections { .elections {
margin-top: 6rem; margin: 6rem 0;
} }
.electionSubheading { .electionSubheading {
color: var(--primary-accent); color: var(--primary-accent);
font-size: calc(36rem / 16); font-size: calc(36rem / 16);
font-weight: 600; font-weight: 600;
} margin-top: 0;
.elections > p {
margin: 0;
line-height: 1.875;
} }
@media only screen and (max-width: calc(768rem / 16)) { @media only screen and (max-width: calc(768rem / 16)) {
@ -95,14 +91,12 @@
padding-bottom: calc(15rem / 16); padding-bottom: calc(15rem / 16);
} }
.execs, .members { .execs,
.members {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(calc(130rem / 16), 1fr)); grid-template-columns: repeat(auto-fill, minmax(calc(130rem / 16), 1fr));
justify-items: center; justify-items: center;
} column-gap: 0;
.elections {
padding: 2rem;
} }
.electionSubheading { .electionSubheading {

View File

@ -1,24 +1,27 @@
import { GetStaticProps } from "next";
import { MDXRemote, MDXRemoteSerializeResult } from "next-mdx-remote";
import React from "react"; 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 { import {
getExec, getExec,
getExecNames, getExecNames,
Metadata, Metadata,
getMemberImagePath, getMemberImagePath,
} from "../../lib/team"; } from "@/lib/team";
import { MDXRemote, MDXRemoteSerializeResult } from "next-mdx-remote";
import { GetStaticProps } from "next";
import { Image } from "../../components/Image";
import { TeamMemberCard } from "../../components/TeamMemberCard";
import { TeamMember } from "../../components/TeamMember";
import { Link } from "../../components/Link";
import { Bubble } from "../../components/Bubble";
import programmeData from "../../content/meet-the-team/programme-committee.json"; import programmeData from "../../content/meet-the-team/programme-committee.json";
import websiteData from "../../content/meet-the-team/website-committee.json";
import systemsData from "../../content/meet-the-team/systems-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"; import styles from "./team.module.css";
// TODO: fix hotdog for elections // TODO: link News page in Elections
// change News link in elections to point to News page
interface SerializedExec { interface SerializedExec {
content: MDXRemoteSerializeResult; content: MDXRemoteSerializeResult;
@ -35,6 +38,7 @@ interface Props {
export default function Team({ execs, programme, website, systems }: Props) { export default function Team({ execs, programme, website, systems }: Props) {
return ( return (
<> <>
<DefaultLayout>
<div className={styles.headerContainer}> <div className={styles.headerContainer}>
<div className={styles.headerTextContainer}> <div className={styles.headerTextContainer}>
<h1 className={styles.header}>Meet the Team!</h1> <h1 className={styles.header}>Meet the Team!</h1>
@ -76,19 +80,24 @@ export default function Team({ execs, programme, website, systems }: Props) {
<h2 className={styles.subheading}>Systems Committee</h2> <h2 className={styles.subheading}>Systems Committee</h2>
<MembersList team={systems} /> <MembersList team={systems} />
</div> </div>
<Bubble> </DefaultLayout>
<div className={styles.elections}> <div className={styles.elections}>
<Bubble>
<h2 className={styles.electionSubheading}>Elections</h2> <h2 className={styles.electionSubheading}>Elections</h2>
To find out when and where the next elections will be held, keep an To find out when and where the next elections will be held, keep an
eye on on the <Link href="">News</Link>. <br /> eye on on the <Link href="">News</Link>. <br />
For details on the elections, read our For details on the elections, read our
<Link href="/about/constitution"> Constitution</Link> <Link href="/about/constitution"> Constitution</Link>
</div>
</Bubble> </Bubble>
</div>
</> </>
); );
} }
Team.Layout = function TeamLayout(props: { children: React.ReactNode }) {
return <div>{props.children}</div>;
};
interface MembersProps { interface MembersProps {
team: Metadata[]; team: Metadata[];
} }
@ -103,7 +112,7 @@ function MembersList(props: MembersProps) {
); );
} }
async function getMemberImage(team: Omit<Metadata, "image">[]) { async function getTeamWithImages(team: Omit<Metadata, "image">[]) {
return await Promise.all( return await Promise.all(
team.map(async (member) => { team.map(async (member) => {
const image = await getMemberImagePath(member.name); const image = await getMemberImagePath(member.name);
@ -120,9 +129,11 @@ export const getStaticProps: GetStaticProps<Props> = async () => {
const execs = (await Promise.all( const execs = (await Promise.all(
execNames.map((name) => getExec(name)) execNames.map((name) => getExec(name))
)) as SerializedExec[]; )) as SerializedExec[];
const programme = await getMemberImage(programmeData); const [programme, website, systems] = await Promise.all([
const website = await getMemberImage(websiteData); getTeamWithImages(programmeData),
const systems = await getMemberImage(systemsData); getTeamWithImages(websiteData),
getTeamWithImages(systemsData),
]);
return { return {
props: { execs, programme, website, systems }, props: { execs, programme, website, systems },

View File

@ -2,11 +2,7 @@
"compilerOptions": { "compilerOptions": {
"baseUrl": ".", "baseUrl": ".",
"target": "es5", "target": "es5",
"lib": [ "lib": ["dom", "dom.iterable", "esnext"],
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true, "allowJs": true,
"skipLibCheck": true, "skipLibCheck": true,
"strict": false, "strict": false,
@ -26,16 +22,10 @@
"strictFunctionTypes": true, "strictFunctionTypes": true,
"paths": { "paths": {
"@/components/*": ["components/*"], "@/components/*": ["components/*"],
"@/lib/*": ["lib/*"] "@/lib/*": ["lib/*"],
"@/hooks/*": ["hooks/*"]
} }
}, },
"include": [ "include": ["next-env.d.ts", "types.d.ts", "**/*.ts", "**/*.tsx"],
"next-env.d.ts", "exclude": ["node_modules"]
"types.d.ts",
"**/*.ts",
"**/*.tsx"
],
"exclude": [
"node_modules"
]
} }