import { useNavigate } from "@tanstack/react-router"; import { useTranslation } from "react-i18next"; import { useFormatters } from "../hooks/useFormatters"; import { useDuplicateItem } from "../hooks/useItems"; import { LucideIcon } from "../lib/iconData"; import { useUIStore } from "../stores/uiStore"; import { ClassificationBadge } from "./ClassificationBadge"; import { GearImage, imageContainerBg } from "./GearImage"; interface ItemCardProps { id: number; name: string; weightGrams: number | null; priceCents: number | null; quantity?: number; categoryName: string; categoryIcon: string; imageFilename: string | null; imageUrl?: string | null; productUrl?: string | null; brand?: string | null; dominantColor?: string | null; cropZoom?: number | null; cropX?: number | null; cropY?: number | null; onRemove?: () => void; classification?: string; onClassificationCycle?: () => void; linkTo?: string | null; priceCurrency?: string | null; } export function ItemCard({ id, name, weightGrams, priceCents, quantity, categoryName, categoryIcon, imageFilename: _imageFilename, imageUrl, productUrl, brand, dominantColor, cropZoom, cropX, cropY, onRemove, classification, onClassificationCycle, linkTo, priceCurrency, }: ItemCardProps) { const { t } = useTranslation("collection"); const { weight, price } = useFormatters(); const navigate = useNavigate(); const openExternalLink = useUIStore((s) => s.openExternalLink); const duplicateItem = useDuplicateItem(); const handleClick = linkTo === null ? undefined : () => { if (linkTo) { navigate({ to: linkTo }); } else { navigate({ to: "/items/$itemId", params: { itemId: String(id) } }); } }; return ( ); }