'use client'; import { useState } from 'react'; import { formatCurrency } from '@/packages/shared/src/utils'; import { StoreProduct } from '@medusajs/types'; import { HeartPulse, Loader2, ShoppingCart } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { InfoTooltip } from '@kit/shared/components/ui/info-tooltip'; import { Button } from '@kit/ui/button'; import { Card, CardDescription, CardFooter, CardHeader } from '@kit/ui/card'; import { toast } from '@kit/ui/sonner'; import { Trans } from '@kit/ui/trans'; import { handleAddToCart } from '~/lib/services/medusaCart.service'; export type OrderAnalysisCard = Pick< StoreProduct, 'title' | 'description' | 'subtitle' > & { variant: { id: string }; price: number | null; }; export default function OrderAnalysesCards({ analyses, countryCode, }: { analyses: OrderAnalysisCard[]; countryCode: string; }) { const { i18n: { language }, } = useTranslation(); const [variantAddingToCart, setVariantAddingToCart] = useState( null, ); const handleSelect = async (variantId: string) => { if (variantAddingToCart) { return null; } setVariantAddingToCart(variantId); try { await handleAddToCart({ selectedVariant: { id: variantId }, countryCode, }); toast.success(); setVariantAddingToCart(null); } catch (e) { toast.error(); setVariantAddingToCart(null); console.error(e); } }; return (
{analyses.map(({ title, variant, description, subtitle, price }) => { const formattedPrice = typeof price === 'number' ? formatCurrency({ currencyCode: 'eur', locale: language, value: price, }) : null; return (
{title} {description && ( <> {formattedPrice} {description}
} /> )} {subtitle && {subtitle}}
{formattedPrice}
); })} ); }