'use client'; import { useState } from 'react'; import { formatCurrency } from '@/packages/shared/src/utils'; import { StoreCart, StoreCartLineItem } from '@medusajs/types'; import { Loader2 } from 'lucide-react'; import { useTranslation } from 'react-i18next'; import { Button } from '@kit/ui/button'; import { Card, CardContent, CardHeader } from '@kit/ui/card'; import { Trans } from '@kit/ui/trans'; import AnalysisLocation from './analysis-location'; import CartItems from './cart-items'; import CartServiceItems from './cart-service-items'; import DiscountCode from './discount-code'; import { initiatePayment } from '../../_lib/server/cart-actions'; import { useRouter } from 'next/navigation'; import { AccountBalanceSummary } from '@kit/accounts/services/account-balance.service'; import { EnrichedCartItem } from './types'; const IS_DISCOUNT_SHOWN = true as boolean; export default function Cart({ accountId, cart, synlabAnalyses, ttoServiceItems, balanceSummary, }: { accountId: string; cart: StoreCart | null; synlabAnalyses: StoreCartLineItem[]; ttoServiceItems: EnrichedCartItem[]; balanceSummary: AccountBalanceSummary | null; }) { const { i18n: { language }, } = useTranslation(); const [isInitiatingSession, setIsInitiatingSession] = useState(false); const router = useRouter(); const [unavailableLineItemIds, setUnavailableLineItemIds] = useState(); const items = cart?.items ?? []; const hasCartItems = cart && Array.isArray(items) && items.length > 0; if (!hasCartItems) { return (

); } async function initiateSession() { setIsInitiatingSession(true); try { const { url, isFullyPaidByBenefits, orderId, unavailableLineItemIds } = await initiatePayment({ accountId, balanceSummary: balanceSummary!, cart: cart!, language, }); if (unavailableLineItemIds) { setUnavailableLineItemIds(unavailableLineItemIds); } if (url) { window.location.href = url; } else if (isFullyPaidByBenefits) { if (typeof orderId !== 'number') { throw new Error('Order ID is missing'); } router.push(`/home/order/${orderId}/confirmed`); } } catch (error) { console.error('Failed to initiate payment', error); setIsInitiatingSession(false); } } const isLocationsShown = synlabAnalyses.length > 0; const companyBenefitsTotal = balanceSummary?.totalBalance ?? 0; const montonioTotal = cart && companyBenefitsTotal > 0 ? cart.total - companyBenefitsTotal : cart.total; return (
{hasCartItems && ( <>

{formatCurrency({ value: cart.subtotal, currencyCode: cart.currency_code, locale: language, })}

{formatCurrency({ value: cart.discount_total, currencyCode: cart.currency_code, locale: language, })}

{companyBenefitsTotal > 0 && (

{formatCurrency({ value: (companyBenefitsTotal > cart.total ? cart.total : companyBenefitsTotal), currencyCode: cart.currency_code, locale: language, })}

)}

{formatCurrency({ value: montonioTotal < 0 ? 0 : montonioTotal, currencyCode: cart.currency_code, locale: language, })}

)}
{IS_DISCOUNT_SHOWN && (
)} {isLocationsShown && (
)}
); }