@adyen/adyen-web 6.24.0 → 6.25.1
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/cjs/adyen.css +14 -13
- package/dist/cjs/adyen.css.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +215 -4
- package/dist/es/adyen.css +14 -13
- package/dist/es/adyen.css.map +1 -1
- package/dist/es/components/ANCV/ANCV.js +1 -1
- package/dist/es/components/ANCV/ANCV.js.map +1 -1
- package/dist/es/components/Blik/Blik.js +1 -1
- package/dist/es/components/Blik/Blik.js.map +1 -1
- package/dist/es/components/Card/components/CardInput/components/StoredCardFields.js.map +1 -1
- package/dist/es/components/Giftcard/Giftcard.js +1 -1
- package/dist/es/components/Giftcard/Giftcard.js.map +1 -1
- package/dist/es/components/Giftcard/components/GiftcardComponent.js +1 -1
- package/dist/es/components/Giftcard/components/GiftcardComponent.js.map +1 -1
- package/dist/es/components/MBWay/MBWay.js +1 -1
- package/dist/es/components/MBWay/MBWay.js.map +1 -1
- package/dist/es/components/PayByBankPix/components/Enrollment/components/PayByBankPixAwait.js.map +1 -1
- package/dist/es/components/PayTo/PayTo.js +1 -1
- package/dist/es/components/PayTo/PayTo.js.map +1 -1
- package/dist/es/components/Pix/Pix.js +1 -1
- package/dist/es/components/Pix/Pix.js.map +1 -1
- package/dist/es/components/Pix/components/PixQRDetails.js +1 -1
- package/dist/es/components/Pix/components/PixQRDetails.js.map +1 -1
- package/dist/es/components/PreAuthorizedDebitCanada/components/SettlementInfo.js +1 -1
- package/dist/es/components/PreAuthorizedDebitCanada/components/SettlementInfo.js.map +1 -1
- package/dist/es/components/UPI/UPI.js +1 -1
- package/dist/es/components/UPI/UPI.js.map +1 -1
- package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
- package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
- package/dist/es/components/internal/Await/Await.js +1 -1
- package/dist/es/components/internal/Await/Await.js.map +1 -1
- package/dist/es/components/internal/Button/Button.js.map +1 -1
- package/dist/es/components/internal/Button/CopyButton.js +2 -0
- package/dist/es/components/internal/Button/CopyButton.js.map +1 -0
- package/dist/es/components/internal/Button/CopyIconButton.js +1 -1
- package/dist/es/components/internal/Button/CopyIconButton.js.map +1 -1
- package/dist/es/components/internal/Button/stopPropagationForActionKeys.js +2 -0
- package/dist/es/components/internal/Button/stopPropagationForActionKeys.js.map +1 -0
- package/dist/es/components/internal/QRLoader/QRLoader.js +1 -1
- package/dist/es/components/internal/QRLoader/QRLoader.js.map +1 -1
- package/dist/es/components/internal/QRLoader/QRLoaderDetailsProvider.js.map +1 -1
- package/dist/es/components/internal/QRLoader/components/QRCodeCopyButton.js +1 -1
- package/dist/es/components/internal/QRLoader/components/QRCodeCopyButton.js.map +1 -1
- package/dist/es/components/internal/QRLoader/components/QRCountdown.js +1 -1
- package/dist/es/components/internal/QRLoader/components/QRCountdown.js.map +1 -1
- package/dist/es/components/internal/QRLoader/components/QRDetails.js +1 -1
- package/dist/es/components/internal/QRLoader/components/QRDetails.js.map +1 -1
- package/dist/es/components/internal/QRLoader/components/QRFinalState.js +2 -0
- package/dist/es/components/internal/QRLoader/components/QRFinalState.js.map +1 -0
- package/dist/es/components/internal/Voucher/Voucher.js +1 -1
- package/dist/es/components/internal/Voucher/Voucher.js.map +1 -1
- package/dist/es/core/ProcessResponse/PaymentAction/actionTypes.js +1 -1
- package/dist/es/core/ProcessResponse/PaymentAction/actionTypes.js.map +1 -1
- package/dist/es/core/config.js +1 -1
- package/dist/es/index.d.ts +215 -4
- package/dist/es-legacy/adyen.css +14 -13
- package/dist/es-legacy/adyen.css.map +1 -1
- package/dist/es-legacy/components/ANCV/ANCV.js +1 -1
- package/dist/es-legacy/components/ANCV/ANCV.js.map +1 -1
- package/dist/es-legacy/components/Blik/Blik.js +1 -1
- package/dist/es-legacy/components/Blik/Blik.js.map +1 -1
- package/dist/es-legacy/components/Card/components/CardInput/components/StoredCardFields.js.map +1 -1
- package/dist/es-legacy/components/Giftcard/Giftcard.js +1 -1
- package/dist/es-legacy/components/Giftcard/Giftcard.js.map +1 -1
- package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js +1 -1
- package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js.map +1 -1
- package/dist/es-legacy/components/MBWay/MBWay.js +1 -1
- package/dist/es-legacy/components/MBWay/MBWay.js.map +1 -1
- package/dist/es-legacy/components/PayByBankPix/components/Enrollment/components/PayByBankPixAwait.js.map +1 -1
- package/dist/es-legacy/components/PayTo/PayTo.js +1 -1
- package/dist/es-legacy/components/PayTo/PayTo.js.map +1 -1
- package/dist/es-legacy/components/Pix/Pix.js +1 -1
- package/dist/es-legacy/components/Pix/Pix.js.map +1 -1
- package/dist/es-legacy/components/Pix/components/PixQRDetails.js +1 -1
- package/dist/es-legacy/components/Pix/components/PixQRDetails.js.map +1 -1
- package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/SettlementInfo.js +1 -1
- package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/SettlementInfo.js.map +1 -1
- package/dist/es-legacy/components/UPI/UPI.js +1 -1
- package/dist/es-legacy/components/UPI/UPI.js.map +1 -1
- package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
- package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
- package/dist/es-legacy/components/internal/Await/Await.js +1 -1
- package/dist/es-legacy/components/internal/Await/Await.js.map +1 -1
- package/dist/es-legacy/components/internal/Button/Button.js.map +1 -1
- package/dist/es-legacy/components/internal/Button/CopyButton.js +2 -0
- package/dist/es-legacy/components/internal/Button/CopyButton.js.map +1 -0
- package/dist/es-legacy/components/internal/Button/CopyIconButton.js +1 -1
- package/dist/es-legacy/components/internal/Button/CopyIconButton.js.map +1 -1
- package/dist/es-legacy/components/internal/Button/stopPropagationForActionKeys.js +2 -0
- package/dist/es-legacy/components/internal/Button/stopPropagationForActionKeys.js.map +1 -0
- package/dist/es-legacy/components/internal/QRLoader/QRLoader.js +1 -1
- package/dist/es-legacy/components/internal/QRLoader/QRLoader.js.map +1 -1
- package/dist/es-legacy/components/internal/QRLoader/QRLoaderDetailsProvider.js.map +1 -1
- package/dist/es-legacy/components/internal/QRLoader/components/QRCodeCopyButton.js +1 -1
- package/dist/es-legacy/components/internal/QRLoader/components/QRCodeCopyButton.js.map +1 -1
- package/dist/es-legacy/components/internal/QRLoader/components/QRCountdown.js +1 -1
- package/dist/es-legacy/components/internal/QRLoader/components/QRCountdown.js.map +1 -1
- package/dist/es-legacy/components/internal/QRLoader/components/QRDetails.js +1 -1
- package/dist/es-legacy/components/internal/QRLoader/components/QRDetails.js.map +1 -1
- package/dist/es-legacy/components/internal/QRLoader/components/QRFinalState.js +2 -0
- package/dist/es-legacy/components/internal/QRLoader/components/QRFinalState.js.map +1 -0
- package/dist/es-legacy/components/internal/Voucher/Voucher.js +1 -1
- package/dist/es-legacy/components/internal/Voucher/Voucher.js.map +1 -1
- package/dist/es-legacy/core/ProcessResponse/PaymentAction/actionTypes.js +1 -1
- package/dist/es-legacy/core/ProcessResponse/PaymentAction/actionTypes.js.map +1 -1
- package/dist/es-legacy/core/config.js +1 -1
- package/package.json +6 -6
- package/styles/adyen.css +14 -13
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import o from"./components/UPIComponent/UPIComponent.js";import{CoreProvider as
|
|
1
|
+
import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import o from"./components/UPIComponent/UPIComponent.js";import{CoreProvider as r}from"../../core/Context/CoreProvider.js";import n from"../internal/Await/Await.js";import"../../external/preact/hooks/dist/hooks.js";import"../../core/Errors/AdyenCheckoutError.js";import"../../core/Errors/SRPanelContext.js";import"../internal/Button/Button.js";import s from"../internal/QRLoader/QRLoader.js";import"../internal/QRLoader/QRLoaderDetailsProvider.js";import i from"../../core/Errors/SRPanelProvider.js";import{TxVariants as p}from"../tx-variants.js";import a from"../../utils/isMobile.js";import{getQrOption as d,getVpaOption as l,getIntentOption as u}from"./constants.js";function m(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}class h extends e{formatProps(t){if(!a())return{...super.formatProps(t),defaultMode:["qrCode","vpa"].includes(t?.defaultMode)?t.defaultMode:"qrCode",apps:[],segmentedControlOptions:[d(t.i18n),l(t.i18n)]};const{i18n:e,apps:o=[]}=t;if(o.length>0){const r=["intent","vpa"].includes(t.defaultMode)?t.defaultMode:"intent";return{...super.formatProps(t),defaultMode:r,apps:o,segmentedControlOptions:[u(e),l(e)]}}return{...super.formatProps(t),defaultMode:"vpa",apps:[],segmentedControlOptions:[]}}get isValid(){return this.state.isValid}formatData(){const{virtualPaymentAddress:t,app:e}=this.state.data||{};return{paymentMethod:{type:this.paymentType,...this.paymentType===p.upi_collect&&t&&{virtualPaymentAddress:t},...this.paymentType===p.upi_intent&&e?.id&&{appId:e.id}}}}get paymentType(){return"qrCode"===this.selectedMode?p.upi_qr:"vpa"===this.selectedMode?p.upi_collect:p.upi_intent}renderContent(e,r,i){const a=!!this.props.mandate;switch(e){case"qrCode":return t(s,{...this.props,qrCodeData:this.props.qrCodeData?encodeURIComponent(this.props.qrCodeData):null,type:p.upi_qr,brandLogo:this.props.brandLogo||this.icon,onComplete:this.onComplete,introduction:this.props.i18n.get("upi.qrCodeWaitingMessage"),countdownTime:this.props.countdownTime??5,onActionHandled:this.onActionHandled,showAmount:!a});case"await":return t(n,{url:r,type:i,showCountdownTimer:!0,shouldRedirectAutomatically:!0,showAmount:!a,countdownTime:this.props.countdownTime??5,clientKey:this.props.clientKey,paymentData:this.props.paymentData,onActionHandled:this.onActionHandled,onError:this.props.onError,messageText:this.props.i18n.get("upi.vpaWaitingMessage"),awaitText:this.props.i18n.get("await.waitForConfirmation"),onComplete:this.onComplete,brandLogo:this.icon,amount:this.props.amount});default:return t(o,{ref:t=>{this.componentRef=t},payButton:this.payButton,onChange:this.setState,onUpdateMode:this.onUpdateMode,apps:this.props.apps,segmentedControlOptions:this.props.segmentedControlOptions,defaultMode:this.props.defaultMode,showPayButton:this.props.showPayButton,amount:this.props.amount,mandate:this.props.mandate})}}render(){const{type:e,url:o,paymentMethodType:n}=this.props;return t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(i,{srPanel:this.props.modules.srPanel},this.renderContent(e,o,n)))}constructor(t,e){super(t,e),m(this,"selectedMode",void 0),m(this,"onUpdateMode",t=>{this.selectedMode=t}),this.selectedMode=this.props.defaultMode}}m(h,"type",p.upi),m(h,"txVariants",[p.upi,p.upi_qr,p.upi_collect,p.upi_intent]);export{h as default};
|
|
2
2
|
//# sourceMappingURL=UPI.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UPI.js","sources":["../../../../src/components/UPI/UPI.tsx"],"sourcesContent":["import { h, RefObject } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport UPIComponent from './components/UPIComponent';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport Await from '../internal/Await';\nimport QRLoader from '../internal/QRLoader';\nimport { UPIConfiguration, UpiMode, UpiPaymentData, UpiType } from './types';\nimport SRPanelProvider from '../../core/Errors/SRPanelProvider';\nimport { TxVariants } from '../tx-variants';\nimport isMobile from '../../utils/isMobile';\nimport type { ICore } from '../../core/types';\nimport { getIntentOption, getQrOption, getVpaOption } from './constants';\n\n/**\n * For mobile:\n * We should show upi_collect and upi_intent depending on if `apps` are returned in /paymentMethods response.\n * If there is no apps, hide segmented controls.\n * The upi_collect should always be on the second tab.\n * Never show QR code.\n *\n * For non-mobile:\n * We should never show the upi_intent (ignore `apps` in /paymentMethods response)\n * The upi_qr should be on the first tab and the upi_collect should be on second tab\n */\n\nclass UPI extends UIElement<UPIConfiguration> {\n public static type = TxVariants.upi;\n public static txVariants = [TxVariants.upi, TxVariants.upi_qr, TxVariants.upi_collect, TxVariants.upi_intent];\n\n private selectedMode: UpiMode;\n\n constructor(checkout: ICore, props: UPIConfiguration) {\n super(checkout, props);\n this.selectedMode = this.props.defaultMode;\n }\n\n formatProps(props: UPIConfiguration): UPIConfiguration {\n if (!isMobile()) {\n return {\n ...super.formatProps(props),\n defaultMode: ['qrCode', 'vpa'].includes(props?.defaultMode) ? props.defaultMode : 'qrCode',\n apps: [], // For desktop, ignore the apps\n segmentedControlOptions: [getQrOption(props.i18n), getVpaOption(props.i18n)]\n };\n }\n\n const { i18n, apps = [] } = props;\n const hasIntentApps = apps.length > 0;\n if (hasIntentApps) {\n // Mobile with UPI apps\n const allowedModes: UpiMode[] = ['intent', 'vpa'];\n const defaultMode = allowedModes.includes(props.defaultMode) ? props.defaultMode : 'intent';\n return {\n ...super.formatProps(props),\n defaultMode,\n apps,\n segmentedControlOptions: [getIntentOption(i18n), getVpaOption(i18n)]\n };\n }\n\n // Mobile, but no UPI apps\n return {\n ...super.formatProps(props),\n defaultMode: 'vpa', // Only VPA is possible\n apps: [],\n segmentedControlOptions: []\n };\n }\n\n public get isValid(): boolean {\n return this.state.isValid;\n }\n\n public formatData(): UpiPaymentData {\n const { virtualPaymentAddress, app } = this.state.data || {};\n\n return {\n paymentMethod: {\n type: this.paymentType,\n ...(this.paymentType === TxVariants.upi_collect && virtualPaymentAddress && { virtualPaymentAddress }),\n ...(this.paymentType === TxVariants.upi_intent && app?.id && { appId: app.id })\n }\n };\n }\n\n get paymentType(): UpiType {\n if (this.selectedMode === 'qrCode') {\n return TxVariants.upi_qr;\n }\n if (this.selectedMode === 'vpa') {\n return TxVariants.upi_collect;\n }\n return TxVariants.upi_intent;\n }\n\n private onUpdateMode = (mode: UpiMode): void => {\n this.selectedMode = mode;\n };\n\n private renderContent(type: string, url: string, paymentMethodType: string): h.JSX.Element {\n const isAutoPay = !!this.props.mandate;\n\n switch (type) {\n case 'qrCode':\n return (\n <QRLoader\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n qrCodeData={this.props.qrCodeData ? encodeURIComponent(this.props.qrCodeData) : null}\n type={TxVariants.upi_qr}\n brandLogo={this.props.brandLogo || this.icon}\n onComplete={this.onComplete}\n introduction={this.props.i18n.get('upi.qrCodeWaitingMessage')}\n countdownTime={this.props.countdownTime ?? 5}\n onActionHandled={this.onActionHandled}\n showAmount={!isAutoPay}\n />\n );\n case 'await':\n return (\n <Await\n ref={ref => {\n this.componentRef = ref;\n }}\n url={url}\n type={paymentMethodType}\n showCountdownTimer\n shouldRedirectAutomatically\n showAmount={!isAutoPay}\n countdownTime={this.props.countdownTime ?? 5}\n clientKey={this.props.clientKey}\n paymentData={this.props.paymentData}\n onActionHandled={this.onActionHandled}\n onError={this.props.onError}\n messageText={this.props.i18n.get('upi.vpaWaitingMessage')}\n awaitText={this.props.i18n.get('await.waitForConfirmation')}\n onComplete={this.onComplete}\n brandLogo={this.icon}\n amount={this.props.amount}\n />\n );\n default:\n return (\n <UPIComponent\n ref={(ref: RefObject<typeof UPIComponent>) => {\n this.componentRef = ref;\n }}\n payButton={this.payButton}\n onChange={this.setState}\n onUpdateMode={this.onUpdateMode}\n apps={this.props.apps}\n segmentedControlOptions={this.props.segmentedControlOptions}\n defaultMode={this.props.defaultMode}\n showPayButton={this.props.showPayButton}\n amount={this.props.amount}\n mandate={this.props.mandate}\n />\n );\n }\n }\n\n public render(): h.JSX.Element {\n const { type, url, paymentMethodType } = this.props;\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <SRPanelProvider srPanel={this.props.modules.srPanel}>{this.renderContent(type, url, paymentMethodType)}</SRPanelProvider>\n </CoreProvider>\n );\n }\n}\n\nexport default UPI;\n"],"names":["UPI","UIElement","formatProps","props","isMobile","super","defaultMode","includes","apps","segmentedControlOptions","getQrOption","i18n","getVpaOption","length","getIntentOption","isValid","this","state","formatData","virtualPaymentAddress","app","data","paymentMethod","type","paymentType","TxVariants","upi_collect","upi_intent","id","appId","selectedMode","upi_qr","renderContent","url","paymentMethodType","isAutoPay","mandate","h","QRLoader","ref","componentRef","qrCodeData","encodeURIComponent","brandLogo","icon","onComplete","introduction","get","countdownTime","onActionHandled","showAmount","Await","showCountdownTimer","shouldRedirectAutomatically","clientKey","paymentData","onError","messageText","awaitText","amount","UPIComponent","payButton","onChange","setState","onUpdateMode","showPayButton","render","CoreProvider","loadingContext","resources","SRPanelProvider","srPanel","modules","constructor","checkout","_define_property","mode","upi","txVariants"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UPI.js","sources":["../../../../src/components/UPI/UPI.tsx"],"sourcesContent":["import { h, RefObject } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport UPIComponent from './components/UPIComponent';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport Await from '../internal/Await';\nimport QRLoader from '../internal/QRLoader';\nimport { UPIConfiguration, UpiMode, UpiPaymentData, UpiType } from './types';\nimport SRPanelProvider from '../../core/Errors/SRPanelProvider';\nimport { TxVariants } from '../tx-variants';\nimport isMobile from '../../utils/isMobile';\nimport type { ICore } from '../../core/types';\nimport { getIntentOption, getQrOption, getVpaOption } from './constants';\n\n/**\n * For mobile:\n * We should show upi_collect and upi_intent depending on if `apps` are returned in /paymentMethods response.\n * If there is no apps, hide segmented controls.\n * The upi_collect should always be on the second tab.\n * Never show QR code.\n *\n * For non-mobile:\n * We should never show the upi_intent (ignore `apps` in /paymentMethods response)\n * The upi_qr should be on the first tab and the upi_collect should be on second tab\n */\n\nclass UPI extends UIElement<UPIConfiguration> {\n public static type = TxVariants.upi;\n public static txVariants = [TxVariants.upi, TxVariants.upi_qr, TxVariants.upi_collect, TxVariants.upi_intent];\n\n private selectedMode: UpiMode;\n\n constructor(checkout: ICore, props: UPIConfiguration) {\n super(checkout, props);\n this.selectedMode = this.props.defaultMode;\n }\n\n formatProps(props: UPIConfiguration): UPIConfiguration {\n if (!isMobile()) {\n return {\n ...super.formatProps(props),\n defaultMode: ['qrCode', 'vpa'].includes(props?.defaultMode) ? props.defaultMode : 'qrCode',\n apps: [], // For desktop, ignore the apps\n segmentedControlOptions: [getQrOption(props.i18n), getVpaOption(props.i18n)]\n };\n }\n\n const { i18n, apps = [] } = props;\n const hasIntentApps = apps.length > 0;\n if (hasIntentApps) {\n // Mobile with UPI apps\n const allowedModes: UpiMode[] = ['intent', 'vpa'];\n const defaultMode = allowedModes.includes(props.defaultMode) ? props.defaultMode : 'intent';\n return {\n ...super.formatProps(props),\n defaultMode,\n apps,\n segmentedControlOptions: [getIntentOption(i18n), getVpaOption(i18n)]\n };\n }\n\n // Mobile, but no UPI apps\n return {\n ...super.formatProps(props),\n defaultMode: 'vpa', // Only VPA is possible\n apps: [],\n segmentedControlOptions: []\n };\n }\n\n public get isValid(): boolean {\n return this.state.isValid;\n }\n\n public formatData(): UpiPaymentData {\n const { virtualPaymentAddress, app } = this.state.data || {};\n\n return {\n paymentMethod: {\n type: this.paymentType,\n ...(this.paymentType === TxVariants.upi_collect && virtualPaymentAddress && { virtualPaymentAddress }),\n ...(this.paymentType === TxVariants.upi_intent && app?.id && { appId: app.id })\n }\n };\n }\n\n get paymentType(): UpiType {\n if (this.selectedMode === 'qrCode') {\n return TxVariants.upi_qr;\n }\n if (this.selectedMode === 'vpa') {\n return TxVariants.upi_collect;\n }\n return TxVariants.upi_intent;\n }\n\n private onUpdateMode = (mode: UpiMode): void => {\n this.selectedMode = mode;\n };\n\n private renderContent(type: string, url: string, paymentMethodType: string): h.JSX.Element {\n const isAutoPay = !!this.props.mandate;\n\n switch (type) {\n case 'qrCode':\n return (\n <QRLoader\n {...this.props}\n qrCodeData={this.props.qrCodeData ? encodeURIComponent(this.props.qrCodeData) : null}\n type={TxVariants.upi_qr}\n brandLogo={this.props.brandLogo || this.icon}\n onComplete={this.onComplete}\n introduction={this.props.i18n.get('upi.qrCodeWaitingMessage')}\n countdownTime={this.props.countdownTime ?? 5}\n onActionHandled={this.onActionHandled}\n showAmount={!isAutoPay}\n />\n );\n case 'await':\n return (\n <Await\n url={url}\n type={paymentMethodType}\n showCountdownTimer\n shouldRedirectAutomatically\n showAmount={!isAutoPay}\n countdownTime={this.props.countdownTime ?? 5}\n clientKey={this.props.clientKey}\n paymentData={this.props.paymentData}\n onActionHandled={this.onActionHandled}\n onError={this.props.onError}\n messageText={this.props.i18n.get('upi.vpaWaitingMessage')}\n awaitText={this.props.i18n.get('await.waitForConfirmation')}\n onComplete={this.onComplete}\n brandLogo={this.icon}\n amount={this.props.amount}\n />\n );\n default:\n return (\n <UPIComponent\n ref={(ref: RefObject<typeof UPIComponent>) => {\n this.componentRef = ref;\n }}\n payButton={this.payButton}\n onChange={this.setState}\n onUpdateMode={this.onUpdateMode}\n apps={this.props.apps}\n segmentedControlOptions={this.props.segmentedControlOptions}\n defaultMode={this.props.defaultMode}\n showPayButton={this.props.showPayButton}\n amount={this.props.amount}\n mandate={this.props.mandate}\n />\n );\n }\n }\n\n public render(): h.JSX.Element {\n const { type, url, paymentMethodType } = this.props;\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <SRPanelProvider srPanel={this.props.modules.srPanel}>{this.renderContent(type, url, paymentMethodType)}</SRPanelProvider>\n </CoreProvider>\n );\n }\n}\n\nexport default UPI;\n"],"names":["UPI","UIElement","formatProps","props","isMobile","super","defaultMode","includes","apps","segmentedControlOptions","getQrOption","i18n","getVpaOption","length","getIntentOption","isValid","this","state","formatData","virtualPaymentAddress","app","data","paymentMethod","type","paymentType","TxVariants","upi_collect","upi_intent","id","appId","selectedMode","upi_qr","renderContent","url","paymentMethodType","isAutoPay","mandate","h","QRLoader","qrCodeData","encodeURIComponent","brandLogo","icon","onComplete","introduction","get","countdownTime","onActionHandled","showAmount","Await","showCountdownTimer","shouldRedirectAutomatically","clientKey","paymentData","onError","messageText","awaitText","amount","UPIComponent","ref","componentRef","payButton","onChange","setState","onUpdateMode","showPayButton","render","CoreProvider","loadingContext","resources","SRPanelProvider","srPanel","modules","constructor","checkout","_define_property","mode","upi","txVariants"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as t}from"../../../external/preact/dist/preact.js";import{UIElement as
|
|
1
|
+
import{createElement as t}from"../../../external/preact/dist/preact.js";import{UIElement as o}from"../../internal/UIElement/UIElement.js";import{CoreProvider as r}from"../../../core/Context/CoreProvider.js";import"../../../external/preact/hooks/dist/hooks.js";import"../../../core/Errors/AdyenCheckoutError.js";import"../../../core/Errors/SRPanelContext.js";import"../../internal/Button/Button.js";import e from"../../internal/QRLoader/QRLoader.js";import"../../internal/QRLoader/QRLoaderDetailsProvider.js";import s from"../../internal/RedirectButton/RedirectButton.js";import n from"../../../core/Errors/SRPanelProvider.js";class i extends o{formatData(){return{paymentMethod:{type:this.type,...this.state.data}}}get isValid(){return!0}renderQRCode(){return t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(n,{srPanel:this.props.modules.srPanel},t(e,{...this.props,delay:this.props.delay,countdownTime:this.props.countdownTime,instructions:this.props.instructions,type:this.constructor.type,brandLogo:this.props.brandLogo||this.icon,onComplete:this.onComplete,onActionHandled:this.onActionHandled,brandName:this.displayName,onSubmitAnalytics:this.submitAnalytics})))}render(){return this.props.paymentData?this.renderQRCode():this.props.showPayButton?t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(s,{showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}})):null}}var a,p,l;l={qrCodeImage:"",amount:null,paymentData:null,onError:()=>{}},(p="defaultProps")in(a=i)?Object.defineProperty(a,p,{value:l,enumerable:!0,configurable:!0,writable:!0}):a[p]=l;export{i as default};
|
|
2
2
|
//# sourceMappingURL=QRLoaderContainer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QRLoaderContainer.js","sources":["../../../../../src/components/helpers/QRLoaderContainer/QRLoaderContainer.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../../internal/UIElement/UIElement';\nimport QRLoader from '../../internal/QRLoader';\nimport { CoreProvider } from '../../../core/Context/CoreProvider';\nimport RedirectButton from '../../internal/RedirectButton';\nimport SRPanelProvider from '../../../core/Errors/SRPanelProvider';\nimport { QRLoaderConfiguration } from './types';\n\nclass QRLoaderContainer<T extends QRLoaderConfiguration = QRLoaderConfiguration> extends UIElement<T> {\n // Using the generic here allow to fully extend the QRLoaderContainer (including it's props)\n protected static defaultProps = {\n qrCodeImage: '',\n amount: null,\n paymentData: null,\n onError: () => {}\n };\n\n formatData() {\n return {\n paymentMethod: {\n type: this.type,\n ...this.state.data\n }\n };\n }\n\n get isValid() {\n return true;\n }\n\n // Makes possible to extend the final QR code step\n public renderQRCode() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <SRPanelProvider srPanel={this.props.modules.srPanel}>\n <QRLoader\n
|
|
1
|
+
{"version":3,"file":"QRLoaderContainer.js","sources":["../../../../../src/components/helpers/QRLoaderContainer/QRLoaderContainer.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../../internal/UIElement/UIElement';\nimport QRLoader from '../../internal/QRLoader';\nimport { CoreProvider } from '../../../core/Context/CoreProvider';\nimport RedirectButton from '../../internal/RedirectButton';\nimport SRPanelProvider from '../../../core/Errors/SRPanelProvider';\nimport { QRLoaderConfiguration } from './types';\n\nclass QRLoaderContainer<T extends QRLoaderConfiguration = QRLoaderConfiguration> extends UIElement<T> {\n // Using the generic here allow to fully extend the QRLoaderContainer (including it's props)\n protected static defaultProps = {\n qrCodeImage: '',\n amount: null,\n paymentData: null,\n onError: () => {}\n };\n\n formatData() {\n return {\n paymentMethod: {\n type: this.type,\n ...this.state.data\n }\n };\n }\n\n get isValid() {\n return true;\n }\n\n // Makes possible to extend the final QR code step\n public renderQRCode() {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <SRPanelProvider srPanel={this.props.modules.srPanel}>\n <QRLoader\n {...this.props}\n delay={this.props.delay}\n countdownTime={this.props.countdownTime}\n instructions={this.props.instructions}\n type={this.constructor['type']}\n brandLogo={this.props.brandLogo || this.icon}\n onComplete={this.onComplete}\n onActionHandled={this.onActionHandled}\n brandName={this.displayName}\n onSubmitAnalytics={this.submitAnalytics}\n />\n </SRPanelProvider>\n </CoreProvider>\n );\n }\n\n render() {\n if (this.props.paymentData) {\n return this.renderQRCode();\n }\n\n if (this.props.showPayButton) {\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <RedirectButton\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n </CoreProvider>\n );\n }\n\n return null;\n }\n}\n\nexport default QRLoaderContainer;\n"],"names":["QRLoaderContainer","UIElement","formatData","paymentMethod","type","this","state","data","isValid","renderQRCode","h","CoreProvider","i18n","props","loadingContext","resources","SRPanelProvider","srPanel","modules","QRLoader","delay","countdownTime","instructions","constructor","brandLogo","icon","onComplete","onActionHandled","brandName","displayName","onSubmitAnalytics","submitAnalytics","render","paymentData","showPayButton","RedirectButton","name","onSubmit","submit","payButton","ref","componentRef","qrCodeImage","amount","onError","defaultProps"],"mappings":"knBAQA,MAAMA,UAAmFC,EASrFC,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMC,KAAKD,QACRC,KAAKC,MAAMC,MAG1B,CAEA,WAAIC,GACA,OAAO,CACX,CAGOC,YAAAA,GACH,OACIC,EAACC,EAAAA,CAAaC,KAAMP,KAAKQ,MAAMD,KAAME,eAAgBT,KAAKQ,MAAMC,eAAgBC,UAAWV,KAAKU,WAC5FL,EAACM,EAAAA,CAAgBC,QAASZ,KAAKQ,MAAMK,QAAQD,SACzCP,EAACS,EAAAA,IACOd,KAAKQ,MACTO,MAAOf,KAAKQ,MAAMO,MAClBC,cAAehB,KAAKQ,MAAMQ,cAC1BC,aAAcjB,KAAKQ,MAAMS,aACzBlB,KAAMC,KAAKkB,YAAY,KACvBC,UAAWnB,KAAKQ,MAAMW,WAAanB,KAAKoB,KACxCC,WAAYrB,KAAKqB,WACjBC,gBAAiBtB,KAAKsB,gBACtBC,UAAWvB,KAAKwB,YAChBC,kBAAmBzB,KAAK0B,mBAK5C,CAEAC,MAAAA,GACI,OAAI3B,KAAKQ,MAAMoB,YACJ5B,KAAKI,eAGZJ,KAAKQ,MAAMqB,cAEPxB,EAACC,EAAAA,CAAaC,KAAMP,KAAKQ,MAAMD,KAAME,eAAgBT,KAAKQ,MAAMC,eAAgBC,UAAWV,KAAKU,WAC5FL,EAACyB,EAAAA,CACGD,cAAe7B,KAAKQ,MAAMqB,cAC1BE,KAAM/B,KAAKwB,YACXQ,SAAUhC,KAAKiC,OACfC,UAAWlC,KAAKkC,UAChBC,IAAKA,IACDnC,KAAKoC,aAAeD,MAOjC,IACX,cAhEgC,CAC5BE,YAAa,GACbC,OAAQ,KACRV,YAAa,KACbW,QAAS,WAJIC,oBAFf7C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as e}from"../../../external/preact/dist/preact.js";import{useState as t,useEffect as a}from"../../../external/preact/hooks/dist/hooks.js";import o from"../../../_virtual/index.js";import r from"../../../core/Services/payment-status.js";import{processResponse as n}from"../../../core/ProcessResponse/process-response.js";import s from"../Spinner/Spinner.js";import i from"../Countdown/index.js";import c from"../Button/Button.js";import{useCoreContext as l}from"../../../core/Context/CoreProvider.js";import u from"../../../core/Errors/AdyenCheckoutError.js";import d from"../ContentSeparator/ContentSeparator.js";import m from"../../../core/Context/useImage.js";function _(_){const{i18n:p,loadingContext:y}=l(),
|
|
1
|
+
import{createElement as e}from"../../../external/preact/dist/preact.js";import{useState as t,useEffect as a}from"../../../external/preact/hooks/dist/hooks.js";import o from"../../../_virtual/index.js";import r from"../../../core/Services/payment-status.js";import{processResponse as n}from"../../../core/ProcessResponse/process-response.js";import s from"../Spinner/Spinner.js";import i from"../Countdown/index.js";import c from"../Button/Button.js";import{useCoreContext as l}from"../../../core/Context/CoreProvider.js";import u from"../../../core/Errors/AdyenCheckoutError.js";import d from"../ContentSeparator/ContentSeparator.js";import m from"../../../core/Context/useImage.js";function _(_){const{i18n:p,loadingContext:y}=l(),w=m(),[h,k]=t(!1),[f,g]=t(!1),[N,v]=t(!0),[C,T]=t(!1),[b,x]=t(_.delay),[R,j]=t(100),[E,S]=t(0),[A,D]=t(!1),[I,L]=t(null),{amount:P}=_,M=async()=>{const{paymentData:e,clientKey:t,throttleInterval:a,pollStatus:o}=_,s=o??(()=>r(e,t,y,a));return C||(_.onActionHandled?.({componentType:_.type,actionDescription:"polling-started"}),T(!0)),s().then(n).catch(({message:e,...t})=>({type:"network-error",props:{...e&&{message:p.get(e)},...t}})).then(e=>{switch(e.type){case"success":(e=>{if(e.props.payload){k(!0);const t={data:{details:{payload:e.props.payload},paymentData:_.paymentData}};return _.onComplete(t)}g(!0),_.onError(new u("ERROR","successful result, but no payload in response"))})(e);break;case"error":(e=>{if(g(!0),e.props.payload){const t={data:{details:{payload:e.props.payload},paymentData:_.paymentData}};return _.onComplete(t)}_.onError(new u("ERROR","error result with no payload in response"))})(e);break;default:v(!1)}})},O=e=>{window.location.assign(e)};a(()=>{_.shouldRedirectAutomatically&&_.url&&O(_.url)},[_.shouldRedirectAutomatically,_.url]),a(()=>(M(),()=>{clearTimeout(I)}),[]),a(()=>{if(f)return clearTimeout(I);if(h)return clearTimeout(I);if(!N){const e=async()=>{await M();const e=E+b;S(e),e>=_.throttleTime&&!A&&(x(_.throttleInterval),D(!0))};L(setTimeout(()=>{e()},b))}},[N,f,h,E]);const $=(t,a)=>e("div",{className:"adyen-checkout__await adyen-checkout__await--result"},e("img",{className:"adyen-checkout__await__icon adyen-checkout__await__icon--result",src:w({imageFolder:"components/"})(t),alt:p.get(a)}),e("p",{className:"adyen-checkout__await__subtitle adyen-checkout__await__subtitle--result"},p.get(a)));if(f)return $("error","error.subtitle.payment");if(h)return $("success","creditCard.success");if(N)return e("div",{className:"adyen-checkout__await"},_.brandLogo&&e("img",{src:_.brandLogo,alt:_.type,className:"adyen-checkout__await__brand-logo"}),e(s,{inline:!1,size:"large"}));const z=p.get("wechatpay.timetopay").split("%@");return e("div",{className:o("adyen-checkout__await",`adyen-checkout__await--${_.type}`,_.classNameModifiers.map(e=>`adyen-checkout__await--${e}`))},_.brandLogo&&e("img",{src:_.brandLogo,alt:_.type,className:"adyen-checkout__await__brand-logo"}),!(!_.showAmount||null===P?.value||!P?.currency)&&e("div",{className:"adyen-checkout__await__amount"},p.amount(P.value,P.currency)),null!=_.messageText&&e("div",{className:"adyen-checkout__await__subtitle"},_.messageText),e("div",{className:"adyen-checkout__await__indicator-holder"},e("div",{className:"adyen-checkout__await__indicator-spinner"},e(s,{inline:!1,size:"medium"})),e("div",{className:"adyen-checkout__await__indicator-text"},_.awaitText)),_.showCountdownTimer&&e("div",{className:"adyen-checkout__await__countdown-holder"},e("div",{className:"adyen-checkout__await__progress"},e("span",{className:"adyen-checkout__await__percentage",style:{width:`${R}%`}})),e("div",{className:"adyen-checkout__await__countdown"},z[0]," ",e(i,{minutesFromNow:_.countdownTime,onTick:e=>{j(e.percentage)},onCompleted:()=>{g(!0),clearTimeout(I),_.onError(new u("ERROR","Payment Expired"))}})," ",z[1])),_.url&&!_.shouldRedirectAutomatically&&e("div",{className:"adyen-checkout__await__app-link"},e(d,null),e(c,{classNameModifiers:["await"],onClick:()=>O(_.url),label:p.get("openApp")})),_.instructions&&e("div",{className:"adyen-checkout__await__instructions"},"string"==typeof _.instructions?p.get(_.instructions):_.instructions?.()),_.endSlot&&e("div",{className:"adyen-checkout__await__end-slot"},_.endSlot()))}_.defaultProps={countdownTime:15,onError:()=>{},onComplete:()=>{},delay:2e3,throttleTime:6e4,throttleInterval:1e4,showCountdownTimer:!0,classNameModifiers:[],url:null};export{_ as default};
|
|
2
2
|
//# sourceMappingURL=Await.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Await.js","sources":["../../../../../src/components/internal/Await/Await.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport classnames from 'classnames';\nimport checkPaymentStatus from '../../../core/Services/payment-status';\nimport processResponse from '../../../core/ProcessResponse';\n\nimport Spinner from '../../internal/Spinner';\nimport Countdown from '../Countdown';\nimport Button from '../Button';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport { AwaitComponentProps, StatusObject } from './types';\nimport './Await.scss';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport ContentSeparator from '../ContentSeparator';\nimport useImage from '../../../core/Context/useImage';\n\nfunction Await(props: AwaitComponentProps) {\n const { i18n, loadingContext } = useCoreContext();\n const getImage = useImage();\n const [completed, setCompleted] = useState(false);\n const [expired, setExpired] = useState(false);\n const [loading, setLoading] = useState(true);\n const [hasCalledActionHandled, setHasCalledActionHandled] = useState(false);\n const [delay, setDelay] = useState(props.delay);\n const [percentage, setPercentage] = useState(100);\n const [timePassed, setTimePassed] = useState(0);\n const [hasAdjustedTime, setHasAdjustedTime] = useState(false);\n const [storedTimeout, setStoredTimeout] = useState(null);\n const { amount } = props;\n\n const onTimeUp = (): void => {\n setExpired(true);\n clearTimeout(storedTimeout);\n props.onError(new AdyenCheckoutError('ERROR', 'Payment Expired'));\n };\n\n const onTick = (time): void => {\n setPercentage(time.percentage);\n };\n\n const onComplete = (status: StatusObject): void => {\n // Only make details call if we have a payload\n if (status.props.payload) {\n setCompleted(true);\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: props.paymentData\n }\n };\n // Send success response to onAdditionalDetails\n return props.onComplete(state, this);\n }\n\n // Show error state & call merchant defined error callback if we do not have a payload\n setExpired(true);\n props.onError(new AdyenCheckoutError('ERROR', 'successful result, but no payload in response'));\n };\n\n const onError = (status: StatusObject): void => {\n setExpired(true);\n\n // Only make details call if we have a payload\n if (status.props.payload) {\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: props.paymentData\n }\n };\n // Send error response to onAdditionalDetails\n return props.onComplete(state, this);\n }\n\n // Call merchant defined error callback if we do not have a payload\n props.onError(new AdyenCheckoutError('ERROR', 'error result with no payload in response'));\n };\n\n const checkStatus = async (): Promise<void> => {\n const { paymentData, clientKey, throttleInterval, pollStatus } = props;\n\n // If there's a custom pollStatus function, call it.\n // Otherwise, call the default one.\n const pollStatusFunction = pollStatus ?? (() => checkPaymentStatus(paymentData, clientKey, loadingContext, throttleInterval));\n\n if (!hasCalledActionHandled) {\n props.onActionHandled?.({ componentType: props.type, actionDescription: 'polling-started' });\n setHasCalledActionHandled(true);\n }\n\n return pollStatusFunction()\n .then(processResponse)\n .catch(({ message, ...response }) => ({\n type: 'network-error',\n props: {\n ...(message && { message: i18n.get(message) }),\n ...response\n }\n }))\n .then((status: StatusObject) => {\n switch (status.type) {\n case 'success':\n onComplete(status);\n break;\n\n case 'error':\n onError(status);\n break;\n\n default:\n setLoading(false);\n }\n });\n };\n\n const redirectToApp = (url): void => {\n window.location.assign(url);\n };\n\n useEffect(() => {\n if (props.shouldRedirectAutomatically && props.url) {\n redirectToApp(props.url);\n }\n }, [props.shouldRedirectAutomatically, props.url]);\n\n useEffect(() => {\n void checkStatus();\n return (): void => {\n clearTimeout(storedTimeout);\n };\n }, []);\n\n useEffect(() => {\n if (expired) return clearTimeout(storedTimeout);\n\n if (completed) return clearTimeout(storedTimeout);\n\n if (!loading) {\n // Retry until getting a complete response from the server OR it times out\n // Changes setTimeout time to new value (throttleInterval) after a certain amount of time (throttleTime) has passed\n const statusInterval = async (): Promise<void> => {\n await checkStatus();\n\n const actualTimePassed = timePassed + delay;\n // timePassed is the value that is the main \"engine\" that drives this useEffect/polling\n setTimePassed(actualTimePassed);\n\n if (actualTimePassed >= props.throttleTime && !hasAdjustedTime) {\n setDelay(props.throttleInterval);\n setHasAdjustedTime(true);\n }\n };\n\n // Create (another) interval to poll for a result\n setStoredTimeout(setTimeout(() => void statusInterval(), delay));\n }\n }, [loading, expired, completed, timePassed]);\n\n const finalState = (image, message) => (\n <div className=\"adyen-checkout__await adyen-checkout__await--result\">\n <img\n className=\"adyen-checkout__await__icon adyen-checkout__await__icon--result\"\n src={getImage({ imageFolder: 'components/' })(image)}\n alt={i18n.get(message)}\n />\n <div className=\"adyen-checkout__await__subtitle adyen-checkout__await__subtitle--result\">{i18n.get(message)}</div>\n </div>\n );\n\n if (expired) {\n return finalState('error', 'error.subtitle.payment');\n }\n\n if (completed) {\n return finalState('success', 'creditCard.success');\n }\n\n if (loading) {\n return (\n <div className=\"adyen-checkout__await\">\n {props.brandLogo && <img src={props.brandLogo} alt={props.type} className=\"adyen-checkout__await__brand-logo\" />}\n <Spinner inline={false} size=\"large\" />\n </div>\n );\n }\n\n const timeToPayString = i18n.get('wechatpay.timetopay').split('%@');\n\n return (\n <div\n className={classnames(\n 'adyen-checkout__await',\n `adyen-checkout__await--${props.type}`,\n props.classNameModifiers.map(m => `adyen-checkout__await--${m}`)\n )}\n >\n {props.brandLogo && <img src={props.brandLogo} alt={props.type} className=\"adyen-checkout__await__brand-logo\" />}\n\n {/* Everything is wrapped in !! so we evaluate the result as boolean,\n otherwise we might just print the value or object as mistake */}\n {!!(props.showAmount && amount?.value !== null && amount?.currency) && (\n <div className=\"adyen-checkout__await__amount\">{i18n.amount(amount.value, amount.currency)}</div>\n )}\n\n {props.messageText != null && <div className=\"adyen-checkout__await__subtitle\">{props.messageText}</div>}\n\n <div className=\"adyen-checkout__await__indicator-holder\">\n <div className=\"adyen-checkout__await__indicator-spinner\">\n <Spinner inline={false} size=\"medium\" />\n </div>\n <div className=\"adyen-checkout__await__indicator-text\">{props.awaitText}</div>\n </div>\n\n {props.showCountdownTimer && (\n <div className=\"adyen-checkout__await__countdown-holder\">\n <div className=\"adyen-checkout__await__progress\">\n <span className=\"adyen-checkout__await__percentage\" style={{ width: `${percentage}%` }} />\n </div>\n\n <div className=\"adyen-checkout__await__countdown\">\n {timeToPayString[0]} \n <Countdown minutesFromNow={props.countdownTime} onTick={onTick} onCompleted={onTimeUp} />\n {timeToPayString[1]}\n </div>\n </div>\n )}\n\n {props.url && !props.shouldRedirectAutomatically && (\n <div className=\"adyen-checkout__await__app-link\">\n <ContentSeparator />\n <Button classNameModifiers={['await']} onClick={() => redirectToApp(props.url)} label={i18n.get('openApp')} />\n </div>\n )}\n\n {props.instructions && (\n <div className=\"adyen-checkout__await__instructions\">\n {typeof props.instructions === 'string' ? i18n.get(props.instructions) : props.instructions?.()}\n </div>\n )}\n\n {props.endSlot && <div className=\"adyen-checkout__await__end-slot\">{props.endSlot()}</div>}\n </div>\n );\n}\n\nAwait.defaultProps = {\n countdownTime: 15,\n onError: () => {},\n onComplete: () => {},\n delay: 2000,\n throttleTime: 60000,\n throttleInterval: 10000,\n showCountdownTimer: true,\n classNameModifiers: [],\n url: null\n};\n\nexport default Await;\n"],"names":["Await","props","i18n","loadingContext","useCoreContext","getImage","useImage","completed","setCompleted","useState","expired","setExpired","loading","setLoading","hasCalledActionHandled","setHasCalledActionHandled","delay","setDelay","percentage","setPercentage","timePassed","setTimePassed","hasAdjustedTime","setHasAdjustedTime","storedTimeout","setStoredTimeout","amount","onComplete","status","payload","state","data","details","paymentData","this","onError","AdyenCheckoutError","checkStatus","async","clientKey","throttleInterval","pollStatus","pollStatusFunction","checkPaymentStatus","onActionHandled","componentType","type","actionDescription","then","processResponse","catch","message","response","get","redirectToApp","url","window","location","assign","useEffect","shouldRedirectAutomatically","clearTimeout","statusInterval","actualTimePassed","throttleTime","setTimeout","finalState","image","h","div","className","img","src","imageFolder","alt","brandLogo","Spinner","inline","size","timeToPayString","split","classnames","classNameModifiers","map","m","showAmount","value","currency","messageText","awaitText","showCountdownTimer","span","style","width","Countdown","minutesFromNow","countdownTime","onTick","time","onCompleted","ContentSeparator","Button","onClick","label","instructions","endSlot","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Await.js","sources":["../../../../../src/components/internal/Await/Await.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useState, useEffect } from 'preact/hooks';\nimport classnames from 'classnames';\nimport checkPaymentStatus from '../../../core/Services/payment-status';\nimport processResponse from '../../../core/ProcessResponse';\nimport Spinner from '../../internal/Spinner';\nimport Countdown from '../Countdown';\nimport Button from '../Button';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport { AwaitComponentProps, StatusObject } from './types';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport ContentSeparator from '../ContentSeparator';\nimport useImage from '../../../core/Context/useImage';\nimport { CountdownTime } from '../Countdown/types';\nimport './Await.scss';\n\nfunction Await(props: AwaitComponentProps) {\n const { i18n, loadingContext } = useCoreContext();\n const getImage = useImage();\n const [completed, setCompleted] = useState(false);\n const [expired, setExpired] = useState(false);\n const [loading, setLoading] = useState(true);\n const [hasCalledActionHandled, setHasCalledActionHandled] = useState(false);\n const [delay, setDelay] = useState(props.delay);\n const [percentage, setPercentage] = useState(100);\n const [timePassed, setTimePassed] = useState(0);\n const [hasAdjustedTime, setHasAdjustedTime] = useState(false);\n const [storedTimeout, setStoredTimeout] = useState<NodeJS.Timeout | number | null>(null);\n const { amount } = props;\n\n const onTimeUp = (): void => {\n setExpired(true);\n clearTimeout(storedTimeout);\n props.onError(new AdyenCheckoutError('ERROR', 'Payment Expired'));\n };\n\n const onTick = (time: CountdownTime): void => {\n setPercentage(time.percentage);\n };\n\n const onComplete = (status: StatusObject): void => {\n // Only make details call if we have a payload\n if (status.props.payload) {\n setCompleted(true);\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: props.paymentData\n }\n };\n // Send success response to onAdditionalDetails\n return props.onComplete(state);\n }\n\n // Show error state & call merchant defined error callback if we do not have a payload\n setExpired(true);\n props.onError(new AdyenCheckoutError('ERROR', 'successful result, but no payload in response'));\n };\n\n const onError = (status: StatusObject): void => {\n setExpired(true);\n\n // Only make details call if we have a payload\n if (status.props.payload) {\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: props.paymentData\n }\n };\n // Send error response to onAdditionalDetails\n return props.onComplete(state);\n }\n\n // Call merchant defined error callback if we do not have a payload\n props.onError(new AdyenCheckoutError('ERROR', 'error result with no payload in response'));\n };\n\n const checkStatus = async (): Promise<void> => {\n const { paymentData, clientKey, throttleInterval, pollStatus } = props;\n\n // If there's a custom pollStatus function, call it.\n // Otherwise, call the default one.\n const pollStatusFunction = pollStatus ?? (() => checkPaymentStatus(paymentData, clientKey, loadingContext, throttleInterval));\n\n if (!hasCalledActionHandled) {\n props.onActionHandled?.({ componentType: props.type, actionDescription: 'polling-started' });\n setHasCalledActionHandled(true);\n }\n\n return pollStatusFunction()\n .then(processResponse)\n .catch(({ message, ...response }) => ({\n type: 'network-error',\n props: {\n ...(message && { message: i18n.get(message) }),\n ...response\n }\n }))\n .then((status: StatusObject) => {\n switch (status.type) {\n case 'success':\n onComplete(status);\n break;\n\n case 'error':\n onError(status);\n break;\n\n default:\n setLoading(false);\n }\n });\n };\n\n const redirectToApp = (url: string): void => {\n window.location.assign(url);\n };\n\n useEffect(() => {\n if (props.shouldRedirectAutomatically && props.url) {\n redirectToApp(props.url);\n }\n }, [props.shouldRedirectAutomatically, props.url]);\n\n useEffect(() => {\n void checkStatus();\n return (): void => {\n clearTimeout(storedTimeout);\n };\n }, []);\n\n useEffect(() => {\n if (expired) return clearTimeout(storedTimeout);\n\n if (completed) return clearTimeout(storedTimeout);\n\n if (!loading) {\n // Retry until getting a complete response from the server OR it times out\n // Changes setTimeout time to new value (throttleInterval) after a certain amount of time (throttleTime) has passed\n const statusInterval = async (): Promise<void> => {\n await checkStatus();\n\n const actualTimePassed = timePassed + delay;\n // timePassed is the value that is the main \"engine\" that drives this useEffect/polling\n setTimePassed(actualTimePassed);\n\n if (actualTimePassed >= props.throttleTime && !hasAdjustedTime) {\n setDelay(props.throttleInterval);\n setHasAdjustedTime(true);\n }\n };\n\n // Create (another) interval to poll for a result\n setStoredTimeout(setTimeout(() => void statusInterval(), delay));\n }\n }, [loading, expired, completed, timePassed]);\n\n const finalState = (image: string, message: string) => (\n <div className=\"adyen-checkout__await adyen-checkout__await--result\">\n <img\n className=\"adyen-checkout__await__icon adyen-checkout__await__icon--result\"\n src={getImage({ imageFolder: 'components/' })(image)}\n alt={i18n.get(message)}\n />\n <p className=\"adyen-checkout__await__subtitle adyen-checkout__await__subtitle--result\">{i18n.get(message)}</p>\n </div>\n );\n\n if (expired) {\n return finalState('error', 'error.subtitle.payment');\n }\n\n if (completed) {\n return finalState('success', 'creditCard.success');\n }\n\n if (loading) {\n return (\n <div className=\"adyen-checkout__await\">\n {props.brandLogo && <img src={props.brandLogo} alt={props.type} className=\"adyen-checkout__await__brand-logo\" />}\n <Spinner inline={false} size=\"large\" />\n </div>\n );\n }\n\n const timeToPayString = i18n.get('wechatpay.timetopay').split('%@');\n\n return (\n <div\n className={classnames(\n 'adyen-checkout__await',\n `adyen-checkout__await--${props.type}`,\n props.classNameModifiers.map(m => `adyen-checkout__await--${m}`)\n )}\n >\n {props.brandLogo && <img src={props.brandLogo} alt={props.type} className=\"adyen-checkout__await__brand-logo\" />}\n\n {/* Everything is wrapped in !! so we evaluate the result as boolean,\n otherwise we might just print the value or object as mistake */}\n {!!(props.showAmount && amount?.value !== null && amount?.currency) && (\n <div className=\"adyen-checkout__await__amount\">{i18n.amount(amount.value, amount.currency)}</div>\n )}\n\n {props.messageText != null && <div className=\"adyen-checkout__await__subtitle\">{props.messageText}</div>}\n\n <div className=\"adyen-checkout__await__indicator-holder\">\n <div className=\"adyen-checkout__await__indicator-spinner\">\n <Spinner inline={false} size=\"medium\" />\n </div>\n <div className=\"adyen-checkout__await__indicator-text\">{props.awaitText}</div>\n </div>\n\n {props.showCountdownTimer && (\n <div className=\"adyen-checkout__await__countdown-holder\">\n <div className=\"adyen-checkout__await__progress\">\n <span className=\"adyen-checkout__await__percentage\" style={{ width: `${percentage}%` }} />\n </div>\n\n <div className=\"adyen-checkout__await__countdown\">\n {timeToPayString[0]} \n <Countdown minutesFromNow={props.countdownTime} onTick={onTick} onCompleted={onTimeUp} />\n {timeToPayString[1]}\n </div>\n </div>\n )}\n\n {props.url && !props.shouldRedirectAutomatically && (\n <div className=\"adyen-checkout__await__app-link\">\n <ContentSeparator />\n <Button classNameModifiers={['await']} onClick={() => redirectToApp(props.url)} label={i18n.get('openApp')} />\n </div>\n )}\n\n {props.instructions && (\n <div className=\"adyen-checkout__await__instructions\">\n {typeof props.instructions === 'string' ? i18n.get(props.instructions) : props.instructions?.()}\n </div>\n )}\n\n {props.endSlot && <div className=\"adyen-checkout__await__end-slot\">{props.endSlot()}</div>}\n </div>\n );\n}\n\nAwait.defaultProps = {\n countdownTime: 15,\n onError: () => {},\n onComplete: () => {},\n delay: 2000,\n throttleTime: 60000,\n throttleInterval: 10000,\n showCountdownTimer: true,\n classNameModifiers: [],\n url: null\n};\n\nexport default Await;\n"],"names":["Await","props","i18n","loadingContext","useCoreContext","getImage","useImage","completed","setCompleted","useState","expired","setExpired","loading","setLoading","hasCalledActionHandled","setHasCalledActionHandled","delay","setDelay","percentage","setPercentage","timePassed","setTimePassed","hasAdjustedTime","setHasAdjustedTime","storedTimeout","setStoredTimeout","amount","checkStatus","async","paymentData","clientKey","throttleInterval","pollStatus","pollStatusFunction","checkPaymentStatus","onActionHandled","componentType","type","actionDescription","then","processResponse","catch","message","response","get","status","payload","state","data","details","onComplete","onError","AdyenCheckoutError","redirectToApp","url","window","location","assign","useEffect","shouldRedirectAutomatically","clearTimeout","statusInterval","actualTimePassed","throttleTime","setTimeout","finalState","image","h","div","className","img","src","imageFolder","alt","p","brandLogo","Spinner","inline","size","timeToPayString","split","classnames","classNameModifiers","map","m","showAmount","value","currency","messageText","awaitText","showCountdownTimer","span","style","width","Countdown","minutesFromNow","countdownTime","onTick","time","onCompleted","ContentSeparator","Button","onClick","label","instructions","endSlot","defaultProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sources":["../../../../../src/components/internal/Button/Button.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport classNames from 'classnames';\nimport Spinner from '../Spinner';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport
|
|
1
|
+
{"version":3,"file":"Button.js","sources":["../../../../../src/components/internal/Button/Button.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport classNames from 'classnames';\nimport Spinner from '../Spinner';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport { ButtonProps, ButtonState } from './types';\nimport './Button.scss';\n\nclass Button extends Component<ButtonProps, ButtonState> {\n public static defaultProps = {\n status: 'default',\n variant: 'primary',\n disabled: false,\n label: '',\n inline: false,\n target: '_self'\n };\n\n public onClick = (e: h.JSX.TargetedMouseEvent<HTMLButtonElement>) => {\n e.preventDefault();\n\n if (!this.props.disabled) {\n this.props.onClick?.(e, { complete: this.complete });\n }\n };\n\n public complete = (delay = 1_000) => {\n this.setState({ completed: true });\n setTimeout(() => {\n this.setState({ completed: false });\n }, delay);\n };\n\n render() {\n const {\n classNameModifiers = [],\n disabled,\n href,\n icon,\n onClickCompletedIcon,\n inline,\n label,\n ariaLabel,\n ariaDescribedBy,\n status,\n variant,\n buttonRef,\n onClickCompletedLabel,\n onMouseEnter,\n onMouseLeave,\n onFocus,\n onBlur,\n onKeyDown,\n onKeyPress\n }: ButtonProps = this.props;\n const { completed } = this.state;\n const { i18n } = useCoreContext();\n\n const buttonIcon =\n onClickCompletedIcon || icon ? (\n <img\n className=\"adyen-checkout__button__icon\"\n src={this.state.completed ? (onClickCompletedIcon ?? icon) : icon}\n alt=\"\"\n aria-hidden=\"true\"\n />\n ) : (\n ''\n );\n\n const modifiers = [\n ...classNameModifiers,\n ...(variant !== 'primary' ? [variant] : []),\n ...(inline ? ['inline'] : []),\n ...(completed ? ['completed'] : []),\n ...(status === 'loading' || status === 'redirect' ? ['loading'] : [])\n ];\n\n const buttonClasses = classNames(['adyen-checkout__button', ...modifiers.map(m => `adyen-checkout__button--${m}`)]);\n\n const buttonStates = {\n loading: (\n <span className=\"adyen-checkout__button__content\">\n <Spinner size=\"medium\" inline />\n <span className={'adyen-checkout__button__text--sr-only'}>{i18n.get('loading')}</span>\n </span>\n ),\n redirect: (\n <span className=\"adyen-checkout__button__content\">\n <Spinner size=\"medium\" inline />\n {i18n.get('payButton.redirecting')}\n </span>\n ),\n default: (\n <span className=\"adyen-checkout__button__content\">\n {buttonIcon}\n <span className=\"adyen-checkout__button__text\">{this.state.completed ? (onClickCompletedLabel ?? label) : label}</span>\n </span>\n )\n };\n\n const buttonText = buttonStates[status] || buttonStates.default;\n\n if (href) {\n return (\n <a className={buttonClasses} href={href} disabled={disabled} target={this.props.target} rel={this.props.rel}>\n {buttonText}\n </a>\n );\n }\n\n return (\n <button\n ref={buttonRef}\n className={buttonClasses}\n type=\"button\"\n disabled={disabled}\n onClick={this.onClick}\n aria-label={ariaLabel}\n aria-describedby={ariaDescribedBy}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyPress={onKeyPress}\n >\n {buttonText}\n {status !== 'loading' && status !== 'redirect' && this.props.children}\n </button>\n );\n }\n}\n\nexport default Button;\n"],"names":["Button","Component","render","classNameModifiers","disabled","href","icon","onClickCompletedIcon","inline","label","ariaLabel","ariaDescribedBy","status","variant","buttonRef","onClickCompletedLabel","onMouseEnter","onMouseLeave","onFocus","onBlur","onKeyDown","onKeyPress","this","props","completed","state","i18n","useCoreContext","buttonIcon","h","img","className","src","alt","aria-hidden","modifiers","buttonClasses","classNames","map","m","buttonStates","loading","span","Spinner","size","get","redirect","default","buttonText","a","target","rel","button","ref","type","onClick","aria-label","aria-describedby","children","super","args","_define_property","e","preventDefault","complete","delay","setState","setTimeout","defaultProps"],"mappings":"qWAOA,MAAMA,UAAeC,EAyBjBC,MAAAA,GACI,MAAMC,mBACFA,EAAqB,GAAEC,SACvBA,EAAQC,KACRA,EAAIC,KACJA,EAAIC,qBACJA,EAAoBC,OACpBA,EAAMC,MACNA,EAAKC,UACLA,EAASC,gBACTA,EAAeC,OACfA,EAAMC,QACNA,EAAOC,UACPA,EAASC,sBACTA,EAAqBC,aACrBA,EAAYC,aACZA,EAAYC,QACZA,EAAOC,OACPA,EAAMC,UACNA,EAASC,WACTA,GACaC,KAAKC,OAChBC,UAAEA,GAAcF,KAAKG,OACrBC,KAAEA,GAASC,IAEXC,EACFrB,GAAwBD,EACpBuB,EAACC,MAAAA,CACGC,UAAU,+BACVC,IAAKV,KAAKG,MAAMD,UAAajB,GAAwBD,EAAQA,EAC7D2B,IAAI,GACJC,cAAY,SAGhB,GAGFC,EAAY,IACXhC,KACa,YAAZU,EAAwB,CAACA,GAAW,MACpCL,EAAS,CAAC,UAAY,MACtBgB,EAAY,CAAC,aAAe,MACjB,YAAXZ,GAAmC,aAAXA,EAAwB,CAAC,WAAa,IAGhEwB,EAAgBC,EAAW,CAAC,4BAA6BF,EAAUG,IAAIC,GAAK,2BAA2BA,OAEvGC,EAAe,CACjBC,QACIZ,EAACa,OAAAA,CAAKX,UAAU,mCACZF,EAACc,EAAAA,CAAQC,KAAK,SAASpC,QAAAA,IACvBqB,EAACa,OAAAA,CAAKX,UAAW,yCAA0CL,EAAKmB,IAAI,aAG5EC,SACIjB,EAACa,OAAAA,CAAKX,UAAU,mCACZF,EAACc,EAAAA,CAAQC,KAAK,SAASpC,QAAAA,IACtBkB,EAAKmB,IAAI,0BAGlBE,QACIlB,EAACa,OAAAA,CAAKX,UAAU,mCACXH,EACDC,EAACa,OAAAA,CAAKX,UAAU,gCAAgCT,KAAKG,MAAMD,UAAaT,GAAyBN,EAASA,KAKhHuC,EAAaR,EAAa5B,IAAW4B,EAAaO,QAExD,OAAI1C,EAEIwB,EAACoB,IAAAA,CAAElB,UAAWK,EAAe/B,KAAMA,EAAMD,SAAUA,EAAU8C,OAAQ5B,KAAKC,MAAM2B,OAAQC,IAAK7B,KAAKC,MAAM4B,KACnGH,GAMTnB,EAACuB,SAAAA,CACGC,IAAKvC,EACLiB,UAAWK,EACXkB,KAAK,SACLlD,SAAUA,EACVmD,QAASjC,KAAKiC,QACdC,aAAY9C,EACZ+C,mBAAkB9C,EAClBK,aAAcA,EACdC,aAAcA,EACdG,UAAWA,EACXF,QAASA,EACTC,OAAQA,EACRE,WAAYA,GAEX2B,EACW,YAAXpC,GAAmC,aAAXA,GAAyBU,KAAKC,MAAMmC,SAGzE,mBA3HJC,SAAAC,GAUIC,EAAAvC,KAAOiC,UAAWO,IACdA,EAAEC,iBAEGzC,KAAKC,MAAMnB,UACZkB,KAAKC,MAAMgC,UAAUO,EAAG,CAAEE,SAAU1C,KAAK0C,aAIjDH,EAAAvC,KAAO0C,WAAW,CAACC,EAAQ,OACvB3C,KAAK4C,SAAS,CAAE1C,WAAW,IAC3B2C,WAAW,KACP7C,KAAK4C,SAAS,CAAE1C,WAAW,KAC5ByC,MArBPJ,EADE7D,EACYoE,eAAe,CACzBxD,OAAQ,UACRC,QAAS,UACTT,UAAU,EACVK,MAAO,GACPD,QAAQ,EACR0C,OAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createElement as o}from"../../../external/preact/dist/preact.js";import{useCallback as t}from"../../../external/preact/hooks/dist/hooks.js";import e from"./Button.js";import{useCoreContext as r}from"../../../core/Context/CoreProvider.js";import{copyToClipboard as n}from"../../../utils/clipboard.js";import{PREFIX as i}from"../Icon/constants.js";import c from"../../../core/Context/useImage.js";import{stopPropagationForActionKeys as s}from"./stopPropagationForActionKeys.js";const a=a=>{const{i18n:m}=r(),p=c(),l=t((o,{complete:t})=>{n(a.text),t(),a.onClick?.(o)},[a.text,a.onClick]);return o(e,{...a,variant:"action",onClick:l,onKeyPress:s,onKeyDown:s,icon:a.icon??p({imageFolder:"components/"})(`${i}copy`),label:a.label??m.get("button.copy"),onClickCompletedLabel:a.copiedLabel??m.get("button.copied")})};export{a as CopyButton};
|
|
2
|
+
//# sourceMappingURL=CopyButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyButton.js","sources":["../../../../../src/components/internal/Button/CopyButton.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useCallback } from 'preact/hooks';\nimport Button from './Button';\nimport { ButtonProps } from './types';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport copyToClipboard from '../../../utils/clipboard';\nimport { PREFIX } from '../Icon/constants';\nimport useImage from '../../../core/Context/useImage';\nimport { stopPropagationForActionKeys } from './stopPropagationForActionKeys';\n\nexport interface CopyButtonProps extends Omit<ButtonProps, 'variant' | 'onClickCompletedLabel'> {\n /**\n * String that will get copied to the clipboard\n */\n text: string;\n copiedLabel?: string;\n onClick?: (e: h.JSX.TargetedMouseEvent<HTMLButtonElement>) => void;\n}\n\nconst CopyButton = (props: CopyButtonProps) => {\n const { i18n } = useCoreContext();\n const getImage = useImage();\n\n const onClick = useCallback(\n (e, { complete }) => {\n void copyToClipboard(props.text);\n complete();\n props.onClick?.(e);\n },\n [props.text, props.onClick]\n );\n\n return (\n <Button\n {...props}\n variant=\"action\"\n onClick={onClick}\n // It's ok to have both, browsers will fire only one click event for enter key pressed.\n onKeyPress={stopPropagationForActionKeys}\n onKeyDown={stopPropagationForActionKeys}\n icon={props.icon ?? getImage({ imageFolder: 'components/' })(`${PREFIX}copy`)}\n label={props.label ?? i18n.get('button.copy')}\n onClickCompletedLabel={props.copiedLabel ?? i18n.get('button.copied')}\n />\n );\n};\n\nexport { CopyButton };\n"],"names":["CopyButton","props","i18n","useCoreContext","getImage","useImage","onClick","useCallback","e","complete","copyToClipboard","text","h","Button","variant","onKeyPress","stopPropagationForActionKeys","onKeyDown","icon","imageFolder","PREFIX","label","get","onClickCompletedLabel","copiedLabel"],"mappings":"meAmBA,MAAMA,EAAcC,IAChB,MAAMC,KAAEA,GAASC,IACXC,EAAWC,IAEXC,EAAUC,EACZ,CAACC,GAAKC,eACGC,EAAgBT,EAAMU,MAC3BF,IACAR,EAAMK,UAAUE,IAEpB,CAACP,EAAMU,KAAMV,EAAMK,UAGvB,OACIM,EAACC,EAAAA,IACOZ,EACJa,QAAQ,SACRR,QAASA,EAETS,WAAYC,EACZC,UAAWD,EACXE,KAAMjB,EAAMiB,MAAQd,EAAS,CAAEe,YAAa,eAAxBf,CAAyC,GAAGgB,SAChEC,MAAOpB,EAAMoB,OAASnB,EAAKoB,IAAI,eAC/BC,sBAAuBtB,EAAMuB,aAAetB,EAAKoB,IAAI"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as o}from"../../../external/preact/dist/preact.js";import{useRef as t,useCallback as e}from"../../../external/preact/hooks/dist/hooks.js";import n from"./Button.js";import{useCoreContext as r}from"../../../core/Context/CoreProvider.js";import{copyToClipboard as
|
|
1
|
+
import{createElement as o}from"../../../external/preact/dist/preact.js";import{useRef as t,useCallback as e}from"../../../external/preact/hooks/dist/hooks.js";import n from"./Button.js";import{useCoreContext as r}from"../../../core/Context/CoreProvider.js";import{copyToClipboard as s}from"../../../utils/clipboard.js";import{SingletonTooltipProvider as i,useTooltip as a}from"../Tooltip/SingletonTooltipProvider.js";import{stopPropagationForActionKeys as p}from"./stopPropagationForActionKeys.js";const c=i=>{const{i18n:c}=r(),l=t(null),{showTooltip:C,hideTooltip:u}=a(),m=e(()=>{s(i.text),C({anchorRef:l,text:c.get("button.copied")})},[i.text,c,C]),f=e(o=>{p(o),"Escape"!==o.key&&"Escape"!==o.code||(o.stopPropagation(),u())},[u]),h=e(()=>{C({anchorRef:l,text:c.get("button.copy")})},[l,c,C]);return o(n,{...i,variant:"iconOnly",buttonRef:l,ariaLabel:i.ariaLabel??c.get("button.copy"),onMouseEnter:h,onMouseLeave:u,onFocus:h,onBlur:u,onClick:m,onKeyPress:p,onKeyDown:f},o("svg",{className:"adyen-checkout__button--iconOnly__icon",xmlns:"http://www.w3.org/2000/svg",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none"},o("path",{d:"M3.5 1.25C2.25736 1.25 1.25 2.25736 1.25 3.5V8.5C1.25 9.74264 2.25736 10.75 3.5 10.75H5.25V12.5C5.25 13.7426 6.25736 14.75 7.5 14.75H12.5C13.7426 14.75 14.75 13.7426 14.75 12.5V7.5C14.75 6.25736 13.7426 5.25 12.5 5.25H10.75V3.5C10.75 2.25736 9.74264 1.25 8.5 1.25H3.5ZM9.25 5.25H7.5C6.25736 5.25 5.25 6.25736 5.25 7.5V9.25H3.5C3.08579 9.25 2.75 8.91421 2.75 8.5V3.5C2.75 3.08579 3.08579 2.75 3.5 2.75H8.5C8.91421 2.75 9.25 3.08579 9.25 3.5V5.25ZM6.75 12.5V7.5C6.75 7.08579 7.08579 6.75 7.5 6.75H12.5C12.9142 6.75 13.25 7.08579 13.25 7.5V12.5C13.25 12.9142 12.9142 13.25 12.5 13.25H7.5C7.08579 13.25 6.75 12.9142 6.75 12.5Z"})))},l=t=>o(i,null,o(c,t));export{l as CopyIconButton};
|
|
2
2
|
//# sourceMappingURL=CopyIconButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CopyIconButton.js","sources":["../../../../../src/components/internal/Button/CopyIconButton.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useCallback, useRef } from 'preact/hooks';\nimport Button from './Button';\nimport { ButtonProps } from './types';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport copyToClipboard from '../../../utils/clipboard';\nimport { SingletonTooltipProvider, useTooltip } from '../Tooltip/SingletonTooltipProvider';\nimport './CopyIconButton.scss';\n\nexport interface CopyIconButtonProps extends ButtonProps {\n /**\n * String that will get copied to the clipboard\n */\n text: string;\n}\n\nconst CopyIconButton = (props: CopyIconButtonProps) => {\n const { i18n } = useCoreContext();\n const anchorRef = useRef<HTMLButtonElement>(null);\n const { showTooltip, hideTooltip } = useTooltip();\n\n const onClick = useCallback(() => {\n void copyToClipboard(props.text);\n showTooltip({ anchorRef, text: i18n.get('button.copied') });\n }, [props.text, i18n, showTooltip]);\n\n //
|
|
1
|
+
{"version":3,"file":"CopyIconButton.js","sources":["../../../../../src/components/internal/Button/CopyIconButton.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useCallback, useRef } from 'preact/hooks';\nimport Button from './Button';\nimport { ButtonProps } from './types';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport copyToClipboard from '../../../utils/clipboard';\nimport { SingletonTooltipProvider, useTooltip } from '../Tooltip/SingletonTooltipProvider';\nimport './CopyIconButton.scss';\nimport { stopPropagationForActionKeys } from './stopPropagationForActionKeys';\n\nexport interface CopyIconButtonProps extends ButtonProps {\n /**\n * String that will get copied to the clipboard\n */\n text: string;\n}\n\nconst CopyIconButton = (props: CopyIconButtonProps) => {\n const { i18n } = useCoreContext();\n const anchorRef = useRef<HTMLButtonElement>(null);\n const { showTooltip, hideTooltip } = useTooltip();\n\n const onClick = useCallback(() => {\n void copyToClipboard(props.text);\n showTooltip({ anchorRef, text: i18n.get('button.copied') });\n }, [props.text, i18n, showTooltip]);\n\n // We need it because onKeyPress does not trigger for Esc key\n const onKeyDown = useCallback(\n (event: KeyboardEvent) => {\n stopPropagationForActionKeys(event);\n\n if (event.key === 'Escape' || event.code === 'Escape') {\n event.stopPropagation();\n hideTooltip();\n }\n },\n [hideTooltip]\n );\n\n const handleShowTooltip = useCallback(() => {\n showTooltip({ anchorRef, text: i18n.get('button.copy') });\n }, [anchorRef, i18n, showTooltip]);\n\n return (\n <Button\n {...props}\n variant=\"iconOnly\"\n buttonRef={anchorRef}\n ariaLabel={props.ariaLabel ?? i18n.get('button.copy')}\n onMouseEnter={handleShowTooltip}\n onMouseLeave={hideTooltip}\n onFocus={handleShowTooltip}\n onBlur={hideTooltip}\n onClick={onClick}\n // It's ok to have both, browsers will fire only one click event for enter/space key pressed.\n onKeyPress={stopPropagationForActionKeys}\n onKeyDown={onKeyDown}\n >\n <svg\n className=\"adyen-checkout__button--iconOnly__icon\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path d=\"M3.5 1.25C2.25736 1.25 1.25 2.25736 1.25 3.5V8.5C1.25 9.74264 2.25736 10.75 3.5 10.75H5.25V12.5C5.25 13.7426 6.25736 14.75 7.5 14.75H12.5C13.7426 14.75 14.75 13.7426 14.75 12.5V7.5C14.75 6.25736 13.7426 5.25 12.5 5.25H10.75V3.5C10.75 2.25736 9.74264 1.25 8.5 1.25H3.5ZM9.25 5.25H7.5C6.25736 5.25 5.25 6.25736 5.25 7.5V9.25H3.5C3.08579 9.25 2.75 8.91421 2.75 8.5V3.5C2.75 3.08579 3.08579 2.75 3.5 2.75H8.5C8.91421 2.75 9.25 3.08579 9.25 3.5V5.25ZM6.75 12.5V7.5C6.75 7.08579 7.08579 6.75 7.5 6.75H12.5C12.9142 6.75 13.25 7.08579 13.25 7.5V12.5C13.25 12.9142 12.9142 13.25 12.5 13.25H7.5C7.08579 13.25 6.75 12.9142 6.75 12.5Z\" />\n </svg>\n </Button>\n );\n};\n\nconst withTooltip = (props: CopyIconButtonProps) => {\n return (\n <SingletonTooltipProvider>\n <CopyIconButton {...props} />\n </SingletonTooltipProvider>\n );\n};\n\nexport { withTooltip as CopyIconButton };\n"],"names":["CopyIconButton","props","i18n","useCoreContext","anchorRef","useRef","showTooltip","hideTooltip","useTooltip","onClick","useCallback","copyToClipboard","text","get","onKeyDown","event","stopPropagationForActionKeys","key","code","stopPropagation","handleShowTooltip","h","Button","variant","buttonRef","ariaLabel","onMouseEnter","onMouseLeave","onFocus","onBlur","onKeyPress","svg","className","xmlns","width","height","viewBox","fill","path","d","withTooltip","SingletonTooltipProvider"],"mappings":"kfAiBA,MAAMA,EAAkBC,IACpB,MAAMC,KAAEA,GAASC,IACXC,EAAYC,EAA0B,OACtCC,YAAEA,EAAWC,YAAEA,GAAgBC,IAE/BC,EAAUC,EAAY,KACnBC,EAAgBV,EAAMW,MAC3BN,EAAY,CAAEF,YAAWQ,KAAMV,EAAKW,IAAI,oBACzC,CAACZ,EAAMW,KAAMV,EAAMI,IAGhBQ,EAAYJ,EACbK,IACGC,EAA6BD,GAEX,WAAdA,EAAME,KAAmC,WAAfF,EAAMG,OAChCH,EAAMI,kBACNZ,MAGR,CAACA,IAGCa,EAAoBV,EAAY,KAClCJ,EAAY,CAAEF,YAAWQ,KAAMV,EAAKW,IAAI,kBACzC,CAACT,EAAWF,EAAMI,IAErB,OACIe,EAACC,EAAAA,IACOrB,EACJsB,QAAQ,WACRC,UAAWpB,EACXqB,UAAWxB,EAAMwB,WAAavB,EAAKW,IAAI,eACvCa,aAAcN,EACdO,aAAcpB,EACdqB,QAASR,EACTS,OAAQtB,EACRE,QAASA,EAETqB,WAAYd,EACZF,UAAWA,GAEXO,EAACU,MAAAA,CACGC,UAAU,yCACVC,MAAM,6BACNC,MAAM,KACNC,OAAO,KACPC,QAAQ,YACRC,KAAK,QAELhB,EAACiB,OAAAA,CAAKC,EAAE,snBAMlBC,EAAevC,GAEboB,EAACoB,EAAAA,KACGpB,EAACrB,EAAmBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stopPropagationForActionKeys.js","sources":["../../../../../src/components/internal/Button/stopPropagationForActionKeys.ts"],"sourcesContent":["export const stopPropagationForActionKeys = (event: KeyboardEvent): void => {\n if (event.key === 'Enter' || event.code === 'Enter' || event.key === ' ' || event.code === 'Space') {\n event.stopPropagation();\n }\n};\n"],"names":["stopPropagationForActionKeys","event","key","code","stopPropagation"],"mappings":"AAAO,MAAMA,EAAgCC,IACvB,UAAdA,EAAMC,KAAkC,UAAfD,EAAME,MAAkC,MAAdF,EAAMC,KAA8B,UAAfD,EAAME,MAC9EF,EAAMG"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{createElement as e}from"../../../external/preact/dist/preact.js";import{useState as t,useRef as o,useEffect as r}from"../../../external/preact/hooks/dist/hooks.js";import a from"../Button/Button.js";import n from"../Spinner/Spinner.js";import s from"../../../core/Services/payment-status.js";import{processResponse as c}from"../../../core/ProcessResponse/process-response.js";import i from"../../../core/Errors/AdyenCheckoutError.js";import{useCoreContext as l}from"../../../core/Context/CoreProvider.js";import d from"../ContentSeparator/ContentSeparator.js";import m from"../../../utils/useAutoFocus.js";import{ANALYTICS_QR_CODE_DOWNLOAD as p,ANALYTICS_DOWNLOAD_STR as u}from"../../../core/Analytics/constants.js";import{AnalyticsInfoEvent as y}from"../../../core/Analytics/AnalyticsInfoEvent.js";import _ from"./components/QRDetails.js";import{QRLoaderDetailsProvider as h}from"./QRLoaderDetailsProvider.js";import{QRFinalState as f}from"./components/QRFinalState.js";function g(g){const{i18n:q,loadingContext:k}=l(),[w,C]=t(!1),[b,v]=t(g.delay),[j,N]=t(!1),[T,D]=t(!0),[R,E]=t(100),[I,A]=t(0),P=o(null),S=async()=>{const{paymentData:e,clientKey:t,throttledInterval:o}=g;return s(e,t,k,o).then(c).catch(e=>({type:"network-error",props:e})).then(e=>{switch(e.type){case"success":(e=>{C(!0),D(!1);const t={data:{details:{payload:e.props.payload},paymentData:g.paymentData}};g.onComplete(t)})(e);break;case"error":(e=>{if(N(!0),D(!1),e.props.payload){const t={data:{details:{payload:e.props.payload},paymentData:g.paymentData}};g.onComplete(t)}const t=new i("ERROR","error result with no payload in response");g.onError(t)})(e);break;default:D(!1)}})};r(()=>{S()},[]),r(()=>{if(j||w||T)return;let e=b;return P.current=setTimeout(()=>{(async()=>{const t=performance.now();await S();const o=performance.now(),r=Math.round(o-t),a=I+r+e;A(a),a>=g.throttleTime&&e!==g.throttledInterval&&(v(g.throttledInterval),e=g.throttledInterval)})()},e),()=>{clearTimeout(P.current)}},[j,w,T,b,g.throttleTime,I]);const{amount:x,showAmount:$,url:L,brandLogo:B,brandName:M,countdownTime:Q,type:K,onActionHandled:F}=g,O=g.qrCodeData?`${k}utility/v1/barcode.png?type=qrCode&data=${g.qrCodeData}&clientKey=${g.clientKey}`:g.qrCodeImage,H=m();if(j)return e(f,{image:"error",message:q.get("error.subtitle.payment")});if(w)return e(f,{image:"success",message:q.get("creditCard.success")});if(T)return e("div",{className:"adyen-checkout__qr-loader"},B&&e("div",{className:"adyen-checkout__qr-loader__brand-logo-wrapper"},e("img",{alt:M,src:B,className:"adyen-checkout__qr-loader__brand-logo"})),e(n,null));const U=g.classNameModifiers.map(e=>`adyen-checkout__qr-loader--${e}`);return e("div",{className:`adyen-checkout__qr-loader adyen-checkout__qr-loader--${K} ${U.join(" ")}`},B&&e("div",{className:"adyen-checkout__qr-loader__brand-logo-wrapper"},e("img",{src:B,alt:M,className:"adyen-checkout__qr-loader__brand-logo"})),$&&x&&null!==x.value&&!!x.currency&&e("h1",{className:"adyen-checkout__qr-loader__payment_amount"},q.amount(x.value,x.currency)),L&&e("div",{className:"adyen-checkout__qr-loader__app-link"},g.redirectIntroduction&&e("p",{className:"adyen-checkout__qr-loader__subtitle"},q.get(g.redirectIntroduction)),e(a,{classNameModifiers:["qr-loader"],onClick:()=>(e=>{window.location.assign(e)})(L),label:q.get(g.buttonLabel)}),e(d,null)),e("p",{ref:H,tabIndex:0,className:"adyen-checkout__qr-loader__subtitle"},"string"==typeof g.introduction?q.get(g.introduction):g.introduction?.()),e(h,{qrCodeImage:O,qrCodeData:g.qrCodeData,percentage:R,timeToPay:g.timeToPay,copyBtn:g.copyBtn,instructions:g.instructions,countdownTime:Q,onTick:e=>(e=>{E(e.percentage)})(e),onQRCodeLoad:()=>{F?.({componentType:g.type,actionDescription:"qr-code-loaded"})},onTimeUp:()=>(N(!0),void g.onError(new i("ERROR","Payment Expired"))),handleCopy:()=>{const e=new y({type:u,target:p});g.onSubmitAnalytics(e)}},g.children?g.children:e(_,null)))}g.defaultProps={delay:2e3,countdownTime:15,onError:()=>{},onComplete:()=>{},throttleTime:6e4,classNameModifiers:[],throttledInterval:1e4,introduction:"wechatpay.scanqrcode",timeToPay:"wechatpay.timetopay",buttonLabel:"openApp",showAmount:!0};export{g as default};
|
|
2
2
|
//# sourceMappingURL=QRLoader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QRLoader.js","sources":["../../../../../src/components/internal/QRLoader/QRLoader.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport Button from '../Button';\nimport Spinner from '../Spinner';\nimport checkPaymentStatus from '../../../core/Services/payment-status';\nimport processResponse from '../../../core/ProcessResponse';\n\nimport './QRLoader.scss';\nimport { QRLoaderProps, QRLoaderState } from './types';\nimport copyToClipboard from '../../../utils/clipboard';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport ContentSeparator from '../ContentSeparator';\nimport { StatusObject } from '../Await/types';\nimport useImage from '../../../core/Context/useImage';\nimport { useA11yReporter } from '../../../core/Errors/useA11yReporter';\nimport useAutoFocus from '../../../utils/useAutoFocus';\nimport { ANALYTICS_DOWNLOAD_STR, ANALYTICS_QR_CODE_DOWNLOAD } from '../../../core/Analytics/constants';\nimport { AnalyticsInfoEvent } from '../../../core/Analytics/AnalyticsInfoEvent';\nimport { CountdownTime } from '../Countdown/types';\nimport QRDetails from './components/QRDetails';\nimport { QRLoaderDetailsProvider } from './QRLoaderDetailsProvider';\n\nconst QRCODE_URL = 'utility/v1/barcode.png?type=qrCode&data=';\n\nclass QRLoader extends Component<QRLoaderProps, QRLoaderState> {\n private timeoutId: NodeJS.Timeout | number | undefined;\n\n constructor(props: QRLoaderProps) {\n super(props);\n\n this.state = {\n buttonStatus: 'default',\n completed: false,\n delay: props.delay,\n expired: false,\n loading: true,\n percentage: 100,\n timePassed: 0\n };\n }\n\n public static defaultProps = {\n delay: 2000,\n countdownTime: 15,\n onError: () => {},\n onComplete: () => {},\n throttleTime: 60000,\n classNameModifiers: [],\n throttledInterval: 10000,\n introduction: 'wechatpay.scanqrcode',\n timeToPay: 'wechatpay.timetopay',\n buttonLabel: 'openApp',\n showAmount: true\n };\n\n componentDidMount() {\n this.statusInterval();\n }\n\n componentWillUnmount() {\n clearTimeout(this.timeoutId);\n }\n\n public redirectToApp = (url: string | URL) => {\n window.location.assign(url);\n };\n\n // Retry until getting a complete response from the server, or it times out\n public statusInterval = (responseTime = 0) => {\n // If we are already in the final statuses, do not poll!\n if (this.state.expired || this.state.completed) return;\n\n this.setState(previous => ({ timePassed: previous.timePassed + this.props.delay + responseTime }));\n // Changes interval time to 10 seconds after 1 minute (60 seconds)\n const newDelay = this.state.timePassed >= this.props.throttleTime ? this.props.throttledInterval : this.state.delay;\n this.pollStatus(newDelay);\n };\n\n private pollStatus(delay: number) {\n clearTimeout(this.timeoutId);\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n this.timeoutId = setTimeout(async () => {\n // Wait for previous status call to finish.\n // Also taking the server response time into the consideration to calculate timePassed.\n const start = performance.now();\n await this.checkStatus();\n const end = performance.now();\n this.statusInterval(Math.round(end - start));\n }, delay);\n }\n\n private onTick = (time: CountdownTime): void => {\n this.setState({ percentage: time.percentage });\n };\n\n private onTimeUp = (): void => {\n this.setState({ expired: true });\n clearTimeout(this.timeoutId);\n this.props.onError(new AdyenCheckoutError('ERROR', 'Payment Expired'));\n };\n\n private onComplete = (status: StatusObject): void => {\n clearTimeout(this.timeoutId);\n this.setState({ completed: true, loading: false });\n\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: this.props.paymentData\n }\n };\n\n this.props.onComplete(state, this);\n };\n\n private onError = (status: StatusObject): void => {\n clearTimeout(this.timeoutId);\n this.setState({ expired: true, loading: false });\n\n if (status.props.payload) {\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: this.props.paymentData\n }\n };\n this.props.onComplete(state, this);\n }\n\n const error = new AdyenCheckoutError('ERROR', 'error result with no payload in response');\n return this.props.onError(error);\n };\n\n private checkStatus = () => {\n const { paymentData, clientKey, loadingContext, throttledInterval } = this.props;\n\n return checkPaymentStatus(paymentData, clientKey, loadingContext, throttledInterval)\n .then(processResponse)\n .catch(response => ({ type: 'network-error', props: response }))\n .then((status: StatusObject) => {\n switch (status.type) {\n case 'success':\n this.onComplete(status);\n break;\n case 'error':\n this.onError(status);\n break;\n default:\n this.setState({ loading: false });\n }\n return status;\n });\n };\n\n render({ amount, showAmount, url, brandLogo, brandName, countdownTime, type, onActionHandled }: QRLoaderProps, { expired, completed, loading }) {\n const { i18n, loadingContext } = useCoreContext();\n const getImage = useImage();\n\n const qrCodeImage = this.props.qrCodeData\n ? `${loadingContext}${QRCODE_URL}${this.props.qrCodeData}&clientKey=${this.props.clientKey}`\n : this.props.qrCodeImage;\n\n const handleCopy = (complete: () => void) => {\n void copyToClipboard(this.props.qrCodeData);\n\n const event = new AnalyticsInfoEvent({\n type: ANALYTICS_DOWNLOAD_STR,\n target: ANALYTICS_QR_CODE_DOWNLOAD\n });\n this.props.onSubmitAnalytics(event);\n\n complete();\n };\n\n const onQrCodeLoad = () => {\n onActionHandled?.({\n componentType: this.props.type,\n actionDescription: 'qr-code-loaded'\n });\n };\n\n const finalState = (image: string, message: string) => {\n const status = i18n.get(message);\n useA11yReporter(status);\n return (\n <div className=\"adyen-checkout__qr-loader adyen-checkout__qr-loader--result\">\n <img\n className=\"adyen-checkout__qr-loader__icon adyen-checkout__qr-loader__icon--result\"\n src={getImage({ imageFolder: 'components/' })(image)}\n alt={status}\n />\n <div className=\"adyen-checkout__qr-loader__subtitle\">{status}</div>\n </div>\n );\n };\n\n if (expired) {\n return finalState('error', 'error.subtitle.payment');\n }\n\n if (completed) {\n return finalState('success', 'creditCard.success');\n }\n\n if (loading) {\n return (\n <div className=\"adyen-checkout__qr-loader\">\n {brandLogo && (\n <div className=\"adyen-checkout__qr-loader__brand-logo-wrapper\">\n <img alt={brandName} src={brandLogo} className=\"adyen-checkout__qr-loader__brand-logo\" />\n </div>\n )}\n <Spinner />\n </div>\n );\n }\n\n const qrSubtitleRef = useAutoFocus();\n const classnames = this.props.classNameModifiers.map(m => `adyen-checkout__qr-loader--${m}`);\n\n return (\n <div className={`adyen-checkout__qr-loader adyen-checkout__qr-loader--${type} ${classnames.join(' ')}`}>\n {brandLogo && (\n <div className=\"adyen-checkout__qr-loader__brand-logo-wrapper\">\n <img src={brandLogo} alt={brandName} className=\"adyen-checkout__qr-loader__brand-logo\" />\n </div>\n )}\n\n {showAmount && amount && amount.value !== null && !!amount.currency && (\n <h1 className=\"adyen-checkout__qr-loader__payment_amount\">{i18n.amount(amount.value, amount.currency)}</h1>\n )}\n\n {url && (\n <div className=\"adyen-checkout__qr-loader__app-link\">\n {this.props.redirectIntroduction && (\n <p className=\"adyen-checkout__qr-loader__subtitle\">{i18n.get(this.props.redirectIntroduction)}</p>\n )}\n <Button classNameModifiers={['qr-loader']} onClick={() => this.redirectToApp(url)} label={i18n.get(this.props.buttonLabel)} />\n <ContentSeparator />\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */}\n <p ref={qrSubtitleRef} tabIndex={0} className=\"adyen-checkout__qr-loader__subtitle\">\n {typeof this.props.introduction === 'string' ? i18n.get(this.props.introduction) : this.props.introduction?.()}\n </p>\n\n <QRLoaderDetailsProvider\n qrCodeImage={qrCodeImage}\n qrCodeData={this.props.qrCodeData}\n percentage={this.state.percentage}\n timeToPay={this.props.timeToPay}\n copyBtn={this.props.copyBtn}\n instructions={this.props.instructions}\n countdownTime={countdownTime}\n onTick={(time: CountdownTime) => this.onTick(time)}\n onQRCodeLoad={onQrCodeLoad}\n onTimeUp={() => this.onTimeUp()}\n handleCopy={handleCopy}\n >\n {this.props.children ? this.props.children : <QRDetails />}\n </QRLoaderDetailsProvider>\n </div>\n );\n }\n}\n\nexport default QRLoader;\n"],"names":["QRLoader","Component","componentDidMount","this","statusInterval","componentWillUnmount","clearTimeout","timeoutId","pollStatus","delay","setTimeout","async","start","performance","now","checkStatus","end","Math","round","render","amount","showAmount","url","brandLogo","brandName","countdownTime","type","onActionHandled","expired","completed","loading","i18n","loadingContext","useCoreContext","getImage","useImage","qrCodeImage","props","qrCodeData","clientKey","finalState","image","message","status","get","useA11yReporter","h","div","className","img","src","imageFolder","alt","Spinner","qrSubtitleRef","useAutoFocus","classnames","classNameModifiers","map","m","join","value","currency","h1","redirectIntroduction","p","Button","onClick","redirectToApp","label","buttonLabel","ContentSeparator","ref","tabIndex","introduction","QRLoaderDetailsProvider","percentage","state","timeToPay","copyBtn","instructions","onTick","time","onQRCodeLoad","componentType","actionDescription","onTimeUp","handleCopy","complete","copyToClipboard","event","AnalyticsInfoEvent","ANALYTICS_DOWNLOAD_STR","target","ANALYTICS_QR_CODE_DOWNLOAD","onSubmitAnalytics","children","QRDetails","constructor","super","_define_property","window","location","assign","responseTime","setState","previous","timePassed","newDelay","throttleTime","throttledInterval","onError","AdyenCheckoutError","onComplete","data","details","payload","paymentData","error","checkPaymentStatus","then","processResponse","catch","response","buttonStatus","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QRLoader.js","sources":["../../../../../src/components/internal/QRLoader/QRLoader.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useState, useEffect, useRef } from 'preact/hooks';\nimport Button from '../Button';\nimport Spinner from '../Spinner';\nimport checkPaymentStatus from '../../../core/Services/payment-status';\nimport processResponse from '../../../core/ProcessResponse';\nimport { QRLoaderProps } from './types';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport ContentSeparator from '../ContentSeparator';\nimport { StatusObject } from '../Await/types';\nimport useAutoFocus from '../../../utils/useAutoFocus';\nimport { ANALYTICS_DOWNLOAD_STR, ANALYTICS_QR_CODE_DOWNLOAD } from '../../../core/Analytics/constants';\nimport { AnalyticsInfoEvent } from '../../../core/Analytics/AnalyticsInfoEvent';\nimport { CountdownTime } from '../Countdown/types';\nimport QRDetails from './components/QRDetails';\nimport { QRLoaderDetailsProvider } from './QRLoaderDetailsProvider';\nimport { QRFinalState } from './components/QRFinalState';\nimport './QRLoader.scss';\n\nconst QRCODE_URL = 'utility/v1/barcode.png?type=qrCode&data=';\n\nfunction QRLoader(props: QRLoaderProps) {\n const { i18n, loadingContext } = useCoreContext();\n const [completed, setCompleted] = useState(false);\n const [delay, setDelay] = useState(props.delay);\n const [expired, setExpired] = useState(false);\n const [loading, setLoading] = useState(true);\n const [percentage, setPercentage] = useState(100);\n const [timePassed, setTimePassed] = useState(0);\n const timeoutRef = useRef<NodeJS.Timeout | number | null>(null);\n\n const redirectToApp = (url: string | URL): void => {\n window.location.assign(url);\n };\n\n const onTick = (time: CountdownTime): void => {\n setPercentage(time.percentage);\n };\n\n const onTimeUp = (): void => {\n setExpired(true);\n props.onError(new AdyenCheckoutError('ERROR', 'Payment Expired'));\n };\n\n const onComplete = (status: StatusObject): void => {\n setCompleted(true);\n setLoading(false);\n\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: props.paymentData\n }\n };\n\n props.onComplete(state);\n };\n\n const onError = (status: StatusObject): void => {\n setExpired(true);\n setLoading(false);\n\n if (status.props.payload) {\n const state = {\n data: {\n details: { payload: status.props.payload },\n paymentData: props.paymentData\n }\n };\n props.onComplete(state);\n }\n\n const error = new AdyenCheckoutError('ERROR', 'error result with no payload in response');\n props.onError(error);\n };\n\n const checkStatus = async (): Promise<void> => {\n const { paymentData, clientKey, throttledInterval } = props;\n\n return checkPaymentStatus(paymentData, clientKey, loadingContext, throttledInterval)\n .then(processResponse)\n .catch(response => ({ type: 'network-error', props: response }))\n .then((status: StatusObject) => {\n switch (status.type) {\n case 'success':\n onComplete(status);\n break;\n case 'error':\n onError(status);\n break;\n default:\n setLoading(false);\n }\n });\n };\n\n useEffect(() => {\n void checkStatus();\n }, []);\n\n useEffect(() => {\n if (expired || completed || loading) {\n return;\n }\n\n let currentDelay = delay;\n\n const statusInterval = async (): Promise<void> => {\n const start = performance.now();\n await checkStatus();\n const end = performance.now();\n const responseTime = Math.round(end - start);\n\n const actualTimePassed = timePassed + responseTime + currentDelay;\n setTimePassed(actualTimePassed);\n\n if (actualTimePassed >= props.throttleTime && currentDelay !== props.throttledInterval) {\n setDelay(props.throttledInterval);\n currentDelay = props.throttledInterval;\n }\n };\n\n timeoutRef.current = setTimeout(() => {\n void statusInterval();\n }, currentDelay);\n\n return () => {\n clearTimeout(timeoutRef.current);\n };\n }, [expired, completed, loading, delay, props.throttleTime, timePassed]);\n\n const { amount, showAmount, url, brandLogo, brandName, countdownTime, type, onActionHandled } = props;\n\n const qrCodeImage = props.qrCodeData ? `${loadingContext}${QRCODE_URL}${props.qrCodeData}&clientKey=${props.clientKey}` : props.qrCodeImage;\n\n const handleCopy = () => {\n const event = new AnalyticsInfoEvent({\n type: ANALYTICS_DOWNLOAD_STR,\n target: ANALYTICS_QR_CODE_DOWNLOAD\n });\n props.onSubmitAnalytics(event);\n };\n\n const onQrCodeLoad = () => {\n onActionHandled?.({\n componentType: props.type,\n actionDescription: 'qr-code-loaded'\n });\n };\n\n const qrSubtitleRef = useAutoFocus();\n\n if (expired) {\n return <QRFinalState image=\"error\" message={i18n.get('error.subtitle.payment')} />;\n }\n\n if (completed) {\n return <QRFinalState image=\"success\" message={i18n.get('creditCard.success')} />;\n }\n\n if (loading) {\n return (\n <div className=\"adyen-checkout__qr-loader\">\n {brandLogo && (\n <div className=\"adyen-checkout__qr-loader__brand-logo-wrapper\">\n <img alt={brandName} src={brandLogo} className=\"adyen-checkout__qr-loader__brand-logo\" />\n </div>\n )}\n <Spinner />\n </div>\n );\n }\n\n const classnames = props.classNameModifiers.map(m => `adyen-checkout__qr-loader--${m}`);\n\n return (\n <div className={`adyen-checkout__qr-loader adyen-checkout__qr-loader--${type} ${classnames.join(' ')}`}>\n {brandLogo && (\n <div className=\"adyen-checkout__qr-loader__brand-logo-wrapper\">\n <img src={brandLogo} alt={brandName} className=\"adyen-checkout__qr-loader__brand-logo\" />\n </div>\n )}\n\n {showAmount && amount && amount.value !== null && !!amount.currency && (\n <h1 className=\"adyen-checkout__qr-loader__payment_amount\">{i18n.amount(amount.value, amount.currency)}</h1>\n )}\n\n {url && (\n <div className=\"adyen-checkout__qr-loader__app-link\">\n {props.redirectIntroduction && <p className=\"adyen-checkout__qr-loader__subtitle\">{i18n.get(props.redirectIntroduction)}</p>}\n <Button classNameModifiers={['qr-loader']} onClick={() => redirectToApp(url)} label={i18n.get(props.buttonLabel)} />\n <ContentSeparator />\n </div>\n )}\n\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */}\n <p ref={qrSubtitleRef} tabIndex={0} className=\"adyen-checkout__qr-loader__subtitle\">\n {typeof props.introduction === 'string' ? i18n.get(props.introduction) : props.introduction?.()}\n </p>\n\n <QRLoaderDetailsProvider\n qrCodeImage={qrCodeImage}\n qrCodeData={props.qrCodeData}\n percentage={percentage}\n timeToPay={props.timeToPay}\n copyBtn={props.copyBtn}\n instructions={props.instructions}\n countdownTime={countdownTime}\n onTick={(time: CountdownTime) => onTick(time)}\n onQRCodeLoad={onQrCodeLoad}\n onTimeUp={() => onTimeUp()}\n handleCopy={handleCopy}\n >\n {props.children ? props.children : <QRDetails />}\n </QRLoaderDetailsProvider>\n </div>\n );\n}\n\nQRLoader.defaultProps = {\n delay: 2000,\n countdownTime: 15,\n onError: () => {},\n onComplete: () => {},\n throttleTime: 60000,\n classNameModifiers: [],\n throttledInterval: 10000,\n introduction: 'wechatpay.scanqrcode',\n timeToPay: 'wechatpay.timetopay',\n buttonLabel: 'openApp',\n showAmount: true\n};\n\nexport default QRLoader;\n"],"names":["QRLoader","props","i18n","loadingContext","useCoreContext","completed","setCompleted","useState","delay","setDelay","expired","setExpired","loading","setLoading","percentage","setPercentage","timePassed","setTimePassed","timeoutRef","useRef","checkStatus","async","paymentData","clientKey","throttledInterval","checkPaymentStatus","then","processResponse","catch","response","type","status","state","data","details","payload","onComplete","error","AdyenCheckoutError","onError","useEffect","currentDelay","current","setTimeout","start","performance","now","end","responseTime","Math","round","actualTimePassed","throttleTime","statusInterval","clearTimeout","amount","showAmount","url","brandLogo","brandName","countdownTime","onActionHandled","qrCodeImage","qrCodeData","qrSubtitleRef","useAutoFocus","h","QRFinalState","image","message","get","div","className","img","alt","src","Spinner","classnames","classNameModifiers","map","m","join","value","currency","h1","redirectIntroduction","p","Button","onClick","window","location","assign","redirectToApp","label","buttonLabel","ContentSeparator","ref","tabIndex","introduction","QRLoaderDetailsProvider","timeToPay","copyBtn","instructions","onTick","time","onQRCodeLoad","componentType","actionDescription","onTimeUp","handleCopy","event","AnalyticsInfoEvent","ANALYTICS_DOWNLOAD_STR","target","ANALYTICS_QR_CODE_DOWNLOAD","onSubmitAnalytics","children","QRDetails","defaultProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QRLoaderDetailsProvider.js","sources":["../../../../../src/components/internal/QRLoader/QRLoaderDetailsProvider.tsx"],"sourcesContent":["import { h, createContext } from 'preact';\nimport type { ComponentChildren } from 'preact';\nimport { useContext } from 'preact/hooks';\nimport { CountdownTime } from '../Countdown/types';\n\ninterface QRLoaderDetailsProviderProps {\n qrCodeImage: string;\n qrCodeData: string;\n countdownTime: number;\n percentage: number;\n timeToPay: string;\n instructions?: string | (() => h.JSX.Element);\n copyBtn: boolean;\n onTick: (time: CountdownTime) => void;\n onQRCodeLoad: () => void;\n onTimeUp: () => void;\n handleCopy
|
|
1
|
+
{"version":3,"file":"QRLoaderDetailsProvider.js","sources":["../../../../../src/components/internal/QRLoader/QRLoaderDetailsProvider.tsx"],"sourcesContent":["import { h, createContext } from 'preact';\nimport type { ComponentChildren } from 'preact';\nimport { useContext } from 'preact/hooks';\nimport { CountdownTime } from '../Countdown/types';\n\ninterface QRLoaderDetailsProviderProps {\n qrCodeImage: string;\n qrCodeData: string;\n countdownTime: number;\n percentage: number;\n timeToPay: string;\n instructions?: string | (() => h.JSX.Element);\n copyBtn: boolean;\n onTick: (time: CountdownTime) => void;\n onQRCodeLoad: () => void;\n onTimeUp: () => void;\n handleCopy?: (e: h.JSX.TargetedMouseEvent<HTMLButtonElement>) => void;\n children: ComponentChildren;\n}\n\ntype QRLoaderDetailsContextValue = Omit<QRLoaderDetailsProviderProps, 'children'>;\n\nconst QRLoaderDetailsContext = createContext<QRLoaderDetailsContextValue | undefined>(undefined);\n\nconst QRLoaderDetailsProvider = ({ children, ...props }: QRLoaderDetailsProviderProps) => {\n return <QRLoaderDetailsContext.Provider value={{ ...props }}>{children}</QRLoaderDetailsContext.Provider>;\n};\n\nconst useQRLoaderDetails = (): QRLoaderDetailsContextValue => {\n const context = useContext(QRLoaderDetailsContext);\n\n if (context === undefined) {\n throw new Error('\"useQRLoaderDetails\" must be used within a QRLoaderDetailsContext');\n }\n\n return context;\n};\n\nexport { QRLoaderDetailsProvider, useQRLoaderDetails };\n"],"names":["QRLoaderDetailsContext","createContext","undefined","QRLoaderDetailsProvider","children","props","h","Provider","value","useQRLoaderDetails","context","useContext","Error"],"mappings":"qKAsBA,MAAMA,EAAyBC,OAAuDC,GAEhFC,EAA0B,EAAGC,cAAaC,KACrCC,EAACN,EAAuBO,SAAQ,CAACC,MAAO,IAAKH,IAAUD,GAG5DK,EAAqB,KACvB,MAAMC,EAAUC,EAAWX,GAE3B,QAAgBE,IAAZQ,EACA,MAAM,IAAIE,MAAM,qEAGpB,OAAOF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as
|
|
1
|
+
import{createElement as e}from"../../../../external/preact/dist/preact.js";import{CopyButton as t}from"../../Button/CopyButton.js";const o=({text:o,copyLabel:a,copiedLabel:l,handleCopy:p})=>e(t,{onClick:p,text:o,label:a,copiedLabel:l});export{o as default};
|
|
2
2
|
//# sourceMappingURL=QRCodeCopyButton.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QRCodeCopyButton.js","sources":["../../../../../../src/components/internal/QRLoader/components/QRCodeCopyButton.tsx"],"sourcesContent":["import { h } from 'preact';\nimport
|
|
1
|
+
{"version":3,"file":"QRCodeCopyButton.js","sources":["../../../../../../src/components/internal/QRLoader/components/QRCodeCopyButton.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { CopyButton } from '../../Button/CopyButton';\n\ninterface QRCodeCopyButtonProps {\n text: string;\n copyLabel?: string;\n copiedLabel?: string;\n handleCopy?: (e: h.JSX.TargetedMouseEvent<HTMLButtonElement>) => void;\n}\n\nconst QRCodeCopyButton = ({ text, copyLabel, copiedLabel, handleCopy }: QRCodeCopyButtonProps) => {\n return <CopyButton onClick={handleCopy} text={text} label={copyLabel} copiedLabel={copiedLabel} />;\n};\n\nexport default QRCodeCopyButton;\n"],"names":["QRCodeCopyButton","text","copyLabel","copiedLabel","handleCopy","h","CopyButton","onClick","label"],"mappings":"mIAUA,MAAMA,EAAmB,EAAGC,OAAMC,YAAWC,cAAaC,gBAC/CC,EAACC,EAAAA,CAAWC,QAASH,EAAYH,KAAMA,EAAMO,MAAON,EAAWC,YAAaA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as o}from"../../../../external/preact/dist/preact.js";import e from"../../Countdown/index.js";import{useCoreContext as t}from"../../../../core/Context/CoreProvider.js";const n=({countdownTime:n,timeToPay:r,onTick:
|
|
1
|
+
import{createElement as o}from"../../../../external/preact/dist/preact.js";import e from"../../Countdown/index.js";import{useCoreContext as t}from"../../../../core/Context/CoreProvider.js";const n=({countdownTime:n,timeToPay:r,onTick:m,onCompleted:a})=>{const{i18n:c}=t(),i=c.get(r).split("%@");return o("span",{className:"adyen-checkout__qr-loader__countdown"},i[0]," ",o(e,{minutesFromNow:n,onTick:m,onCompleted:a})," ",i[1])};export{n as default};
|
|
2
2
|
//# sourceMappingURL=QRCountdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QRCountdown.js","sources":["../../../../../../src/components/internal/QRLoader/components/QRCountdown.tsx"],"sourcesContent":["import { h } from 'preact';\nimport Countdown from '../../Countdown';\nimport { QRCountdownProps } from '../types';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\n\nconst QRCountdown = ({ countdownTime, timeToPay, onTick, onCompleted }: QRCountdownProps) => {\n const { i18n } = useCoreContext();\n\n const timeToPayString = i18n.get(timeToPay).split('%@');\n\n return (\n <span
|
|
1
|
+
{"version":3,"file":"QRCountdown.js","sources":["../../../../../../src/components/internal/QRLoader/components/QRCountdown.tsx"],"sourcesContent":["import { h } from 'preact';\nimport Countdown from '../../Countdown';\nimport { QRCountdownProps } from '../types';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\n\nconst QRCountdown = ({ countdownTime, timeToPay, onTick, onCompleted }: QRCountdownProps) => {\n const { i18n } = useCoreContext();\n\n const timeToPayString = i18n.get(timeToPay).split('%@');\n\n return (\n <span className=\"adyen-checkout__qr-loader__countdown\">\n {timeToPayString[0]} \n <Countdown minutesFromNow={countdownTime} onTick={onTick} onCompleted={onCompleted} />\n {timeToPayString[1]}\n </span>\n );\n};\nexport default QRCountdown;\n"],"names":["QRCountdown","countdownTime","timeToPay","onTick","onCompleted","i18n","useCoreContext","timeToPayString","get","split","h","span","className","Countdown","minutesFromNow"],"mappings":"6LAKA,MAAMA,EAAc,EAAGC,gBAAeC,YAAWC,SAAQC,kBACrD,MAAMC,KAAEA,GAASC,IAEXC,EAAkBF,EAAKG,IAAIN,GAAWO,MAAM,MAElD,OACIC,EAACC,OAAAA,CAAKC,UAAU,wCACXL,EAAgB,GAAG,IACpBG,EAACG,EAAAA,CAAUC,eAAgBb,EAAeE,OAAQA,EAAQC,YAAaA,IAAe,IAC/EG,EAAgB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as o,Fragment as e}from"../../../../external/preact/dist/preact.js";import t from"./QRImage.js";import r from"./QRProgressbar.js";import n from"./QRCountdown.js";import a from"./QRIntructions.js";import m from"./QRCodeCopyButton.js";import{useQRLoaderDetails as s}from"../QRLoaderDetailsProvider.js";const i=()=>{const{
|
|
1
|
+
import{createElement as o,Fragment as e}from"../../../../external/preact/dist/preact.js";import t from"./QRImage.js";import r from"./QRProgressbar.js";import n from"./QRCountdown.js";import a from"./QRIntructions.js";import m from"./QRCodeCopyButton.js";import{useQRLoaderDetails as s}from"../QRLoaderDetailsProvider.js";const i=()=>{const{qrCodeData:i,qrCodeImage:c,percentage:d,timeToPay:p,copyBtn:l,instructions:u,onTick:C,countdownTime:f,onQRCodeLoad:j,onTimeUp:y,handleCopy:Q}=s();return o(e,null,o(t,{src:c,onLoad:j}),o(r,{percentage:d}),o(n,{countdownTime:f,timeToPay:p,onTick:C,onCompleted:y}),u&&o(a,{instructions:u}),l&&o("div",{className:"adyen-checkout__qr-loader__actions"},o(m,{text:i,handleCopy:Q})))};export{i as default};
|
|
2
2
|
//# sourceMappingURL=QRDetails.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QRDetails.js","sources":["../../../../../../src/components/internal/QRLoader/components/QRDetails.tsx"],"sourcesContent":["import { h, Fragment } from 'preact';\nimport QRImage from './QRImage';\nimport QRProgressbar from './QRProgressbar';\nimport QRCountdown from './QRCountdown';\nimport QRInstructions from './QRIntructions';\nimport QRCodeCopyButton from './QRCodeCopyButton';\nimport { useQRLoaderDetails } from '../QRLoaderDetailsProvider';\n\nconst QRDetails = () => {\n const { qrCodeImage, percentage, timeToPay, copyBtn, instructions, onTick, countdownTime, onQRCodeLoad, onTimeUp, handleCopy } =\n useQRLoaderDetails();\n\n return (\n <Fragment>\n <QRImage src={qrCodeImage} onLoad={onQRCodeLoad} />\n\n <QRProgressbar percentage={percentage} />\n\n <QRCountdown countdownTime={countdownTime} timeToPay={timeToPay} onTick={onTick} onCompleted={onTimeUp} />\n\n {instructions && <QRInstructions instructions={instructions} />}\n\n {copyBtn && (\n <div className=\"adyen-checkout__qr-loader__actions\">\n <QRCodeCopyButton handleCopy={handleCopy} />\n </div>\n )}\n </Fragment>\n );\n};\n\nexport default QRDetails;\n"],"names":["QRDetails","qrCodeImage","percentage","timeToPay","copyBtn","instructions","onTick","countdownTime","onQRCodeLoad","onTimeUp","handleCopy","useQRLoaderDetails","h","Fragment","QRImage","src","onLoad","QRProgressbar","QRCountdown","onCompleted","QRInstructions","div","className","QRCodeCopyButton"],"mappings":"iUAQA,MAAMA,EAAY,KACd,MAAMC,YAAEA,EAAWC,WAAEA,EAAUC,UAAEA,EAASC,QAAEA,EAAOC,aAAEA,EAAYC,OAAEA,EAAMC,cAAEA,EAAaC,aAAEA,EAAYC,SAAEA,EAAQC,WAAEA,
|
|
1
|
+
{"version":3,"file":"QRDetails.js","sources":["../../../../../../src/components/internal/QRLoader/components/QRDetails.tsx"],"sourcesContent":["import { h, Fragment } from 'preact';\nimport QRImage from './QRImage';\nimport QRProgressbar from './QRProgressbar';\nimport QRCountdown from './QRCountdown';\nimport QRInstructions from './QRIntructions';\nimport QRCodeCopyButton from './QRCodeCopyButton';\nimport { useQRLoaderDetails } from '../QRLoaderDetailsProvider';\n\nconst QRDetails = () => {\n const { qrCodeData, qrCodeImage, percentage, timeToPay, copyBtn, instructions, onTick, countdownTime, onQRCodeLoad, onTimeUp, handleCopy } =\n useQRLoaderDetails();\n\n return (\n <Fragment>\n <QRImage src={qrCodeImage} onLoad={onQRCodeLoad} />\n\n <QRProgressbar percentage={percentage} />\n\n <QRCountdown countdownTime={countdownTime} timeToPay={timeToPay} onTick={onTick} onCompleted={onTimeUp} />\n\n {instructions && <QRInstructions instructions={instructions} />}\n\n {copyBtn && (\n <div className=\"adyen-checkout__qr-loader__actions\">\n <QRCodeCopyButton text={qrCodeData} handleCopy={handleCopy} />\n </div>\n )}\n </Fragment>\n );\n};\n\nexport default QRDetails;\n"],"names":["QRDetails","qrCodeData","qrCodeImage","percentage","timeToPay","copyBtn","instructions","onTick","countdownTime","onQRCodeLoad","onTimeUp","handleCopy","useQRLoaderDetails","h","Fragment","QRImage","src","onLoad","QRProgressbar","QRCountdown","onCompleted","QRInstructions","div","className","QRCodeCopyButton","text"],"mappings":"iUAQA,MAAMA,EAAY,KACd,MAAMC,WAAEA,EAAUC,YAAEA,EAAWC,WAAEA,EAAUC,UAAEA,EAASC,QAAEA,EAAOC,aAAEA,EAAYC,OAAEA,EAAMC,cAAEA,EAAaC,aAAEA,EAAYC,SAAEA,EAAQC,WAAEA,GAC1HC,IAEJ,OACIC,EAACC,OACGD,EAACE,EAAAA,CAAQC,IAAKd,EAAae,OAAQR,IAEnCI,EAACK,EAAAA,CAAcf,WAAYA,IAE3BU,EAACM,EAAAA,CAAYX,cAAeA,EAAeJ,UAAWA,EAAWG,OAAQA,EAAQa,YAAaV,IAE7FJ,GAAgBO,EAACQ,EAAAA,CAAef,aAAcA,IAE9CD,GACGQ,EAACS,MAAAA,CAAIC,UAAU,sCACXV,EAACW,EAAAA,CAAiBC,KAAMxB,EAAYU,WAAYA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createElement as e}from"../../../../external/preact/dist/preact.js";import r from"../../../../core/Context/useImage.js";import{useA11yReporter as o}from"../../../../core/Errors/useA11yReporter.js";const t=({image:t,message:a})=>{const c=r();return o(a),e("div",{className:"adyen-checkout__qr-loader adyen-checkout__qr-loader--result"},e("img",{className:"adyen-checkout__qr-loader__icon adyen-checkout__qr-loader__icon--result",src:c({imageFolder:"components/"})(t),alt:a}),e("p",{className:"adyen-checkout__qr-loader__subtitle"},a))};export{t as QRFinalState};
|
|
2
|
+
//# sourceMappingURL=QRFinalState.js.map
|