pr fixes yay
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
This commit is contained in:
parent
bc27350e9d
commit
aa47644d41
|
@ -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"
|
||||||
}
|
}
|
|
@ -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 {
|
||||||
|
|
|
@ -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>
|
||||||
</>
|
</>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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 },
|
||||||
|
|
|
@ -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"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue