import { useState } from 'react'; import { useTranslation } from 'react-i18next'; import { CloseOutlined, ExportOutlined } from '@ant-design/icons'; import { withBasePath } from '@/api/http-init'; import type { Sponsor } from '@/generated/types'; import { pickLocale } from '@/lib/sponsors'; import './SponsorCard.css'; export type SponsorCardVariant = 'banner' | 'compact' | 'card'; export interface SponsorCardProps { sponsor: Sponsor; variant?: SponsorCardVariant; iconOnly?: boolean; onClose?: () => void; } function SponsorLogo({ sponsor }: { sponsor: Sponsor }) { const [failedSrc, setFailedSrc] = useState(''); if (sponsor.logo && failedSrc !== sponsor.logo) { return ( setFailedSrc(sponsor.logo ?? '')} /> ); } return ( ); } export default function SponsorCard({ sponsor, variant = 'banner', iconOnly = false, onClose, }: SponsorCardProps) { const { t, i18n } = useTranslation(); const lang = i18n.resolvedLanguage || i18n.language || 'en'; const title = pickLocale(sponsor.title, lang) || sponsor.name; const text = pickLocale(sponsor.text, lang); const tag = t('pages.sponsors.tag'); if (iconOnly) { return ( ); } return (
{tag} {title} {text && {text}} {variant !== 'compact' && ( {t('pages.sponsors.visit')} )} {onClose && ( )}
); }