{"version":3,"file":"afterpay.es.mjs","sources":["../../../src/contexts/afterpay/afterpay.tsx"],"sourcesContent":["// Dependencies\nimport * as React from 'react';\nimport type * as Square from '@square/web-sdk';\n\n// Internals\nimport { useForm } from '../form';\nimport type { AfterpayProviderProps } from './afterpay.types';\n\nexport const AfterpayContext = React.createContext<Square.AfterpayClearpay | null | undefined>(null);\n\nfunction AfterpayProvider({ children, onShippingAddressChange, onShippingOptionChange }: AfterpayProviderProps) {\n  const [afterpay, setAfterpay] = React.useState<Square.AfterpayClearpay | null>(null);\n  const { createPaymentRequest, payments } = useForm();\n\n  if (!createPaymentRequest) {\n    throw new Error('`createPaymentRequest()` is required when using digital wallets');\n  }\n\n  React.useEffect(() => {\n    const abortController = new AbortController();\n    const { signal } = abortController;\n\n    const start = async (signal: AbortSignal) => {\n      const paymentRequest = payments?.paymentRequest(createPaymentRequest);\n\n      if (!paymentRequest) {\n        throw new Error('`paymentRequest` is required when using digital wallets');\n      }\n\n      if (onShippingAddressChange) {\n        paymentRequest.addEventListener('afterpay_shippingaddresschanged', onShippingAddressChange);\n      }\n      if (onShippingOptionChange) {\n        paymentRequest.addEventListener('afterpay_shippingoptionchanged', onShippingOptionChange);\n      }\n\n      const afterpay = await payments?.afterpayClearpay(paymentRequest).then((res) => {\n        if (!signal.aborted) {\n          setAfterpay(res);\n\n          return res;\n        }\n\n        return null;\n      });\n\n      if (signal.aborted) {\n        await afterpay?.destroy();\n      }\n    };\n\n    start(signal);\n\n    return () => {\n      abortController.abort();\n    };\n  }, [createPaymentRequest, payments]);\n\n  return <AfterpayContext.Provider value={afterpay}>{children}</AfterpayContext.Provider>;\n}\n\nexport function useAfterpay() {\n  const context = React.useContext(AfterpayContext);\n\n  if (context === undefined) {\n    throw new Error('`useAfterpay()` must be used within an `<AfterpayProvider>`');\n  }\n\n  return context;\n}\n\nexport default AfterpayProvider;\n"],"names":["AfterpayContext","React","AfterpayProvider","children","onShippingAddressChange","onShippingOptionChange","afterpay","setAfterpay","createPaymentRequest","payments","useForm","abortController","signal","paymentRequest","res","useAfterpay","context"],"mappings":";;AAQa,MAAAA,IAAkBC,EAAM,cAA0D,IAAI;AAEnG,SAASC,EAAiB,EAAE,UAAAC,GAAU,yBAAAC,GAAyB,wBAAAC,KAAiD;AAC9G,QAAM,CAACC,GAAUC,CAAW,IAAIN,EAAM,SAAyC,IAAI,GAC7E,EAAE,sBAAAO,GAAsB,UAAAC,EAAS,IAAIC,EAAQ;AAEnD,MAAI,CAACF;AACG,UAAA,IAAI,MAAM,iEAAiE;AAGnF,SAAAP,EAAM,UAAU,MAAM;AACd,UAAAU,IAAkB,IAAI,mBACtB,EAAE,QAAAC,EAAW,IAAAD;AA+BnB,YA7Bc,OAAOC,MAAwB;AACrC,YAAAC,IAAiBJ,GAAU,eAAeD,CAAoB;AAEpE,UAAI,CAACK;AACG,cAAA,IAAI,MAAM,yDAAyD;AAG3E,MAAIT,KACaS,EAAA,iBAAiB,mCAAmCT,CAAuB,GAExFC,KACaQ,EAAA,iBAAiB,kCAAkCR,CAAsB;AAGpFC,YAAAA,IAAW,MAAMG,GAAU,iBAAiBI,CAAc,EAAE,KAAK,CAACC,MACjEF,EAAO,UAML,QALLL,EAAYO,CAAG,GAERA,EAIV;AAED,MAAIF,EAAO,WACT,MAAMN,GAAU;IAClB,GAGIM,CAAM,GAEL,MAAM;AACX,MAAAD,EAAgB,MAAM;AAAA,IAAA;AAAA,EACxB,GACC,CAACH,GAAsBC,CAAQ,CAAC,mCAE3BT,EAAgB,UAAhB,EAAyB,OAAOM,KAAWH,CAAS;AAC9D;AAEO,SAASY,IAAc;AACtB,QAAAC,IAAUf,EAAM,WAAWD,CAAe;AAEhD,MAAIgB,MAAY;AACR,UAAA,IAAI,MAAM,6DAA6D;AAGxE,SAAAA;AACT;"}