{"version":3,"file":"form.es.mjs","sources":["../../../src/contexts/form/form.tsx"],"sourcesContent":["// Dependencies\nimport * as React from 'react';\nimport { payments } from '@square/web-sdk';\nimport type * as Square from '@square/web-sdk';\n\n// Internals\nimport { ErrorScreen } from '~/components/error-screen';\nimport { useDynamicCallback } from '~/hooks/use-dynamic-callback';\nimport type { FormContextType, FormProviderProps } from './form.types';\n\n/**\n * Internal helper that the `PaymentForm` uses to manage internal state and\n * expose access to the Web Payment SDK library.\n */\nconst FormContext = React.createContext<FormContextType>({\n  cardTokenizeResponseReceived: null as unknown as () => Promise<void>,\n  createPaymentRequest: null as unknown as Square.PaymentRequestOptions,\n  payments: null as unknown as Square.Payments,\n});\n\nfunction FormProvider({ applicationId, locationId, children, overrides, ...props }: FormProviderProps) {\n  const [instance, setInstance] = React.useState<Square.Payments>();\n  const [createPaymentRequest] = React.useState<undefined | Square.PaymentRequestOptions>(() =>\n    props.createPaymentRequest?.()\n  );\n\n  React.useEffect(() => {\n    const abortController = new AbortController();\n    const { signal } = abortController;\n\n    async function loadPayment(signal?: AbortSignal): Promise<void> {\n      await payments(applicationId, locationId, overrides).then((res) => {\n        if (res === null) {\n          throw new Error('Square Web Payments SDK failed to load');\n        }\n\n        if (signal?.aborted) {\n          return;\n        }\n\n        setInstance(res);\n\n        return res;\n      });\n    }\n\n    if (applicationId && locationId) {\n      loadPayment(signal);\n    }\n\n    return () => {\n      abortController.abort();\n    };\n  }, [applicationId, locationId]);\n\n  const cardTokenizeResponseReceived = async (rest: Square.TokenResult): Promise<void> => {\n    if (rest.status !== 'OK' || !props.createVerificationDetails) {\n      await props.cardTokenizeResponseReceived(rest);\n      return;\n    }\n\n    const verifyBuyerResults = await instance?.verifyBuyer(String(rest.token), props.createVerificationDetails());\n\n    await props.cardTokenizeResponseReceived(rest, verifyBuyerResults);\n  };\n\n  // Fixes stale closure issue with using React Hooks & SqPaymentForm callback functions\n  // https://github.com/facebook/react/issues/16956\n  const cardTokenizeResponseReceivedCallback = useDynamicCallback(cardTokenizeResponseReceived);\n\n  if (!applicationId || !locationId) {\n    return <ErrorScreen />;\n  }\n\n  if (!instance) return null;\n\n  const context: FormContextType = {\n    cardTokenizeResponseReceived: cardTokenizeResponseReceivedCallback,\n    createPaymentRequest,\n    payments: instance,\n  };\n\n  return <FormContext.Provider value={context}>{children}</FormContext.Provider>;\n}\n\nconst useForm = (): FormContextType => {\n  const context = React.useContext(FormContext);\n\n  if (context === undefined) {\n    throw new Error('useForm must be used within a FormProvider');\n  }\n\n  return context;\n};\n\nexport { FormContext, useForm };\nexport default FormProvider;\n"],"names":["FormContext","React","FormProvider","applicationId","locationId","children","overrides","props","instance","setInstance","createPaymentRequest","abortController","signal","loadPayment","payments","res","cardTokenizeResponseReceivedCallback","useDynamicCallback","rest","verifyBuyerResults","ErrorScreen","context","useForm"],"mappings":";;;;AAcM,MAAAA,IAAcC,EAAM,cAA+B;AAAA,EACvD,8BAA8B;AAAA,EAC9B,sBAAsB;AAAA,EACtB,UAAU;AACZ,CAAC;AAED,SAASC,EAAa,EAAE,eAAAC,GAAe,YAAAC,GAAY,UAAAC,GAAU,WAAAC,MAAcC,KAA4B;AACrG,QAAM,CAACC,GAAUC,CAAW,IAAIR,EAAM,SAA0B,GAC1D,CAACS,CAAoB,IAAIT,EAAM;AAAA,IAAmD,MACtFM,EAAM,uBAAuB;AAAA,EAAA;AAG/B,EAAAN,EAAM,UAAU,MAAM;AACd,UAAAU,IAAkB,IAAI,mBACtB,EAAE,QAAAC,EAAW,IAAAD;AAEnB,mBAAeE,EAAYD,GAAqC;AAC9D,YAAME,EAASX,GAAeC,GAAYE,CAAS,EAAE,KAAK,CAACS,MAAQ;AACjE,YAAIA,MAAQ;AACJ,gBAAA,IAAI,MAAM,wCAAwC;AAG1D,YAAIH,CAAAA,GAAQ;AAIZ,iBAAAH,EAAYM,CAAG,GAERA;AAAA,MAAA,CACR;AAAA,IACH;AAEA,WAAIZ,KAAiBC,KACnBS,EAAYD,CAAM,GAGb,MAAM;AACX,MAAAD,EAAgB,MAAM;AAAA,IAAA;AAAA,EACxB,GACC,CAACR,GAAeC,CAAU,CAAC;AAexB,QAAAY,IAAuCC,EAbR,OAAOC,MAA4C;AACtF,QAAIA,EAAK,WAAW,QAAQ,CAACX,EAAM,2BAA2B;AACtD,YAAAA,EAAM,6BAA6BW,CAAI;AAC7C;AAAA,IACF;AAEM,UAAAC,IAAqB,MAAMX,GAAU,YAAY,OAAOU,EAAK,KAAK,GAAGX,EAAM,0BAAA,CAA2B;AAEtG,UAAAA,EAAM,6BAA6BW,GAAMC,CAAkB;AAAA,EAAA,CAKyB;AAExF,MAAA,CAAChB,KAAiB,CAACC;AACrB,2CAAQgB,GAAY,IAAA;AAGtB,MAAI,CAACZ;AAAiB,WAAA;AAEtB,QAAMa,IAA2B;AAAA,IAC/B,8BAA8BL;AAAA,IAC9B,sBAAAN;AAAA,IACA,UAAUF;AAAA,EAAA;AAGZ,yCAAQR,EAAY,UAAZ,EAAqB,OAAOqB,KAAUhB,CAAS;AACzD;AAEA,MAAMiB,IAAU,MAAuB;AAC/B,QAAAD,IAAUpB,EAAM,WAAWD,CAAW;AAE5C,MAAIqB,MAAY;AACR,UAAA,IAAI,MAAM,4CAA4C;AAGvD,SAAAA;AACT;"}