From cc0e62cd7e395f51246341a8980757538c1cb18b Mon Sep 17 00:00:00 2001 From: Luis Alvarez Date: Fri, 9 Oct 2020 10:44:54 -0500 Subject: [PATCH] Updated the useRemoveItem hook --- lib/bigcommerce/cart/use-add-item.tsx | 4 +- lib/bigcommerce/cart/use-remove-item.tsx | 53 ++++++++++++++++-------- lib/commerce/cart/use-remove-item.tsx | 8 ++-- 3 files changed, 42 insertions(+), 23 deletions(-) diff --git a/lib/bigcommerce/cart/use-add-item.tsx b/lib/bigcommerce/cart/use-add-item.tsx index 811d4f9c3..7c7c4b272 100644 --- a/lib/bigcommerce/cart/use-add-item.tsx +++ b/lib/bigcommerce/cart/use-add-item.tsx @@ -4,13 +4,13 @@ import { default as useCartAddItem } from '@lib/commerce/cart/use-add-item' import type { ItemBody, AddItemBody } from '../api/cart' import { Cart, useCart } from '.' -export type UpdateItemInput = ItemBody - const defaultOpts = { url: '/api/bigcommerce/cart', method: 'POST', } +export type UpdateItemInput = ItemBody + export const fetcher: HookFetcher = ( options, { item }, diff --git a/lib/bigcommerce/cart/use-remove-item.tsx b/lib/bigcommerce/cart/use-remove-item.tsx index 8334d4304..7d82f51db 100644 --- a/lib/bigcommerce/cart/use-remove-item.tsx +++ b/lib/bigcommerce/cart/use-remove-item.tsx @@ -1,34 +1,51 @@ import { useCallback } from 'react' -import type { Fetcher } from '@lib/commerce' +import { HookFetcher } from '@lib/commerce/utils/types' import { default as useCartRemoveItem } from '@lib/commerce/cart/use-remove-item' import type { RemoveItemBody } from '../api/cart' import { Cart, useCart } from '.' +const defaultOpts = { + url: '/api/bigcommerce/cart', + method: 'DELETE', +} + export type RemoveItemInput = { id: string } -export function fetcher( - fetch: Fetcher, - { itemId }: RemoveItemBody -) { +export const fetcher: HookFetcher = ( + options, + { itemId }, + fetch +) => { return fetch({ - url: '/api/bigcommerce/cart', - method: 'DELETE', + url: options.url!, + method: options.method!, body: { itemId }, }) } -export default function useRemoveItem(item?: any) { - const { mutate } = useCart() - const fn = useCartRemoveItem(fetcher) +function extend(customFetcher: typeof fetcher) { + const useRemoveItem = (item?: any) => { + const { mutate } = useCart() + const fn = useCartRemoveItem( + defaultOpts, + customFetcher + ) - return useCallback( - async function removeItem(input: RemoveItemInput) { - const data = await fn({ itemId: input.id ?? item?.id }) - await mutate(data, false) - return data - }, - [fn, mutate] - ) + return useCallback( + async function removeItem(input: RemoveItemInput) { + const data = await fn({ itemId: input.id ?? item?.id }) + await mutate(data, false) + return data + }, + [fn, mutate] + ) + } + + useRemoveItem.extend = extend + + return useRemoveItem } + +export default extend(fetcher) diff --git a/lib/commerce/cart/use-remove-item.tsx b/lib/commerce/cart/use-remove-item.tsx index 5543a1847..66aa370dd 100644 --- a/lib/commerce/cart/use-remove-item.tsx +++ b/lib/commerce/cart/use-remove-item.tsx @@ -1,14 +1,16 @@ import { useCallback } from 'react' -import { Fetcher, useCommerce } from '..' +import { HookFetcher, HookFetcherOptions } from '../utils/types' +import { useCommerce } from '..' export default function useRemoveItem( - fetcher: (fetch: Fetcher, input: Input) => T | Promise + options: HookFetcherOptions, + fetcher: HookFetcher ) { const { fetcherRef } = useCommerce() return useCallback( function removeItem(input: Input) { - return fetcher(fetcherRef.current, input) + return fetcher(options, input, fetcherRef.current) }, [fetcher] )