Skip to content

Commit 2083455

Browse files
committed
feat: update member listing with new types, sorting, and ribbons
- Include alumni, advisor, supporting, and honorary members in the team list (exclude passive). - Implement custom sorting order: Board > Advisor > Core/Trainees > Supporting/Honorary > Alumni > Passive. - Add visual ribbons: Blue for Advisor, Gray for Alumni, Orange for Honorary.
1 parent 219a6d2 commit 2083455

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

src/app/about/team/Team.tsx

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@ export const OurTeam = ({ members }: OurTeamProps) => {
2424

2525
const filteredMembers = useMemo(() => {
2626
return members.filter(member => {
27-
const isMemberActive = member.membership_status === 'core' || member.membership_status === 'trainees' ;
27+
const allowedStatuses = ['core', 'trainees', 'alumni', 'advisor', 'supporting', 'honorary'];
28+
const isMemberActive = member.membership_status && allowedStatuses.includes(member.membership_status);
2829
const memberDepartments = member.departments?.map(dep => dep.name) || [];
2930
const matchesDepartment = selectedDepartment
3031
? memberDepartments.includes(selectedDepartment)
@@ -33,6 +34,24 @@ export const OurTeam = ({ members }: OurTeamProps) => {
3334
}).sort((a, b) => {
3435
if (a.is_board && !b.is_board) return -1;
3536
if (!a.is_board && b.is_board) return 1;
37+
38+
const statusOrder: Record<string, number> = {
39+
advisor: 1,
40+
core: 2,
41+
trainees: 2,
42+
honorary: 3,
43+
supporting: 3,
44+
alumni: 4,
45+
passive: 5
46+
};
47+
48+
const statusA = a.membership_status ? (statusOrder[a.membership_status] ?? 99) : 99;
49+
const statusB = b.membership_status ? (statusOrder[b.membership_status] ?? 99) : 99;
50+
51+
if (statusA !== statusB) {
52+
return statusA - statusB;
53+
}
54+
3655
return 0;
3756
});
3857
}, [selectedDepartment, members]);

src/components/member_card/MemberCard.tsx

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,22 @@ const ribbonVariants = cva("", {
3636
blue: "bg-blue-600",
3737
green: "bg-green-600",
3838
yellow: "bg-yellow-600",
39+
gray: "bg-gray-600",
40+
orange: "bg-orange-600",
3941
},
4042
borderColor: {
4143
blue: "border-blue-600",
4244
green: "border-green-600",
4345
yellow: "border-yellow-600",
46+
gray: "border-gray-600",
47+
orange: "border-orange-600",
4448
}
4549
}
4650
})
4751

4852
interface RibbonProps {
4953
text: string;
50-
color: "blue" | "green" | "yellow";
54+
color: "blue" | "green" | "yellow" | "gray" | "orange";
5155
}
5256

5357
const Ribbon = React.forwardRef<HTMLDivElement, RibbonProps>(({ text, color }, ref) => {
@@ -71,6 +75,9 @@ export const MemberCard = React.forwardRef<HTMLDivElement, MemberCardProps>(({ m
7175
{/* Ribbons */}
7276
<div className="absolute top-3 right-0 flex flex-col gap-1 items-end justify-end">
7377
{member.is_board && <Ribbon text="Board" color="blue" />}
78+
{member.membership_status === 'advisor' && <Ribbon text="Advisor" color="blue" />}
79+
{member.membership_status === 'alumni' && <Ribbon text="Alumni" color="gray" />}
80+
{member.membership_status === 'honorary' && <Ribbon text="Honorary" color="orange" />}
7481
</div>
7582

7683
{/* Left column for mobile (Avatar) */}

0 commit comments

Comments
 (0)