Skip to content

Commit 393ce83

Browse files
committed
refactor(partners): extract PartnerCard component
1 parent dbc67bd commit 393ce83

File tree

2 files changed

+44
-28
lines changed

2 files changed

+44
-28
lines changed

src/app/about-us/partners/page.tsx

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import { Metadata } from "next";
2-
import Image from "next/image";
32
import { buildPageMetadata } from "@/lib/config";
43
import { partners } from "@/lib/partners";
5-
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
64
import { PageHeader } from "@/components/primitives/page-header";
5+
import { PartnerCard } from "@/components/primitives/partner-card";
76

87
const description =
98
"We are collaborating with the following partners to share the message of peace and humanity.";
@@ -19,33 +18,10 @@ export default function Partners() {
1918
/>
2019
<div className="mt-6 flex flex-col items-center gap-4 w-full">
2120
{partners.map((partner) => (
22-
<a
21+
<PartnerCard
2322
key={partner.name}
24-
href={partner.href}
25-
target="_blank"
26-
rel="noopener"
27-
>
28-
<Card className="h-full">
29-
<CardHeader className="text-center">
30-
{partner.logo && (
31-
<div className="relative w-16 h-16 mx-auto">
32-
<Image
33-
src={partner.logo}
34-
alt={`${partner.name} logo`}
35-
fill
36-
className="object-contain"
37-
unoptimized
38-
/>
39-
</div>
40-
)}
41-
<CardTitle>{partner.name}</CardTitle>
42-
<CardDescription>{partner.description}</CardDescription>
43-
</CardHeader>
44-
<CardContent>
45-
<p className="text-sm text-muted-foreground">{partner.href}</p>
46-
</CardContent>
47-
</Card>
48-
</a>
23+
partner={partner}
24+
/>
4925
))}
5026
</div>
5127
</section>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import Image from "next/image";
2+
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
3+
import type { Partner } from "@/lib/partners";
4+
import { cn } from "@/lib/utils";
5+
6+
type PartnerCardProps = {
7+
partner: Partner;
8+
className?: string;
9+
};
10+
11+
export function PartnerCard({ partner, className }: PartnerCardProps) {
12+
return (
13+
<a
14+
href={partner.href}
15+
target="_blank"
16+
rel="noopener"
17+
>
18+
<Card className={cn("h-full", className)}>
19+
<CardHeader className="text-center">
20+
{partner.logo && (
21+
<div className="relative w-16 h-16 mx-auto">
22+
<Image
23+
src={partner.logo}
24+
alt={`${partner.name} logo`}
25+
fill
26+
className="object-contain"
27+
unoptimized
28+
/>
29+
</div>
30+
)}
31+
<CardTitle>{partner.name}</CardTitle>
32+
<CardDescription>{partner.description}</CardDescription>
33+
</CardHeader>
34+
<CardContent>
35+
<p className="text-sm text-muted-foreground">{partner.href}</p>
36+
</CardContent>
37+
</Card>
38+
</a>
39+
);
40+
}

0 commit comments

Comments
 (0)