diff --git a/src/app/about/clubs-council/content.mdx b/src/app/about/clubs-council/content.mdx
index 091251e5..4467ae22 100644
--- a/src/app/about/clubs-council/content.mdx
+++ b/src/app/about/clubs-council/content.mdx
@@ -41,7 +41,24 @@ The primary aim of the Clubs Council is to ensure that all student-driven organi
{props.ccMembers}
- ### Tech Team
+ ### Advisory Board
+
+
+
+ View all
+
+
+
+
+{props.advisoryMembers}
+
+
+ ### SLC-CC Tech Team
{
return member.roles.length > 0;
+ })
+ ?.sort((a, b) => {
+ const roleNameA = a.roles[0]?.name.toLowerCase();
+ const roleNameB = b.roles[0]?.name.toLowerCase();
+ if (roleNameA < roleNameB) {
+ return -1;
+ }
+ if (roleNameA > roleNameB) {
+ return 1;
+ }
+ return 0;
+ });
+
+ const advisoryMembers = members
+ ?.map((member) => {
+ const { roles } = member;
+ const advisorWordsCombined = advisorWords.concat(executiveBoardWords);
+ const advisorRoles = filterRoles(
+ roles,
+ advisorWordsCombined,
+ techTeamWords
+ );
+ const newMember = { ...member, roles: advisorRoles };
+ return newMember;
+ })
+ ?.filter((member) => {
+ if (member.roles.length <= 0) return false;
+
+ const role0 = member.roles[0]?.name.toLowerCase();
+ const matchesAdvisoryFilterWords = advisorWords.some((word) =>
+ role0.includes(word)
+ );
+ return matchesAdvisoryFilterWords;
});
const techMembers = members
@@ -46,14 +81,31 @@ export default async function ClubsCouncil() {
})
?.filter((member) => {
return member.roles.length > 0;
+ })
+ ?.sort((a, b) => {
+ const roleNameA = a.roles[0]?.name.toLowerCase();
+ const roleNameB = b.roles[0]?.name.toLowerCase();
+ if (roleNameA.includes("lead") && !roleNameB.includes("lead")) {
+ return -1;
+ }
+ if (roleNameB.includes("lead") && !roleNameA.includes("lead")) {
+ return 1;
+ }
+ if (roleNameA.includes("advisor") && !roleNameB.includes("advisor")) {
+ return 1;
+ }
+ if (roleNameB.includes("advisor") && !roleNameA.includes("advisor")) {
+ return -1;
+ }
+
+ return 0;
});
const extendedMembers = members
?.map((member) => {
const { roles } = member;
- const newWords = executiveBoardWords.concat(techTeamWords);
- const techTeamRoles = filterRoles(roles, [], newWords);
- const newMember = { ...member, roles: techTeamRoles };
+ const extendedMembersRoles = filterRoles(roles, extendedMembersWords);
+ const newMember = { ...member, roles: extendedMembersRoles };
return newMember;
})
?.filter((member) => {
@@ -68,6 +120,11 @@ export default async function ClubsCouncil() {
) : null
}
+ advisoryMembers={
+ advisoryMembers?.length ? (
+
+ ) : null
+ }
techMembers={
techMembers?.length ? : null
}
@@ -87,27 +144,39 @@ const filterRoles = (roles, filterWords, unfilterWords = []) => {
const { name, endYear } = role;
const lowercaseName = name.toLowerCase();
const matchesFilterWords = filterWords.some((word) =>
- lowercaseName.includes(word),
+ lowercaseName.includes(word)
);
const matchesUnfilterWords = unfilterWords.some((word) =>
- lowercaseName.includes(word),
+ lowercaseName.includes(word)
);
return matchesFilterWords && !matchesUnfilterWords && endYear === null;
});
// If any roles are filtered, return those that match filterWords and not unfilterWords
if (filteredRoles?.length > 0) {
- return roles?.filter((role) => {
- const { name, endYear } = role;
- const lowercaseName = name.toLowerCase();
- const matchesFilterWords = filterWords.some((word) =>
- lowercaseName.includes(word),
- );
- const matchesUnfilterWords = unfilterWords.some((word) =>
- lowercaseName.includes(word),
- );
- return matchesFilterWords && !matchesUnfilterWords;
- });
+ return roles
+ ?.filter((role) => {
+ const { name } = role;
+ const lowercaseName = name.toLowerCase();
+ const matchesFilterWords = filterWords.some((word) =>
+ lowercaseName.includes(word)
+ );
+ const matchesUnfilterWords = unfilterWords.some((word) =>
+ lowercaseName.includes(word)
+ );
+ return matchesFilterWords && !matchesUnfilterWords;
+ })
+ ?.sort((a, b) => {
+ // Place roles with endYear=null at the top
+ if (a.endYear === null && b.endYear !== null) {
+ return -1;
+ } else if (a.endYear !== null && b.endYear === null) {
+ return 1;
+ } else {
+ // Sort based on endYear in descending order
+ return b.endYear - a.endYear;
+ }
+ });
} else {
return filteredRoles;
}
diff --git a/src/constants/ccMembersFilterWords.jsx b/src/constants/ccMembersFilterWords.jsx
index 79e5fc21..c29995d7 100644
--- a/src/constants/ccMembersFilterWords.jsx
+++ b/src/constants/ccMembersFilterWords.jsx
@@ -1,2 +1,4 @@
-export const executiveBoardWords = ["secretary", "advisor"];
+export const executiveBoardWords = ["secretary"];
+export const advisorWords = ["advisor"];
export const techTeamWords = ["tech", "web", "system"];
+export const extendedMembersWords = ["design", "pg"];