import { Text } from '@/components/ui/Typography'; import { Flex, Stack } from '@/components/ui/layout'; import Badge from '@/components/ui/Badge'; import { MapPin } from 'lucide-react'; import React from 'react'; import { useTranslation } from '@/hooks/useI18n'; interface MatchCardMetadataProps { organizationName?: string; distanceKm?: number | null; availabilityStatus?: string | null; tags?: string[]; organizationLabelTKey: string; distanceTKey: string; maxTags?: number; } /** * Reusable metadata component for discovery match cards * Displays organization info, location, availability, and tags */ export const MatchCardMetadata: React.FC = ({ organizationName, distanceKm, availabilityStatus, tags = [], organizationLabelTKey, distanceTKey, maxTags = 4, }) => { const { t } = useTranslation(); const hasMetadata = organizationName || (distanceKm != null && distanceKm > 0) || availabilityStatus || tags.length > 0; if (!hasMetadata) { return null; } const displayedTags = tags.slice(0, maxTags); const remainingTagsCount = tags.length - maxTags; return ( {/* Organization Information */} {organizationName && ( {t(organizationLabelTKey)}:{' '} {organizationName} )} {/* Location & Distance */} {distanceKm != null && distanceKm > 0 && ( )} {/* Availability Status */} {availabilityStatus && ( {availabilityStatus} )} {/* Tags */} {tags.length > 0 && ( {displayedTags.map((tag, idx) => ( {tag} ))} {remainingTagsCount > 0 && ( +{remainingTagsCount} )} )} ); }; export default React.memo(MatchCardMetadata);