{"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      'onCartActionEntry',\n      'onCartActionOptimisticUI',\n      action,\n    ],\n    on: {\n      RESOLVE: {\n        target: options?.resolveTarget || 'idle',\n        actions: [\n          assign({\n            prevCart: (context) => context?.cart,\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?.cart,\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          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\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\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/latest/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/latest/objects/cart) for all queries and mutations. A default value is used if no argument is provided. */\n  cartFragment: string;\n  /** The ISO country code for i18n. */\n  countryCode?: CountryCode;\n}) {\n  const {\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      cartFetchAction: async (_, event): Promise<void> => {\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      cartCreateAction: async (_, event): Promise<void> => {\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      cartLineAddAction: async (context, event): Promise<void> => {\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      cartLineUpdateAction: async (context, event): Promise<void> => {\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      cartLineRemoveAction: async (context, event): Promise<void> => {\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      noteUpdateAction: async (context, event): Promise<void> => {\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      buyerIdentityUpdateAction: async (context, event): Promise<void> => {\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      cartAttributesUpdateAction: async (context, event): Promise<void> => {\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      discountCodesUpdateAction: async (context, event): Promise<void> => {\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) => {\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) => {\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":["invokeCart","action","options","entry","entryActions","on","RESOLVE","target","resolveTarget","actions","assign","prevCart","context","cart","_","event","payload","rawCartResult","errors","undefined","ERROR","errorTarget","lastValidCart","CART_COMPLETED","exit","exitActions","INITIALIZING_CART_EVENTS","CART_FETCH","CART_CREATE","CART_SET","cartFromGraphQL","UPDATING_CART_EVENTS","CARTLINE_ADD","CARTLINE_UPDATE","CARTLINE_REMOVE","NOTE_UPDATE","BUYER_IDENTITY_UPDATE","CART_ATTRIBUTES_UPDATE","DISCOUNT_CODES_UPDATE","createCartMachine","initialCart","createMachine","id","initial","states","uninitialized","cartCompleted","initializationError","idle","error","cartFetching","cartCreating","cartLineRemoving","cartLineUpdating","cartLineAdding","noteUpdating","buyerIdentityUpdating","cartAttributesUpdating","discountCodesUpdating","useCartAPIStateMachine","numCartLines","onCartActionEntry","onCartActionOptimisticUI","onCartActionComplete","data","cartFragment","countryCode","cartFetch","cartCreate","cartLineAdd","cartLineUpdate","cartLineRemove","noteUpdate","buyerIdentityUpdate","cartAttributesUpdate","discountCodesUpdate","useCartActions","cartMachine","useMemo","state","send","service","useMachine","cartFetchAction","type","cartId","resultEvent","eventFromFetchResult","cartCreateAction","cartLineAddAction","lines","cartLinesAdd","cartLineUpdateAction","cartLinesUpdate","cartLineRemoveAction","cartLinesRemove","noteUpdateAction","note","cartNoteUpdate","buyerIdentityUpdateAction","buyerIdentity","cartBuyerIdentityUpdate","cartAttributesUpdateAction","attributes","discountCodesUpdateAction","discountCodes","cartDiscountCodesUpdate","isCartActionEvent","isCartFetchResultEvent","flattenConnection","cartActionEvent"],"mappings":"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"}