Skip to content

Commit 691aed6

Browse files
committed
feat(Sponsors): スポンサー数に応じて、クラスを切り替える関数の作成
1 parent 0275fea commit 691aed6

File tree

1 file changed

+48
-7
lines changed

1 file changed

+48
-7
lines changed

2025/src/components/Sponsors/Companies.astro

Lines changed: 48 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,53 @@ const rankNameMap = {
3232
silver: "シルバー",
3333
bronze: "ブロンズ",
3434
};
35+
36+
const getGridClasses = (rank: string, count: number) => {
37+
const baseClasses = [
38+
"mb-8",
39+
"grid",
40+
"place-items-center",
41+
"gap-4",
42+
];
43+
44+
if (rank === "platinum") {
45+
return [...baseClasses, "grid-cols-1"];
46+
}
47+
48+
if (count === 1) {
49+
return [...baseClasses, "grid-cols-1"];
50+
}
51+
52+
const gridConfig: Record<string, Record<number, string>> = {
53+
gold: {
54+
2: "grid-cols-2 md:grid-cols-2",
55+
},
56+
silver: {
57+
2: "grid-cols-2 md:grid-cols-2",
58+
3: "grid-cols-2 md:grid-cols-3",
59+
},
60+
bronze: {
61+
2: "grid-cols-2 md:grid-cols-2",
62+
3: "grid-cols-2 md:grid-cols-3",
63+
4: "grid-cols-2 md:grid-cols-4",
64+
},
65+
};
66+
67+
const config = gridConfig[rank];
68+
if (config) {
69+
const counts = Object.keys(config)
70+
.map(Number)
71+
.sort((a, b) => b - a);
72+
73+
for (const minCount of counts) {
74+
if (count >= minCount) {
75+
return [...baseClasses, config[minCount]];
76+
}
77+
}
78+
}
79+
80+
return baseClasses;
81+
};
3582
---
3683

3784
<Heading>企業スポンサー</Heading>
@@ -44,13 +91,7 @@ const rankNameMap = {
4491
{rankNameMap[rank]}
4592
</h4>
4693
<div
47-
class:list={[
48-
"mb-8 grid place-items-center gap-4",
49-
{ "grid-cols-1": rank === "platinum" },
50-
{ "grid-cols-2 md:grid-cols-2": rank === "gold" },
51-
{ "grid-cols-2 md:grid-cols-3": rank === "silver" },
52-
{ "grid-cols-2 md:grid-cols-4": rank === "bronze" },
53-
]}
94+
class={getGridClasses(rank, sponsorsByRank[rank].length).join(" ")}
5495
>
5596
{sponsorsByRank[rank].sort().map((sponsor) => (
5697
<Company {sponsor} />

0 commit comments

Comments
 (0)