import { useCallback } from 'react' import type { MutationHookContext, HookFetcherContext, } from '@commerce/utils/types' import useRemoveItem, { UseRemoveItem } from '@commerce/cart/use-remove-item' import type { Cart, LineItem, RemoveItemHook } from '@commerce/types/cart' import useCart from './use-cart' import { checkoutToCart } from './utils' export type RemoveItemFn = T extends LineItem ? (input?: RemoveItemActionInput) => Promise : (input: RemoveItemActionInput) => Promise export type RemoveItemActionInput = T extends LineItem ? Partial : RemoveItemHook['actionInput'] export default useRemoveItem as UseRemoveItem export const handler = { fetchOptions: { query: 'cart', method: 'removeItem', }, async fetcher({ input: { itemId }, options, fetch, }: HookFetcherContext) { const response = await fetch({ ...options, variables: [itemId] }) return checkoutToCart(response) }, useHook: ({ fetch }: MutationHookContext) => () => { const { mutate } = useCart() return useCallback( async function removeItem(input) { const data = await fetch({ input: { itemId: input.id } }) await mutate(data, false) return data }, [fetch, mutate] ) }, }