From b06189f5f3bccdc5d344a1afa05847f4833ad287 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 2 Feb 2022 15:32:53 +0800 Subject: [PATCH 01/36] Test Ldap --- lib/team.ts | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 97da08b5..99280b8e 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -2,10 +2,14 @@ import { readFile, readdir, access } from "fs/promises"; import path from "path"; import matter from "gray-matter"; +import { Client } from "ldapts"; import { serialize } from "next-mdx-remote/serialize"; +import { getCurrentTerm } from "@/lib/events"; + const EXECS_PATH = path.join("content", "team", "execs"); const fileType = ".md"; +const { year, term } = getCurrentTerm(); export interface Metadata { name: string; @@ -13,10 +17,39 @@ export interface Metadata { image: string; } +// export async function getExecNames() { +// return (await readdir(EXECS_PATH)) +// .filter((name) => name.endsWith(fileType)) +// .map((name) => name.slice(0, -1 * fileType.length)); +// } + export async function getExecNames() { - return (await readdir(EXECS_PATH)) - .filter((name) => name.endsWith(fileType)) - .map((name) => name.slice(0, -1 * fileType.length)); + if (process.env.USE_LDAP?.toLowerCase() !== "true") { + return (await readdir(EXECS_PATH)) + .filter((name) => name.endsWith(fileType)) + .map((name) => name.slice(0, -1 * fileType.length)); + } + + 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 as string).slice( + 0, + 1 + )}${year})(exec=True))`, + }); + + const execMembers = searchEntries.map((item) => item.cn as string); + } finally { + await client.unbind(); + } + + return execMembers; } export async function getExec(fileName: string, convert = true) { -- 2.39.2 From 6e8f7bba9419e0667dbf03f8fc573fafc3a7e817 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 2 Feb 2022 16:04:40 +0800 Subject: [PATCH 02/36] Test using console log --- pages/about/team.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/pages/about/team.tsx b/pages/about/team.tsx index 5b246738..5e0020e5 100644 --- a/pages/about/team.tsx +++ b/pages/about/team.tsx @@ -141,6 +141,7 @@ async function getTeamWithImages(team: TeamMember[]) { export const getStaticProps: GetStaticProps = async () => { const execNames = await getExecNames(); + console.log(execNames); const execs = (await Promise.all( execNames.map((name) => getExec(name)) )) as SerializedExec[]; -- 2.39.2 From fbcdec33ebbaf5c2142bb585b263a4b97d430bb2 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 2 Feb 2022 17:06:13 +0800 Subject: [PATCH 03/36] Change returned data type --- lib/team.ts | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 99280b8e..55dd2b2c 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ import { readFile, readdir, access } from "fs/promises"; import path from "path"; @@ -11,18 +12,17 @@ const EXECS_PATH = path.join("content", "team", "execs"); const fileType = ".md"; const { year, term } = getCurrentTerm(); +export interface execMembers { + name: string; + order: string; +} + export interface Metadata { name: string; role: string; image: string; } -// export async function getExecNames() { -// return (await readdir(EXECS_PATH)) -// .filter((name) => name.endsWith(fileType)) -// .map((name) => name.slice(0, -1 * fileType.length)); -// } - export async function getExecNames() { if (process.env.USE_LDAP?.toLowerCase() !== "true") { return (await readdir(EXECS_PATH)) @@ -44,12 +44,30 @@ export async function getExecNames() { )}${year})(exec=True))`, }); - const execMembers = searchEntries.map((item) => item.cn as string); + let execMembers: execMembers[] = []; + + execMembers = searchEntries + .map((item) => { + return { + name: item.cn as string, + order: item.order as string, + }; + }) + .sort((item1: execMembers, item2: execMembers) => + item1.order.localeCompare(item2.order) + ); + + const formattedExec: string[] = execMembers.map( + (member) => + `0${member.order}- + ${member.name.split(" ")[1].toLowerCase()}- + ${member.name.split(" ")[0].toLowerCase()}` + ); } finally { await client.unbind(); } - return execMembers; + return formattedExec; } export async function getExec(fileName: string, convert = true) { -- 2.39.2 From 8f144983ef45b6d3cbfb4d1c29273a7f791ebfe5 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 2 Feb 2022 21:48:21 +0800 Subject: [PATCH 04/36] Test Ldap --- lib/team.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 55dd2b2c..80996314 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -24,11 +24,11 @@ export interface Metadata { } export async function getExecNames() { - if (process.env.USE_LDAP?.toLowerCase() !== "true") { - return (await readdir(EXECS_PATH)) - .filter((name) => name.endsWith(fileType)) - .map((name) => name.slice(0, -1 * fileType.length)); - } + // if (process.env.USE_LDAP?.toLowerCase() !== "true") { + // return (await readdir(EXECS_PATH)) + // .filter((name) => name.endsWith(fileType)) + // .map((name) => name.slice(0, -1 * fileType.length)); + // } const url = "ldap://ldap1.csclub.uwaterloo.ca"; const searchDN = "ou=People,dc=csclub,dc=uwaterloo,dc=ca"; -- 2.39.2 From 79c5005652848847b7c962265ff1c9f86e44f286 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 9 Feb 2022 21:22:38 +0800 Subject: [PATCH 05/36] add placeholder --- lib/team.ts | 71 +++++++++++++++++++++++++++++++++----------- pages/about/team.tsx | 3 +- 2 files changed, 55 insertions(+), 19 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 80996314..75d2b5cb 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { readFile, readdir, access } from "fs/promises"; import path from "path"; @@ -24,16 +23,19 @@ export interface Metadata { } export async function getExecNames() { - // if (process.env.USE_LDAP?.toLowerCase() !== "true") { - // return (await readdir(EXECS_PATH)) - // .filter((name) => name.endsWith(fileType)) - // .map((name) => name.slice(0, -1 * fileType.length)); - // } + if (process.env.USE_LDAP?.toLowerCase() !== "true") { + return (await readdir(EXECS_PATH)) + .filter((name) => name.endsWith(fileType)) + .map((name) => name.slice(0, -1 * fileType.length)); + } const url = "ldap://ldap1.csclub.uwaterloo.ca"; const searchDN = "ou=People,dc=csclub,dc=uwaterloo,dc=ca"; const client = new Client({ url }); + let execMembers: execMembers[] = []; + let formattedExec: string[]; + try { await client.bind("", ""); const { searchEntries } = await client.search(searchDN, { @@ -44,8 +46,6 @@ export async function getExecNames() { )}${year})(exec=True))`, }); - let execMembers: execMembers[] = []; - execMembers = searchEntries .map((item) => { return { @@ -57,7 +57,7 @@ export async function getExecNames() { item1.order.localeCompare(item2.order) ); - const formattedExec: string[] = execMembers.map( + formattedExec = execMembers.map( (member) => `0${member.order}- ${member.name.split(" ")[1].toLowerCase()}- @@ -71,16 +71,51 @@ export async function getExecNames() { } export async function getExec(fileName: string, convert = true) { - const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); - const { content, data: metadata } = matter(raw); - const image = - (metadata.image as string | undefined) ?? - (await getMemberImagePath(metadata.name)); - - return { - content: convert ? await serialize(content) : content, - metadata: { ...metadata, image } as Metadata, + const posDict: { [name: string]: string } = { + "01": "President", + "02": "Vice President", + "03": "Assistant Vice President", + "04": "Treasurer", + "05": "Systems Administrator", }; + + const lastName = + fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); + const firstName = + fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); + const posOrder = fileName.split("-")[0]; + const pos = posDict[posOrder]; + + let content, metadata; + + try { + const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); + ({ content, data: metadata } = matter(raw)); + + const image = + (metadata.image as string | undefined) ?? + (await getMemberImagePath(metadata.name)); + + return { + content: convert ? await serialize(content) : content, + metadata: { ...metadata, image } as Metadata, + }; + } catch (err) { + ({ content, metadata } = { + content: "Coming soon!", + metadata: { + name: `${lastName} ${firstName}`, + role: `${pos}`, + }, + }); + + const image = await getMemberImagePath(metadata.name); + + return { + content: convert ? await serialize(content) : content, + metadata: { ...metadata, image } as Metadata, + }; + } } async function getImage(imgPath: string) { diff --git a/pages/about/team.tsx b/pages/about/team.tsx index 5e0020e5..7ad1b552 100644 --- a/pages/about/team.tsx +++ b/pages/about/team.tsx @@ -141,10 +141,11 @@ async function getTeamWithImages(team: TeamMember[]) { export const getStaticProps: GetStaticProps = async () => { const execNames = await getExecNames(); - console.log(execNames); + const execs = (await Promise.all( execNames.map((name) => getExec(name)) )) as SerializedExec[]; + const [programme, website, systems, terminal] = await Promise.all([ getTeamWithImages(programmeData), getTeamWithImages(webData), -- 2.39.2 From 0f15953979d6983fd6c099e3e56b533c85146b86 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 9 Feb 2022 21:30:15 +0800 Subject: [PATCH 06/36] Fix Typo --- lib/team.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 75d2b5cb..a56d2b75 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -79,9 +79,9 @@ export async function getExec(fileName: string, convert = true) { "05": "Systems Administrator", }; - const lastName = - fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); const firstName = + fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); + const lastName = fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); const posOrder = fileName.split("-")[0]; const pos = posDict[posOrder]; @@ -104,7 +104,7 @@ export async function getExec(fileName: string, convert = true) { ({ content, metadata } = { content: "Coming soon!", metadata: { - name: `${lastName} ${firstName}`, + name: `${firstName} ${lastName}`, role: `${pos}`, }, }); -- 2.39.2 From 608f6342da11ea8d7ad077daba83233e8c80ac4e Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Feb 2022 00:44:56 +0800 Subject: [PATCH 07/36] Debug placeholder --- lib/team.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/team.ts b/lib/team.ts index a56d2b75..e7b8c788 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -57,6 +57,8 @@ export async function getExecNames() { item1.order.localeCompare(item2.order) ); + console.log(execMembers); + formattedExec = execMembers.map( (member) => `0${member.order}- @@ -67,6 +69,8 @@ export async function getExecNames() { await client.unbind(); } + console.log(formattedExec); + return formattedExec; } -- 2.39.2 From 6ad38d1971d757ed5062f654c6acc5993478d0d3 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Feb 2022 01:01:39 +0800 Subject: [PATCH 08/36] Test getExec function --- lib/team.ts | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index e7b8c788..d2e419ae 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -92,7 +92,7 @@ export async function getExec(fileName: string, convert = true) { let content, metadata; - try { + // try { const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); ({ content, data: metadata } = matter(raw)); @@ -103,23 +103,24 @@ export async function getExec(fileName: string, convert = true) { return { content: convert ? await serialize(content) : content, metadata: { ...metadata, image } as Metadata, - }; - } catch (err) { - ({ content, metadata } = { - content: "Coming soon!", - metadata: { - name: `${firstName} ${lastName}`, - role: `${pos}`, - }, - }); + // }; + // } catch (err) { + // console.log(err); + // ({ content, metadata } = { + // content: "Coming soon!", + // metadata: { + // name: `${firstName} ${lastName}`, + // role: `${pos}`, + // }, + // }); - const image = await getMemberImagePath(metadata.name); + // const image = await getMemberImagePath(metadata.name); - return { - content: convert ? await serialize(content) : content, - metadata: { ...metadata, image } as Metadata, - }; - } + // return { + // content: convert ? await serialize(content) : content, + // metadata: { ...metadata, image } as Metadata, + // }; + // } } async function getImage(imgPath: string) { -- 2.39.2 From c7947d9054347a8b3f94a0356035f98369c5ad61 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Feb 2022 01:22:09 +0800 Subject: [PATCH 09/36] Test new getExecNames --- lib/team.ts | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index d2e419ae..ee3cad61 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -75,34 +75,35 @@ export async function getExecNames() { } export async function getExec(fileName: string, convert = true) { - const posDict: { [name: string]: string } = { - "01": "President", - "02": "Vice President", - "03": "Assistant Vice President", - "04": "Treasurer", - "05": "Systems Administrator", - }; + // const posDict: { [name: string]: string } = { + // "01": "President", + // "02": "Vice President", + // "03": "Assistant Vice President", + // "04": "Treasurer", + // "05": "Systems Administrator", + // }; - const firstName = - fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); - const lastName = - fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); - const posOrder = fileName.split("-")[0]; - const pos = posDict[posOrder]; + // const firstName = + // fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); + // const lastName = + // fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); + // const posOrder = fileName.split("-")[0]; + // const pos = posDict[posOrder]; - let content, metadata; + // let content, metadata; // try { - const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); - ({ content, data: metadata } = matter(raw)); + const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); + const { content, data: metadata } = matter(raw); - const image = - (metadata.image as string | undefined) ?? - (await getMemberImagePath(metadata.name)); + const image = + (metadata.image as string | undefined) ?? + (await getMemberImagePath(metadata.name)); - return { - content: convert ? await serialize(content) : content, - metadata: { ...metadata, image } as Metadata, + return { + content: convert ? await serialize(content) : content, + metadata: { ...metadata, image } as Metadata, + }; // }; // } catch (err) { // console.log(err); -- 2.39.2 From ae0b81c4ccbfdff4fb85d35715ae8691cc959c19 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Feb 2022 01:35:23 +0800 Subject: [PATCH 10/36] debug getExecNames --- lib/team.ts | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index ee3cad61..244acb71 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -34,7 +34,6 @@ export async function getExecNames() { const client = new Client({ url }); let execMembers: execMembers[] = []; - let formattedExec: string[]; try { await client.bind("", ""); @@ -57,9 +56,7 @@ export async function getExecNames() { item1.order.localeCompare(item2.order) ); - console.log(execMembers); - - formattedExec = execMembers.map( + const formattedExec: string[] = execMembers.map( (member) => `0${member.order}- ${member.name.split(" ")[1].toLowerCase()}- @@ -69,8 +66,6 @@ export async function getExecNames() { await client.unbind(); } - console.log(formattedExec); - return formattedExec; } -- 2.39.2 From 3a7ec04f4ee6d6de50757a3ff6c238bda4a6eb67 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Sun, 13 Feb 2022 23:48:30 +0800 Subject: [PATCH 11/36] Debug ldap data fetch function --- lib/team.ts | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 244acb71..0c84d830 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -11,9 +11,17 @@ const EXECS_PATH = path.join("content", "team", "execs"); const fileType = ".md"; const { year, term } = getCurrentTerm(); +const execPositions: { [name: string]: { order: number; name: string } } = { + president: { order: 1, name: "President" }, + "vice-president": { order: 2, name: "Vice President" }, + treasurer: { order: 3, name: "Treasurer" }, + secretary: { order: 4, name: "Assistant Vice President" }, + sysadmin: { order: 5, name: "System Administrator" }, +}; + export interface execMembers { name: string; - order: string; + position: string; } export interface Metadata { @@ -34,6 +42,7 @@ export async function getExecNames() { const client = new Client({ url }); let execMembers: execMembers[] = []; + let formattedExec: string[]; try { await client.bind("", ""); @@ -42,23 +51,27 @@ export async function getExecNames() { filter: `(&(objectClass=member)(term=${(term as string).slice( 0, 1 - )}${year})(exec=True))`, + )}${year})(position=*))`, }); execMembers = searchEntries .map((item) => { return { name: item.cn as string, - order: item.order as string, + position: item.position as string, }; }) - .sort((item1: execMembers, item2: execMembers) => - item1.order.localeCompare(item2.order) - ); + .filter((item: execMembers) => item.position in execPositions) + .sort((item1: execMembers, item2: execMembers) => { + return ( + execPositions[item1.position].order - + execPositions[item2.position].order + ); + }); - const formattedExec: string[] = execMembers.map( + formattedExec = execMembers.map( (member) => - `0${member.order}- + `0${execPositions[member.position].order}- ${member.name.split(" ")[1].toLowerCase()}- ${member.name.split(" ")[0].toLowerCase()}` ); @@ -70,14 +83,6 @@ export async function getExecNames() { } export async function getExec(fileName: string, convert = true) { - // const posDict: { [name: string]: string } = { - // "01": "President", - // "02": "Vice President", - // "03": "Assistant Vice President", - // "04": "Treasurer", - // "05": "Systems Administrator", - // }; - // const firstName = // fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); // const lastName = -- 2.39.2 From 8b8432cf7611efb2f70e45f9b92989d43126ad12 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Mon, 14 Feb 2022 00:11:08 +0800 Subject: [PATCH 12/36] Change the order of exec name --- lib/team.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 0c84d830..dc1a9ef0 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -72,8 +72,8 @@ export async function getExecNames() { formattedExec = execMembers.map( (member) => `0${execPositions[member.position].order}- - ${member.name.split(" ")[1].toLowerCase()}- - ${member.name.split(" ")[0].toLowerCase()}` + ${member.name.split(" ")[0].toLowerCase()}- + ${member.name.split(" ")[1].toLowerCase()}` ); } finally { await client.unbind(); -- 2.39.2 From c729bf40ee9fe61f56d7f182e6f3212a42beb6aa Mon Sep 17 00:00:00 2001 From: Beihao Zhou Date: Sun, 13 Feb 2022 11:22:28 -0500 Subject: [PATCH 13/36] Fix name order --- lib/team.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 0c84d830..dc1a9ef0 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -72,8 +72,8 @@ export async function getExecNames() { formattedExec = execMembers.map( (member) => `0${execPositions[member.position].order}- - ${member.name.split(" ")[1].toLowerCase()}- - ${member.name.split(" ")[0].toLowerCase()}` + ${member.name.split(" ")[0].toLowerCase()}- + ${member.name.split(" ")[1].toLowerCase()}` ); } finally { await client.unbind(); -- 2.39.2 From 2aeaeaccde27bc6fbabb5cd9763259fa59298a70 Mon Sep 17 00:00:00 2001 From: Beihao Zhou Date: Sun, 13 Feb 2022 11:32:05 -0500 Subject: [PATCH 14/36] Fix Line Format --- lib/team.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index dc1a9ef0..6ea753ea 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -71,9 +71,9 @@ export async function getExecNames() { formattedExec = execMembers.map( (member) => - `0${execPositions[member.position].order}- - ${member.name.split(" ")[0].toLowerCase()}- - ${member.name.split(" ")[1].toLowerCase()}` + `0${execPositions[member.position].order}-${member.name + .split(" ")[0] + .toLowerCase()}-${member.name.split(" ")[1].toLowerCase()}` ); } finally { await client.unbind(); -- 2.39.2 From ae66794a5463b84915f5af5ddf4221540d4c6cb7 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Mon, 14 Feb 2022 09:59:58 +0800 Subject: [PATCH 15/36] add codey --- lib/team.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/team.ts b/lib/team.ts index a6ee515a..b31ac8a0 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -76,6 +76,8 @@ export async function getExecNames() { .toLowerCase()}-${member.name.split(" ")[1].toLowerCase()}` ); + formattedExec = [...formattedExec, "06-codey.md"]; + // Add a new line??? } finally { await client.unbind(); -- 2.39.2 From 57f67bc8d170723c7327b79857c0ef41d7ece71c Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Mon, 14 Feb 2022 10:09:12 +0800 Subject: [PATCH 16/36] edit codey file name --- lib/team.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/team.ts b/lib/team.ts index b31ac8a0..3936681f 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -76,7 +76,7 @@ export async function getExecNames() { .toLowerCase()}-${member.name.split(" ")[1].toLowerCase()}` ); - formattedExec = [...formattedExec, "06-codey.md"]; + formattedExec = [...formattedExec, "06-codey"]; // Add a new line??? } finally { -- 2.39.2 From 340dfa67b5201d929a1681cb35395ccb56a0f91d Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Mon, 14 Feb 2022 11:45:30 +0800 Subject: [PATCH 17/36] Add placeholder --- lib/team.ts | 94 +++++++++++++++++++++++++++-------------------------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 3936681f..b601703c 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { readFile, readdir, access } from "fs/promises"; import path from "path"; @@ -11,14 +12,22 @@ const EXECS_PATH = path.join("content", "team", "execs"); const fileType = ".md"; const { year, term } = getCurrentTerm(); -const execPositions: { [name: string]: { order: number; name: string } } = { - president: { order: 1, name: "President" }, - "vice-president": { order: 2, name: "Vice President" }, - secretary: { order: 3, name: "Assistant Vice President" }, - treasurer: { order: 4, name: "Treasurer" }, - sysadmin: { order: 5, name: "System Administrator" }, +const execPositions: { [name: string]: number } = { + president: 1, + "vice-president": 2, + secretary: 3, + treasurer: 4, + sysadmin: 5, }; +const positionNames: string[] = [ + "President", + "Vice President", + "Assistant Vice President", + "Treasurer", + "System Administrator", +]; + export interface execMembers { name: string; position: string; @@ -63,22 +72,17 @@ export async function getExecNames() { }) .filter((item: execMembers) => item.position in execPositions) .sort((item1: execMembers, item2: execMembers) => { - return ( - execPositions[item1.position].order - - execPositions[item2.position].order - ); + return execPositions[item1.position] - execPositions[item2.position]; }); formattedExec = execMembers.map( (member) => - `0${execPositions[member.position].order}-${member.name + `0${execPositions[member.position]}-${member.name .split(" ")[0] .toLowerCase()}-${member.name.split(" ")[1].toLowerCase()}` ); formattedExec = [...formattedExec, "06-codey"]; - - // Add a new line??? } finally { await client.unbind(); } @@ -87,45 +91,43 @@ export async function getExecNames() { } export async function getExec(fileName: string, convert = true) { - // const firstName = - // fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); - // const lastName = - // fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); - // const posOrder = fileName.split("-")[0]; - // const pos = posDict[posOrder]; + let content, metadata; - // let content, metadata; + try { + const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); + ({ content, data: metadata } = matter(raw)); - // try { - const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); - const { content, data: metadata } = matter(raw); + const image = + (metadata.image as string | undefined) ?? + (await getMemberImagePath(metadata.name)); - const image = - (metadata.image as string | undefined) ?? - (await getMemberImagePath(metadata.name)); + return { + content: convert ? await serialize(content) : content, + metadata: { ...metadata, image } as Metadata, + }; + } catch (err) { + const firstName = + fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); + const lastName = + fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); - return { - content: convert ? await serialize(content) : content, - metadata: { ...metadata, image } as Metadata, - }; - // }; - // } catch (err) { - // console.log(err); - // ({ content, metadata } = { - // content: "Coming soon!", - // metadata: { - // name: `${firstName} ${lastName}`, - // role: `${pos}`, - // }, - // }); + const posOrder = fileName.split("-")[0][1]; + const posName = positionNames[Number(posOrder) - 1]; + ({ content, metadata } = { + content: "Coming soon!", + metadata: { + name: `${firstName} ${lastName}`, + role: `${posName}`, + }, + }); - // const image = await getMemberImagePath(metadata.name); + const image = await getMemberImagePath(metadata.name); - // return { - // content: convert ? await serialize(content) : content, - // metadata: { ...metadata, image } as Metadata, - // }; - // } + return { + content: convert ? await serialize(content) : content, + metadata: { ...metadata, image } as Metadata, + }; + } } async function getImage(imgPath: string) { -- 2.39.2 From fe3358d9aef829442898b2f0e452ff1af8cdf8bf Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 19:35:13 +0800 Subject: [PATCH 18/36] Test position field --- lib/members.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/members.ts b/lib/members.ts index 77fb9589..dab815fa 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -33,7 +33,8 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: item.program === undefined ? "" : (item.program as string), + program: item.position === undefined ? "" : (item.program as string), + // Test position field }; }) .sort((item1: Member, item2: Member) => -- 2.39.2 From f96d776259ce6aa8f62bcc24a284feb18357df55 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 20:01:46 +0800 Subject: [PATCH 19/36] Test position field 2 --- lib/members.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/members.ts b/lib/members.ts index dab815fa..f11396aa 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -33,7 +33,7 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: item.position === undefined ? "" : (item.program as string), + program: item.position === undefined ? "" : (item.position as string), // Test position field }; }) -- 2.39.2 From 9a1ecf82bd8b02517c734ebf65b13c961a92c032 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 20:15:27 +0800 Subject: [PATCH 20/36] edit president to presidentcro --- lib/members.ts | 3 +-- lib/team.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index f11396aa..77fb9589 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -33,8 +33,7 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: item.position === undefined ? "" : (item.position as string), - // Test position field + program: item.program === undefined ? "" : (item.program as string), }; }) .sort((item1: Member, item2: Member) => diff --git a/lib/team.ts b/lib/team.ts index b601703c..01cfd419 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -13,7 +13,7 @@ const fileType = ".md"; const { year, term } = getCurrentTerm(); const execPositions: { [name: string]: number } = { - president: 1, + presidentcro: 1, "vice-president": 2, secretary: 3, treasurer: 4, -- 2.39.2 From 6dc69fbe145e64481a0452f554ec8d9e02a9fb7b Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 20:29:32 +0800 Subject: [PATCH 21/36] get position test --- lib/members.ts | 3 ++- lib/team.ts | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 77fb9589..5b9d0f8b 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -33,7 +33,8 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: item.program === undefined ? "" : (item.program as string), + program: + item.position === undefined ? "none" : (item.position as string), }; }) .sort((item1: Member, item2: Member) => diff --git a/lib/team.ts b/lib/team.ts index 01cfd419..2adda714 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -60,14 +60,15 @@ export async function getExecNames() { filter: `(&(objectClass=member)(term=${(term as string).slice( 0, 1 - )}${year})(position=*))`, + )}${year}))`, }); execMembers = searchEntries .map((item) => { return { name: item.cn as string, - position: item.position as string, + position: + item.position === undefined ? "none" : (item.position as string), }; }) .filter((item: execMembers) => item.position in execPositions) -- 2.39.2 From 615a8ddbf909cf11ac9946ba29997003cbbe7b23 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 20:50:40 +0800 Subject: [PATCH 22/36] test filter function --- lib/members.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 5b9d0f8b..812bc55c 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -33,13 +33,13 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: - item.position === undefined ? "none" : (item.position as string), + program: item.position === undefined ? "" : (item.position as string), }; }) - .sort((item1: Member, item2: Member) => - item1.name.localeCompare(item2.name) - ); + .filter((item: Member) => item.program !== ""); + // .sort((item1: Member, item2: Member) => + // item1.name.localeCompare(item2.name) + // ); } finally { await client.unbind(); } -- 2.39.2 From 3506b6d00c00ab8efa9033cc241a1b79ed9a9e19 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 21:07:19 +0800 Subject: [PATCH 23/36] test sort function --- lib/members.ts | 13 ++++++++++++- lib/team.ts | 4 ++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 812bc55c..71b6242b 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -8,6 +8,14 @@ export interface Member { program: string; } +const execPositions: { [name: string]: number } = { + presidentcro: 1, + "vice-president": 2, + secretary: 3, + treasurer: 4, + sysadmin: 5, +}; + export async function getMembers(year: string, term: Term): Promise { if (process.env.USE_LDAP?.toLowerCase() !== "true") { return dummyMembers; @@ -36,7 +44,10 @@ export async function getMembers(year: string, term: Term): Promise { program: item.position === undefined ? "" : (item.position as string), }; }) - .filter((item: Member) => item.program !== ""); + .filter((item: Member) => item.program !== "") + .sort((item1: Member, item2: Member) => { + return execPositions[item1.program] - execPositions[item2.program]; + }); // .sort((item1: Member, item2: Member) => // item1.name.localeCompare(item2.name) // ); diff --git a/lib/team.ts b/lib/team.ts index 2adda714..8bf35269 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -68,10 +68,10 @@ export async function getExecNames() { return { name: item.cn as string, position: - item.position === undefined ? "none" : (item.position as string), + item.position === undefined ? "" : (item.position as string), }; }) - .filter((item: execMembers) => item.position in execPositions) + .filter((item: execMembers) => item.position !== "") .sort((item1: execMembers, item2: execMembers) => { return execPositions[item1.position] - execPositions[item2.position]; }); -- 2.39.2 From ca1a9f31851070cd0f75b66bd61673f3305d53f7 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 21:45:37 +0800 Subject: [PATCH 24/36] debug sort function --- lib/members.ts | 20 ++++---------------- lib/team.ts | 11 ++++++----- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 71b6242b..77fb9589 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -8,14 +8,6 @@ export interface Member { program: string; } -const execPositions: { [name: string]: number } = { - presidentcro: 1, - "vice-president": 2, - secretary: 3, - treasurer: 4, - sysadmin: 5, -}; - export async function getMembers(year: string, term: Term): Promise { if (process.env.USE_LDAP?.toLowerCase() !== "true") { return dummyMembers; @@ -41,16 +33,12 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: item.position === undefined ? "" : (item.position as string), + program: item.program === undefined ? "" : (item.program as string), }; }) - .filter((item: Member) => item.program !== "") - .sort((item1: Member, item2: Member) => { - return execPositions[item1.program] - execPositions[item2.program]; - }); - // .sort((item1: Member, item2: Member) => - // item1.name.localeCompare(item2.name) - // ); + .sort((item1: Member, item2: Member) => + item1.name.localeCompare(item2.name) + ); } finally { await client.unbind(); } diff --git a/lib/team.ts b/lib/team.ts index 8bf35269..83052f5c 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -71,10 +71,11 @@ export async function getExecNames() { item.position === undefined ? "" : (item.position as string), }; }) - .filter((item: execMembers) => item.position !== "") - .sort((item1: execMembers, item2: execMembers) => { - return execPositions[item1.position] - execPositions[item2.position]; - }); + .filter((item: execMembers) => item.position !== ""); + + execMembers = execMembers.sort((item1: execMembers, item2: execMembers) => { + return execPositions[item1.position] - execPositions[item2.position]; + }); formattedExec = execMembers.map( (member) => @@ -118,7 +119,7 @@ export async function getExec(fileName: string, convert = true) { content: "Coming soon!", metadata: { name: `${firstName} ${lastName}`, - role: `${posName}`, + role: `${posName} ${Number(posOrder) - 1}`, }, }); -- 2.39.2 From bb743f4ca61ed5f01daf66f6f3e59503b8cdf940 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 23:31:14 +0800 Subject: [PATCH 25/36] test president --- lib/members.ts | 36 +++++++++++++++++++++++++++--------- lib/team.ts | 12 ++++++------ 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 77fb9589..4a8c0c1c 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -8,9 +8,19 @@ export interface Member { program: string; } +const execPositions: { [name: string]: number } = { + presidentcro: 1, + "vice-president": 2, + secretary: 3, + treasurer: 4, + sysadmin: 5, +}; + export async function getMembers(year: string, term: Term): Promise { if (process.env.USE_LDAP?.toLowerCase() !== "true") { - return dummyMembers; + return dummyMembers.sort((item1: Member, item2: Member) => { + return execPositions[item1.program] - execPositions[item2.program]; + }); } let members: Member[] = []; @@ -26,6 +36,7 @@ export async function getMembers(year: string, term: Term): Promise { 0, 1 )}${year}))`, + explicitBufferAttributes: ["position"], }); members = searchEntries @@ -33,12 +44,14 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: item.program === undefined ? "" : (item.program as string), + program: + item.position === undefined ? "" : (item.position[0] as string), }; }) - .sort((item1: Member, item2: Member) => - item1.name.localeCompare(item2.name) - ); + .filter((item: Member) => item.program !== ""); + // .sort((item1: Member, item2: Member) => { + // return execPositions[item1.program] - execPositions[item2.program]; + // }); } finally { await client.unbind(); } @@ -48,13 +61,18 @@ export async function getMembers(year: string, term: Term): Promise { const dummyMembers: Member[] = [ { - name: "John Smith", - id: "j12smith", - program: "MAT/Mathematics Computer Science", + name: "Alice ", + id: "a12smith", + program: "sysadmin", }, { name: "Jane Smith", id: "j34smith", - program: "MAT/Mathematics Computer Science", + program: "vice-president", + }, + { + name: "John Smith", + id: "j12smith", + program: "presidentcro", }, ]; diff --git a/lib/team.ts b/lib/team.ts index 83052f5c..8258ba48 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { readFile, readdir, access } from "fs/promises"; import path from "path"; @@ -28,7 +27,7 @@ const positionNames: string[] = [ "System Administrator", ]; -export interface execMembers { +export interface ExecMembers { name: string; position: string; } @@ -50,7 +49,7 @@ export async function getExecNames() { const searchDN = "ou=People,dc=csclub,dc=uwaterloo,dc=ca"; const client = new Client({ url }); - let execMembers: execMembers[] = []; + let execMembers: ExecMembers[] = []; let formattedExec: string[]; try { @@ -61,6 +60,7 @@ export async function getExecNames() { 0, 1 )}${year}))`, + explicitBufferAttributes: ["position"], }); execMembers = searchEntries @@ -68,12 +68,12 @@ export async function getExecNames() { return { name: item.cn as string, position: - item.position === undefined ? "" : (item.position as string), + item.position === undefined ? "" : (item.position[0] as string), }; }) - .filter((item: execMembers) => item.position !== ""); + .filter((item: ExecMembers) => item.position !== ""); - execMembers = execMembers.sort((item1: execMembers, item2: execMembers) => { + execMembers = execMembers.sort((item1: ExecMembers, item2: ExecMembers) => { return execPositions[item1.position] - execPositions[item2.position]; }); -- 2.39.2 From f09580151ff5fdebd8e41acca145558d6b893751 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Feb 2022 23:42:40 +0800 Subject: [PATCH 26/36] test position array --- lib/members.ts | 3 +-- lib/team.ts | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 4a8c0c1c..21d66493 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -9,7 +9,7 @@ export interface Member { } const execPositions: { [name: string]: number } = { - presidentcro: 1, + president: 1, "vice-president": 2, secretary: 3, treasurer: 4, @@ -36,7 +36,6 @@ export async function getMembers(year: string, term: Term): Promise { 0, 1 )}${year}))`, - explicitBufferAttributes: ["position"], }); members = searchEntries diff --git a/lib/team.ts b/lib/team.ts index 8258ba48..3345823a 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -12,7 +12,7 @@ const fileType = ".md"; const { year, term } = getCurrentTerm(); const execPositions: { [name: string]: number } = { - presidentcro: 1, + president: 1, "vice-president": 2, secretary: 3, treasurer: 4, @@ -60,7 +60,6 @@ export async function getExecNames() { 0, 1 )}${year}))`, - explicitBufferAttributes: ["position"], }); execMembers = searchEntries -- 2.39.2 From 3dbc1efe3985754bf52f797756a3d28ddb3e4922 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 17 Feb 2022 00:06:08 +0800 Subject: [PATCH 27/36] test data type for position --- lib/members.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 21d66493..6e5dccab 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -43,8 +43,7 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: - item.position === undefined ? "" : (item.position[0] as string), + program: item.position === undefined ? "" : typeof item.position, }; }) .filter((item: Member) => item.program !== ""); -- 2.39.2 From 0c0515a3c652bf6a0cbd488ad9141f5750919f4b Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 17 Feb 2022 10:58:42 +0800 Subject: [PATCH 28/36] fetch array at index 0 from ldap --- lib/members.ts | 7 ++++++- lib/team.ts | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 6e5dccab..033edc76 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -43,7 +43,12 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: item.position === undefined ? "" : typeof item.position, + program: + item.position === undefined + ? "" + : typeof item.position === "string" + ? item.position + : (item.position[0] as string), }; }) .filter((item: Member) => item.program !== ""); diff --git a/lib/team.ts b/lib/team.ts index 3345823a..bea3a477 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -67,7 +67,11 @@ export async function getExecNames() { return { name: item.cn as string, position: - item.position === undefined ? "" : (item.position[0] as string), + item.position === undefined + ? "" + : typeof item.position === "string" + ? item.position + : (item.position[0] as string), }; }) .filter((item: ExecMembers) => item.position !== ""); -- 2.39.2 From 856f8495260b0c7a2944878f1d909c9516b8ffa3 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 17 Feb 2022 11:42:05 +0800 Subject: [PATCH 29/36] finalize ldap --- lib/members.ts | 39 +++++++++------------------------------ 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/lib/members.ts b/lib/members.ts index 033edc76..77fb9589 100644 --- a/lib/members.ts +++ b/lib/members.ts @@ -8,19 +8,9 @@ export interface Member { program: string; } -const execPositions: { [name: string]: number } = { - president: 1, - "vice-president": 2, - secretary: 3, - treasurer: 4, - sysadmin: 5, -}; - export async function getMembers(year: string, term: Term): Promise { if (process.env.USE_LDAP?.toLowerCase() !== "true") { - return dummyMembers.sort((item1: Member, item2: Member) => { - return execPositions[item1.program] - execPositions[item2.program]; - }); + return dummyMembers; } let members: Member[] = []; @@ -43,18 +33,12 @@ export async function getMembers(year: string, term: Term): Promise { return { name: item.cn as string, id: item.uid as string, - program: - item.position === undefined - ? "" - : typeof item.position === "string" - ? item.position - : (item.position[0] as string), + program: item.program === undefined ? "" : (item.program as string), }; }) - .filter((item: Member) => item.program !== ""); - // .sort((item1: Member, item2: Member) => { - // return execPositions[item1.program] - execPositions[item2.program]; - // }); + .sort((item1: Member, item2: Member) => + item1.name.localeCompare(item2.name) + ); } finally { await client.unbind(); } @@ -64,18 +48,13 @@ export async function getMembers(year: string, term: Term): Promise { const dummyMembers: Member[] = [ { - name: "Alice ", - id: "a12smith", - program: "sysadmin", + name: "John Smith", + id: "j12smith", + program: "MAT/Mathematics Computer Science", }, { name: "Jane Smith", id: "j34smith", - program: "vice-president", - }, - { - name: "John Smith", - id: "j12smith", - program: "presidentcro", + program: "MAT/Mathematics Computer Science", }, ]; -- 2.39.2 From 2d9176256d52ed3b4217e34a60340393232d52b5 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Fri, 4 Mar 2022 16:15:15 +0800 Subject: [PATCH 30/36] Fix logic for fetching array --- lib/team.ts | 69 +++++++++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 39 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index bea3a477..d368e029 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -11,27 +11,22 @@ const EXECS_PATH = path.join("content", "team", "execs"); const fileType = ".md"; const { year, term } = getCurrentTerm(); -const execPositions: { [name: string]: number } = { - president: 1, - "vice-president": 2, - secretary: 3, - treasurer: 4, - sysadmin: 5, +const execPositions: { [name: string]: string } = { + president: "President", + "vice-president": "Vice President", + secretary: "Assistant Vice President", + treasurer: "Treasurer", + sysadmin: "System Administrator", }; const positionNames: string[] = [ - "President", - "Vice President", - "Assistant Vice President", - "Treasurer", - "System Administrator", + "president", + "vice-president", + "secretary", + "treasurer", + "sysadmin", ]; -export interface ExecMembers { - name: string; - position: string; -} - export interface Metadata { name: string; role: string; @@ -49,7 +44,8 @@ export async function getExecNames() { const searchDN = "ou=People,dc=csclub,dc=uwaterloo,dc=ca"; const client = new Client({ url }); - let execMembers: ExecMembers[] = []; + // position: name + let execMembers: { [name: string]: string }; let formattedExec: string[]; try { @@ -62,29 +58,24 @@ export async function getExecNames() { )}${year}))`, }); - execMembers = searchEntries - .map((item) => { - return { - name: item.cn as string, - position: - item.position === undefined - ? "" - : typeof item.position === "string" - ? item.position - : (item.position[0] as string), - }; - }) - .filter((item: ExecMembers) => item.position !== ""); - - execMembers = execMembers.sort((item1: ExecMembers, item2: ExecMembers) => { - return execPositions[item1.position] - execPositions[item2.position]; + // item.position might be an array if the member has more than one position + searchEntries.forEach((item) => { + if (typeof item.position === "string" && item.position in execPositions) { + execMembers[item.position] = item.cn as string; + } else if (typeof item.position === "object") { + item.position.forEach((p) => { + if ((p as string) in execPositions) { + execMembers[p as string] = item.cn as string; + } + }); + } }); - formattedExec = execMembers.map( - (member) => - `0${execPositions[member.position]}-${member.name + formattedExec = positionNames.map( + (position, i) => + `0${i + 1}-${execMembers[position] .split(" ")[0] - .toLowerCase()}-${member.name.split(" ")[1].toLowerCase()}` + .toLowerCase()}-${execMembers[position].split(" ")[1].toLowerCase()}` ); formattedExec = [...formattedExec, "06-codey"]; @@ -117,12 +108,12 @@ export async function getExec(fileName: string, convert = true) { fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); const posOrder = fileName.split("-")[0][1]; - const posName = positionNames[Number(posOrder) - 1]; + const posName = execPositions[positionNames[Number(posOrder) - 1]]; ({ content, metadata } = { content: "Coming soon!", metadata: { name: `${firstName} ${lastName}`, - role: `${posName} ${Number(posOrder) - 1}`, + role: `${posName}`, }, }); -- 2.39.2 From 51bb491277160b0937ce5e5d006b8b07052908e5 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Fri, 4 Mar 2022 17:08:52 +0800 Subject: [PATCH 31/36] fix undefined bug --- lib/team.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index d368e029..0467526a 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -45,8 +45,8 @@ export async function getExecNames() { const client = new Client({ url }); // position: name - let execMembers: { [name: string]: string }; - let formattedExec: string[]; + const execMembers: { [name: string]: string } = {}; + let formattedExec: string[] = []; try { await client.bind("", ""); -- 2.39.2 From 4c087b4af4b0ee7c333c62bf5f76c6cabff77c83 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Mar 2022 00:38:37 +0800 Subject: [PATCH 32/36] eliminate position name to keep in sync --- content/team/execs/{06-codey.md => codey.md} | 0 .../{03-dina-orucevic.md => dina-orucevic.md} | 0 .../execs/{04-eden-chan.md => eden-chan.md} | 0 .../execs/{02-eric-huang.md => eric-huang.md} | 0 .../{01-juthika-hoque.md => juthika-hoque.md} | 0 .../execs/{05-raymond-li.md => raymond-li.md} | 0 lib/team.ts | 46 +++++++++++-------- pages/about/team.tsx | 6 +-- 8 files changed, 30 insertions(+), 22 deletions(-) rename content/team/execs/{06-codey.md => codey.md} (100%) rename content/team/execs/{03-dina-orucevic.md => dina-orucevic.md} (100%) rename content/team/execs/{04-eden-chan.md => eden-chan.md} (100%) rename content/team/execs/{02-eric-huang.md => eric-huang.md} (100%) rename content/team/execs/{01-juthika-hoque.md => juthika-hoque.md} (100%) rename content/team/execs/{05-raymond-li.md => raymond-li.md} (100%) diff --git a/content/team/execs/06-codey.md b/content/team/execs/codey.md similarity index 100% rename from content/team/execs/06-codey.md rename to content/team/execs/codey.md diff --git a/content/team/execs/03-dina-orucevic.md b/content/team/execs/dina-orucevic.md similarity index 100% rename from content/team/execs/03-dina-orucevic.md rename to content/team/execs/dina-orucevic.md diff --git a/content/team/execs/04-eden-chan.md b/content/team/execs/eden-chan.md similarity index 100% rename from content/team/execs/04-eden-chan.md rename to content/team/execs/eden-chan.md diff --git a/content/team/execs/02-eric-huang.md b/content/team/execs/eric-huang.md similarity index 100% rename from content/team/execs/02-eric-huang.md rename to content/team/execs/eric-huang.md diff --git a/content/team/execs/01-juthika-hoque.md b/content/team/execs/juthika-hoque.md similarity index 100% rename from content/team/execs/01-juthika-hoque.md rename to content/team/execs/juthika-hoque.md diff --git a/content/team/execs/05-raymond-li.md b/content/team/execs/raymond-li.md similarity index 100% rename from content/team/execs/05-raymond-li.md rename to content/team/execs/raymond-li.md diff --git a/lib/team.ts b/lib/team.ts index 0467526a..cc1323cc 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -33,11 +33,9 @@ export interface Metadata { image: string; } -export async function getExecNames() { +export async function getExecNamePosPairs() { if (process.env.USE_LDAP?.toLowerCase() !== "true") { - return (await readdir(EXECS_PATH)) - .filter((name) => name.endsWith(fileType)) - .map((name) => name.slice(0, -1 * fileType.length)); + return [["codey", "mascot"]]; } const url = "ldap://ldap1.csclub.uwaterloo.ca"; @@ -46,7 +44,7 @@ export async function getExecNames() { // position: name const execMembers: { [name: string]: string } = {}; - let formattedExec: string[] = []; + let formattedExec: [string, string][] = []; try { await client.bind("", ""); @@ -62,7 +60,7 @@ export async function getExecNames() { searchEntries.forEach((item) => { if (typeof item.position === "string" && item.position in execPositions) { execMembers[item.position] = item.cn as string; - } else if (typeof item.position === "object") { + } else if (item.position instanceof Array) { item.position.forEach((p) => { if ((p as string) in execPositions) { execMembers[p as string] = item.cn as string; @@ -71,14 +69,18 @@ export async function getExecNames() { } }); - formattedExec = positionNames.map( - (position, i) => - `0${i + 1}-${execMembers[position] - .split(" ")[0] - .toLowerCase()}-${execMembers[position].split(" ")[1].toLowerCase()}` - ); + formattedExec = positionNames.map((position) => { + return [ + `${execMembers[position].split(" ")[0].toLowerCase()}-${execMembers[ + position + ] + .split(" ")[1] + .toLowerCase()}`, + position, + ]; + }); - formattedExec = [...formattedExec, "06-codey"]; + formattedExec = [...formattedExec, ["codey", "mascot"]]; } finally { await client.unbind(); } @@ -86,11 +88,16 @@ export async function getExecNames() { return formattedExec; } -export async function getExec(fileName: string, convert = true) { +export async function getExec( + execNamePosPair: [string, string], + convert = true +) { let content, metadata; try { - const raw = await readFile(path.join(EXECS_PATH, `${fileName}${fileType}`)); + const raw = await readFile( + path.join(EXECS_PATH, `${execNamePosPair[0]}${fileType}`) + ); ({ content, data: metadata } = matter(raw)); const image = @@ -103,12 +110,13 @@ export async function getExec(fileName: string, convert = true) { }; } catch (err) { const firstName = - fileName.split("-")[1][0].toUpperCase() + fileName.split("-")[1].slice(1); + execNamePosPair[0].split("-")[0][0].toUpperCase() + + execNamePosPair[0].split("-")[0].slice(1); const lastName = - fileName.split("-")[2][0].toUpperCase() + fileName.split("-")[2].slice(1); + execNamePosPair[0].split("-")[1][0].toUpperCase() + + execNamePosPair[0].split("-")[1].slice(1); - const posOrder = fileName.split("-")[0][1]; - const posName = execPositions[positionNames[Number(posOrder) - 1]]; + const posName = execPositions[execNamePosPair[1]]; ({ content, metadata } = { content: "Coming soon!", metadata: { diff --git a/pages/about/team.tsx b/pages/about/team.tsx index 7ad1b552..18f33c29 100644 --- a/pages/about/team.tsx +++ b/pages/about/team.tsx @@ -11,7 +11,7 @@ import { TeamMemberCard } from "@/components/TeamMemberCard"; import { Title } from "@/components/Title"; import { getExec, - getExecNames, + getExecNamePosPairs, Metadata, getMemberImagePath, } from "@/lib/team"; @@ -140,10 +140,10 @@ async function getTeamWithImages(team: TeamMember[]) { } export const getStaticProps: GetStaticProps = async () => { - const execNames = await getExecNames(); + const execNamePosPairs = await getExecNamePosPairs(); const execs = (await Promise.all( - execNames.map((name) => getExec(name)) + execNamePosPairs.map((namePosPair) => getExec(namePosPair)) )) as SerializedExec[]; const [programme, website, systems, terminal] = await Promise.all([ -- 2.39.2 From 67afba862a4c3663d1bceb1c3d610f17afc275af Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Mar 2022 00:51:18 +0800 Subject: [PATCH 33/36] fix type bug --- lib/team.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index cc1323cc..31d054ce 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -88,10 +88,7 @@ export async function getExecNamePosPairs() { return formattedExec; } -export async function getExec( - execNamePosPair: [string, string], - convert = true -) { +export async function getExec(execNamePosPair: string[], convert = true) { let content, metadata; try { -- 2.39.2 From 00caa70143d73aa24d3a1577887edf1e8d178c9d Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Mar 2022 10:31:57 +0800 Subject: [PATCH 34/36] fix data type --- lib/team.ts | 14 +++++--------- pages/about/team.tsx | 2 +- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index a82a5b55..2c4447ef 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -88,13 +88,11 @@ export async function getExecNamePosPairs() { return formattedExec; } -export async function getExec(execNamePosPair: string[], convert = true) { +export async function getExec(name: string, pos: string, convert = true) { let content, metadata; try { - const raw = await readFile( - path.join(EXECS_PATH, `${execNamePosPair[0]}${fileType}`) - ); + const raw = await readFile(path.join(EXECS_PATH, `${name}${fileType}`)); ({ content, data: metadata } = matter(raw)); const image = @@ -107,13 +105,11 @@ export async function getExec(execNamePosPair: string[], convert = true) { }; } catch (err) { const firstName = - execNamePosPair[0].split("-")[0][0].toUpperCase() + - execNamePosPair[0].split("-")[0].slice(1); + name.split("-")[0][0].toUpperCase() + name.split("-")[0].slice(1); const lastName = - execNamePosPair[0].split("-")[1][0].toUpperCase() + - execNamePosPair[0].split("-")[1].slice(1); + name.split("-")[1][0].toUpperCase() + name.split("-")[1].slice(1); - const posName = execPositions[execNamePosPair[1]]; + const posName = execPositions[pos]; ({ content, metadata } = { content: "Coming soon!", metadata: { diff --git a/pages/about/team.tsx b/pages/about/team.tsx index d236fa60..05a1ee74 100644 --- a/pages/about/team.tsx +++ b/pages/about/team.tsx @@ -211,7 +211,7 @@ export const getStaticProps: GetStaticProps = async () => { const execNamePosPairs = await getExecNamePosPairs(); const execs = (await Promise.all( - execNamePosPairs.map((namePosPair) => getExec(namePosPair)) + execNamePosPairs.map((posPairs) => getExec(posPairs[0], posPairs[1])) )) as SerializedExec[]; const [ -- 2.39.2 From cafdf334fe631f3dd8e2c7fd1c03ce1f8d34060f Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Thu, 10 Mar 2022 10:42:49 +0800 Subject: [PATCH 35/36] final fix --- lib/team.ts | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index 2c4447ef..c5f6b8ab 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -95,28 +95,25 @@ export async function getExec(name: string, pos: string, convert = true) { const raw = await readFile(path.join(EXECS_PATH, `${name}${fileType}`)); ({ content, data: metadata } = matter(raw)); - const image = - (metadata.image as string | undefined) ?? - (await getMemberImagePath(metadata.name)); + const image = await getMemberImagePath(metadata.name); return { content: convert ? await serialize(content) : content, metadata: { ...metadata, image } as Metadata, }; } catch (err) { + // Capitalize the first letter of the first name and last name const firstName = name.split("-")[0][0].toUpperCase() + name.split("-")[0].slice(1); const lastName = name.split("-")[1][0].toUpperCase() + name.split("-")[1].slice(1); const posName = execPositions[pos]; - ({ content, metadata } = { - content: "Coming soon!", - metadata: { - name: `${firstName} ${lastName}`, - role: `${posName}`, - }, - }); + content = "Coming Soon"; + metadata = { + name: `${firstName} ${lastName}`, + role: `${posName}`, + }; const image = await getMemberImagePath(metadata.name); -- 2.39.2 From caf06131184ee3c0466b1fb126438023e5f247b3 Mon Sep 17 00:00:00 2001 From: Rebecca-Chou Date: Wed, 16 Mar 2022 13:58:26 +0800 Subject: [PATCH 36/36] improve code style and readability --- lib/team.ts | 23 +++++++++++------------ pages/about/team.tsx | 4 +++- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/lib/team.ts b/lib/team.ts index c5f6b8ab..43cb7100 100644 --- a/lib/team.ts +++ b/lib/team.ts @@ -1,4 +1,4 @@ -import { readFile, readdir, access } from "fs/promises"; +import { readFile, access } from "fs/promises"; import path from "path"; import matter from "gray-matter"; @@ -6,12 +6,13 @@ import { Client } from "ldapts"; import { serialize } from "next-mdx-remote/serialize"; import { getCurrentTerm } from "@/lib/events"; +import { capitalize } from "@/utils"; const EXECS_PATH = path.join("content", "team", "execs"); -const fileType = ".md"; +const FILETYPE = ".md"; const { year, term } = getCurrentTerm(); -const execPositions: { [name: string]: string } = { +const execPositions: { [position: string]: string } = { president: "President", "vice-president": "Vice President", secretary: "Assistant Vice President", @@ -19,7 +20,7 @@ const execPositions: { [name: string]: string } = { sysadmin: "System Administrator", }; -const positionNames: string[] = [ +const orderedExecPositions: string[] = [ "president", "vice-president", "secretary", @@ -43,7 +44,7 @@ export async function getExecNamePosPairs() { const client = new Client({ url }); // position: name - const execMembers: { [name: string]: string } = {}; + const execMembers: { [position: string]: string } = {}; let formattedExec: [string, string][] = []; try { @@ -69,7 +70,7 @@ export async function getExecNamePosPairs() { } }); - formattedExec = positionNames.map((position) => { + formattedExec = orderedExecPositions.map((position) => { return [ `${execMembers[position].split(" ")[0].toLowerCase()}-${execMembers[ position @@ -92,7 +93,7 @@ export async function getExec(name: string, pos: string, convert = true) { let content, metadata; try { - const raw = await readFile(path.join(EXECS_PATH, `${name}${fileType}`)); + const raw = await readFile(path.join(EXECS_PATH, `${name}${FILETYPE}`)); ({ content, data: metadata } = matter(raw)); const image = await getMemberImagePath(metadata.name); @@ -103,13 +104,11 @@ export async function getExec(name: string, pos: string, convert = true) { }; } catch (err) { // Capitalize the first letter of the first name and last name - const firstName = - name.split("-")[0][0].toUpperCase() + name.split("-")[0].slice(1); - const lastName = - name.split("-")[1][0].toUpperCase() + name.split("-")[1].slice(1); + const firstName = capitalize(name.split("-")[0]); + const lastName = capitalize(name.split("-")[1]); const posName = execPositions[pos]; - content = "Coming Soon"; + content = "Coming Soon!"; metadata = { name: `${firstName} ${lastName}`, role: `${posName}`, diff --git a/pages/about/team.tsx b/pages/about/team.tsx index 05a1ee74..5c2bf065 100644 --- a/pages/about/team.tsx +++ b/pages/about/team.tsx @@ -211,7 +211,9 @@ export const getStaticProps: GetStaticProps = async () => { const execNamePosPairs = await getExecNamePosPairs(); const execs = (await Promise.all( - execNamePosPairs.map((posPairs) => getExec(posPairs[0], posPairs[1])) + execNamePosPairs.map((namePosPair) => + getExec(namePosPair[0], namePosPair[1]) + ) )) as SerializedExec[]; const [ -- 2.39.2