Merge branch 'main' into j285he-add-term-type

This commit is contained in:
Jared He 2021-11-22 11:58:25 -06:00
commit 9e0aec388c
43 changed files with 400 additions and 90 deletions

View File

@ -42,7 +42,7 @@ steps:
depends_on:
- optimize-images
commands:
- npm run build:web
- USE_LDAP=true npm run build:web
- name: export
image: node:16

View File

@ -32,6 +32,10 @@ const menu: Menu = [
name: "Meet the Team",
route: "/about/team",
},
{
name: "Members",
route: "/about/members",
},
{
name: "Constitution",
route: "/about/constitution",

View File

@ -1,14 +1,15 @@
.container {
max-width: calc(126rem / 16);
width: calc(126rem / 16);
display: flex;
flex-direction: column;
margin: 0;
}
.img {
width: 100%;
border-radius: 50%;
margin: 0 auto;
width: calc(118rem / 16);
height: calc(118rem / 16);
clip-path: circle();
object-fit: cover;
}
@ -29,7 +30,8 @@
@media only screen and (max-width: calc(768rem / 16)) {
.img {
width: 100%;
width: calc(126rem / 16);
height: calc(126rem / 16);
}
.caption {

View File

@ -18,11 +18,12 @@
max-width: calc(126rem / 16);
max-height: calc(126rem / 16);
clip-path: circle(50%);
clip-path: circle();
}
.image {
width: 100%;
width: calc(126rem / 16);
height: calc(126rem / 16);
}
.name {
@ -112,10 +113,6 @@
align-items: center;
}
.popupImage {
width: 100%;
}
.popupName {
color: var(--primary-accent);
margin: calc(24rem / 16) 0 0 0;

View File

@ -28,7 +28,7 @@ function TeamMemberInfo({
<>
<div className={styles.picture}>
<Image
className={isPopup ? styles.popupImage : styles.image}
className={styles.image}
src={image}
alt={`Picture of ${name}`}
/>

View File

@ -0,0 +1,15 @@
---
author: 'a258wang'
date: 'November 18 2021 00:00'
---
📣 CS Clubs Internal Committee is hiring for Winter 2022! 📣
Are you interested in organizing program-wide events, reaching out to industry professionals, or being a member of an impactful community? Are you passionate about making a difference in the UW CS and surrounding communities?
Apply for a role on CS Club's Internal Committee for Winter 2021! We are looking for people like you to join our Programme Committee and/or Systems Committee! 🙌
👀 Role descriptions can be found at https://bit.ly/uwcsclub-w22-roles.
⏲️ We'll be sending out interviews on a ** ROLLING BASIS **, so keep your eyes peeled and apply ASAP! We'll reach out through email for additional interviews/questions.
👉 Apply at https://bit.ly/uwcsclub-w22-apply! Alternatively, you can email us at exec@csclub.uwaterloo.ca from your UW email with an introduction of yourself, which positions you're interested in and any questions you might have.

View File

@ -0,0 +1,6 @@
---
name: Dora Su
role: President
---
Hey everyone, I'm Dora, a 2nd year CS student.

View File

@ -1,6 +0,0 @@
---
name: Kallen Tu
role: President
---
Hey everyone, I'm Kallen! I'm a 4th year CS student and it's my goal to make sure that every computing student at Waterloo has a place that they can belong and get the support they need 🙌. Outside of CSC, I'm an avid traveller and a hobbyist photographer 📷. I love playing games, finding new mountains to climb ⛰️, and watching horror movies. Feel free to reach out and chat with me about anything!

View File

@ -1,6 +0,0 @@
---
name: Gordon Le
role: Vice President
---
Hello everyone, I'm Gordon, and welcome to CSC! As a quick introduction, I'm a 4th year CS student at UW who enjoys playing ultimate frisbee, video games, music, and recently I've gotten into doing daily crossword puzzles. At CSC, we're always trying to support UW students in any way that we can, so please come and join us at our events 😄 If you ever see me on campus, please say hello! 👋

View File

@ -0,0 +1,6 @@
---
name: Jason Sang
role: Vice President
---
Hi! Im Jason and Im a 3B CS student. As VP, I help lead the events and operations team. Joining in Winter 2021, I quickly warmed up to the vision that Kallen and Gordon, our former Presidents, had for CSC. Like them, I saw CSC as a chance to fill the cohort gap that Engineering had and that Computer Science lacked. Other than grinding the Waterloo CS cycle, youll find me in my spare time composing and playing acoustic fingerstyle guitar or drowning in bass at a festival 😆.

View File

@ -0,0 +1,6 @@
---
name: Anjing Li
role: Assistant Vice President
---
Hey guys! I'm Anjing, a 2nd year CS student.

View File

@ -1,6 +0,0 @@
---
name: Ravindu Angammana
role: Assistant Vice President
---
Hey guys! I'm Ravindu, a 4th year Software Engineering student here at UW. I joined CSC to help create a healthy community where like-minded students at UW could easily connect with each other. If you ever have the chance to come to one of our events, please do! I promise you won't regret it. When I'm not working, I'll typically be playing video games, listening to music, or planning out a new travel destination (for when COVID ends). Feel free to say hi if you ever see me around!

View File

@ -1,6 +0,0 @@
---
name: Neil Parikh
role: Treasurer
---
Hi, I'm Neil, a 4th year Mechatronics Engineering student. I've been a part of CSC since my first term at Waterloo, and it's been a great experience for me, so I'm excited to share that with you all! In my free time, you can find me climbing or longboarding down one of the trails in Waterloo (usually not at the same time!).

View File

@ -0,0 +1,6 @@
---
name: Yanni Wang
role: Treasurer
---
Hi, I'm Yanni, a 2nd year CS student.

View File

@ -1,34 +1,34 @@
[
{
"name": "Brendan Wong",
"role": "Designer"
},
{
"name": "Kailin Chan",
"role": "Designer"
},
{
"name": "Karen Lee",
"role": "Designer"
},
{
"name": "Sam Honoridez",
"role": "Designer"
"role": "Head of Design"
},
{
"name": "Jenny Zhang",
"role": "Design"
},
{
"name": "Vivian Guo",
"role": "Design"
},
{
"name": "Jason Sang",
"role": "Head of Events"
},
{
"name": "Amya Singhal",
"role": "Events"
},
{
"name": "Anna Wang",
"role": "Events"
},
{
"name": "Jason Sang",
"name": "Eric Huang",
"role": "Events"
},
{
"name": "Ravindu Angammana",
"role": "Events"
},
{
"name": "Shi Han",
"name": "Riddhi Bajaj",
"role": "Events"
},
{
@ -41,58 +41,78 @@
},
{
"name": "Anjing Li",
"role": "Head of Marketing"
},
{
"name": "Alex Zhang",
"role": "Marketing"
},
{
"name": "Patrick He",
"name": "Catherine Tao",
"role": "Marketing"
},
{
"name": "Richa Dalal",
"name": "David Chen",
"role": "Marketing"
},
{
"name": "Dina Orucevic",
"role": "Marketing"
},
{
"name": "Helen Dong",
"role": "Marketing"
},
{
"name": "Saikrishna Tadepalli",
"role": "Marketing"
},
{
"name": "Sherry Lev",
"role": "Marketing"
},
{
"name": "Alex Zhang",
"role": "Discord Mod"
},
{
"name": "Andrew Wang",
"role": "Discord Mod"
"role": "Head of Discord"
},
{
"name": "Charles Zhang",
"role": "Discord Mod"
},
{
"name": "Chris Xie",
"role": "Discord Mod"
},
{
"name": "Elaine Han",
"role": "Discord Mod"
},
{
"name": "Edwin Yang",
"role": "Discord Mod"
},
{
"name": "Kallen Tu",
"role": "Discord Mod"
},
{
"name": "Laura Nguyen",
"role": "Discord Mod"
},
{
"name": "Mark Chen",
"role": "Discord Mod"
},
{
"name": "Juthika Hoque",
"role": "Head of Reps"
},
{
"name": "Aaron Choo",
"role": "Representative"
},
{
"name": "Athena Liu",
"role": "Representative"
},
{
"name": "Betty Guo",
"role": "Representative"
},
{
"name": "Chris Xie",
"role": "Representative"
},
{
"name": "Dora Su",
"name": "Amy Luo",
"role": "Representative"
},
{
@ -108,7 +128,15 @@
"role": "Representative"
},
{
"name": "Juthika Hoque",
"name": "Sat Arora",
"role": "Representative"
},
{
"name": "Star Xie",
"role": "Representative"
},
{
"name": "Tracy Dong",
"role": "Representative"
}
]

View File

@ -27,10 +27,6 @@
"name": "Jared He",
"role": "Developer"
},
{
"name": "Linna Luo",
"role": "Developer"
},
{
"name": "William Tran",
"role": "Developer"

View File

@ -4,6 +4,8 @@ set -ex
ulimit -u 512
DIR=$(mktemp --directory)
# set USE_LDAP to true to generate member list using LDAP database
export USE_LDAP=true
pushd $DIR

BIN
images/team/AmyLuo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 433 KiB

BIN
images/team/EricHuang.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 956 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 733 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 862 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

BIN
images/team/LauraNguyen.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 260 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 526 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 897 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 785 KiB

BIN
images/team/RaymondLi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 114 KiB

BIN
images/team/RiddhiBajaj.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 KiB

BIN
images/team/SatArora.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

61
lib/members.ts Normal file
View File

@ -0,0 +1,61 @@
import { Client } from "ldapts";
export interface Member {
name: string;
id: string;
program: string;
}
export async function getMembers(
year: string,
term: string
): Promise<Member[]> {
if (term !== "winter" && term !== "spring" && term !== "fall") {
throw new Error(`[getMembers] Not a valid term: "${term}"`);
}
if (process.env.USE_LDAP?.toLowerCase() !== "true") {
return dummyMembers;
}
let members: Member[] = [];
const url = "ldap://ldap1.csclub.uwaterloo.ca";
const searchDN = "ou=People,dc=csclub,dc=uwaterloo,dc=ca";
const client = new Client({ url });
try {
await client.bind("", "");
const { searchEntries } = await client.search(searchDN, {
scope: "sub",
filter: `(&(objectClass=member)(term=${term.slice(0, 1)}${year}))`,
});
members = searchEntries
.map((item) => {
return {
name: item.cn as string,
id: item.uid as string,
program: item.program === undefined ? "" : (item.program as string),
};
})
.sort((item1: Member, item2: Member) => item1.id.localeCompare(item2.id));
} finally {
await client.unbind();
}
return members;
}
const dummyMembers: Member[] = [
{
name: "John Smith",
id: "j12smith",
program: "MAT/Mathematics Computer Science",
},
{
name: "Jane Smith",
id: "j34smith",
program: "MAT/Mathematics Computer Science",
},
];

147
package-lock.json generated
View File

@ -1,5 +1,5 @@
{
"name": "website",
"name": "www-new",
"version": "0.1.0",
"lockfileVersion": 2,
"requires": true,
@ -15,6 +15,7 @@
"date-fns-tz": "^1.1.6",
"fs-extra": "^10.0.0",
"image-size": "^1.0.0",
"ldapts": "^3.1.0",
"next": "11.0.1",
"next-mdx-remote": "3.0.4",
"prettier": "^2.3.0",
@ -1030,6 +1031,14 @@
"integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
"dev": true
},
"node_modules/@types/asn1": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@types/asn1/-/asn1-0.2.0.tgz",
"integrity": "sha512-5TMxIpYbIA9c1J0hYQjQDX3wr+rTgQEAXaW2BI8ECM8FO53wSW4HFZplTalrKSHuZUc76NtXcePRhwuOHqGD5g==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/fs-extra": {
"version": "9.0.13",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
@ -1071,9 +1080,9 @@
}
},
"node_modules/@types/node": {
"version": "16.9.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
"integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
"version": "16.11.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz",
"integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw=="
},
"node_modules/@types/parse5": {
"version": "5.0.3",
@ -1108,6 +1117,11 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
"integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
},
"node_modules/@types/uuid": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz",
"integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg=="
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "4.28.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz",
@ -1555,6 +1569,14 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"dependencies": {
"safer-buffer": "~2.1.0"
}
},
"node_modules/asn1.js": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
@ -4620,6 +4642,44 @@
"node": ">=0.10.0"
}
},
"node_modules/ldapts": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/ldapts/-/ldapts-3.1.1.tgz",
"integrity": "sha512-RNxTlfiPS4fTN0b7oY0OE4d+E/uVg1nNlK1ZLPFyVsp4Gr8qSclJUWjdJ5W7PUtuiWh7kEEdNq1YAA+abERZZA==",
"dependencies": {
"@types/asn1": "~0.2.0",
"@types/node": "^16.11.6",
"@types/uuid": "~8.3.1",
"asn1": "~0.2.4",
"debug": "~4.3.2",
"strict-event-emitter-types": "~2.0.0",
"uuid": "~8.3.2"
},
"engines": {
"node": ">=12"
}
},
"node_modules/ldapts/node_modules/debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"dependencies": {
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/ldapts/node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"node_modules/levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@ -8398,6 +8458,11 @@
"debug": "2"
}
},
"node_modules/strict-event-emitter-types": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz",
"integrity": "sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA=="
},
"node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@ -9097,6 +9162,14 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/uuid-random": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/uuid-random/-/uuid-random-1.3.2.tgz",
@ -10155,6 +10228,14 @@
"integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==",
"dev": true
},
"@types/asn1": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/@types/asn1/-/asn1-0.2.0.tgz",
"integrity": "sha512-5TMxIpYbIA9c1J0hYQjQDX3wr+rTgQEAXaW2BI8ECM8FO53wSW4HFZplTalrKSHuZUc76NtXcePRhwuOHqGD5g==",
"requires": {
"@types/node": "*"
}
},
"@types/fs-extra": {
"version": "9.0.13",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
@ -10196,9 +10277,9 @@
}
},
"@types/node": {
"version": "16.9.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz",
"integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g=="
"version": "16.11.7",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz",
"integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw=="
},
"@types/parse5": {
"version": "5.0.3",
@ -10233,6 +10314,11 @@
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
"integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
},
"@types/uuid": {
"version": "8.3.1",
"resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.1.tgz",
"integrity": "sha512-Y2mHTRAbqfFkpjldbkHGY8JIzRN6XqYRliG8/24FcHm2D2PwW24fl5xMRTVGdrb7iMrwCaIEbLWerGIkXuFWVg=="
},
"@typescript-eslint/eslint-plugin": {
"version": "4.28.4",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.28.4.tgz",
@ -10521,6 +10607,14 @@
"function-bind": "^1.1.1"
}
},
"asn1": {
"version": "0.2.6",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
"integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
"requires": {
"safer-buffer": "~2.1.0"
}
},
"asn1.js": {
"version": "5.4.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
@ -12773,6 +12867,35 @@
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
"ldapts": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/ldapts/-/ldapts-3.1.1.tgz",
"integrity": "sha512-RNxTlfiPS4fTN0b7oY0OE4d+E/uVg1nNlK1ZLPFyVsp4Gr8qSclJUWjdJ5W7PUtuiWh7kEEdNq1YAA+abERZZA==",
"requires": {
"@types/asn1": "~0.2.0",
"@types/node": "^16.11.6",
"@types/uuid": "~8.3.1",
"asn1": "~0.2.4",
"debug": "~4.3.2",
"strict-event-emitter-types": "~2.0.0",
"uuid": "~8.3.2"
},
"dependencies": {
"debug": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
"integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
"requires": {
"ms": "2.1.2"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
}
}
},
"levn": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@ -15640,6 +15763,11 @@
"debug": "2"
}
},
"strict-event-emitter-types": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz",
"integrity": "sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA=="
},
"string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
@ -16156,6 +16284,11 @@
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
"uuid-random": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/uuid-random/-/uuid-random-1.3.2.tgz",

View File

@ -24,6 +24,7 @@
"@squoosh/lib": "^0.4.0",
"date-fns": "^2.11.1",
"date-fns-tz": "^1.1.6",
"ldapts": "^3.1.0",
"fs-extra": "^10.0.0",
"image-size": "^1.0.0",
"next": "11.0.1",

View File

@ -0,0 +1,6 @@
.table {
display: table;
width: 100%;
margin-top: calc(20rem / 16);
margin-bottom: calc(60rem / 16);
}

65
pages/about/members.tsx Normal file
View File

@ -0,0 +1,65 @@
import { GetStaticProps } from "next";
import React from "react";
import { Link } from "@/components/Link";
import { Table } from "@/components/Table";
import { getCurrentTerm } from "@/lib/events";
import { getMembers, Member } from "@/lib/members";
import { capitalize } from "@/utils";
import styles from "./members.module.css";
interface Props {
members: Member[];
year: string;
term: string;
}
export default function Members(props: Props) {
return (
<>
<h1>Members</h1>
<p>
{`The members for ${capitalize(props.term)} ${
props.year
} are listed here. We currently
have ${props.members.length} members. Use of this list for solicitation
of any form is prohibited, if you wish to get in touch with the
membership as a whole please contact the Executive.`}
</p>
<Table className={styles.table}>
<thead>
<tr>
<th>Name / Webpage</th>
<th>Program</th>
<th>Userid</th>
</tr>
</thead>
<tbody>
{props.members.map((member) => (
<tr key={member.id}>
<td>
<Link href={`https://csclub.uwaterloo.ca/~${member.id}/`}>
{member.name}
</Link>
</td>
<td>{member.program}</td>
<td>{member.id}</td>
</tr>
))}
</tbody>
</Table>
</>
);
}
export const getStaticProps: GetStaticProps<Props> = async () => {
const curTerm = getCurrentTerm();
return {
props: {
year: curTerm.year,
term: curTerm.term,
members: await getMembers(curTerm.year, curTerm.term),
},
};
};

View File

@ -18,7 +18,7 @@ import {
import programmeData from "../../content/team/programme-committee.json";
import systemsData from "../../content/team/systems-committee.json";
import websiteData from "../../content/team/website-committee.json";
import webData from "../../content/team/web-committee.json";
import styles from "./team.module.css";
@ -133,7 +133,7 @@ export const getStaticProps: GetStaticProps<Props> = async () => {
)) as SerializedExec[];
const [programme, website, systems] = await Promise.all([
getTeamWithImages(programmeData),
getTeamWithImages(websiteData),
getTeamWithImages(webData),
getTeamWithImages(systemsData),
]);