forked from crowetic/commerce
Updated types
This commit is contained in:
parent
89cc3d0608
commit
ce5fcb6975
@ -3,18 +3,10 @@ import { CommerceError } from '@commerce/utils/errors'
|
||||
import useAddItem, { UseAddItem } from '@commerce/cart/use-add-item'
|
||||
import useCart from './use-cart'
|
||||
import { ShopifyProvider } from '..'
|
||||
import { AddCartItemBody, CartItemBody } from '@commerce/types'
|
||||
import { Cart } from '@framework/types'
|
||||
import {
|
||||
checkoutLineItemAddMutation,
|
||||
getCheckoutId,
|
||||
getCheckoutQuery,
|
||||
} from '@framework/utils'
|
||||
import { Cart, AddCartItemBody, CartItemBody } from '../types'
|
||||
import { checkoutLineItemAddMutation, getCheckoutId } from '../utils'
|
||||
import { checkoutToCart } from './utils'
|
||||
|
||||
const defaultOpts = {
|
||||
query: checkoutLineItemAddMutation,
|
||||
}
|
||||
import { Mutation } from '../schema'
|
||||
|
||||
export default useAddItem as UseAddItem<ShopifyProvider, CartItemBody>
|
||||
|
||||
@ -22,8 +14,7 @@ export const handler: MutationHandler<Cart, {}, AddCartItemBody> = {
|
||||
fetchOptions: {
|
||||
query: checkoutLineItemAddMutation,
|
||||
},
|
||||
async fetcher({ input, options, fetch }) {
|
||||
const item = input.item ?? input
|
||||
async fetcher({ input: { item }, options, fetch }) {
|
||||
if (
|
||||
item.quantity &&
|
||||
(!Number.isInteger(item.quantity) || item.quantity! < 1)
|
||||
@ -33,8 +24,7 @@ export const handler: MutationHandler<Cart, {}, AddCartItemBody> = {
|
||||
})
|
||||
}
|
||||
|
||||
const data = await fetch<any, any>({
|
||||
...defaultOpts,
|
||||
const { checkoutLineItemsAdd }: Mutation = await fetch<any, any>({
|
||||
...options,
|
||||
variables: {
|
||||
lineItems: [
|
||||
@ -47,7 +37,7 @@ export const handler: MutationHandler<Cart, {}, AddCartItemBody> = {
|
||||
},
|
||||
})
|
||||
|
||||
return checkoutToCart(data.checkoutLineItemsAdd)
|
||||
return checkoutToCart(checkoutLineItemsAdd)
|
||||
},
|
||||
useHook() {
|
||||
const { mutate } = useCart()
|
||||
|
@ -1,14 +1,26 @@
|
||||
import { Cart } from '@commerce/types'
|
||||
import { ValidationError } from '@commerce/utils/errors'
|
||||
import { normalizeCart } from '@framework/utils/normalize'
|
||||
import { Checkout, UserError } from '@framework/schema'
|
||||
import { CommerceError, ValidationError } from '@commerce/utils/errors'
|
||||
|
||||
const checkoutToCart = (checkoutResponse: {
|
||||
checkout: Checkout
|
||||
userErrors?: UserError[]
|
||||
}): Cart => {
|
||||
const checkout = checkoutResponse?.checkout
|
||||
const userErrors = checkoutResponse?.userErrors
|
||||
import {
|
||||
CheckoutLineItemsAddPayload,
|
||||
CheckoutLineItemsUpdatePayload,
|
||||
Maybe,
|
||||
} from '@framework/schema'
|
||||
import { normalizeCart } from '@framework/utils'
|
||||
|
||||
export type CheckoutPayload =
|
||||
| CheckoutLineItemsAddPayload
|
||||
| CheckoutLineItemsUpdatePayload
|
||||
|
||||
const checkoutToCart = (checkoutPayload?: Maybe<CheckoutPayload>): Cart => {
|
||||
if (!checkoutPayload || !checkoutPayload?.checkout) {
|
||||
throw new CommerceError({
|
||||
message: 'Invalid response from Shopify',
|
||||
})
|
||||
}
|
||||
|
||||
const checkout = checkoutPayload?.checkout
|
||||
const userErrors = checkoutPayload?.userErrors
|
||||
|
||||
if (userErrors && userErrors.length) {
|
||||
throw new ValidationError({
|
||||
|
@ -23,25 +23,24 @@ export type OptionSelections = {
|
||||
option_value: number | string
|
||||
}
|
||||
|
||||
export interface CartItemBody extends Core.CartItemBody {
|
||||
export type CartItemBody = Core.CartItemBody & {
|
||||
productId: string // The product id is always required for BC
|
||||
optionSelections?: OptionSelections
|
||||
}
|
||||
|
||||
export interface GetCartHandlerBody extends Core.GetCartHandlerBody {}
|
||||
type X = Core.CartItemBody extends CartItemBody ? any : never
|
||||
type Y = CartItemBody extends Core.CartItemBody ? any : never
|
||||
|
||||
export interface AddCartItemBody extends Core.AddCartItemBody<CartItemBody> {}
|
||||
export type GetCartHandlerBody = Core.GetCartHandlerBody
|
||||
|
||||
export interface AddCartItemHandlerBody
|
||||
extends Core.AddCartItemHandlerBody<CartItemBody> {}
|
||||
export type AddCartItemBody = Core.AddCartItemBody<CartItemBody>
|
||||
|
||||
export interface UpdateCartItemBody
|
||||
extends Core.UpdateCartItemBody<CartItemBody> {}
|
||||
export type AddCartItemHandlerBody = Core.AddCartItemHandlerBody<CartItemBody>
|
||||
|
||||
export interface UpdateCartItemHandlerBody
|
||||
extends Core.UpdateCartItemHandlerBody<CartItemBody> {}
|
||||
export type UpdateCartItemBody = Core.UpdateCartItemBody<CartItemBody>
|
||||
|
||||
export interface RemoveCartItemBody extends Core.RemoveCartItemBody {}
|
||||
export type UpdateCartItemHandlerBody = Core.UpdateCartItemHandlerBody<CartItemBody>
|
||||
|
||||
export interface RemoveCartItemHandlerBody
|
||||
extends Core.RemoveCartItemHandlerBody {}
|
||||
export type RemoveCartItemBody = Core.RemoveCartItemBody
|
||||
|
||||
export type RemoveCartItemHandlerBody = Core.RemoveCartItemHandlerBody
|
||||
|
@ -81,20 +81,20 @@ export function normalizeProduct(productNode: ShopifyProduct): any {
|
||||
}
|
||||
}
|
||||
|
||||
export function normalizeCart(data: Checkout): Cart {
|
||||
export function normalizeCart(checkout: Checkout): Cart {
|
||||
return {
|
||||
id: data.id,
|
||||
id: checkout.id,
|
||||
customerId: '',
|
||||
email: '',
|
||||
createdAt: data.createdAt,
|
||||
createdAt: checkout.createdAt,
|
||||
currency: {
|
||||
code: data.currencyCode,
|
||||
code: checkout.currencyCode,
|
||||
},
|
||||
taxesIncluded: data.taxesIncluded,
|
||||
lineItems: data.lineItems?.edges.map(normalizeLineItem),
|
||||
lineItemsSubtotalPrice: data.subtotalPrice,
|
||||
subtotalPrice: data.subtotalPrice,
|
||||
totalPrice: data.totalPrice,
|
||||
taxesIncluded: checkout.taxesIncluded,
|
||||
lineItems: checkout.lineItems?.edges.map(normalizeLineItem),
|
||||
lineItemsSubtotalPrice: checkout.subtotalPrice,
|
||||
subtotalPrice: checkout.subtotalPrice,
|
||||
totalPrice: checkout.totalPrice,
|
||||
discounts: [],
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user