@shopify/hydrogen-react 2023.7.4 → 2023.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser-dev/CartProvider.mjs +4 -1
- package/dist/browser-dev/CartProvider.mjs.map +1 -1
- package/dist/browser-dev/cart-queries.mjs +18 -9
- package/dist/browser-dev/cart-queries.mjs.map +1 -1
- package/dist/browser-dev/load-script.mjs +6 -0
- package/dist/browser-dev/load-script.mjs.map +1 -1
- package/dist/browser-dev/useCartAPIStateMachine.mjs +4 -2
- package/dist/browser-dev/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/browser-dev/useCartActions.mjs +29 -19
- package/dist/browser-dev/useCartActions.mjs.map +1 -1
- package/dist/browser-prod/CartProvider.mjs +4 -1
- package/dist/browser-prod/CartProvider.mjs.map +1 -1
- package/dist/browser-prod/cart-queries.mjs +18 -9
- package/dist/browser-prod/cart-queries.mjs.map +1 -1
- package/dist/browser-prod/load-script.mjs +6 -0
- package/dist/browser-prod/load-script.mjs.map +1 -1
- package/dist/browser-prod/useCartAPIStateMachine.mjs +4 -2
- package/dist/browser-prod/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/browser-prod/useCartActions.mjs +29 -19
- package/dist/browser-prod/useCartActions.mjs.map +1 -1
- package/dist/node-dev/CartProvider.js +4 -1
- package/dist/node-dev/CartProvider.js.map +1 -1
- package/dist/node-dev/CartProvider.mjs +4 -1
- package/dist/node-dev/CartProvider.mjs.map +1 -1
- package/dist/node-dev/cart-queries.js +18 -9
- package/dist/node-dev/cart-queries.js.map +1 -1
- package/dist/node-dev/cart-queries.mjs +18 -9
- package/dist/node-dev/cart-queries.mjs.map +1 -1
- package/dist/node-dev/load-script.js +6 -0
- package/dist/node-dev/load-script.js.map +1 -1
- package/dist/node-dev/load-script.mjs +6 -0
- package/dist/node-dev/load-script.mjs.map +1 -1
- package/dist/node-dev/useCartAPIStateMachine.js +4 -2
- package/dist/node-dev/useCartAPIStateMachine.js.map +1 -1
- package/dist/node-dev/useCartAPIStateMachine.mjs +4 -2
- package/dist/node-dev/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/node-dev/useCartActions.js +29 -19
- package/dist/node-dev/useCartActions.js.map +1 -1
- package/dist/node-dev/useCartActions.mjs +29 -19
- package/dist/node-dev/useCartActions.mjs.map +1 -1
- package/dist/node-prod/CartProvider.js +4 -1
- package/dist/node-prod/CartProvider.js.map +1 -1
- package/dist/node-prod/CartProvider.mjs +4 -1
- package/dist/node-prod/CartProvider.mjs.map +1 -1
- package/dist/node-prod/cart-queries.js +18 -9
- package/dist/node-prod/cart-queries.js.map +1 -1
- package/dist/node-prod/cart-queries.mjs +18 -9
- package/dist/node-prod/cart-queries.mjs.map +1 -1
- package/dist/node-prod/load-script.js +6 -0
- package/dist/node-prod/load-script.js.map +1 -1
- package/dist/node-prod/load-script.mjs +6 -0
- package/dist/node-prod/load-script.mjs.map +1 -1
- package/dist/node-prod/useCartAPIStateMachine.js +4 -2
- package/dist/node-prod/useCartAPIStateMachine.js.map +1 -1
- package/dist/node-prod/useCartAPIStateMachine.mjs +4 -2
- package/dist/node-prod/useCartAPIStateMachine.mjs.map +1 -1
- package/dist/node-prod/useCartActions.js +29 -19
- package/dist/node-prod/useCartActions.js.map +1 -1
- package/dist/node-prod/useCartActions.mjs +29 -19
- package/dist/node-prod/useCartActions.mjs.map +1 -1
- package/dist/types/CartProvider.d.ts +4 -2
- package/dist/types/load-script.d.ts +4 -2
- package/dist/types/useCartAPIStateMachine.d.ts +4 -2
- package/dist/types/useCartActions.d.ts +5 -3
- package/dist/umd/hydrogen-react.dev.js +61 -31
- package/dist/umd/hydrogen-react.dev.js.map +1 -1
- package/dist/umd/hydrogen-react.prod.js +35 -26
- package/dist/umd/hydrogen-react.prod.js.map +1 -1
- package/package.json +36 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load-script.mjs","sources":["../../src/load-script.tsx"],"sourcesContent":["import {useState, useEffect} from 'react';\n\nconst SCRIPTS_LOADED: Record<string, Promise<boolean>> = {};\n\
|
|
1
|
+
{"version":3,"file":"load-script.mjs","sources":["../../src/load-script.tsx"],"sourcesContent":["import {useState, useEffect} from 'react';\n\nconst SCRIPTS_LOADED: Record<string, Promise<boolean>> = {};\n\ntype LoadScriptOptions = {\n module?: boolean;\n in?: 'head' | 'body';\n attributes?: Record<string, string>;\n};\n\nexport function loadScript(\n src: string,\n options?: LoadScriptOptions,\n): Promise<boolean> {\n const isScriptLoaded = SCRIPTS_LOADED[src];\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n if (isScriptLoaded) {\n return isScriptLoaded;\n }\n\n const promise = new Promise<boolean>((resolve, reject) => {\n const script = document.createElement('script');\n if (options?.module) {\n script.type = 'module';\n } else {\n script.type = 'text/javascript';\n }\n script.src = src;\n script.onload = (): void => {\n resolve(true);\n };\n script.onerror = (): void => {\n reject(false);\n };\n if (options?.in === 'head') {\n document.head.appendChild(script);\n } else {\n document.body.appendChild(script);\n }\n\n const attributes = options?.attributes;\n if (attributes) {\n Object.keys(attributes).forEach((key) => {\n script.setAttribute(key, attributes[key]);\n });\n }\n });\n\n SCRIPTS_LOADED[src] = promise;\n\n return promise;\n}\n\ntype LoadScriptParams = Parameters<typeof loadScript>;\n\n/**\n * The `useLoadScript` hook loads an external script tag in the browser. It allows React components to lazy-load large third-party dependencies.\n */\nexport function useLoadScript(\n url: LoadScriptParams[0],\n options?: LoadScriptParams[1],\n): ScriptState {\n const [status, setStatus] = useState<ScriptState>('loading');\n const stringifiedOptions = JSON.stringify(options);\n\n useEffect(() => {\n async function loadScriptWrapper(): Promise<void> {\n try {\n setStatus('loading');\n await loadScript(url, options);\n setStatus('done');\n } catch (error) {\n setStatus('error');\n }\n }\n\n loadScriptWrapper().catch(() => {\n setStatus('error');\n });\n }, [url, stringifiedOptions, options]);\n\n return status;\n}\n\ntype ScriptState = 'loading' | 'done' | 'error';\n"],"names":[],"mappings":";AAEA,MAAM,iBAAmD,CAAA;AAQzC,SAAA,WACd,KACA,SACkB;AACZ,QAAA,iBAAiB,eAAe,GAAG;AAGzC,MAAI,gBAAgB;AACX,WAAA;AAAA,EACT;AAEA,QAAM,UAAU,IAAI,QAAiB,CAAC,SAAS,WAAW;AAClD,UAAA,SAAS,SAAS,cAAc,QAAQ;AAC9C,QAAI,mCAAS,QAAQ;AACnB,aAAO,OAAO;AAAA,IAAA,OACT;AACL,aAAO,OAAO;AAAA,IAChB;AACA,WAAO,MAAM;AACb,WAAO,SAAS,MAAY;AAC1B,cAAQ,IAAI;AAAA,IAAA;AAEd,WAAO,UAAU,MAAY;AAC3B,aAAO,KAAK;AAAA,IAAA;AAEV,SAAA,mCAAS,QAAO,QAAQ;AACjB,eAAA,KAAK,YAAY,MAAM;AAAA,IAAA,OAC3B;AACI,eAAA,KAAK,YAAY,MAAM;AAAA,IAClC;AAEA,UAAM,aAAa,mCAAS;AAC5B,QAAI,YAAY;AACd,aAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,QAAQ;AACvC,eAAO,aAAa,KAAK,WAAW,GAAG,CAAC;AAAA,MAAA,CACzC;AAAA,IACH;AAAA,EAAA,CACD;AAED,iBAAe,GAAG,IAAI;AAEf,SAAA;AACT;AAOgB,SAAA,cACd,KACA,SACa;AACb,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAsB,SAAS;AACrD,QAAA,qBAAqB,KAAK,UAAU,OAAO;AAEjD,YAAU,MAAM;AACd,mBAAe,oBAAmC;AAC5C,UAAA;AACF,kBAAU,SAAS;AACb,cAAA,WAAW,KAAK,OAAO;AAC7B,kBAAU,MAAM;AAAA,eACT,OAAO;AACd,kBAAU,OAAO;AAAA,MACnB;AAAA,IACF;AAEkB,sBAAA,EAAE,MAAM,MAAM;AAC9B,gBAAU,OAAO;AAAA,IAAA,CAClB;AAAA,EACA,GAAA,CAAC,KAAK,oBAAoB,OAAO,CAAC;AAE9B,SAAA;AACT;"}
|
|
@@ -153,7 +153,8 @@ function useCartAPIStateMachine({
|
|
|
153
153
|
onCartActionComplete,
|
|
154
154
|
data: cart,
|
|
155
155
|
cartFragment,
|
|
156
|
-
countryCode
|
|
156
|
+
countryCode,
|
|
157
|
+
languageCode
|
|
157
158
|
}) {
|
|
158
159
|
const {
|
|
159
160
|
cartFetch,
|
|
@@ -168,7 +169,8 @@ function useCartAPIStateMachine({
|
|
|
168
169
|
} = useCartActions.useCartActions({
|
|
169
170
|
numCartLines,
|
|
170
171
|
cartFragment,
|
|
171
|
-
countryCode
|
|
172
|
+
countryCode,
|
|
173
|
+
languageCode
|
|
172
174
|
});
|
|
173
175
|
const cartMachine = React.useMemo(() => createCartMachine(cart), [cart]);
|
|
174
176
|
const [state, send, service] = fsm.useMachine(cartMachine, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCartAPIStateMachine.js","sources":["../../src/useCartAPIStateMachine.tsx"],"sourcesContent":["import {useMachine} from '@xstate/react/fsm';\nimport {createMachine, assign, StateMachine} from '@xstate/fsm';\nimport {\n Cart,\n CartMachineActionEvent,\n CartMachineActions,\n CartMachineContext,\n CartMachineEvent,\n CartMachineFetchResultEvent,\n CartMachineTypeState,\n} from './cart-types.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {useCartActions} from './useCartActions.js';\nimport {useMemo} from 'react';\nimport {InitEvent} from '@xstate/fsm/lib/types.js';\nimport {CountryCode, Cart as CartType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nfunction invokeCart(\n action: keyof CartMachineActions,\n options?: {\n entryActions?: [keyof CartMachineActions];\n resolveTarget?: CartMachineTypeState['value'];\n errorTarget?: CartMachineTypeState['value'];\n exitActions?: [keyof CartMachineActions];\n },\n): StateMachine.Config<CartMachineContext, CartMachineEvent>['states']['on'] {\n return {\n entry: [\n ...(options?.entryActions || []),\n assign({\n lastValidCart: (context) => context?.cart,\n }),\n 'onCartActionEntry',\n 'onCartActionOptimisticUI',\n action,\n ],\n on: {\n RESOLVE: {\n target: options?.resolveTarget || 'idle',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (_, event) => event?.payload?.cart,\n rawCartResult: (_, event) => event?.payload?.rawCartResult,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n ],\n },\n ERROR: {\n target: options?.errorTarget || 'error',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (context) => context?.lastValidCart,\n errors: (_, event) => event?.payload?.errors,\n }),\n ],\n },\n CART_COMPLETED: {\n target: 'cartCompleted',\n actions: assign({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n prevCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n lastValidCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rawCartResult: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n },\n },\n exit: ['onCartActionComplete', ...(options?.exitActions || [])],\n };\n}\n\nconst INITIALIZING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['uninitialized']['on'] = {\n CART_FETCH: {\n target: 'cartFetching',\n },\n CART_CREATE: {\n target: 'cartCreating',\n },\n CART_SET: {\n target: 'idle',\n actions: [\n assign({\n rawCartResult: (_, event) => event.payload.cart,\n cart: (_, event) => cartFromGraphQL(event.payload.cart),\n }),\n ],\n },\n};\n\nconst UPDATING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['idle']['on'] = {\n CARTLINE_ADD: {\n target: 'cartLineAdding',\n },\n CARTLINE_UPDATE: {\n target: 'cartLineUpdating',\n },\n CARTLINE_REMOVE: {\n target: 'cartLineRemoving',\n },\n NOTE_UPDATE: {\n target: 'noteUpdating',\n },\n BUYER_IDENTITY_UPDATE: {\n target: 'buyerIdentityUpdating',\n },\n CART_ATTRIBUTES_UPDATE: {\n target: 'cartAttributesUpdating',\n },\n DISCOUNT_CODES_UPDATE: {\n target: 'discountCodesUpdating',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction createCartMachine(\n initialCart?: PartialDeep<CartType, {recurseIntoArrays: true}>,\n) {\n return createMachine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n >({\n id: 'Cart',\n initial: initialCart ? 'idle' : 'uninitialized',\n context: {\n cart: initialCart && cartFromGraphQL(initialCart),\n },\n states: {\n uninitialized: {\n on: INITIALIZING_CART_EVENTS,\n },\n cartCompleted: {\n on: INITIALIZING_CART_EVENTS,\n },\n initializationError: {\n on: INITIALIZING_CART_EVENTS,\n },\n idle: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n error: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n cartFetching: invokeCart('cartFetchAction', {\n errorTarget: 'initializationError',\n }),\n cartCreating: invokeCart('cartCreateAction', {\n errorTarget: 'initializationError',\n }),\n cartLineRemoving: invokeCart('cartLineRemoveAction'),\n cartLineUpdating: invokeCart('cartLineUpdateAction'),\n cartLineAdding: invokeCart('cartLineAddAction'),\n noteUpdating: invokeCart('noteUpdateAction'),\n buyerIdentityUpdating: invokeCart('buyerIdentityUpdateAction'),\n cartAttributesUpdating: invokeCart('cartAttributesUpdateAction'),\n discountCodesUpdating: invokeCart('discountCodesUpdateAction'),\n },\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartAPIStateMachine({\n numCartLines,\n onCartActionEntry,\n onCartActionOptimisticUI,\n onCartActionComplete,\n data: cart,\n cartFragment,\n countryCode,\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked just before a Cart API action executes. */\n onCartActionEntry?: (\n context: CartMachineContext,\n event: CartMachineActionEvent,\n ) => void;\n /** A callback that is invoked after executing the entry actions for optimistic UI changes. */\n onCartActionOptimisticUI?: (\n context: CartMachineContext,\n event: CartMachineEvent,\n ) => Partial<CartMachineContext>;\n /** A callback that is invoked after a Cart API completes. */\n onCartActionComplete?: (\n context: CartMachineContext,\n event: CartMachineFetchResultEvent,\n ) => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/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 {\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n } = useCartActions({\n numCartLines,\n cartFragment,\n countryCode,\n });\n\n const cartMachine = useMemo(() => createCartMachine(cart), [cart]);\n\n const [state, send, service] = useMachine(cartMachine, {\n actions: {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartFetchAction: async (_, event) => {\n if (event.type !== 'CART_FETCH') return;\n\n const {data, errors} = await cartFetch(event?.payload?.cartId);\n const resultEvent = eventFromFetchResult(event, data?.cart, errors);\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartCreateAction: async (_, event) => {\n if (event.type !== 'CART_CREATE') return;\n\n const {data, errors} = await cartCreate(event?.payload);\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartCreate?.cart,\n errors,\n );\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineAddAction: async (context, event) => {\n if (event.type !== 'CARTLINE_ADD' || !context?.cart?.id) return;\n\n const {data, errors} = await cartLineAdd(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesAdd?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineUpdateAction: async (context, event) => {\n if (event.type !== 'CARTLINE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineUpdate(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineRemoveAction: async (context, event) => {\n if (event.type !== 'CARTLINE_REMOVE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineRemove(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesRemove?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n noteUpdateAction: async (context, event) => {\n if (event.type !== 'NOTE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await noteUpdate(\n context.cart.id,\n event.payload.note,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartNoteUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n buyerIdentityUpdateAction: async (context, event) => {\n if (event.type !== 'BUYER_IDENTITY_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await buyerIdentityUpdate(\n context.cart.id,\n event.payload.buyerIdentity,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartBuyerIdentityUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartAttributesUpdateAction: async (context, event) => {\n if (event.type !== 'CART_ATTRIBUTES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await cartAttributesUpdate(\n context.cart.id,\n event.payload.attributes,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartAttributesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n discountCodesUpdateAction: async (context, event) => {\n if (event.type !== 'DISCOUNT_CODES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await discountCodesUpdate(\n context.cart.id,\n event.payload.discountCodes,\n );\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartDiscountCodesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n ...(onCartActionEntry && {\n onCartActionEntry: (context, event): void => {\n if (isCartActionEvent(event)) {\n onCartActionEntry(context, event);\n }\n },\n }),\n ...(onCartActionOptimisticUI && {\n onCartActionOptimisticUI: assign((context, event) => {\n return onCartActionOptimisticUI(context, event);\n }),\n }),\n ...(onCartActionComplete && {\n onCartActionComplete: (context, event): void => {\n if (isCartFetchResultEvent(event)) {\n onCartActionComplete(context, event);\n }\n },\n }),\n } as CartMachineActions,\n });\n\n return useMemo(() => [state, send, service] as const, [state, send, service]);\n}\n\nexport function cartFromGraphQL(\n cart: PartialDeep<CartType, {recurseIntoArrays: true}>,\n): Cart {\n return {\n ...cart,\n lines: flattenConnection(cart?.lines),\n note: cart.note ?? undefined,\n };\n}\n\nfunction eventFromFetchResult(\n cartActionEvent: CartMachineActionEvent,\n cart?: PartialDeep<CartType, {recurseIntoArrays: true}> | null,\n errors?: unknown,\n): CartMachineFetchResultEvent {\n if (errors) {\n return {type: 'ERROR', payload: {errors, cartActionEvent}};\n }\n\n if (!cart) {\n return {\n type: 'CART_COMPLETED',\n payload: {\n cartActionEvent,\n },\n };\n }\n\n return {\n type: 'RESOLVE',\n payload: {\n cart: cartFromGraphQL(cart),\n rawCartResult: cart,\n cartActionEvent,\n },\n };\n}\n\nfunction isCartActionEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineActionEvent {\n return (\n event.type === 'CART_CREATE' ||\n event.type === 'CARTLINE_ADD' ||\n event.type === 'CARTLINE_UPDATE' ||\n event.type === 'CARTLINE_REMOVE' ||\n event.type === 'NOTE_UPDATE' ||\n event.type === 'BUYER_IDENTITY_UPDATE' ||\n event.type === 'CART_ATTRIBUTES_UPDATE' ||\n event.type === 'DISCOUNT_CODES_UPDATE'\n );\n}\n\nfunction isCartFetchResultEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineFetchResultEvent {\n return (\n event.type === 'RESOLVE' ||\n event.type === 'ERROR' ||\n event.type === 'CART_COMPLETED'\n );\n}\n"],"names":["assign","createMachine","useCartActions","useMemo","useMachine","flattenConnection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCartAPIStateMachine.js","sources":["../../src/useCartAPIStateMachine.tsx"],"sourcesContent":["import {useMachine} from '@xstate/react/fsm';\nimport {createMachine, assign, StateMachine} from '@xstate/fsm';\nimport {\n Cart,\n CartMachineActionEvent,\n CartMachineActions,\n CartMachineContext,\n CartMachineEvent,\n CartMachineFetchResultEvent,\n CartMachineTypeState,\n} from './cart-types.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {useCartActions} from './useCartActions.js';\nimport {useMemo} from 'react';\nimport {InitEvent} from '@xstate/fsm/lib/types.js';\nimport {\n CountryCode,\n Cart as CartType,\n LanguageCode,\n} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nfunction invokeCart(\n action: keyof CartMachineActions,\n options?: {\n entryActions?: [keyof CartMachineActions];\n resolveTarget?: CartMachineTypeState['value'];\n errorTarget?: CartMachineTypeState['value'];\n exitActions?: [keyof CartMachineActions];\n },\n): StateMachine.Config<CartMachineContext, CartMachineEvent>['states']['on'] {\n return {\n entry: [\n ...(options?.entryActions || []),\n assign({\n lastValidCart: (context) => context?.cart,\n }),\n 'onCartActionEntry',\n 'onCartActionOptimisticUI',\n action,\n ],\n on: {\n RESOLVE: {\n target: options?.resolveTarget || 'idle',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (_, event) => event?.payload?.cart,\n rawCartResult: (_, event) => event?.payload?.rawCartResult,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n ],\n },\n ERROR: {\n target: options?.errorTarget || 'error',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (context) => context?.lastValidCart,\n errors: (_, event) => event?.payload?.errors,\n }),\n ],\n },\n CART_COMPLETED: {\n target: 'cartCompleted',\n actions: assign({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n prevCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n lastValidCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rawCartResult: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n },\n },\n exit: ['onCartActionComplete', ...(options?.exitActions || [])],\n };\n}\n\nconst INITIALIZING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['uninitialized']['on'] = {\n CART_FETCH: {\n target: 'cartFetching',\n },\n CART_CREATE: {\n target: 'cartCreating',\n },\n CART_SET: {\n target: 'idle',\n actions: [\n assign({\n rawCartResult: (_, event) => event.payload.cart,\n cart: (_, event) => cartFromGraphQL(event.payload.cart),\n }),\n ],\n },\n};\n\nconst UPDATING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['idle']['on'] = {\n CARTLINE_ADD: {\n target: 'cartLineAdding',\n },\n CARTLINE_UPDATE: {\n target: 'cartLineUpdating',\n },\n CARTLINE_REMOVE: {\n target: 'cartLineRemoving',\n },\n NOTE_UPDATE: {\n target: 'noteUpdating',\n },\n BUYER_IDENTITY_UPDATE: {\n target: 'buyerIdentityUpdating',\n },\n CART_ATTRIBUTES_UPDATE: {\n target: 'cartAttributesUpdating',\n },\n DISCOUNT_CODES_UPDATE: {\n target: 'discountCodesUpdating',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction createCartMachine(\n initialCart?: PartialDeep<CartType, {recurseIntoArrays: true}>,\n) {\n return createMachine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n >({\n id: 'Cart',\n initial: initialCart ? 'idle' : 'uninitialized',\n context: {\n cart: initialCart && cartFromGraphQL(initialCart),\n },\n states: {\n uninitialized: {\n on: INITIALIZING_CART_EVENTS,\n },\n cartCompleted: {\n on: INITIALIZING_CART_EVENTS,\n },\n initializationError: {\n on: INITIALIZING_CART_EVENTS,\n },\n idle: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n error: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n cartFetching: invokeCart('cartFetchAction', {\n errorTarget: 'initializationError',\n }),\n cartCreating: invokeCart('cartCreateAction', {\n errorTarget: 'initializationError',\n }),\n cartLineRemoving: invokeCart('cartLineRemoveAction'),\n cartLineUpdating: invokeCart('cartLineUpdateAction'),\n cartLineAdding: invokeCart('cartLineAddAction'),\n noteUpdating: invokeCart('noteUpdateAction'),\n buyerIdentityUpdating: invokeCart('buyerIdentityUpdateAction'),\n cartAttributesUpdating: invokeCart('cartAttributesUpdateAction'),\n discountCodesUpdating: invokeCart('discountCodesUpdateAction'),\n },\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartAPIStateMachine({\n numCartLines,\n onCartActionEntry,\n onCartActionOptimisticUI,\n onCartActionComplete,\n data: cart,\n cartFragment,\n countryCode,\n languageCode,\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked just before a Cart API action executes. */\n onCartActionEntry?: (\n context: CartMachineContext,\n event: CartMachineActionEvent,\n ) => void;\n /** A callback that is invoked after executing the entry actions for optimistic UI changes. */\n onCartActionOptimisticUI?: (\n context: CartMachineContext,\n event: CartMachineEvent,\n ) => Partial<CartMachineContext>;\n /** A callback that is invoked after a Cart API completes. */\n onCartActionComplete?: (\n context: CartMachineContext,\n event: CartMachineFetchResultEvent,\n ) => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/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 /** The ISO language code for i18n. */\n languageCode?: LanguageCode;\n}) {\n const {\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n } = useCartActions({\n numCartLines,\n cartFragment,\n countryCode,\n languageCode,\n });\n\n const cartMachine = useMemo(() => createCartMachine(cart), [cart]);\n\n const [state, send, service] = useMachine(cartMachine, {\n actions: {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartFetchAction: async (_, event) => {\n if (event.type !== 'CART_FETCH') return;\n\n const {data, errors} = await cartFetch(event?.payload?.cartId);\n const resultEvent = eventFromFetchResult(event, data?.cart, errors);\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartCreateAction: async (_, event) => {\n if (event.type !== 'CART_CREATE') return;\n\n const {data, errors} = await cartCreate(event?.payload);\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartCreate?.cart,\n errors,\n );\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineAddAction: async (context, event) => {\n if (event.type !== 'CARTLINE_ADD' || !context?.cart?.id) return;\n\n const {data, errors} = await cartLineAdd(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesAdd?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineUpdateAction: async (context, event) => {\n if (event.type !== 'CARTLINE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineUpdate(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineRemoveAction: async (context, event) => {\n if (event.type !== 'CARTLINE_REMOVE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineRemove(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesRemove?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n noteUpdateAction: async (context, event) => {\n if (event.type !== 'NOTE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await noteUpdate(\n context.cart.id,\n event.payload.note,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartNoteUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n buyerIdentityUpdateAction: async (context, event) => {\n if (event.type !== 'BUYER_IDENTITY_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await buyerIdentityUpdate(\n context.cart.id,\n event.payload.buyerIdentity,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartBuyerIdentityUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartAttributesUpdateAction: async (context, event) => {\n if (event.type !== 'CART_ATTRIBUTES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await cartAttributesUpdate(\n context.cart.id,\n event.payload.attributes,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartAttributesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n discountCodesUpdateAction: async (context, event) => {\n if (event.type !== 'DISCOUNT_CODES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await discountCodesUpdate(\n context.cart.id,\n event.payload.discountCodes,\n );\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartDiscountCodesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n ...(onCartActionEntry && {\n onCartActionEntry: (context, event): void => {\n if (isCartActionEvent(event)) {\n onCartActionEntry(context, event);\n }\n },\n }),\n ...(onCartActionOptimisticUI && {\n onCartActionOptimisticUI: assign((context, event) => {\n return onCartActionOptimisticUI(context, event);\n }),\n }),\n ...(onCartActionComplete && {\n onCartActionComplete: (context, event): void => {\n if (isCartFetchResultEvent(event)) {\n onCartActionComplete(context, event);\n }\n },\n }),\n } as CartMachineActions,\n });\n\n return useMemo(() => [state, send, service] as const, [state, send, service]);\n}\n\nexport function cartFromGraphQL(\n cart: PartialDeep<CartType, {recurseIntoArrays: true}>,\n): Cart {\n return {\n ...cart,\n lines: flattenConnection(cart?.lines),\n note: cart.note ?? undefined,\n };\n}\n\nfunction eventFromFetchResult(\n cartActionEvent: CartMachineActionEvent,\n cart?: PartialDeep<CartType, {recurseIntoArrays: true}> | null,\n errors?: unknown,\n): CartMachineFetchResultEvent {\n if (errors) {\n return {type: 'ERROR', payload: {errors, cartActionEvent}};\n }\n\n if (!cart) {\n return {\n type: 'CART_COMPLETED',\n payload: {\n cartActionEvent,\n },\n };\n }\n\n return {\n type: 'RESOLVE',\n payload: {\n cart: cartFromGraphQL(cart),\n rawCartResult: cart,\n cartActionEvent,\n },\n };\n}\n\nfunction isCartActionEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineActionEvent {\n return (\n event.type === 'CART_CREATE' ||\n event.type === 'CARTLINE_ADD' ||\n event.type === 'CARTLINE_UPDATE' ||\n event.type === 'CARTLINE_REMOVE' ||\n event.type === 'NOTE_UPDATE' ||\n event.type === 'BUYER_IDENTITY_UPDATE' ||\n event.type === 'CART_ATTRIBUTES_UPDATE' ||\n event.type === 'DISCOUNT_CODES_UPDATE'\n );\n}\n\nfunction isCartFetchResultEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineFetchResultEvent {\n return (\n event.type === 'RESOLVE' ||\n event.type === 'ERROR' ||\n event.type === 'CART_COMPLETED'\n );\n}\n"],"names":["assign","createMachine","useCartActions","useMemo","useMachine","flattenConnection"],"mappings":"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"}
|
|
@@ -151,7 +151,8 @@ function useCartAPIStateMachine({
|
|
|
151
151
|
onCartActionComplete,
|
|
152
152
|
data: cart,
|
|
153
153
|
cartFragment,
|
|
154
|
-
countryCode
|
|
154
|
+
countryCode,
|
|
155
|
+
languageCode
|
|
155
156
|
}) {
|
|
156
157
|
const {
|
|
157
158
|
cartFetch,
|
|
@@ -166,7 +167,8 @@ function useCartAPIStateMachine({
|
|
|
166
167
|
} = useCartActions({
|
|
167
168
|
numCartLines,
|
|
168
169
|
cartFragment,
|
|
169
|
-
countryCode
|
|
170
|
+
countryCode,
|
|
171
|
+
languageCode
|
|
170
172
|
});
|
|
171
173
|
const cartMachine = useMemo(() => createCartMachine(cart), [cart]);
|
|
172
174
|
const [state, send, service] = useMachine(cartMachine, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCartAPIStateMachine.mjs","sources":["../../src/useCartAPIStateMachine.tsx"],"sourcesContent":["import {useMachine} from '@xstate/react/fsm';\nimport {createMachine, assign, StateMachine} from '@xstate/fsm';\nimport {\n Cart,\n CartMachineActionEvent,\n CartMachineActions,\n CartMachineContext,\n CartMachineEvent,\n CartMachineFetchResultEvent,\n CartMachineTypeState,\n} from './cart-types.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {useCartActions} from './useCartActions.js';\nimport {useMemo} from 'react';\nimport {InitEvent} from '@xstate/fsm/lib/types.js';\nimport {CountryCode, Cart as CartType} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nfunction invokeCart(\n action: keyof CartMachineActions,\n options?: {\n entryActions?: [keyof CartMachineActions];\n resolveTarget?: CartMachineTypeState['value'];\n errorTarget?: CartMachineTypeState['value'];\n exitActions?: [keyof CartMachineActions];\n },\n): StateMachine.Config<CartMachineContext, CartMachineEvent>['states']['on'] {\n return {\n entry: [\n ...(options?.entryActions || []),\n assign({\n lastValidCart: (context) => context?.cart,\n }),\n 'onCartActionEntry',\n 'onCartActionOptimisticUI',\n action,\n ],\n on: {\n RESOLVE: {\n target: options?.resolveTarget || 'idle',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (_, event) => event?.payload?.cart,\n rawCartResult: (_, event) => event?.payload?.rawCartResult,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n ],\n },\n ERROR: {\n target: options?.errorTarget || 'error',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (context) => context?.lastValidCart,\n errors: (_, event) => event?.payload?.errors,\n }),\n ],\n },\n CART_COMPLETED: {\n target: 'cartCompleted',\n actions: assign({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n prevCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n lastValidCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rawCartResult: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n },\n },\n exit: ['onCartActionComplete', ...(options?.exitActions || [])],\n };\n}\n\nconst INITIALIZING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['uninitialized']['on'] = {\n CART_FETCH: {\n target: 'cartFetching',\n },\n CART_CREATE: {\n target: 'cartCreating',\n },\n CART_SET: {\n target: 'idle',\n actions: [\n assign({\n rawCartResult: (_, event) => event.payload.cart,\n cart: (_, event) => cartFromGraphQL(event.payload.cart),\n }),\n ],\n },\n};\n\nconst UPDATING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['idle']['on'] = {\n CARTLINE_ADD: {\n target: 'cartLineAdding',\n },\n CARTLINE_UPDATE: {\n target: 'cartLineUpdating',\n },\n CARTLINE_REMOVE: {\n target: 'cartLineRemoving',\n },\n NOTE_UPDATE: {\n target: 'noteUpdating',\n },\n BUYER_IDENTITY_UPDATE: {\n target: 'buyerIdentityUpdating',\n },\n CART_ATTRIBUTES_UPDATE: {\n target: 'cartAttributesUpdating',\n },\n DISCOUNT_CODES_UPDATE: {\n target: 'discountCodesUpdating',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction createCartMachine(\n initialCart?: PartialDeep<CartType, {recurseIntoArrays: true}>,\n) {\n return createMachine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n >({\n id: 'Cart',\n initial: initialCart ? 'idle' : 'uninitialized',\n context: {\n cart: initialCart && cartFromGraphQL(initialCart),\n },\n states: {\n uninitialized: {\n on: INITIALIZING_CART_EVENTS,\n },\n cartCompleted: {\n on: INITIALIZING_CART_EVENTS,\n },\n initializationError: {\n on: INITIALIZING_CART_EVENTS,\n },\n idle: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n error: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n cartFetching: invokeCart('cartFetchAction', {\n errorTarget: 'initializationError',\n }),\n cartCreating: invokeCart('cartCreateAction', {\n errorTarget: 'initializationError',\n }),\n cartLineRemoving: invokeCart('cartLineRemoveAction'),\n cartLineUpdating: invokeCart('cartLineUpdateAction'),\n cartLineAdding: invokeCart('cartLineAddAction'),\n noteUpdating: invokeCart('noteUpdateAction'),\n buyerIdentityUpdating: invokeCart('buyerIdentityUpdateAction'),\n cartAttributesUpdating: invokeCart('cartAttributesUpdateAction'),\n discountCodesUpdating: invokeCart('discountCodesUpdateAction'),\n },\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartAPIStateMachine({\n numCartLines,\n onCartActionEntry,\n onCartActionOptimisticUI,\n onCartActionComplete,\n data: cart,\n cartFragment,\n countryCode,\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked just before a Cart API action executes. */\n onCartActionEntry?: (\n context: CartMachineContext,\n event: CartMachineActionEvent,\n ) => void;\n /** A callback that is invoked after executing the entry actions for optimistic UI changes. */\n onCartActionOptimisticUI?: (\n context: CartMachineContext,\n event: CartMachineEvent,\n ) => Partial<CartMachineContext>;\n /** A callback that is invoked after a Cart API completes. */\n onCartActionComplete?: (\n context: CartMachineContext,\n event: CartMachineFetchResultEvent,\n ) => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/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 {\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n } = useCartActions({\n numCartLines,\n cartFragment,\n countryCode,\n });\n\n const cartMachine = useMemo(() => createCartMachine(cart), [cart]);\n\n const [state, send, service] = useMachine(cartMachine, {\n actions: {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartFetchAction: async (_, event) => {\n if (event.type !== 'CART_FETCH') return;\n\n const {data, errors} = await cartFetch(event?.payload?.cartId);\n const resultEvent = eventFromFetchResult(event, data?.cart, errors);\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartCreateAction: async (_, event) => {\n if (event.type !== 'CART_CREATE') return;\n\n const {data, errors} = await cartCreate(event?.payload);\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartCreate?.cart,\n errors,\n );\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineAddAction: async (context, event) => {\n if (event.type !== 'CARTLINE_ADD' || !context?.cart?.id) return;\n\n const {data, errors} = await cartLineAdd(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesAdd?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineUpdateAction: async (context, event) => {\n if (event.type !== 'CARTLINE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineUpdate(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineRemoveAction: async (context, event) => {\n if (event.type !== 'CARTLINE_REMOVE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineRemove(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesRemove?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n noteUpdateAction: async (context, event) => {\n if (event.type !== 'NOTE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await noteUpdate(\n context.cart.id,\n event.payload.note,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartNoteUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n buyerIdentityUpdateAction: async (context, event) => {\n if (event.type !== 'BUYER_IDENTITY_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await buyerIdentityUpdate(\n context.cart.id,\n event.payload.buyerIdentity,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartBuyerIdentityUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartAttributesUpdateAction: async (context, event) => {\n if (event.type !== 'CART_ATTRIBUTES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await cartAttributesUpdate(\n context.cart.id,\n event.payload.attributes,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartAttributesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n discountCodesUpdateAction: async (context, event) => {\n if (event.type !== 'DISCOUNT_CODES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await discountCodesUpdate(\n context.cart.id,\n event.payload.discountCodes,\n );\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartDiscountCodesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n ...(onCartActionEntry && {\n onCartActionEntry: (context, event): void => {\n if (isCartActionEvent(event)) {\n onCartActionEntry(context, event);\n }\n },\n }),\n ...(onCartActionOptimisticUI && {\n onCartActionOptimisticUI: assign((context, event) => {\n return onCartActionOptimisticUI(context, event);\n }),\n }),\n ...(onCartActionComplete && {\n onCartActionComplete: (context, event): void => {\n if (isCartFetchResultEvent(event)) {\n onCartActionComplete(context, event);\n }\n },\n }),\n } as CartMachineActions,\n });\n\n return useMemo(() => [state, send, service] as const, [state, send, service]);\n}\n\nexport function cartFromGraphQL(\n cart: PartialDeep<CartType, {recurseIntoArrays: true}>,\n): Cart {\n return {\n ...cart,\n lines: flattenConnection(cart?.lines),\n note: cart.note ?? undefined,\n };\n}\n\nfunction eventFromFetchResult(\n cartActionEvent: CartMachineActionEvent,\n cart?: PartialDeep<CartType, {recurseIntoArrays: true}> | null,\n errors?: unknown,\n): CartMachineFetchResultEvent {\n if (errors) {\n return {type: 'ERROR', payload: {errors, cartActionEvent}};\n }\n\n if (!cart) {\n return {\n type: 'CART_COMPLETED',\n payload: {\n cartActionEvent,\n },\n };\n }\n\n return {\n type: 'RESOLVE',\n payload: {\n cart: cartFromGraphQL(cart),\n rawCartResult: cart,\n cartActionEvent,\n },\n };\n}\n\nfunction isCartActionEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineActionEvent {\n return (\n event.type === 'CART_CREATE' ||\n event.type === 'CARTLINE_ADD' ||\n event.type === 'CARTLINE_UPDATE' ||\n event.type === 'CARTLINE_REMOVE' ||\n event.type === 'NOTE_UPDATE' ||\n event.type === 'BUYER_IDENTITY_UPDATE' ||\n event.type === 'CART_ATTRIBUTES_UPDATE' ||\n event.type === 'DISCOUNT_CODES_UPDATE'\n );\n}\n\nfunction isCartFetchResultEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineFetchResultEvent {\n return (\n event.type === 'RESOLVE' ||\n event.type === 'ERROR' ||\n event.type === 'CART_COMPLETED'\n );\n}\n"],"names":["assign","createMachine"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCartAPIStateMachine.mjs","sources":["../../src/useCartAPIStateMachine.tsx"],"sourcesContent":["import {useMachine} from '@xstate/react/fsm';\nimport {createMachine, assign, StateMachine} from '@xstate/fsm';\nimport {\n Cart,\n CartMachineActionEvent,\n CartMachineActions,\n CartMachineContext,\n CartMachineEvent,\n CartMachineFetchResultEvent,\n CartMachineTypeState,\n} from './cart-types.js';\nimport {flattenConnection} from './flatten-connection.js';\nimport {useCartActions} from './useCartActions.js';\nimport {useMemo} from 'react';\nimport {InitEvent} from '@xstate/fsm/lib/types.js';\nimport {\n CountryCode,\n Cart as CartType,\n LanguageCode,\n} from './storefront-api-types.js';\nimport type {PartialDeep} from 'type-fest';\n\nfunction invokeCart(\n action: keyof CartMachineActions,\n options?: {\n entryActions?: [keyof CartMachineActions];\n resolveTarget?: CartMachineTypeState['value'];\n errorTarget?: CartMachineTypeState['value'];\n exitActions?: [keyof CartMachineActions];\n },\n): StateMachine.Config<CartMachineContext, CartMachineEvent>['states']['on'] {\n return {\n entry: [\n ...(options?.entryActions || []),\n assign({\n lastValidCart: (context) => context?.cart,\n }),\n 'onCartActionEntry',\n 'onCartActionOptimisticUI',\n action,\n ],\n on: {\n RESOLVE: {\n target: options?.resolveTarget || 'idle',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (_, event) => event?.payload?.cart,\n rawCartResult: (_, event) => event?.payload?.rawCartResult,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n ],\n },\n ERROR: {\n target: options?.errorTarget || 'error',\n actions: [\n assign({\n prevCart: (context) => context?.lastValidCart,\n cart: (context) => context?.lastValidCart,\n errors: (_, event) => event?.payload?.errors,\n }),\n ],\n },\n CART_COMPLETED: {\n target: 'cartCompleted',\n actions: assign({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n prevCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n cart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n lastValidCart: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n rawCartResult: (_) => undefined,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n errors: (_) => undefined,\n }),\n },\n },\n exit: ['onCartActionComplete', ...(options?.exitActions || [])],\n };\n}\n\nconst INITIALIZING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['uninitialized']['on'] = {\n CART_FETCH: {\n target: 'cartFetching',\n },\n CART_CREATE: {\n target: 'cartCreating',\n },\n CART_SET: {\n target: 'idle',\n actions: [\n assign({\n rawCartResult: (_, event) => event.payload.cart,\n cart: (_, event) => cartFromGraphQL(event.payload.cart),\n }),\n ],\n },\n};\n\nconst UPDATING_CART_EVENTS: StateMachine.Machine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n>['config']['states']['idle']['on'] = {\n CARTLINE_ADD: {\n target: 'cartLineAdding',\n },\n CARTLINE_UPDATE: {\n target: 'cartLineUpdating',\n },\n CARTLINE_REMOVE: {\n target: 'cartLineRemoving',\n },\n NOTE_UPDATE: {\n target: 'noteUpdating',\n },\n BUYER_IDENTITY_UPDATE: {\n target: 'buyerIdentityUpdating',\n },\n CART_ATTRIBUTES_UPDATE: {\n target: 'cartAttributesUpdating',\n },\n DISCOUNT_CODES_UPDATE: {\n target: 'discountCodesUpdating',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nfunction createCartMachine(\n initialCart?: PartialDeep<CartType, {recurseIntoArrays: true}>,\n) {\n return createMachine<\n CartMachineContext,\n CartMachineEvent,\n CartMachineTypeState\n >({\n id: 'Cart',\n initial: initialCart ? 'idle' : 'uninitialized',\n context: {\n cart: initialCart && cartFromGraphQL(initialCart),\n },\n states: {\n uninitialized: {\n on: INITIALIZING_CART_EVENTS,\n },\n cartCompleted: {\n on: INITIALIZING_CART_EVENTS,\n },\n initializationError: {\n on: INITIALIZING_CART_EVENTS,\n },\n idle: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n error: {\n on: {...INITIALIZING_CART_EVENTS, ...UPDATING_CART_EVENTS},\n },\n cartFetching: invokeCart('cartFetchAction', {\n errorTarget: 'initializationError',\n }),\n cartCreating: invokeCart('cartCreateAction', {\n errorTarget: 'initializationError',\n }),\n cartLineRemoving: invokeCart('cartLineRemoveAction'),\n cartLineUpdating: invokeCart('cartLineUpdateAction'),\n cartLineAdding: invokeCart('cartLineAddAction'),\n noteUpdating: invokeCart('noteUpdateAction'),\n buyerIdentityUpdating: invokeCart('buyerIdentityUpdateAction'),\n cartAttributesUpdating: invokeCart('cartAttributesUpdateAction'),\n discountCodesUpdating: invokeCart('discountCodesUpdateAction'),\n },\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport function useCartAPIStateMachine({\n numCartLines,\n onCartActionEntry,\n onCartActionOptimisticUI,\n onCartActionComplete,\n data: cart,\n cartFragment,\n countryCode,\n languageCode,\n}: {\n /** Maximum number of cart lines to fetch. Defaults to 250 cart lines. */\n numCartLines?: number;\n /** A callback that is invoked just before a Cart API action executes. */\n onCartActionEntry?: (\n context: CartMachineContext,\n event: CartMachineActionEvent,\n ) => void;\n /** A callback that is invoked after executing the entry actions for optimistic UI changes. */\n onCartActionOptimisticUI?: (\n context: CartMachineContext,\n event: CartMachineEvent,\n ) => Partial<CartMachineContext>;\n /** A callback that is invoked after a Cart API completes. */\n onCartActionComplete?: (\n context: CartMachineContext,\n event: CartMachineFetchResultEvent,\n ) => void;\n /** An object with fields that correspond to the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/objects/cart). */\n data?: PartialDeep<CartType, {recurseIntoArrays: true}>;\n /** A fragment used to query the Storefront API's [Cart object](https://shopify.dev/api/storefront/2023-07/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 /** The ISO language code for i18n. */\n languageCode?: LanguageCode;\n}) {\n const {\n cartFetch,\n cartCreate,\n cartLineAdd,\n cartLineUpdate,\n cartLineRemove,\n noteUpdate,\n buyerIdentityUpdate,\n cartAttributesUpdate,\n discountCodesUpdate,\n } = useCartActions({\n numCartLines,\n cartFragment,\n countryCode,\n languageCode,\n });\n\n const cartMachine = useMemo(() => createCartMachine(cart), [cart]);\n\n const [state, send, service] = useMachine(cartMachine, {\n actions: {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartFetchAction: async (_, event) => {\n if (event.type !== 'CART_FETCH') return;\n\n const {data, errors} = await cartFetch(event?.payload?.cartId);\n const resultEvent = eventFromFetchResult(event, data?.cart, errors);\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartCreateAction: async (_, event) => {\n if (event.type !== 'CART_CREATE') return;\n\n const {data, errors} = await cartCreate(event?.payload);\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartCreate?.cart,\n errors,\n );\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineAddAction: async (context, event) => {\n if (event.type !== 'CARTLINE_ADD' || !context?.cart?.id) return;\n\n const {data, errors} = await cartLineAdd(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesAdd?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineUpdateAction: async (context, event) => {\n if (event.type !== 'CARTLINE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineUpdate(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartLineRemoveAction: async (context, event) => {\n if (event.type !== 'CARTLINE_REMOVE' || !context?.cart?.id) return;\n const {data, errors} = await cartLineRemove(\n context.cart.id,\n event.payload.lines,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartLinesRemove?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n noteUpdateAction: async (context, event) => {\n if (event.type !== 'NOTE_UPDATE' || !context?.cart?.id) return;\n const {data, errors} = await noteUpdate(\n context.cart.id,\n event.payload.note,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartNoteUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n buyerIdentityUpdateAction: async (context, event) => {\n if (event.type !== 'BUYER_IDENTITY_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await buyerIdentityUpdate(\n context.cart.id,\n event.payload.buyerIdentity,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartBuyerIdentityUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n cartAttributesUpdateAction: async (context, event) => {\n if (event.type !== 'CART_ATTRIBUTES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await cartAttributesUpdate(\n context.cart.id,\n event.payload.attributes,\n );\n\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartAttributesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n discountCodesUpdateAction: async (context, event) => {\n if (event.type !== 'DISCOUNT_CODES_UPDATE' || !context?.cart?.id)\n return;\n const {data, errors} = await discountCodesUpdate(\n context.cart.id,\n event.payload.discountCodes,\n );\n const resultEvent = eventFromFetchResult(\n event,\n data?.cartDiscountCodesUpdate?.cart,\n errors,\n );\n\n send(resultEvent);\n },\n ...(onCartActionEntry && {\n onCartActionEntry: (context, event): void => {\n if (isCartActionEvent(event)) {\n onCartActionEntry(context, event);\n }\n },\n }),\n ...(onCartActionOptimisticUI && {\n onCartActionOptimisticUI: assign((context, event) => {\n return onCartActionOptimisticUI(context, event);\n }),\n }),\n ...(onCartActionComplete && {\n onCartActionComplete: (context, event): void => {\n if (isCartFetchResultEvent(event)) {\n onCartActionComplete(context, event);\n }\n },\n }),\n } as CartMachineActions,\n });\n\n return useMemo(() => [state, send, service] as const, [state, send, service]);\n}\n\nexport function cartFromGraphQL(\n cart: PartialDeep<CartType, {recurseIntoArrays: true}>,\n): Cart {\n return {\n ...cart,\n lines: flattenConnection(cart?.lines),\n note: cart.note ?? undefined,\n };\n}\n\nfunction eventFromFetchResult(\n cartActionEvent: CartMachineActionEvent,\n cart?: PartialDeep<CartType, {recurseIntoArrays: true}> | null,\n errors?: unknown,\n): CartMachineFetchResultEvent {\n if (errors) {\n return {type: 'ERROR', payload: {errors, cartActionEvent}};\n }\n\n if (!cart) {\n return {\n type: 'CART_COMPLETED',\n payload: {\n cartActionEvent,\n },\n };\n }\n\n return {\n type: 'RESOLVE',\n payload: {\n cart: cartFromGraphQL(cart),\n rawCartResult: cart,\n cartActionEvent,\n },\n };\n}\n\nfunction isCartActionEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineActionEvent {\n return (\n event.type === 'CART_CREATE' ||\n event.type === 'CARTLINE_ADD' ||\n event.type === 'CARTLINE_UPDATE' ||\n event.type === 'CARTLINE_REMOVE' ||\n event.type === 'NOTE_UPDATE' ||\n event.type === 'BUYER_IDENTITY_UPDATE' ||\n event.type === 'CART_ATTRIBUTES_UPDATE' ||\n event.type === 'DISCOUNT_CODES_UPDATE'\n );\n}\n\nfunction isCartFetchResultEvent(\n event: CartMachineEvent | InitEvent,\n): event is CartMachineFetchResultEvent {\n return (\n event.type === 'RESOLVE' ||\n event.type === 'ERROR' ||\n event.type === 'CART_COMPLETED'\n );\n}\n"],"names":["assign","createMachine"],"mappings":";;;;;AAsBA,SAAS,WACP,QACA,SAM2E;AACpE,SAAA;AAAA,IACL,OAAO;AAAA,MACL,IAAI,mCAAS,iBAAgB,CAAC;AAAA,MAC9BA,EAAO;AAAA,QACL,eAAe,CAAC,YAAY,mCAAS;AAAA,MAAA,CACtC;AAAA,MACD;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,IAAI;AAAA,MACF,SAAS;AAAA,QACP,SAAQ,mCAAS,kBAAiB;AAAA,QAClC,SAAS;AAAA,UACPA,EAAO;AAAA,YACL,UAAU,CAAC,YAAY,mCAAS;AAAA,YAChC,MAAM,CAAC,GAAG,UAAA;;AAAU,0DAAO,YAAP,mBAAgB;AAAA;AAAA,YACpC,eAAe,CAAC,GAAG,UAAA;;AAAU,0DAAO,YAAP,mBAAgB;AAAA;AAAA;AAAA,YAE7C,QAAQ,CAAC,MAAM;AAAA,UAAA,CAChB;AAAA,QACH;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,SAAQ,mCAAS,gBAAe;AAAA,QAChC,SAAS;AAAA,UACPA,EAAO;AAAA,YACL,UAAU,CAAC,YAAY,mCAAS;AAAA,YAChC,MAAM,CAAC,YAAY,mCAAS;AAAA,YAC5B,QAAQ,CAAC,GAAG,UAAA;;AAAU,0DAAO,YAAP,mBAAgB;AAAA;AAAA,UAAA,CACvC;AAAA,QACH;AAAA,MACF;AAAA,MACA,gBAAgB;AAAA,QACd,QAAQ;AAAA,QACR,SAASA,EAAO;AAAA;AAAA,UAEd,UAAU,CAAC,MAAM;AAAA;AAAA,UAEjB,MAAM,CAAC,MAAM;AAAA;AAAA,UAEb,eAAe,CAAC,MAAM;AAAA;AAAA,UAEtB,eAAe,CAAC,MAAM;AAAA;AAAA,UAEtB,QAAQ,CAAC,MAAM;AAAA,QAAA,CAChB;AAAA,MACH;AAAA,IACF;AAAA,IACA,MAAM,CAAC,wBAAwB,IAAI,mCAAS,gBAAe,CAAA,CAAG;AAAA,EAAA;AAElE;AAEA,MAAM,2BAIyC;AAAA,EAC7C,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,MACPA,EAAO;AAAA,QACL,eAAe,CAAC,GAAG,UAAU,MAAM,QAAQ;AAAA,QAC3C,MAAM,CAAC,GAAG,UAAU,gBAAgB,MAAM,QAAQ,IAAI;AAAA,MAAA,CACvD;AAAA,IACH;AAAA,EACF;AACF;AAEA,MAAM,uBAIgC;AAAA,EACpC,cAAc;AAAA,IACZ,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,EACV;AAAA,EACA,iBAAiB;AAAA,IACf,QAAQ;AAAA,EACV;AAAA,EACA,aAAa;AAAA,IACX,QAAQ;AAAA,EACV;AAAA,EACA,uBAAuB;AAAA,IACrB,QAAQ;AAAA,EACV;AAAA,EACA,wBAAwB;AAAA,IACtB,QAAQ;AAAA,EACV;AAAA,EACA,uBAAuB;AAAA,IACrB,QAAQ;AAAA,EACV;AACF;AAGA,SAAS,kBACP,aACA;AACA,SAAOC,EAIL;AAAA,IACA,IAAI;AAAA,IACJ,SAAS,cAAc,SAAS;AAAA,IAChC,SAAS;AAAA,MACP,MAAM,eAAe,gBAAgB,WAAW;AAAA,IAClD;AAAA,IACA,QAAQ;AAAA,MACN,eAAe;AAAA,QACb,IAAI;AAAA,MACN;AAAA,MACA,eAAe;AAAA,QACb,IAAI;AAAA,MACN;AAAA,MACA,qBAAqB;AAAA,QACnB,IAAI;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACJ,IAAI,EAAC,GAAG,0BAA0B,GAAG,qBAAoB;AAAA,MAC3D;AAAA,MACA,OAAO;AAAA,QACL,IAAI,EAAC,GAAG,0BAA0B,GAAG,qBAAoB;AAAA,MAC3D;AAAA,MACA,cAAc,WAAW,mBAAmB;AAAA,QAC1C,aAAa;AAAA,MAAA,CACd;AAAA,MACD,cAAc,WAAW,oBAAoB;AAAA,QAC3C,aAAa;AAAA,MAAA,CACd;AAAA,MACD,kBAAkB,WAAW,sBAAsB;AAAA,MACnD,kBAAkB,WAAW,sBAAsB;AAAA,MACnD,gBAAgB,WAAW,mBAAmB;AAAA,MAC9C,cAAc,WAAW,kBAAkB;AAAA,MAC3C,uBAAuB,WAAW,2BAA2B;AAAA,MAC7D,wBAAwB,WAAW,4BAA4B;AAAA,MAC/D,uBAAuB,WAAW,2BAA2B;AAAA,IAC/D;AAAA,EAAA,CACD;AACH;AAGO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN;AAAA,EACA;AAAA,EACA;AACF,GA0BG;AACK,QAAA;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,MACE,eAAe;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AAEK,QAAA,cAAc,QAAQ,MAAM,kBAAkB,IAAI,GAAG,CAAC,IAAI,CAAC;AAEjE,QAAM,CAAC,OAAO,MAAM,OAAO,IAAI,WAAW,aAAa;AAAA,IACrD,SAAS;AAAA;AAAA,MAEP,iBAAiB,OAAO,GAAG,UAAU;;AACnC,YAAI,MAAM,SAAS;AAAc;AAE3B,cAAA,EAAC,MAAM,WAAU,MAAM,WAAU,oCAAO,YAAP,mBAAgB,MAAM;AAC7D,cAAM,cAAc,qBAAqB,OAAO,6BAAM,MAAM,MAAM;AAClE,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,kBAAkB,OAAO,GAAG,UAAU;;AACpC,YAAI,MAAM,SAAS;AAAe;AAElC,cAAM,EAAC,MAAM,WAAU,MAAM,WAAW,+BAAO,OAAO;AACtD,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,eAAN,mBAAkB;AAAA,UAClB;AAAA,QAAA;AAEF,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,mBAAmB,OAAO,SAAS,UAAU;;AAC3C,YAAI,MAAM,SAAS,kBAAkB,GAAC,wCAAS,SAAT,mBAAe;AAAI;AAEzD,cAAM,EAAC,MAAM,OAAM,IAAI,MAAM;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,MAAM,QAAQ;AAAA,QAAA;AAGhB,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,iBAAN,mBAAoB;AAAA,UACpB;AAAA,QAAA;AAGF,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,sBAAsB,OAAO,SAAS,UAAU;;AAC9C,YAAI,MAAM,SAAS,qBAAqB,GAAC,wCAAS,SAAT,mBAAe;AAAI;AAC5D,cAAM,EAAC,MAAM,OAAM,IAAI,MAAM;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,MAAM,QAAQ;AAAA,QAAA;AAGhB,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,oBAAN,mBAAuB;AAAA,UACvB;AAAA,QAAA;AAGF,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,sBAAsB,OAAO,SAAS,UAAU;;AAC9C,YAAI,MAAM,SAAS,qBAAqB,GAAC,wCAAS,SAAT,mBAAe;AAAI;AAC5D,cAAM,EAAC,MAAM,OAAM,IAAI,MAAM;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,MAAM,QAAQ;AAAA,QAAA;AAGhB,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,oBAAN,mBAAuB;AAAA,UACvB;AAAA,QAAA;AAGF,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,kBAAkB,OAAO,SAAS,UAAU;;AAC1C,YAAI,MAAM,SAAS,iBAAiB,GAAC,wCAAS,SAAT,mBAAe;AAAI;AACxD,cAAM,EAAC,MAAM,OAAM,IAAI,MAAM;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,MAAM,QAAQ;AAAA,QAAA;AAGhB,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,mBAAN,mBAAsB;AAAA,UACtB;AAAA,QAAA;AAGF,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,2BAA2B,OAAO,SAAS,UAAU;;AACnD,YAAI,MAAM,SAAS,2BAA2B,GAAC,wCAAS,SAAT,mBAAe;AAC5D;AACF,cAAM,EAAC,MAAM,OAAM,IAAI,MAAM;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,MAAM,QAAQ;AAAA,QAAA;AAGhB,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,4BAAN,mBAA+B;AAAA,UAC/B;AAAA,QAAA;AAGF,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,4BAA4B,OAAO,SAAS,UAAU;;AACpD,YAAI,MAAM,SAAS,4BAA4B,GAAC,wCAAS,SAAT,mBAAe;AAC7D;AACF,cAAM,EAAC,MAAM,OAAM,IAAI,MAAM;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,MAAM,QAAQ;AAAA,QAAA;AAGhB,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,yBAAN,mBAA4B;AAAA,UAC5B;AAAA,QAAA;AAGF,aAAK,WAAW;AAAA,MAClB;AAAA;AAAA,MAEA,2BAA2B,OAAO,SAAS,UAAU;;AACnD,YAAI,MAAM,SAAS,2BAA2B,GAAC,wCAAS,SAAT,mBAAe;AAC5D;AACF,cAAM,EAAC,MAAM,OAAM,IAAI,MAAM;AAAA,UAC3B,QAAQ,KAAK;AAAA,UACb,MAAM,QAAQ;AAAA,QAAA;AAEhB,cAAM,cAAc;AAAA,UAClB;AAAA,WACA,kCAAM,4BAAN,mBAA+B;AAAA,UAC/B;AAAA,QAAA;AAGF,aAAK,WAAW;AAAA,MAClB;AAAA,MACA,GAAI,qBAAqB;AAAA,QACvB,mBAAmB,CAAC,SAAS,UAAgB;AACvC,cAAA,kBAAkB,KAAK,GAAG;AAC5B,8BAAkB,SAAS,KAAK;AAAA,UAClC;AAAA,QACF;AAAA,MACF;AAAA,MACA,GAAI,4BAA4B;AAAA,QAC9B,0BAA0BD,EAAO,CAAC,SAAS,UAAU;AAC5C,iBAAA,yBAAyB,SAAS,KAAK;AAAA,QAAA,CAC/C;AAAA,MACH;AAAA,MACA,GAAI,wBAAwB;AAAA,QAC1B,sBAAsB,CAAC,SAAS,UAAgB;AAC1C,cAAA,uBAAuB,KAAK,GAAG;AACjC,iCAAqB,SAAS,KAAK;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EAAA,CACD;AAEM,SAAA,QAAQ,MAAM,CAAC,OAAO,MAAM,OAAO,GAAY,CAAC,OAAO,MAAM,OAAO,CAAC;AAC9E;AAEO,SAAS,gBACd,MACM;AACC,SAAA;AAAA,IACL,GAAG;AAAA,IACH,OAAO,kBAAkB,6BAAM,KAAK;AAAA,IACpC,MAAM,KAAK,QAAQ;AAAA,EAAA;AAEvB;AAEA,SAAS,qBACP,iBACA,MACA,QAC6B;AAC7B,MAAI,QAAQ;AACV,WAAO,EAAC,MAAM,SAAS,SAAS,EAAC,QAAQ;EAC3C;AAEA,MAAI,CAAC,MAAM;AACF,WAAA;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,QACP;AAAA,MACF;AAAA,IAAA;AAAA,EAEJ;AAEO,SAAA;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,MACP,MAAM,gBAAgB,IAAI;AAAA,MAC1B,eAAe;AAAA,MACf;AAAA,IACF;AAAA,EAAA;AAEJ;AAEA,SAAS,kBACP,OACiC;AAE/B,SAAA,MAAM,SAAS,iBACf,MAAM,SAAS,kBACf,MAAM,SAAS,qBACf,MAAM,SAAS,qBACf,MAAM,SAAS,iBACf,MAAM,SAAS,2BACf,MAAM,SAAS,4BACf,MAAM,SAAS;AAEnB;AAEA,SAAS,uBACP,OACsC;AACtC,SACE,MAAM,SAAS,aACf,MAAM,SAAS,WACf,MAAM,SAAS;AAEnB;"}
|
|
@@ -6,7 +6,8 @@ const cartHooks = require("./cart-hooks.js");
|
|
|
6
6
|
function useCartActions({
|
|
7
7
|
numCartLines,
|
|
8
8
|
cartFragment,
|
|
9
|
-
countryCode = "US"
|
|
9
|
+
countryCode = "US",
|
|
10
|
+
languageCode = "EN"
|
|
10
11
|
}) {
|
|
11
12
|
const fetchCart = cartHooks.useCartFetch();
|
|
12
13
|
const cartFetch = React.useCallback(
|
|
@@ -16,11 +17,12 @@ function useCartActions({
|
|
|
16
17
|
variables: {
|
|
17
18
|
id: cartId,
|
|
18
19
|
numCartLines,
|
|
19
|
-
country: countryCode
|
|
20
|
+
country: countryCode,
|
|
21
|
+
language: languageCode
|
|
20
22
|
}
|
|
21
23
|
});
|
|
22
24
|
},
|
|
23
|
-
[fetchCart, cartFragment, numCartLines, countryCode]
|
|
25
|
+
[fetchCart, cartFragment, numCartLines, countryCode, languageCode]
|
|
24
26
|
);
|
|
25
27
|
const cartCreate = React.useCallback(
|
|
26
28
|
(cart) => {
|
|
@@ -29,11 +31,12 @@ function useCartActions({
|
|
|
29
31
|
variables: {
|
|
30
32
|
input: cart,
|
|
31
33
|
numCartLines,
|
|
32
|
-
country: countryCode
|
|
34
|
+
country: countryCode,
|
|
35
|
+
language: languageCode
|
|
33
36
|
}
|
|
34
37
|
});
|
|
35
38
|
},
|
|
36
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
39
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
37
40
|
);
|
|
38
41
|
const cartLineAdd = React.useCallback(
|
|
39
42
|
(cartId, lines) => {
|
|
@@ -43,11 +46,12 @@ function useCartActions({
|
|
|
43
46
|
cartId,
|
|
44
47
|
lines,
|
|
45
48
|
numCartLines,
|
|
46
|
-
country: countryCode
|
|
49
|
+
country: countryCode,
|
|
50
|
+
language: languageCode
|
|
47
51
|
}
|
|
48
52
|
});
|
|
49
53
|
},
|
|
50
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
54
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
51
55
|
);
|
|
52
56
|
const cartLineUpdate = React.useCallback(
|
|
53
57
|
(cartId, lines) => {
|
|
@@ -57,11 +61,12 @@ function useCartActions({
|
|
|
57
61
|
cartId,
|
|
58
62
|
lines,
|
|
59
63
|
numCartLines,
|
|
60
|
-
country: countryCode
|
|
64
|
+
country: countryCode,
|
|
65
|
+
language: languageCode
|
|
61
66
|
}
|
|
62
67
|
});
|
|
63
68
|
},
|
|
64
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
69
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
65
70
|
);
|
|
66
71
|
const cartLineRemove = React.useCallback(
|
|
67
72
|
(cartId, lines) => {
|
|
@@ -71,11 +76,12 @@ function useCartActions({
|
|
|
71
76
|
cartId,
|
|
72
77
|
lines,
|
|
73
78
|
numCartLines,
|
|
74
|
-
country: countryCode
|
|
79
|
+
country: countryCode,
|
|
80
|
+
language: languageCode
|
|
75
81
|
}
|
|
76
82
|
});
|
|
77
83
|
},
|
|
78
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
84
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
79
85
|
);
|
|
80
86
|
const noteUpdate = React.useCallback(
|
|
81
87
|
(cartId, note) => {
|
|
@@ -85,11 +91,12 @@ function useCartActions({
|
|
|
85
91
|
cartId,
|
|
86
92
|
note,
|
|
87
93
|
numCartLines,
|
|
88
|
-
country: countryCode
|
|
94
|
+
country: countryCode,
|
|
95
|
+
language: languageCode
|
|
89
96
|
}
|
|
90
97
|
});
|
|
91
98
|
},
|
|
92
|
-
[fetchCart, cartFragment, numCartLines, countryCode]
|
|
99
|
+
[fetchCart, cartFragment, numCartLines, countryCode, languageCode]
|
|
93
100
|
);
|
|
94
101
|
const buyerIdentityUpdate = React.useCallback(
|
|
95
102
|
(cartId, buyerIdentity) => {
|
|
@@ -99,11 +106,12 @@ function useCartActions({
|
|
|
99
106
|
cartId,
|
|
100
107
|
buyerIdentity,
|
|
101
108
|
numCartLines,
|
|
102
|
-
country: countryCode
|
|
109
|
+
country: countryCode,
|
|
110
|
+
language: languageCode
|
|
103
111
|
}
|
|
104
112
|
});
|
|
105
113
|
},
|
|
106
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
114
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
107
115
|
);
|
|
108
116
|
const cartAttributesUpdate = React.useCallback(
|
|
109
117
|
(cartId, attributes) => {
|
|
@@ -113,11 +121,12 @@ function useCartActions({
|
|
|
113
121
|
cartId,
|
|
114
122
|
attributes,
|
|
115
123
|
numCartLines,
|
|
116
|
-
country: countryCode
|
|
124
|
+
country: countryCode,
|
|
125
|
+
language: languageCode
|
|
117
126
|
}
|
|
118
127
|
});
|
|
119
128
|
},
|
|
120
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
129
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
121
130
|
);
|
|
122
131
|
const discountCodesUpdate = React.useCallback(
|
|
123
132
|
(cartId, discountCodes) => {
|
|
@@ -127,11 +136,12 @@ function useCartActions({
|
|
|
127
136
|
cartId,
|
|
128
137
|
discountCodes,
|
|
129
138
|
numCartLines,
|
|
130
|
-
country: countryCode
|
|
139
|
+
country: countryCode,
|
|
140
|
+
language: languageCode
|
|
131
141
|
}
|
|
132
142
|
});
|
|
133
143
|
},
|
|
134
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
144
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
135
145
|
);
|
|
136
146
|
return React.useMemo(
|
|
137
147
|
() => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCartActions.js","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/2023-07/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}: {\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/2023-07/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":["useCartFetch","useCallback","CartQuery","CartCreate","CartLineAdd","CartLineUpdate","CartLineRemove","CartNoteUpdate","CartBuyerIdentityUpdate","CartAttributesUpdate","CartDiscountCodesUpdate","useMemo"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"useCartActions.js","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/2023-07/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/2023-07/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":["useCartFetch","useCallback","CartQuery","CartCreate","CartLineAdd","CartLineUpdate","CartLineRemove","CartNoteUpdate","CartBuyerIdentityUpdate","CartAttributesUpdate","CartDiscountCodesUpdate","useMemo"],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import { useCartFetch } from "./cart-hooks.mjs";
|
|
|
4
4
|
function useCartActions({
|
|
5
5
|
numCartLines,
|
|
6
6
|
cartFragment,
|
|
7
|
-
countryCode = "US"
|
|
7
|
+
countryCode = "US",
|
|
8
|
+
languageCode = "EN"
|
|
8
9
|
}) {
|
|
9
10
|
const fetchCart = useCartFetch();
|
|
10
11
|
const cartFetch = useCallback(
|
|
@@ -14,11 +15,12 @@ function useCartActions({
|
|
|
14
15
|
variables: {
|
|
15
16
|
id: cartId,
|
|
16
17
|
numCartLines,
|
|
17
|
-
country: countryCode
|
|
18
|
+
country: countryCode,
|
|
19
|
+
language: languageCode
|
|
18
20
|
}
|
|
19
21
|
});
|
|
20
22
|
},
|
|
21
|
-
[fetchCart, cartFragment, numCartLines, countryCode]
|
|
23
|
+
[fetchCart, cartFragment, numCartLines, countryCode, languageCode]
|
|
22
24
|
);
|
|
23
25
|
const cartCreate = useCallback(
|
|
24
26
|
(cart) => {
|
|
@@ -27,11 +29,12 @@ function useCartActions({
|
|
|
27
29
|
variables: {
|
|
28
30
|
input: cart,
|
|
29
31
|
numCartLines,
|
|
30
|
-
country: countryCode
|
|
32
|
+
country: countryCode,
|
|
33
|
+
language: languageCode
|
|
31
34
|
}
|
|
32
35
|
});
|
|
33
36
|
},
|
|
34
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
37
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
35
38
|
);
|
|
36
39
|
const cartLineAdd = useCallback(
|
|
37
40
|
(cartId, lines) => {
|
|
@@ -41,11 +44,12 @@ function useCartActions({
|
|
|
41
44
|
cartId,
|
|
42
45
|
lines,
|
|
43
46
|
numCartLines,
|
|
44
|
-
country: countryCode
|
|
47
|
+
country: countryCode,
|
|
48
|
+
language: languageCode
|
|
45
49
|
}
|
|
46
50
|
});
|
|
47
51
|
},
|
|
48
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
52
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
49
53
|
);
|
|
50
54
|
const cartLineUpdate = useCallback(
|
|
51
55
|
(cartId, lines) => {
|
|
@@ -55,11 +59,12 @@ function useCartActions({
|
|
|
55
59
|
cartId,
|
|
56
60
|
lines,
|
|
57
61
|
numCartLines,
|
|
58
|
-
country: countryCode
|
|
62
|
+
country: countryCode,
|
|
63
|
+
language: languageCode
|
|
59
64
|
}
|
|
60
65
|
});
|
|
61
66
|
},
|
|
62
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
67
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
63
68
|
);
|
|
64
69
|
const cartLineRemove = useCallback(
|
|
65
70
|
(cartId, lines) => {
|
|
@@ -69,11 +74,12 @@ function useCartActions({
|
|
|
69
74
|
cartId,
|
|
70
75
|
lines,
|
|
71
76
|
numCartLines,
|
|
72
|
-
country: countryCode
|
|
77
|
+
country: countryCode,
|
|
78
|
+
language: languageCode
|
|
73
79
|
}
|
|
74
80
|
});
|
|
75
81
|
},
|
|
76
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
82
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
77
83
|
);
|
|
78
84
|
const noteUpdate = useCallback(
|
|
79
85
|
(cartId, note) => {
|
|
@@ -83,11 +89,12 @@ function useCartActions({
|
|
|
83
89
|
cartId,
|
|
84
90
|
note,
|
|
85
91
|
numCartLines,
|
|
86
|
-
country: countryCode
|
|
92
|
+
country: countryCode,
|
|
93
|
+
language: languageCode
|
|
87
94
|
}
|
|
88
95
|
});
|
|
89
96
|
},
|
|
90
|
-
[fetchCart, cartFragment, numCartLines, countryCode]
|
|
97
|
+
[fetchCart, cartFragment, numCartLines, countryCode, languageCode]
|
|
91
98
|
);
|
|
92
99
|
const buyerIdentityUpdate = useCallback(
|
|
93
100
|
(cartId, buyerIdentity) => {
|
|
@@ -97,11 +104,12 @@ function useCartActions({
|
|
|
97
104
|
cartId,
|
|
98
105
|
buyerIdentity,
|
|
99
106
|
numCartLines,
|
|
100
|
-
country: countryCode
|
|
107
|
+
country: countryCode,
|
|
108
|
+
language: languageCode
|
|
101
109
|
}
|
|
102
110
|
});
|
|
103
111
|
},
|
|
104
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
112
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
105
113
|
);
|
|
106
114
|
const cartAttributesUpdate = useCallback(
|
|
107
115
|
(cartId, attributes) => {
|
|
@@ -111,11 +119,12 @@ function useCartActions({
|
|
|
111
119
|
cartId,
|
|
112
120
|
attributes,
|
|
113
121
|
numCartLines,
|
|
114
|
-
country: countryCode
|
|
122
|
+
country: countryCode,
|
|
123
|
+
language: languageCode
|
|
115
124
|
}
|
|
116
125
|
});
|
|
117
126
|
},
|
|
118
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
127
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
119
128
|
);
|
|
120
129
|
const discountCodesUpdate = useCallback(
|
|
121
130
|
(cartId, discountCodes) => {
|
|
@@ -125,11 +134,12 @@ function useCartActions({
|
|
|
125
134
|
cartId,
|
|
126
135
|
discountCodes,
|
|
127
136
|
numCartLines,
|
|
128
|
-
country: countryCode
|
|
137
|
+
country: countryCode,
|
|
138
|
+
language: languageCode
|
|
129
139
|
}
|
|
130
140
|
});
|
|
131
141
|
},
|
|
132
|
-
[cartFragment, countryCode, fetchCart, numCartLines]
|
|
142
|
+
[cartFragment, countryCode, fetchCart, numCartLines, languageCode]
|
|
133
143
|
);
|
|
134
144
|
return useMemo(
|
|
135
145
|
() => ({
|