{"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  LanguageCode,\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/2026-01/objects/Cart)\n */\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartActions({\n  numCartLines,\n  cartFragment,\n  countryCode = 'US',\n  languageCode = 'EN',\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/2026-01/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. Default to `US` */\n  countryCode?: CountryCode;\n  /** The ISO language code for i18n. Default to `EN` */\n  languageCode?: LanguageCode;\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          language: languageCode,\n        },\n      });\n    },\n    [fetchCart, cartFragment, numCartLines, countryCode, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [fetchCart, cartFragment, numCartLines, countryCode, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines, languageCode],\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          language: languageCode,\n        },\n      });\n    },\n    [cartFragment, countryCode, fetchCart, numCartLines, languageCode],\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":[],"mappings":"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"}