import { Bed, MapPin } from 'lucide-react'; import type { PropertyProperties } from '@/types'; interface PropertyCardCompactProps { property: PropertyProperties; isActive?: boolean; isHighlighted?: boolean; avgPricePerSqm?: number; onClick?: () => void; } export function PropertyCardCompact({ property, isActive = false, isHighlighted = false, avgPricePerSqm, onClick, }: PropertyCardCompactProps) { // BUY listings may have null numeric fields; coerce so renders don't throw. const safeNum = (v: unknown): number => (typeof v === 'number' && Number.isFinite(v) ? v : 0); const safeTotalPrice = safeNum(property.total_price); const safeQm = safeNum(property.qm); const safeQmprice = safeNum(property.qmprice); const safeRooms = safeNum(property.rooms); const isGoodDeal = avgPricePerSqm && safeQmprice > 0 && safeQmprice < avgPricePerSqm * 0.9; const isExpensive = avgPricePerSqm && safeQmprice > avgPricePerSqm * 1.1; const priceIndicator = isGoodDeal ? { dotColor: 'bg-[var(--deal-good)]', label: 'Good deal' } : isExpensive ? { dotColor: 'bg-[var(--deal-above)]', label: 'Above avg' } : null; return (
{/* Thumbnail with 4:3 aspect ratio */}
{property.photo_thumbnail && ( {`${safeRooms}-bed, )}
{/* Details */}
{/* Price bold */}
£{safeTotalPrice.toLocaleString()} {property.listing_type !== 'BUY' && ( /mo )} {priceIndicator && ( )}
{/* Beds and size */}
{safeRooms} bed · {safeQm} m²
{/* Location */} {property.city && (
{property.city}
)}
); }