Skip to content

Commit c9d3e9e

Browse files
committed
New: cp members card
1 parent 877f9c7 commit c9d3e9e

File tree

3 files changed

+75
-26
lines changed

3 files changed

+75
-26
lines changed

src/components/home/cp-members-content.tsx

Lines changed: 69 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { useTranslations } from "next-intl";
33
import { FocusCards } from "./focus-cards";
44
import { useCodeforcesData } from "@/hooks/use-codeforces-data";
5+
import AnimatedTooltip from "../shared/ui/tooltip";
56

67
const CP_MEMBERS: string[] = [
78
"adrianrrruiz",
@@ -12,25 +13,88 @@ const CP_MEMBERS: string[] = [
1213
"Lorenzo_lrc",
1314
"harry3008",
1415
"sandoval95",
16+
"Pyotr_",
17+
"johan-smc",
18+
"a_santamaria",
19+
"Julianasolanx"
20+
];
21+
22+
const CONTESTS: { title: string; src: string; icon: string }[] = [
23+
{
24+
title: "ICPC (2025)",
25+
src: "https://drive.google.com/uc?export=view&id=1a8dbWnSSFwPnR77IJPEJoYB0U4cJxuJN",
26+
icon: "/icpc.svg",
27+
},
28+
{
29+
title: "BUHOS INTERNA (2025)",
30+
src: "https://drive.google.com/uc?export=view&id=1MptlEaenvDrRRdAKYHWfxxT4ImQNkv8v",
31+
icon: "/buhos.svg",
32+
},
33+
{
34+
title: "ECICIENCIA (2025)",
35+
src: "https://drive.google.com/uc?export=view&id=19b_jK2XTfC7YxuzbGukJRg_E9WEtCPzR",
36+
icon: "/eciciencia.svg",
37+
},
38+
{
39+
title: "ICPC (2024)",
40+
src: "https://drive.google.com/uc?export=view&id=1EQ9XTZtkO-JMewDzqfBqUl3UUe3GpauS",
41+
icon: "/icpc.svg",
42+
},
43+
{
44+
title: "ECICIENCIA (2024)",
45+
src: "https://drive.google.com/uc?export=view&id=1URu88UvYTYdr_gnHZo9kFRErZMJZY-PA",
46+
icon: "/eciciencia.svg",
47+
},
48+
{
49+
title: "ICPC (2023)",
50+
src: "https://drive.google.com/uc?export=view&id=1_wmQo9AJYp60SpNc-XwZiz7uhSrtGBdd",
51+
icon: "/icpc.svg",
52+
},
53+
{
54+
title: "ECICIENCIA (2023)",
55+
src: "https://drive.google.com/uc?export=view&id=11v5zOU6sXeikOgXhf9YxYdvxsiTPzCZ_",
56+
icon: "/eciciencia.svg",
57+
},
58+
{
59+
title: "ICPC (2022)",
60+
src: "https://drive.google.com/uc?export=view&id=1mEeOwdGvE66pQjgf_6WP8IRlwNha2z8L",
61+
icon: "/icpc.svg",
62+
},
1563
];
1664

1765
export const CPMembersContent = () => {
1866
const t = useTranslations("Activities.cpMembers");
19-
const { members, coaches, loading } = useCodeforcesData(CP_MEMBERS);
67+
const { members, loading } = useCodeforcesData(CP_MEMBERS);
68+
69+
const membersItems = members.map((member, index) => ({
70+
id: index,
71+
name: member.title,
72+
designation: "CP Member",
73+
image: member.src,
74+
html_url: `https://codeforces.com/profile/${member.handle}`,
75+
className: "border-gray-200 hover:border-blue-400",
76+
}));
2077

2178
if (loading) return <p>{t("loading")}</p>;
2279

2380
return (
2481
<>
2582
<p className="dark:text-(--azul-niebla)">
26-
Somos un grupo apasionado por competir y desctacarnos cada día más
83+
{t("description")}
2784
</p>
2885
<br />
29-
<FocusCards cards={members} />
86+
<FocusCards cards={CONTESTS} />
3087
<p className="text-3xl text-center my-10 font-semibold dark:text-(--azul-niebla)">
31-
{t("coach")}
88+
{t("membersTitle")}
3289
</p>
33-
<FocusCards cards={coaches} />
90+
{/* Contribuidores del proyecto en el centro*/}
91+
<div className="flex justify-center relative z-0">
92+
<AnimatedTooltip
93+
items={membersItems}
94+
className="relative z-0"
95+
tooltipOffset="-translate-x-3/4"
96+
/>
97+
</div>
3498
</>
3599
);
36100
};

src/components/home/focus-cards.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { cn } from "@/utils/cn";
55
type Card = {
66
title: string;
77
src: string;
8+
icon?: string;
89
};
910
export const Card = React.memo(
1011
({
@@ -40,6 +41,7 @@ export const Card = React.memo(
4041
)}
4142
>
4243
<div className="text-xl md:text-2xl font-medium bg-clip-text text-transparent bg-linear-to-b from-neutral-50 to-neutral-200">
44+
{card.icon && <Image src={card.icon} width={70} height={70} alt={card.icon} />}
4345
{card.title}
4446
</div>
4547
</div>
@@ -53,7 +55,7 @@ export function FocusCards({ cards }: { cards: Card[] }) {
5355
const [hovered, setHovered] = useState<number | null>(null);
5456

5557
return (
56-
<div className="grid grid-cols-1 md:grid-cols-3 gap-10 max-w-5xl mx-auto md:px-8 w-full">
58+
<div className="grid grid-cols-1 md:grid-cols-2 gap-10 max-w-5xl mx-auto md:px-8 w-full">
5759
{cards.map((card, index) => (
5860
<Card
5961
key={card.title}

src/hooks/use-codeforces-data.ts

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,8 @@ export interface CodeforcesUser {
66
titlePhoto: string;
77
}
88

9-
export interface CPData {
10-
members: { title: string; src: string }[];
11-
coaches: { title: string; src: string }[];
12-
loading: boolean;
13-
}
14-
159
export const useCodeforcesData = (
16-
memberHandles: string[],
17-
coachHandle: string = "sandoval95",
10+
memberHandles: string[]
1811
) => {
1912
const { data, isLoading } = useQuery({
2013
queryKey: ["codeforces", memberHandles],
@@ -28,39 +21,29 @@ export const useCodeforcesData = (
2821
const responseData = await response.json();
2922

3023
if (responseData.status === "OK" && Array.isArray(responseData.result)) {
31-
// Separar los coaches de los miembros
3224
const membersData = responseData.result
33-
.filter((user: CodeforcesUser) => user.handle !== coachHandle)
3425
.sort(
3526
(a: CodeforcesUser, b: CodeforcesUser) =>
3627
(b.rating || 0) - (a.rating || 0),
3728
)
3829
.map((user: CodeforcesUser) => ({
3930
title: `${user.handle} - (Rating: ${user.rating})`,
4031
src: user.titlePhoto,
41-
}));
42-
43-
const coachData = responseData.result
44-
.filter((user: CodeforcesUser) => user.handle === coachHandle)
45-
.map((user: CodeforcesUser) => ({
46-
title: `${user.handle} - Coach`,
47-
src: user.titlePhoto,
32+
handle: user.handle,
4833
}));
4934

5035
return {
5136
members: membersData,
52-
coaches: coachData,
5337
loading: false,
5438
};
5539
}
56-
return { members: [], coaches: [], loading: false };
40+
return { members: [], loading: false };
5741
},
5842
});
5943

6044
return (
6145
data || {
6246
members: [],
63-
coaches: [],
6447
loading: isLoading,
6548
}
6649
);

0 commit comments

Comments
 (0)