Updated types

This commit is contained in:
cond0r 2021-02-18 15:49:44 +02:00
parent 89cc3d0608
commit ce5fcb6975
4 changed files with 47 additions and 46 deletions

View File

@ -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()

View File

@ -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({

View File

@ -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

View File

@ -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: [],
}
}