diff --git a/app/home/(user)/(dashboard)/order-analysis-package/page.tsx b/app/home/(user)/(dashboard)/order-analysis-package/page.tsx index ecf1903..c08e973 100644 --- a/app/home/(user)/(dashboard)/order-analysis-package/page.tsx +++ b/app/home/(user)/(dashboard)/order-analysis-package/page.tsx @@ -28,17 +28,18 @@ async function OrderAnalysisPackagePage() {

- +

- + } + countryCode={countryCode} />
void; + disabled: boolean; + isLoading: boolean; +}) => { + return ( + + + + ); +}; + +const ComparePackagesAddToCartButtons = ({ + countryCode, + standardPackage, + standardPlusPackage, + premiumPackage, +}: { + countryCode: string; + standardPackage: AnalysisPackageWithVariant; + standardPlusPackage: AnalysisPackageWithVariant; + premiumPackage: AnalysisPackageWithVariant; +}) => { + const [addedPackage, setAddedPackage] = useState(null); + const router = useRouter(); + + const handleSelect = async ({ variantId }: AnalysisPackageWithVariant) => { + setAddedPackage(variantId); + try { + await handleAddToCart({ + selectedVariant: { id: variantId }, + countryCode, + }); + setAddedPackage(null); + toast.success( + , + ); + router.push(pathsConfig.app.cart); + } catch (e) { + toast.error( + , + ); + setAddedPackage(null); + console.error(e); + } + }; + + return ( + + + + + handleSelect(standardPackage)} + disabled={!!addedPackage} + isLoading={addedPackage === standardPackage.variantId} + /> + handleSelect(standardPlusPackage)} + disabled={!!addedPackage} + isLoading={addedPackage === standardPlusPackage.variantId} + /> + handleSelect(premiumPackage)} + disabled={!!addedPackage} + isLoading={addedPackage === premiumPackage.variantId} + /> + + +
+ ); +}; + +export default ComparePackagesAddToCartButtons; diff --git a/app/home/(user)/_components/compare-packages-modal.tsx b/app/home/(user)/_components/compare-packages-modal.tsx index 06797b4..73c5ba6 100644 --- a/app/home/(user)/_components/compare-packages-modal.tsx +++ b/app/home/(user)/_components/compare-packages-modal.tsx @@ -26,6 +26,9 @@ import { import { createI18nServerInstance } from '~/lib/i18n/i18n.server'; import { withI18n } from '~/lib/i18n/with-i18n'; +import ComparePackagesAddToCartButtons from './compare-packages-add-to-cart-buttons'; +import DefaultPackageFeaturesRows from './default-package-features-rows'; + export type AnalysisPackageElement = Pick< StoreProduct, 'title' | 'id' | 'description' @@ -35,7 +38,7 @@ export type AnalysisPackageElement = Pick< isIncludedInPremium: boolean; }; -const CheckWithBackground = () => { +export const CheckWithBackground = () => { return (
@@ -53,7 +56,7 @@ const PackageTableHead = async ({ const { title, price, nrOfAnalyses } = product; return ( - + { const { t } = await createI18nServerInstance(); @@ -110,7 +115,7 @@ const ComparePackagesModal = async ({

{t('product:healthPackageComparison.description')}

-
+
@@ -121,6 +126,8 @@ const ComparePackagesModal = async ({ + + {analysisPackageElements.map( ({ title, @@ -136,7 +143,7 @@ const ComparePackagesModal = async ({ return ( - + {title}{' '} {description && ( + diff --git a/app/home/(user)/_components/default-package-features-rows.tsx b/app/home/(user)/_components/default-package-features-rows.tsx new file mode 100644 index 0000000..a070a2b --- /dev/null +++ b/app/home/(user)/_components/default-package-features-rows.tsx @@ -0,0 +1,46 @@ +import React from 'react'; + +import { Trans } from '@kit/ui/makerkit/trans'; +import { TableCell, TableRow } from '@kit/ui/shadcn/table'; + +import { withI18n } from '~/lib/i18n/with-i18n'; + +import { CheckWithBackground } from './compare-packages-modal'; + +const DefaultPackageFeaturesRows = () => { + return ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; + +export default withI18n(DefaultPackageFeaturesRows); diff --git a/lib/services/medusaCart.service.ts b/lib/services/medusaCart.service.ts index 2700ee1..a19e695 100644 --- a/lib/services/medusaCart.service.ts +++ b/lib/services/medusaCart.service.ts @@ -2,6 +2,7 @@ import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; import { MontonioOrderHandlerService } from '@/packages/billing/montonio/src'; +import { getLogger } from '@/packages/shared/src/logger'; import { addToCart, deleteLineItem, retrieveCart } from '@lib/data/cart'; import { getCartId } from '@lib/data/cookies'; import { StoreCartLineItem, StoreProductVariant } from '@medusajs/types'; @@ -44,12 +45,17 @@ export async function handleAddToCart({ selectedVariant: Pick; countryCode: string; }) { - try { - } catch (e) { - console.error('medusa card error: ', e); - } + const logger = await getLogger(); + const ctx = { + countryCode, + selectedVariant, + }; + + logger.info(ctx, 'Adding to cart...'); + const { account } = await loadCurrentUserAccount(); if (!account) { + logger.error(ctx, 'Account not found'); throw new Error('Account not found'); } diff --git a/packages/features/medusa-storefront/src/lib/data/cart.ts b/packages/features/medusa-storefront/src/lib/data/cart.ts index ddb9350..a252159 100644 --- a/packages/features/medusa-storefront/src/lib/data/cart.ts +++ b/packages/features/medusa-storefront/src/lib/data/cart.ts @@ -7,6 +7,8 @@ import { sdk } from '@lib/config'; import medusaError from '@lib/util/medusa-error'; import { HttpTypes, StoreCart } from '@medusajs/types'; +import { getLogger } from '@kit/shared/logger'; + import { getAuthHeaders, getCacheOptions, @@ -135,13 +137,21 @@ export async function addToCart({ quantity: number; countryCode: string; }) { + const logger = await getLogger(); + const ctx = { + variantId, + quantity, + countryCode, + }; if (!variantId) { + logger.error(ctx, 'Missing variant ID when adding to cart'); throw new Error('Missing variant ID when adding to cart'); } const cart = await getOrSetCart(countryCode); if (!cart) { + logger.error(ctx, 'Error retrieving or creating cart'); throw new Error('Error retrieving or creating cart'); } diff --git a/packages/shared/src/components/package-header.tsx b/packages/shared/src/components/package-header.tsx index 6a02286..16e5264 100644 --- a/packages/shared/src/components/package-header.tsx +++ b/packages/shared/src/components/package-header.tsx @@ -18,14 +18,16 @@ export const PackageHeader = ({ return (

{title}

-

+

{formatCurrency({ currencyCode: 'eur', locale: language, value: price, })}

- {analysesNr} + + {analysesNr} +
); }; diff --git a/packages/shared/src/components/select-analysis-package.tsx b/packages/shared/src/components/select-analysis-package.tsx index 83ce3ec..59d5170 100644 --- a/packages/shared/src/components/select-analysis-package.tsx +++ b/packages/shared/src/components/select-analysis-package.tsx @@ -117,6 +117,7 @@ export default function SelectAnalysisPackage({