fix: remove line items when 0

This commit is contained in:
Victor Gerbrands 2023-05-04 13:02:46 +02:00
parent 5bcf6cb5eb
commit 4d99e73f20
5 changed files with 3408 additions and 31 deletions

View File

@ -29,22 +29,19 @@ export async function POST(req: NextRequest): Promise<Response> {
export async function PUT(req: NextRequest): Promise<Response> { export async function PUT(req: NextRequest): Promise<Response> {
const cartId = cookies().get('cartId')?.value; const cartId = cookies().get('cartId')?.value;
const { variantId, quantity, lineId } = await req.json(); const { lineItemId, quantity } = await req.json();
if (!cartId || !variantId || !quantity || !lineId) { if (!cartId || !quantity || !lineItemId) {
return NextResponse.json( return NextResponse.json(
{ error: 'Missing cartId, variantId, lineId, or quantity' }, { error: 'Missing cartId, variantId, lineItemId, or quantity' },
{ status: 400 } { status: 400 }
); );
} }
try { try {
await updateCart(cartId, [ await updateCart(cartId, {
{ lineItemId,
id: lineId, quantity
merchandiseId: variantId, });
quantity
}
]);
return NextResponse.json({ status: 204 }); return NextResponse.json({ status: 204 });
} catch (e) { } catch (e) {
if (isMedusaError(e)) { if (isMedusaError(e)) {
@ -58,13 +55,13 @@ export async function PUT(req: NextRequest): Promise<Response> {
export async function DELETE(req: NextRequest): Promise<Response> { export async function DELETE(req: NextRequest): Promise<Response> {
const cartId = cookies().get('cartId')?.value; const cartId = cookies().get('cartId')?.value;
console.log(req.nextUrl); console.log(req.nextUrl);
const lineId = req.nextUrl.searchParams.get('lineId'); const lineItemId = req.nextUrl.searchParams.get('lineItemId');
if (!cartId || !lineId) { if (!cartId || !lineItemId) {
return NextResponse.json({ error: 'Missing cartId or lineId' }, { status: 400 }); return NextResponse.json({ error: 'Missing cartId or lineItemId' }, { status: 400 });
} }
try { try {
await removeFromCart(cartId, [lineId]); await removeFromCart(cartId, [lineItemId]);
return NextResponse.json({ status: 204 }); return NextResponse.json({ status: 204 });
} catch (e) { } catch (e) {
if (isMedusaError(e)) { if (isMedusaError(e)) {

View File

@ -14,7 +14,7 @@ export default function DeleteItemButton({ item }: { item: CartItem }) {
setRemoving(true); setRemoving(true);
console.log(item.id); console.log(item.id);
const response = await fetch(`/api/cart?lineId=${item.id}`, { const response = await fetch(`/api/cart?lineItemId=${item.id}`, {
method: 'DELETE' method: 'DELETE'
}); });

View File

@ -20,13 +20,18 @@ export default function EditItemQuantityButton({
async function handleEdit() { async function handleEdit() {
setEditing(true); setEditing(true);
const response = await fetch(`/api/cart`, { const method = type === 'minus' && item.quantity - 1 === 0 ? 'DELETE' : 'PUT';
method: type === 'minus' && item.quantity - 1 === 0 ? 'DELETE' : 'PUT', const url = method === 'PUT' ? '/api/cart' : `/api/cart?lineItemId=${item.id}`;
body: JSON.stringify({
lineId: item.id, const response = await fetch(url, {
variantId: item.merchandise.id, method,
quantity: type === 'plus' ? item.quantity + 1 : item.quantity - 1 body:
}) method === 'PUT'
? JSON.stringify({
lineItemId: item.id,
quantity: type === 'plus' ? item.quantity + 1 : item.quantity - 1
})
: null
}); });
const data = await response.json(); const data = await response.json();

View File

@ -253,31 +253,31 @@ export async function addToCart(
return reshapeCart(res.body.cart); return reshapeCart(res.body.cart);
} }
export async function removeFromCart(cartId: string, lineIds: string[]): Promise<Cart> { export async function removeFromCart(cartId: string, lineItemIds: string[]): Promise<Cart> {
// TODO: We only allow you to pass a single line item to delete // TODO: We only allow you to pass a single line item to delete
const res = await medusaRequest('DELETE', `/carts/${cartId}/line-items/${lineIds[0]}`); const res = await medusaRequest('DELETE', `/carts/${cartId}/line-items/${lineItemIds[0]}`);
console.log(res);
return reshapeCart(res.body.cart); return reshapeCart(res.body.cart);
} }
export async function updateCart( export async function updateCart(
cartId: string, cartId: string,
lines: { id: string; merchandiseId: string; quantity: number }[] { lineItemId, quantity }: { lineItemId: string; quantity: number }
): Promise<Cart> { ): Promise<Cart> {
console.log(lines); const res = await medusaRequest('POST', `/carts/${cartId}/line-items/${lineItemId}`, {
// TODO: transform lines into Medusa line items quantity
const res = await medusaRequest('POST', `/carts/${cartId}`, {}); });
return reshapeCart(res.body.cart); return reshapeCart(res.body.cart);
} }
export async function getCart(cartId: string): Promise<Cart | null> { export async function getCart(cartId: string): Promise<Cart | null> {
const res = await medusaRequest('GET', `/carts/${cartId}`); const res = await medusaRequest('GET', `/carts/${cartId}`);
const cart = res.body.cart;
if (!res.body.cart) { if (!cart) {
return null; return null;
} }
return reshapeCart(res.body.cart); return reshapeCart(cart);
} }
export async function getCollection(handle: string): Promise<ProductCollection | undefined> { export async function getCollection(handle: string): Promise<ProductCollection | undefined> {

3375
yarn.lock Normal file

File diff suppressed because it is too large Load Diff