"use client"; import { motion } from "framer-motion"; import Image from "next/image"; import { useState } from "react"; import { useSaleorCheckoutStore } from "@/stores/saleorCheckoutStore"; import { useAnalytics } from "@/lib/analytics"; import type { Product } from "@/types/saleor"; import { getProductPrice, getProductImage, getLocalizedProduct } from "@/lib/saleor"; import { isValidLocale, getSaleorLocale } from "@/lib/i18n/locales"; import { useTranslations } from "next-intl"; import Link from "next/link"; interface ProductsGridProps { products: Product[]; locale: string; } function ProductCardWithAddToCart({ product, index, locale }: { product: Product; index: number; locale: string }) { const t = useTranslations("ProductCard"); const tProduct = useTranslations("Product"); const [isAdding, setIsAdding] = useState(false); const { addLine, openCart, setLanguageCode } = useSaleorCheckoutStore(); const { trackAddToCart } = useAnalytics(); const image = getProductImage(product); const price = getProductPrice(product); const saleorLocale = isValidLocale(locale) ? getSaleorLocale(locale) : "SR"; const localized = getLocalizedProduct(product, saleorLocale); const variant = product.variants?.[0]; const isAvailable = (variant?.quantityAvailable || 0) > 0; const productHref = locale === "sr" ? `/products/${localized.slug}` : `/${locale}/products/${localized.slug}`; const handleAddToCart = async (e: React.MouseEvent) => { e.preventDefault(); e.stopPropagation(); if (!variant?.id) return; if (isValidLocale(locale)) { setLanguageCode(locale); } setIsAdding(true); try { await addLine(variant.id, 1); const priceAmount = variant?.pricing?.price?.gross?.amount || 0; const currency = variant?.pricing?.price?.gross?.currency || "RSD"; trackAddToCart({ id: product.id, name: localized.name, price: priceAmount, currency, quantity: 1, variant: variant.name, }); openCart(); } finally { setIsAdding(false); } }; return (
{image ? ( {localized.name} ) : (
{t("noImage")}
)} {!isAvailable && (
{t("outOfStock")}
)}

{localized.name}

{price || t("contactForPrice")}

{isAvailable ? ( ) : (
{t("outOfStock")}
)}
); } export default function ProductsGrid({ products, locale }: ProductsGridProps) { const t = useTranslations("Solutions"); const validProducts = products.filter(p => p && p.id); return (

{t("completeYourRoutine")}

{t("discoverProducts")}

{validProducts.map((product, index) => ( ))}
); }