mirror of
https://github.com/vercel/commerce.git
synced 2025-06-20 06:01:21 +00:00
fix/saleor: handle non-existing checkout
This commit is contained in:
parent
62f5dead0d
commit
4492f3051c
@ -6,7 +6,7 @@ import useCart from './use-cart'
|
|||||||
|
|
||||||
import * as mutation from '../utils/mutations'
|
import * as mutation from '../utils/mutations'
|
||||||
|
|
||||||
import { getCheckoutId, checkoutToCart } from '../utils'
|
import { getCheckoutId, checkoutToCart, checkoutCreate } from '../utils'
|
||||||
|
|
||||||
import { Mutation, MutationCheckoutLinesAddArgs } from '../schema'
|
import { Mutation, MutationCheckoutLinesAddArgs } from '../schema'
|
||||||
import { AddItemHook } from '@commerce/types/cart'
|
import { AddItemHook } from '@commerce/types/cart'
|
||||||
@ -35,20 +35,39 @@ export const handler: MutationHook<AddItemHook> = {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (checkoutLinesAdd?.errors) {
|
||||||
|
await checkoutCreate(fetch)
|
||||||
|
|
||||||
|
const { checkoutLinesAdd } = await fetch<Mutation, MutationCheckoutLinesAddArgs>({
|
||||||
|
...options,
|
||||||
|
variables: {
|
||||||
|
checkoutId: getCheckoutId().checkoutId,
|
||||||
|
lineItems: [
|
||||||
|
{
|
||||||
|
variantId: item.variantId,
|
||||||
|
quantity: item.quantity ?? 1,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
return checkoutToCart(checkoutLinesAdd)
|
||||||
|
}
|
||||||
|
|
||||||
return checkoutToCart(checkoutLinesAdd)
|
return checkoutToCart(checkoutLinesAdd)
|
||||||
},
|
},
|
||||||
useHook:
|
useHook:
|
||||||
({ fetch }) =>
|
({ fetch }) =>
|
||||||
() => {
|
() => {
|
||||||
const { mutate } = useCart()
|
const { mutate } = useCart()
|
||||||
|
|
||||||
return useCallback(
|
return useCallback(
|
||||||
async function addItem(input) {
|
async function addItem(input) {
|
||||||
const data = await fetch({ input })
|
const data = await fetch({ input })
|
||||||
await mutate(data, false)
|
await mutate(data, false)
|
||||||
return data
|
return data
|
||||||
},
|
},
|
||||||
[fetch, mutate]
|
[fetch, mutate]
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,18 @@ export const handler: SWRHook<GetCartHook> = {
|
|||||||
let checkout
|
let checkout
|
||||||
|
|
||||||
if (checkoutId) {
|
if (checkoutId) {
|
||||||
const checkoutId = getCheckoutId().checkoutToken
|
const r = getCheckoutId()
|
||||||
|
const checkoutToken = r.checkoutToken
|
||||||
|
|
||||||
const data = await fetch({
|
const data = await fetch({
|
||||||
...options,
|
...options,
|
||||||
variables: { checkoutId },
|
variables: { checkoutId: checkoutToken },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (!data.checkout) {
|
||||||
|
checkout = await checkoutCreate(fetch)
|
||||||
|
}
|
||||||
|
|
||||||
checkout = data
|
checkout = data
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33,21 +39,21 @@ export const handler: SWRHook<GetCartHook> = {
|
|||||||
},
|
},
|
||||||
useHook:
|
useHook:
|
||||||
({ useData }) =>
|
({ useData }) =>
|
||||||
(input) => {
|
(input) => {
|
||||||
const response = useData({
|
const response = useData({
|
||||||
swrOptions: { revalidateOnFocus: false, ...input?.swrOptions },
|
swrOptions: { revalidateOnFocus: false, ...input?.swrOptions },
|
||||||
})
|
})
|
||||||
return useMemo(
|
return useMemo(
|
||||||
() =>
|
() =>
|
||||||
Object.create(response, {
|
Object.create(response, {
|
||||||
isEmpty: {
|
isEmpty: {
|
||||||
get() {
|
get() {
|
||||||
return (response.data?.lineItems.length ?? 0) <= 0
|
return (response.data?.lineItems.length ?? 0) <= 0
|
||||||
|
},
|
||||||
|
enumerable: true,
|
||||||
},
|
},
|
||||||
enumerable: true,
|
}),
|
||||||
},
|
[response]
|
||||||
}),
|
)
|
||||||
[response]
|
},
|
||||||
)
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user