feat: add core charge to cart

Signed-off-by: Chloe <pinkcloudvnn@gmail.com>
This commit is contained in:
Chloe 2024-04-26 19:33:48 +07:00
parent 3bf7fa5af9
commit d5cdb55845
No known key found for this signature in database
GPG Key ID: CFD53CE570D42DF5
2 changed files with 14 additions and 5 deletions

View File

@ -5,7 +5,7 @@ import { addToCart, createCart, getCart, removeFromCart, updateCart } from 'lib/
import { revalidateTag } from 'next/cache'; import { revalidateTag } from 'next/cache';
import { cookies } from 'next/headers'; import { cookies } from 'next/headers';
export async function addItem(prevState: any, selectedVariantId: string | undefined) { export async function addItem(prevState: any, selectedVariantIds: Array<string>) {
let cartId = cookies().get('cartId')?.value; let cartId = cookies().get('cartId')?.value;
let cart; let cart;
@ -19,12 +19,15 @@ export async function addItem(prevState: any, selectedVariantId: string | undefi
cookies().set('cartId', cartId); cookies().set('cartId', cartId);
} }
if (!selectedVariantId) { if (!selectedVariantIds.length) {
return 'Missing product variant ID'; return 'Missing product variant ID';
} }
try { try {
await addToCart(cartId, [{ merchandiseId: selectedVariantId, quantity: 1 }]); await addToCart(
cartId,
selectedVariantIds.map((variantId) => ({ merchandiseId: variantId, quantity: 1 }))
);
revalidateTag(TAGS.cart); revalidateTag(TAGS.cart);
} catch (e) { } catch (e) {
return 'Error adding item to cart'; return 'Error adding item to cart';

View File

@ -4,6 +4,7 @@ import { ShoppingCartIcon } from '@heroicons/react/24/outline';
import clsx from 'clsx'; import clsx from 'clsx';
import { addItem } from 'components/cart/actions'; import { addItem } from 'components/cart/actions';
import LoadingDots from 'components/loading-dots'; import LoadingDots from 'components/loading-dots';
import { CORE_VARIANT_ID_KEY } from 'lib/constants';
import { ProductVariant } from 'lib/shopify/types'; import { ProductVariant } from 'lib/shopify/types';
import { useSearchParams } from 'next/navigation'; import { useSearchParams } from 'next/navigation';
import { useFormState, useFormStatus } from 'react-dom'; import { useFormState, useFormStatus } from 'react-dom';
@ -75,8 +76,13 @@ export function AddToCart({
) )
); );
const selectedVariantId = variant?.id || defaultVariantId; const selectedVariantId = variant?.id || defaultVariantId;
const missingCoreVariantId = variant?.coreVariantId && !searchParams.has('coreVariantId'); const missingCoreVariantId = variant?.coreVariantId && !searchParams.has(CORE_VARIANT_ID_KEY);
const actionWithVariant = formAction.bind(null, selectedVariantId);
const coreVariantId = searchParams.get(CORE_VARIANT_ID_KEY);
const selectedVariantIds = [coreVariantId, selectedVariantId].filter(Boolean) as string[];
const actionWithVariant = formAction.bind(null, selectedVariantIds);
return ( return (
<form action={actionWithVariant}> <form action={actionWithVariant}>