import { useCallback, useState } from 'react'; import axios from 'axios'; import type { Cart, UpdateCartInfoRequest } from '@broadleaf/commerce-cart'; import type { ApiError } from '@broadleaf/commerce-core'; import { usePreviewOptions } from '@broadleaf/commerce-shared-react'; import { useGetCustomerAccessToken } from '@src/auth/hooks'; import { useCartClient } from '@src/common/contexts'; interface Response { updateCartInfo: (cart: Cart, request: UpdateCartInfoRequest) => Promise<void>; cart?: Cart; error?: ApiError | unknown; } export const useUpdateCartInfo = (): Response => { const [error, setError] = useState<ApiError | unknown>(); const [cart, setCart] = useState<Cart>(); const getCustomerToken = useGetCustomerAccessToken(); const preview = usePreviewOptions(); // <-- use the hook const cartClient = useCartClient(); const updateCartInfo = useCallback( async (cart: Cart, request: UpdateCartInfoRequest): Promise<void> => { try { setError(undefined); const accessToken = await getCustomerToken(); const newCart = await cartClient.updateCartInfo(cart.id, request, { accessToken, preview, // <-- use the preview options // version: cart.version, }); setCart(newCart); } catch (err) { if (axios.isCancel(err)) { return; } if (axios.isAxiosError(err)) { setError(err.response.data); } setError(err); } }, [cartClient, getCustomerToken, preview] ); return { updateCartInfo, error, cart }; };