refactor: move cart ops from api route to lib

This commit is contained in:
Victor Gerbrands
2023-05-09 12:57:42 +02:00
parent efc6dd4b1a
commit 1fcda7a232
6 changed files with 244 additions and 334 deletions

View File

@@ -2,27 +2,25 @@ import CloseIcon from 'components/icons/close';
import LoadingDots from 'components/loading-dots';
import { useRouter } from 'next/navigation';
import { startTransition, useState } from 'react';
import { useCookies } from 'react-cookie';
import clsx from 'clsx';
import { removeFromCart } from 'lib/medusa';
import type { CartItem } from 'lib/medusa/types';
export default function DeleteItemButton({ item }: { item: CartItem }) {
const router = useRouter();
const [removing, setRemoving] = useState(false);
const [cookie] = useCookies(['cartId']);
async function handleRemove() {
const cartId = cookie.cartId;
if (!cartId) return;
setRemoving(true);
const response = await fetch(`/api/cart?lineItemId=${item.id}`, {
method: 'DELETE'
});
const data = await response.json();
if (data.error) {
alert(data.error);
return;
}
removeFromCart(cartId, item.id);
setRemoving(false);

View File

@@ -1,9 +1,11 @@
import { useRouter } from 'next/navigation';
import { startTransition, useState } from 'react';
import { useCookies } from 'react-cookie';
import clsx from 'clsx';
import MinusIcon from 'components/icons/minus';
import PlusIcon from 'components/icons/plus';
import { removeFromCart, updateCart } from 'lib/medusa';
import type { CartItem } from 'lib/medusa/types';
import LoadingDots from '../loading-dots';
@@ -16,30 +18,24 @@ export default function EditItemQuantityButton({
}) {
const router = useRouter();
const [editing, setEditing] = useState(false);
const [cookie] = useCookies(['cartId']);
async function handleEdit() {
const cartId = cookie.cartId;
if (!cartId) return;
setEditing(true);
const method = type === 'minus' && item.quantity - 1 === 0 ? 'DELETE' : 'PUT';
const url = method === 'PUT' ? '/api/cart' : `/api/cart?lineItemId=${item.id}`;
const method = type === 'minus' && item.quantity - 1 === 0 ? 'remove' : 'update';
const response = await fetch(url, {
method,
body:
method === 'PUT'
? JSON.stringify({
lineItemId: item.id,
quantity: type === 'plus' ? item.quantity + 1 : item.quantity - 1
})
: null
});
method === 'update' &&
updateCart(cartId, {
lineItemId: item.id,
quantity: type === 'plus' ? item.quantity + 1 : item.quantity - 1
});
const data = await response.json();
if (data.error) {
alert(data.error);
return;
}
method === 'remove' && removeFromCart(cartId, item.id);
setEditing(false);