Update Next and make the CartProvider not required anymore

This commit is contained in:
Luis Alvarez
2020-10-08 22:17:40 -05:00
parent 2c82348487
commit 6dca1eadd2
6 changed files with 35 additions and 46 deletions

View File

@@ -1,19 +1,9 @@
import type { FC } from 'react'
import {
CartProvider as CommerceCartProvider,
useCart as useCommerceCart,
} from '@lib/commerce/cart'
import { CartProvider, useCart as useCommerceCart } from '@lib/commerce/cart'
import type { Cart } from '../api/cart'
export type { Cart }
export const CartProvider: FC = ({ children }) => {
return (
<CommerceCartProvider url="/api/bigcommerce/cart">
{children}
</CommerceCartProvider>
)
}
export { CartProvider }
export function useCart() {
const cart = useCommerceCart<Cart | null>()

View File

@@ -3,15 +3,18 @@ import useSWR, { responseInterface } from 'swr'
import Cookies from 'js-cookie'
import { useCommerce } from '..'
const CART_API = '/api/bigcommerce/cart'
export type CartResponse<C> = responseInterface<C, Error> & {
isEmpty: boolean
}
export type CartProviderProps =
| { query: string; url?: string }
| { query?: string; url: string }
export type CartProviderProps = {
query?: string
url?: string
}
const CartContext = createContext<{ query?: string; url?: string }>({})
const CartContext = createContext<CartProviderProps>({})
const CartProvider: FC<CartProviderProps> = ({ children, query, url }) => {
const value = useMemo(() => ({ query, url }), [query, url])
@@ -22,7 +25,7 @@ function useCart<C>() {
const { fetcherRef, cartCookie } = useCommerce()
const fetcher = (url?: string, query?: string) =>
Cookies.get(cartCookie) ? fetcherRef.current({ url, query }) : null
const { url, query } = useContext(CartContext)
const { url = CART_API, query } = useContext(CartContext)
const response = useSWR([url, query], fetcher, {
revalidateOnFocus: false,
})