Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mastodon
GitHub Repository: mastodon/joinmastodon
Path: blob/main/components/SponsorCard.tsx
1006 views
1
import classNames from "classnames"
2
import Image from "next/legacy/image"
3
import { FormattedMessage } from "react-intl"
4
5
const tierName = (tierId) => {
6
switch (tierId) {
7
case "gold":
8
return (
9
<FormattedMessage id="gold_sponsor" defaultMessage="Gold sponsor" />
10
)
11
case "silver":
12
return (
13
<FormattedMessage id="silver_sponsor" defaultMessage="Silver sponsor" />
14
)
15
default:
16
return <FormattedMessage id="sponsor" defaultMessage="Sponsor" />
17
}
18
}
19
20
/** Sponsor Card, supporting data from `silver`, `generalHighlighted`, and `general` */
21
const SponsorCard = ({ sponsor, tier }) => {
22
return (
23
<div
24
className={classNames(
25
"grid grid-cols-[auto_1fr] gap-4 rounded p-4",
26
tier === "generalHighlighted" && "bg-nightshade-900 text-white",
27
(tier === "silver" || tier === "gold") &&
28
"border border-gray-3 hover:bg-gray-4"
29
)}
30
>
31
{(tier === "silver" || tier === "gold") && (
32
<div className="relative h-[56px] w-[56px] overflow-hidden rounded-md bg-blurple-gradient">
33
{sponsor.logo && (
34
<Image src={sponsor.logo} alt="" layout="fill" objectFit="cover" />
35
)}
36
</div>
37
)}
38
39
<div
40
className={classNames("truncate", tier !== "silver" ? "w-full" : null)}
41
>
42
<span
43
className={classNames(
44
"b3 !leading-[1.5]",
45
tier === "generalHighlighted"
46
? "text-nightshade-100"
47
: "text-gray-1"
48
)}
49
>
50
{tierName(tier)}
51
</span>
52
53
<p className="b2 truncate !font-semibold">{sponsor.name || sponsor}</p>
54
</div>
55
</div>
56
)
57
}
58
export default SponsorCard
59
60