{"version":3,"file":"useCartActions.mjs","sources":["../../src/useCartActions.tsx"],"sourcesContent":["import {useCallback, useMemo} from 'react';\nimport {\n  AttributeInput,\n  CartBuyerIdentityInput,\n  CartInput,\n  CartLineInput,\n  CartLineUpdateInput,\n  CountryCode,\n  Cart as CartType,\n  MutationCartDiscountCodesUpdateArgs,\n  MutationCartNoteUpdateArgs,\n} from './storefront-api-types.js';\nimport {\n  CartAttributesUpdate,\n  CartBuyerIdentityUpdate,\n  CartCreate,\n  CartDiscountCodesUpdate,\n  CartLineAdd,\n  CartLineRemove,\n  CartLineUpdate,\n  CartNoteUpdate,\n  CartQuery,\n} from './cart-queries.js';\nimport {useCartFetch} from './cart-hooks.js';\nimport {PartialDeep} from 'type-fest';\n\ntype CartResponse = PartialDeep<CartType, {recurseIntoArrays: true}>;\n\n/**\n * The `useCartActions` hook returns helper graphql functions for Storefront Cart API\n *\n * See [cart API graphql mutations](https://shopify.dev/api/storefront/2022-10/objects/Cart)\n */\nexport function useCartActions({\n  numCartLines,\n  cartFragment,\n  countryCode = 'US',\n}: {\n  /**  Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n  numCartLines?: number;\n  /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n  cartFragment: string;\n  /** The ISO country code for i18n. */\n  countryCode?: CountryCode;\n}) {\n  const fetchCart = useCartFetch();\n\n  const cartFetch = useCallback(\n    (cartId: string) => {\n      return fetchCart<{cart: CartResponse}>({\n        query: CartQuery(cartFragment),\n        variables: {\n          id: cartId,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [fetchCart, cartFragment, numCartLines, countryCode]\n  );\n\n  const cartCreate = useCallback(\n    (cart: CartInput) => {\n      return fetchCart<{cartCreate: {cart: CartResponse}}>({\n        query: CartCreate(cartFragment),\n        variables: {\n          input: cart,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines]\n  );\n\n  const cartLineAdd = useCallback(\n    (cartId: string, lines: CartLineInput[]) => {\n      return fetchCart<{cartLinesAdd: {cart: CartResponse}}>({\n        query: CartLineAdd(cartFragment),\n        variables: {\n          cartId,\n          lines,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines]\n  );\n\n  const cartLineUpdate = useCallback(\n    (cartId: string, lines: CartLineUpdateInput[]) => {\n      return fetchCart<{cartLinesUpdate: {cart: CartResponse}}>({\n        query: CartLineUpdate(cartFragment),\n        variables: {\n          cartId,\n          lines,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines]\n  );\n\n  const cartLineRemove = useCallback(\n    (cartId: string, lines: string[]) => {\n      return fetchCart<{cartLinesRemove: {cart: CartResponse}}>({\n        query: CartLineRemove(cartFragment),\n        variables: {\n          cartId,\n          lines,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines]\n  );\n\n  const noteUpdate = useCallback(\n    (cartId: string, note: MutationCartNoteUpdateArgs['note']) => {\n      return fetchCart<{cartNoteUpdate: {cart: CartResponse}}>({\n        query: CartNoteUpdate(cartFragment),\n        variables: {\n          cartId,\n          note,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [fetchCart, cartFragment, numCartLines, countryCode]\n  );\n\n  const buyerIdentityUpdate = useCallback(\n    (cartId: string, buyerIdentity: CartBuyerIdentityInput) => {\n      return fetchCart<{cartBuyerIdentityUpdate: {cart: CartResponse}}>({\n        query: CartBuyerIdentityUpdate(cartFragment),\n        variables: {\n          cartId,\n          buyerIdentity,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines]\n  );\n\n  const cartAttributesUpdate = useCallback(\n    (cartId: string, attributes: AttributeInput[]) => {\n      return fetchCart<{cartAttributesUpdate: {cart: CartResponse}}>({\n        query: CartAttributesUpdate(cartFragment),\n        variables: {\n          cartId,\n          attributes,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines]\n  );\n\n  const discountCodesUpdate = useCallback(\n    (\n      cartId: string,\n      discountCodes: MutationCartDiscountCodesUpdateArgs['discountCodes']\n    ) => {\n      return fetchCart<{cartDiscountCodesUpdate: {cart: CartResponse}}>({\n        query: CartDiscountCodesUpdate(cartFragment),\n        variables: {\n          cartId,\n          discountCodes,\n          numCartLines,\n          country: countryCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines]\n  );\n\n  return useMemo(\n    () => ({\n      cartFetch,\n      cartCreate,\n      cartLineAdd,\n      cartLineUpdate,\n      cartLineRemove,\n      noteUpdate,\n      buyerIdentityUpdate,\n      cartAttributesUpdate,\n      discountCodesUpdate,\n      cartFragment,\n    }),\n    [\n      cartFetch,\n      cartCreate,\n      cartLineAdd,\n      cartLineUpdate,\n      cartLineRemove,\n      noteUpdate,\n      buyerIdentityUpdate,\n      cartAttributesUpdate,\n      discountCodesUpdate,\n      cartFragment,\n    ]\n  );\n}\n"],"names":["useCartActions","numCartLines","cartFragment","countryCode","fetchCart","useCartFetch","cartFetch","useCallback","cartId","query","CartQuery","variables","id","country","cartCreate","cart","CartCreate","input","cartLineAdd","lines","CartLineAdd","cartLineUpdate","CartLineUpdate","cartLineRemove","CartLineRemove","noteUpdate","note","CartNoteUpdate","buyerIdentityUpdate","buyerIdentity","CartBuyerIdentityUpdate","cartAttributesUpdate","attributes","CartAttributesUpdate","discountCodesUpdate","discountCodes","CartDiscountCodesUpdate","useMemo"],"mappings":"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"}