diff --git a/packages/sylius/src/cart/use-add-item.tsx b/packages/sylius/src/cart/use-add-item.tsx index 2be6e0aaa..d53368ff4 100644 --- a/packages/sylius/src/cart/use-add-item.tsx +++ b/packages/sylius/src/cart/use-add-item.tsx @@ -1,17 +1,47 @@ import useAddItem, { UseAddItem } from '@vercel/commerce/cart/use-add-item' import { MutationHook } from '@vercel/commerce/utils/types' +import { useCallback } from 'react' +import { getCartToken, setCartToken } from '../utils/token/cart-token' +import useCart from './use-cart' export default useAddItem as UseAddItem export const handler: MutationHook = { fetchOptions: { - query: '', + url: '/api/v2/shop/orders', + method: 'POST', + }, + fetcher: async ({ input: { productId, variantId }, options, fetch }) => { + if (!getCartToken()) { + const syliusOrder = await fetch({ + url: options.url, + method: 'POST', + body: { + localeCode: 'fr_FR', + }, + }) + setCartToken(syliusOrder.tokenValue) + } + await fetch({ + url: `${options.url}/${getCartToken()}/items`, + method: options.method, + body: { + productVariant: variantId, + quantity: 1, + }, + }) }, - async fetcher({ input, options, fetch }) {}, useHook: ({ fetch }) => () => { - return async function addItem() { - return {} - } + const { mutate } = useCart() + + return useCallback( + async function addItem(input) { + const data = await fetch({ input }) + await mutate(data, false) + return data + }, + [fetch, mutate] + ) }, }