import { Enum_Componentsharedcontact_Type } from '../graphql/graphql' import { toIcon } from '../lib/cms/contact/toIcon' import type { SiteConfigContact } from '../lib/cms/contact/types' function hrefFor(contact: SiteConfigContact): string | undefined { switch (contact.type) { case Enum_Componentsharedcontact_Type.Phone: return `tel:${contact.value.replace(/\s/g, '')}` case Enum_Componentsharedcontact_Type.Email: return `mailto:${contact.value}` default: return undefined } } function labelFor(contact: SiteConfigContact): string { const d = contact.displayValue?.trim() return d || contact.value } export interface SiteContactItemsProps { contacts: readonly SiteConfigContact[] variant: 'inline' | 'footer' /** Applied to the outer wrapper (inline: flex row; footer: ul gets section spacing from parent) */ className?: string } export function SiteContactItems({ contacts, variant, className }: SiteContactItemsProps) { if (!contacts.length) return null if (variant === 'footer') { return ( ) } const rowClass = className ?? 'flex flex-wrap justify-center gap-6 text-sm text-gray-600' return (
{contacts.map(c => { const Icon = toIcon(c.type) const href = hrefFor(c) const label = labelFor(c) const linkClass = 'flex items-center gap-2 hover:text-blue-600 transition-colors' if (href) { return ( {label} ) } return (
{label}
) })}
) }