@adyen/adyen-web 6.45.0 → 6.45.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 +12 -12
- 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 +1983 -1924
- package/dist/es/adyen.css +12 -12
- package/dist/es/adyen.css.map +1 -1
- package/dist/es/components/ANCV/components/ANCVInput.js +1 -1
- package/dist/es/components/ANCV/components/ANCVInput.js.map +1 -1
- package/dist/es/components/Ach/Ach.js +1 -1
- package/dist/es/components/Ach/Ach.js.map +1 -1
- package/dist/es/components/Ach/components/AchComponent.js +1 -1
- package/dist/es/components/Ach/components/AchComponent.js.map +1 -1
- package/dist/es/components/AmazonPay/AmazonPay.js +1 -1
- package/dist/es/components/AmazonPay/AmazonPay.js.map +1 -1
- package/dist/es/components/BacsDD/BacsDD.js +1 -1
- package/dist/es/components/BacsDD/BacsDD.js.map +1 -1
- package/dist/es/components/BacsDD/components/BacsInput.js +1 -1
- package/dist/es/components/BacsDD/components/BacsInput.js.map +1 -1
- package/dist/es/components/BankTransfer/BankTransfer.js +1 -1
- package/dist/es/components/BankTransfer/BankTransfer.js.map +1 -1
- package/dist/es/components/BankTransfer/components/BankTransferInput/BankTransferInput.js +1 -1
- package/dist/es/components/BankTransfer/components/BankTransferInput/BankTransferInput.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/Blik/components/BlikInput.js +1 -1
- package/dist/es/components/Blik/components/BlikInput.js.map +1 -1
- package/dist/es/components/Card/Card.js +1 -1
- package/dist/es/components/Card/Card.js.map +1 -1
- package/dist/es/components/Card/components/CardInput/types.js.map +1 -1
- package/dist/es/components/Card/components/ClickToPayHolder.js.map +1 -1
- package/dist/es/components/Card/components/ClickToPayWrapper.js +1 -1
- package/dist/es/components/Card/components/ClickToPayWrapper.js.map +1 -1
- package/dist/es/components/CashAppPay/CashAppPay.js +1 -1
- package/dist/es/components/CashAppPay/CashAppPay.js.map +1 -1
- package/dist/es/components/CustomCard/CustomCard.js +1 -1
- package/dist/es/components/CustomCard/CustomCard.js.map +1 -1
- package/dist/es/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
- package/dist/es/components/Donation/Donation.js +1 -1
- package/dist/es/components/Donation/Donation.js.map +1 -1
- package/dist/es/components/Donation/components/DonationComponent.js +1 -1
- package/dist/es/components/Donation/components/DonationComponent.js.map +1 -1
- package/dist/es/components/Dropin/Dropin.js +1 -1
- package/dist/es/components/Dropin/Dropin.js.map +1 -1
- package/dist/es/components/Dropin/components/DropinComponent.js.map +1 -1
- package/dist/es/components/Giftcard/Giftcard.js.map +1 -1
- package/dist/es/components/Giftcard/components/GiftcardComponent.js.map +1 -1
- package/dist/es/components/Giropay/Giropay.js +1 -1
- package/dist/es/components/Giropay/Giropay.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/MBWay/components/MBWayInput/MBWayInput.js +1 -1
- package/dist/es/components/MBWay/components/MBWayInput/MBWayInput.js.map +1 -1
- package/dist/es/components/Multibanco/Multibanco.js +1 -1
- package/dist/es/components/Multibanco/Multibanco.js.map +1 -1
- package/dist/es/components/PayByBankPix/PayByBankPix.js +1 -1
- package/dist/es/components/PayByBankPix/PayByBankPix.js.map +1 -1
- package/dist/es/components/PayByBankUS/PayByBankUS.js +1 -1
- package/dist/es/components/PayByBankUS/PayByBankUS.js.map +1 -1
- package/dist/es/components/PayTo/components/BSBInput.js +1 -1
- package/dist/es/components/PayTo/components/BSBInput.js.map +1 -1
- package/dist/es/components/PayTo/components/PayToNameFields.js +1 -1
- package/dist/es/components/PayTo/components/PayToNameFields.js.map +1 -1
- package/dist/es/components/PayTo/components/PayToPhone.js +1 -1
- package/dist/es/components/PayTo/components/PayToPhone.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/PixInput/PixInput.js +1 -1
- package/dist/es/components/Pix/components/PixInput/PixInput.js.map +1 -1
- package/dist/es/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js +1 -1
- package/dist/es/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js.map +1 -1
- package/dist/es/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js +1 -1
- package/dist/es/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js.map +1 -1
- package/dist/es/components/Redirect/Redirect.js +1 -1
- package/dist/es/components/Redirect/Redirect.js.map +1 -1
- package/dist/es/components/Sepa/Sepa.js.map +1 -1
- package/dist/es/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
- package/dist/es/components/Trustly/Trustly.js +1 -1
- package/dist/es/components/Trustly/Trustly.js.map +1 -1
- package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
- package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.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/Address/Specifications.js.map +1 -1
- package/dist/es/components/internal/Address/components/AddressSearch.js.map +1 -1
- package/dist/es/components/internal/Address/components/FieldContainer.js.map +1 -1
- package/dist/es/components/internal/BaseElement/BaseElement.js.map +1 -1
- package/dist/es/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js +1 -1
- package/dist/es/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js.map +1 -1
- package/dist/es/components/internal/ClickToPay/context/ClickToPayProvider.js.map +1 -1
- package/dist/es/components/internal/ClickToPay/services/sdks/AbstractSrcInitiator.js.map +1 -1
- package/dist/es/components/internal/ClickToPay/services/sdks/MastercardSdk.js.map +1 -1
- package/dist/es/components/internal/ClickToPay/services/sdks/VisaSdk.js.map +1 -1
- package/dist/es/components/internal/IbanInput/IbanInput.js +1 -1
- package/dist/es/components/internal/IbanInput/IbanInput.js.map +1 -1
- package/dist/es/components/internal/IbanInput/validate.js +1 -1
- package/dist/es/components/internal/IbanInput/validate.js.map +1 -1
- package/dist/es/components/internal/OpenInvoice/OpenInvoice.js +1 -1
- package/dist/es/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
- package/dist/es/components/internal/PhoneInput/PhoneInputForm.js +1 -1
- package/dist/es/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
- package/dist/es/components/internal/RedirectButton/RedirectButton.js +1 -1
- package/dist/es/components/internal/RedirectButton/RedirectButton.js.map +1 -1
- package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
- package/dist/es/components/internal/UIElement/UIElement.js +1 -1
- package/dist/es/components/internal/UIElement/UIElement.js.map +1 -1
- package/dist/es/components/internal/UIElement/utils.js +1 -1
- package/dist/es/components/internal/UIElement/utils.js.map +1 -1
- package/dist/es/core/config.js +1 -1
- package/dist/es/index.d.ts +1983 -1924
- package/dist/es/utils/Validator/Validator.js +1 -1
- package/dist/es/utils/Validator/Validator.js.map +1 -1
- package/dist/es/utils/useForm/reducer.js +1 -1
- package/dist/es/utils/useForm/reducer.js.map +1 -1
- package/dist/es/utils/useForm/useForm.js +1 -1
- package/dist/es/utils/useForm/useForm.js.map +1 -1
- package/dist/es/utils/useForm/useFormWithA11y.js +1 -1
- package/dist/es/utils/useForm/useFormWithA11y.js.map +1 -1
- package/dist/es-legacy/adyen.css +12 -12
- package/dist/es-legacy/adyen.css.map +1 -1
- package/dist/es-legacy/components/ANCV/components/ANCVInput.js +1 -1
- package/dist/es-legacy/components/ANCV/components/ANCVInput.js.map +1 -1
- package/dist/es-legacy/components/Ach/Ach.js +1 -1
- package/dist/es-legacy/components/Ach/Ach.js.map +1 -1
- package/dist/es-legacy/components/Ach/components/AchComponent.js +1 -1
- package/dist/es-legacy/components/Ach/components/AchComponent.js.map +1 -1
- package/dist/es-legacy/components/AmazonPay/AmazonPay.js +1 -1
- package/dist/es-legacy/components/AmazonPay/AmazonPay.js.map +1 -1
- package/dist/es-legacy/components/BacsDD/BacsDD.js +1 -1
- package/dist/es-legacy/components/BacsDD/BacsDD.js.map +1 -1
- package/dist/es-legacy/components/BacsDD/components/BacsInput.js +1 -1
- package/dist/es-legacy/components/BacsDD/components/BacsInput.js.map +1 -1
- package/dist/es-legacy/components/BankTransfer/BankTransfer.js +1 -1
- package/dist/es-legacy/components/BankTransfer/BankTransfer.js.map +1 -1
- package/dist/es-legacy/components/BankTransfer/components/BankTransferInput/BankTransferInput.js +1 -1
- package/dist/es-legacy/components/BankTransfer/components/BankTransferInput/BankTransferInput.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/Blik/components/BlikInput.js +1 -1
- package/dist/es-legacy/components/Blik/components/BlikInput.js.map +1 -1
- package/dist/es-legacy/components/Card/Card.js +1 -1
- package/dist/es-legacy/components/Card/Card.js.map +1 -1
- package/dist/es-legacy/components/Card/components/CardInput/types.js.map +1 -1
- package/dist/es-legacy/components/Card/components/ClickToPayHolder.js.map +1 -1
- package/dist/es-legacy/components/Card/components/ClickToPayWrapper.js +1 -1
- package/dist/es-legacy/components/Card/components/ClickToPayWrapper.js.map +1 -1
- package/dist/es-legacy/components/CashAppPay/CashAppPay.js +1 -1
- package/dist/es-legacy/components/CashAppPay/CashAppPay.js.map +1 -1
- package/dist/es-legacy/components/CustomCard/CustomCard.js +1 -1
- package/dist/es-legacy/components/CustomCard/CustomCard.js.map +1 -1
- package/dist/es-legacy/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
- package/dist/es-legacy/components/Donation/Donation.js +1 -1
- package/dist/es-legacy/components/Donation/Donation.js.map +1 -1
- package/dist/es-legacy/components/Donation/components/DonationComponent.js +1 -1
- package/dist/es-legacy/components/Donation/components/DonationComponent.js.map +1 -1
- package/dist/es-legacy/components/Dropin/Dropin.js +1 -1
- package/dist/es-legacy/components/Dropin/Dropin.js.map +1 -1
- package/dist/es-legacy/components/Dropin/components/DropinComponent.js.map +1 -1
- package/dist/es-legacy/components/Giftcard/Giftcard.js.map +1 -1
- package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js.map +1 -1
- package/dist/es-legacy/components/Giropay/Giropay.js +1 -1
- package/dist/es-legacy/components/Giropay/Giropay.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/MBWay/components/MBWayInput/MBWayInput.js +1 -1
- package/dist/es-legacy/components/MBWay/components/MBWayInput/MBWayInput.js.map +1 -1
- package/dist/es-legacy/components/Multibanco/Multibanco.js +1 -1
- package/dist/es-legacy/components/Multibanco/Multibanco.js.map +1 -1
- package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js +1 -1
- package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js.map +1 -1
- package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js +1 -1
- package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js.map +1 -1
- package/dist/es-legacy/components/PayTo/components/BSBInput.js +1 -1
- package/dist/es-legacy/components/PayTo/components/BSBInput.js.map +1 -1
- package/dist/es-legacy/components/PayTo/components/PayToNameFields.js +1 -1
- package/dist/es-legacy/components/PayTo/components/PayToNameFields.js.map +1 -1
- package/dist/es-legacy/components/PayTo/components/PayToPhone.js +1 -1
- package/dist/es-legacy/components/PayTo/components/PayToPhone.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/PixInput/PixInput.js +1 -1
- package/dist/es-legacy/components/Pix/components/PixInput/PixInput.js.map +1 -1
- package/dist/es-legacy/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js +1 -1
- package/dist/es-legacy/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js.map +1 -1
- package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js +1 -1
- package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js.map +1 -1
- package/dist/es-legacy/components/Redirect/Redirect.js +1 -1
- package/dist/es-legacy/components/Redirect/Redirect.js.map +1 -1
- package/dist/es-legacy/components/Sepa/Sepa.js.map +1 -1
- package/dist/es-legacy/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
- package/dist/es-legacy/components/Trustly/Trustly.js +1 -1
- package/dist/es-legacy/components/Trustly/Trustly.js.map +1 -1
- package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
- package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.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/Address/Specifications.js.map +1 -1
- package/dist/es-legacy/components/internal/Address/components/AddressSearch.js.map +1 -1
- package/dist/es-legacy/components/internal/Address/components/FieldContainer.js.map +1 -1
- package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
- package/dist/es-legacy/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js +1 -1
- package/dist/es-legacy/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js.map +1 -1
- package/dist/es-legacy/components/internal/ClickToPay/context/ClickToPayProvider.js.map +1 -1
- package/dist/es-legacy/components/internal/ClickToPay/services/sdks/AbstractSrcInitiator.js.map +1 -1
- package/dist/es-legacy/components/internal/ClickToPay/services/sdks/MastercardSdk.js.map +1 -1
- package/dist/es-legacy/components/internal/ClickToPay/services/sdks/VisaSdk.js.map +1 -1
- package/dist/es-legacy/components/internal/IbanInput/IbanInput.js +1 -1
- package/dist/es-legacy/components/internal/IbanInput/IbanInput.js.map +1 -1
- package/dist/es-legacy/components/internal/IbanInput/validate.js +1 -1
- package/dist/es-legacy/components/internal/IbanInput/validate.js.map +1 -1
- package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js +1 -1
- package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
- package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js +1 -1
- package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
- package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js +1 -1
- package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js.map +1 -1
- package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
- package/dist/es-legacy/components/internal/UIElement/UIElement.js +1 -1
- package/dist/es-legacy/components/internal/UIElement/UIElement.js.map +1 -1
- package/dist/es-legacy/components/internal/UIElement/utils.js +1 -1
- package/dist/es-legacy/components/internal/UIElement/utils.js.map +1 -1
- package/dist/es-legacy/core/config.js +1 -1
- package/dist/es-legacy/utils/Validator/Validator.js +1 -1
- package/dist/es-legacy/utils/Validator/Validator.js.map +1 -1
- package/dist/es-legacy/utils/useForm/reducer.js +1 -1
- package/dist/es-legacy/utils/useForm/reducer.js.map +1 -1
- package/dist/es-legacy/utils/useForm/useForm.js +1 -1
- package/dist/es-legacy/utils/useForm/useForm.js.map +1 -1
- package/dist/es-legacy/utils/useForm/useFormWithA11y.js +1 -1
- package/dist/es-legacy/utils/useForm/useFormWithA11y.js.map +1 -1
- package/package.json +10 -10
- package/styles/adyen.css +12 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Donation.js","sources":["../../../../src/components/Donation/Donation.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport DonationComponent from './components/DonationComponent';\nimport { TxVariants } from '../tx-variants';\nimport type { ICore } from '../../core/types';\nimport { DonationCampaignOptions, DonationConfiguration, DonationProps } from './types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { DonationPayload } from './components/types';\nimport { AnalyticsInfoEvent, InfoEventType, UiTarget } from '../../core/Analytics/events/AnalyticsInfoEvent';\nimport DonationCampaignService, { REPARENT_WITHOUT_AUTO_START_ERROR_MSG } from './DonationCampaignService';\n\nclass DonationElement extends UIElement<DonationConfiguration> {\n public static readonly type = TxVariants.donation;\n\n private readonly isInServiceMode: boolean = false;\n\n constructor(checkout: ICore, props: DonationProps) {\n const isServiceMode = DonationElement.isServiceMode(props);\n const initialConfig = isServiceMode ? undefined : props;\n\n super(checkout, initialConfig);\n\n this.donate = this.donate.bind(this);\n this.cancel = this.cancel.bind(this);\n this.amountSelected = this.amountSelected.bind(this);\n\n this.isInServiceMode = isServiceMode;\n\n if (checkout.session && isServiceMode) {\n void this.initialiseServiceMode(checkout, props); // NOSONAR - async in constructor is intentional for fire-and-forget service mode initialization\n }\n }\n\n /**\n * Type guard to determine if props are for \"service\" mode.\n *\n * The \"service\" mode is used in the /sessions flow:\n * - if the /payments response mandates it, we consult the /sessions/donationCampaigns endpoint on behalf of the merchant, and mount any found Donation Campaigns.\n *\n * The opposite of this mode is the \"direct\" mode, used in the Advanced flow:\n * - the merchant makes their own call to the /donationCampaigns endpoint and provides the Donation Campaign directly to the component.\n */\n private static isServiceMode(props: DonationProps): props is DonationCampaignOptions {\n return 'rootNode' in props && !!props.rootNode;\n }\n\n public static readonly defaultProps = {\n onCancel: () => {},\n onDonate: () => {}\n };\n\n private async initialiseServiceMode(checkout: ICore, props: DonationCampaignOptions) {\n if (!checkout.session) {\n return;\n }\n\n if (checkout.session.sessionsDonationInitiated) {\n console.error(REPARENT_WITHOUT_AUTO_START_ERROR_MSG);\n return;\n }\n\n checkout.session.sessionsDonationInitiated = true;\n try {\n const donationCampaign = await new DonationCampaignService(checkout, props).initialise();\n if (donationCampaign) {\n this.props = { ...this.props, ...donationCampaign };\n this.mount(props.rootNode);\n }\n // If no campaigns found (response is null), don't mount - silently do nothing\n } catch (error: unknown) {\n // Call merchant defined callback\n // e.g. when the merchant wants to reparent the component and donation type = roundup but no commercialTxAmount has been set\n checkout.options.donation?.onDonationFailure?.(error);\n }\n }\n\n /**\n * Returns the component payment data ready to submit to the Checkout API\n */\n get data() {\n return this.state.data;\n }\n\n /**\n * Returns whether the component state is valid or not\n */\n get isValid() {\n return this.state.isValid;\n }\n\n setState(newState) {\n this.state = { ...this.state, ...newState };\n }\n\n donate() {\n // Send analytics\n const event = new AnalyticsLogEvent({\n component: DonationElement.type,\n type: LogEventType.submit,\n subType: LogEventSubtype.donation,\n message: 'Making donation'\n });\n this.core.modules.analytics.sendAnalytics(event);\n\n // Call callback\n const { data, isValid } = this;\n this.props.onDonate({ data, isValid }, this);\n }\n\n cancel() {\n // Send analytics\n const event = new AnalyticsLogEvent({\n component: DonationElement.type,\n type: LogEventType.closed,\n subType: LogEventSubtype.donation,\n message: 'Opting to not make donation'\n });\n this.core.modules.analytics.sendAnalytics(event);\n\n // Call callback\n const { data, isValid } = this;\n\n // If running in service mode, unmount the component\n if (this.isInServiceMode) {\n this.unmount();\n }\n\n this.props.onCancel({ data, isValid });\n }\n\n amountSelected(state: DonationPayload) {\n // Send analytics\n const event = new AnalyticsInfoEvent({\n component: DonationElement.type,\n type: InfoEventType.selected,\n selectedValue: JSON.stringify(state.data.amount),\n target: UiTarget.donationAmountButton\n });\n this.core.modules.analytics.sendAnalytics(event);\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <DonationComponent\n {...this.props}\n
|
|
1
|
+
{"version":3,"file":"Donation.js","sources":["../../../../src/components/Donation/Donation.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport DonationComponent from './components/DonationComponent';\nimport { TxVariants } from '../tx-variants';\nimport type { ICore } from '../../core/types';\nimport { DonationCampaignOptions, DonationConfiguration, DonationProps } from './types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { DonationPayload } from './components/types';\nimport { AnalyticsInfoEvent, InfoEventType, UiTarget } from '../../core/Analytics/events/AnalyticsInfoEvent';\nimport DonationCampaignService, { REPARENT_WITHOUT_AUTO_START_ERROR_MSG } from './DonationCampaignService';\n\nclass DonationElement extends UIElement<DonationConfiguration> {\n public static readonly type = TxVariants.donation;\n\n private readonly isInServiceMode: boolean = false;\n\n constructor(checkout: ICore, props: DonationProps) {\n const isServiceMode = DonationElement.isServiceMode(props);\n const initialConfig = isServiceMode ? undefined : props;\n\n super(checkout, initialConfig);\n\n this.donate = this.donate.bind(this);\n this.cancel = this.cancel.bind(this);\n this.amountSelected = this.amountSelected.bind(this);\n\n this.isInServiceMode = isServiceMode;\n\n if (checkout.session && isServiceMode) {\n void this.initialiseServiceMode(checkout, props); // NOSONAR - async in constructor is intentional for fire-and-forget service mode initialization\n }\n }\n\n /**\n * Type guard to determine if props are for \"service\" mode.\n *\n * The \"service\" mode is used in the /sessions flow:\n * - if the /payments response mandates it, we consult the /sessions/donationCampaigns endpoint on behalf of the merchant, and mount any found Donation Campaigns.\n *\n * The opposite of this mode is the \"direct\" mode, used in the Advanced flow:\n * - the merchant makes their own call to the /donationCampaigns endpoint and provides the Donation Campaign directly to the component.\n */\n private static isServiceMode(props: DonationProps): props is DonationCampaignOptions {\n return 'rootNode' in props && !!props.rootNode;\n }\n\n public static readonly defaultProps = {\n onCancel: () => {},\n onDonate: () => {}\n };\n\n private async initialiseServiceMode(checkout: ICore, props: DonationCampaignOptions) {\n if (!checkout.session) {\n return;\n }\n\n if (checkout.session.sessionsDonationInitiated) {\n console.error(REPARENT_WITHOUT_AUTO_START_ERROR_MSG);\n return;\n }\n\n checkout.session.sessionsDonationInitiated = true;\n try {\n const donationCampaign = await new DonationCampaignService(checkout, props).initialise();\n if (donationCampaign) {\n this.props = { ...this.props, ...donationCampaign };\n this.mount(props.rootNode);\n }\n // If no campaigns found (response is null), don't mount - silently do nothing\n } catch (error: unknown) {\n // Call merchant defined callback\n // e.g. when the merchant wants to reparent the component and donation type = roundup but no commercialTxAmount has been set\n checkout.options.donation?.onDonationFailure?.(error);\n }\n }\n\n /**\n * Returns the component payment data ready to submit to the Checkout API\n */\n get data() {\n return this.state.data;\n }\n\n /**\n * Returns whether the component state is valid or not\n */\n get isValid() {\n return this.state.isValid;\n }\n\n setState(newState) {\n this.state = { ...this.state, ...newState };\n }\n\n donate() {\n // Send analytics\n const event = new AnalyticsLogEvent({\n component: DonationElement.type,\n type: LogEventType.submit,\n subType: LogEventSubtype.donation,\n message: 'Making donation'\n });\n this.core.modules.analytics.sendAnalytics(event);\n\n // Call callback\n const { data, isValid } = this;\n this.props.onDonate({ data, isValid }, this);\n }\n\n cancel() {\n // Send analytics\n const event = new AnalyticsLogEvent({\n component: DonationElement.type,\n type: LogEventType.closed,\n subType: LogEventSubtype.donation,\n message: 'Opting to not make donation'\n });\n this.core.modules.analytics.sendAnalytics(event);\n\n // Call callback\n const { data, isValid } = this;\n\n // If running in service mode, unmount the component\n if (this.isInServiceMode) {\n this.unmount();\n }\n\n this.props.onCancel({ data, isValid });\n }\n\n amountSelected(state: DonationPayload) {\n // Send analytics\n const event = new AnalyticsInfoEvent({\n component: DonationElement.type,\n type: InfoEventType.selected,\n selectedValue: JSON.stringify(state.data.amount),\n target: UiTarget.donationAmountButton\n });\n this.core.modules.analytics.sendAnalytics(event);\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <DonationComponent\n {...this.props}\n setComponentRef={this.setComponentRef}\n onChange={this.setState}\n onDonate={this.donate}\n onCancel={this.cancel}\n onAmountSelected={this.amountSelected}\n />\n );\n }\n}\n\nexport default DonationElement;\n"],"names":["DonationElement","UIElement","isServiceMode","props","rootNode","initialiseServiceMode","checkout","session","sessionsDonationInitiated","console","error","REPARENT_WITHOUT_AUTO_START_ERROR_MSG","donationCampaign","DonationCampaignService","initialise","this","mount","options","donation","onDonationFailure","data","state","isValid","setState","newState","donate","event","AnalyticsLogEvent","component","type","LogEventType","submit","subType","LogEventSubtype","message","core","modules","analytics","sendAnalytics","onDonate","cancel","closed","isInServiceMode","unmount","onCancel","amountSelected","AnalyticsInfoEvent","InfoEventType","selected","selectedValue","JSON","stringify","amount","target","UiTarget","donationAmountButton","componentToRender","h","DonationComponent","setComponentRef","onChange","onAmountSelected","constructor","super","undefined","_define_property","bind","TxVariants","defaultProps"],"mappings":"wqBAWA,MAAMA,UAAwBC,EA+B1B,oBAAeC,CAAcC,GACzB,MAAO,aAAcA,KAAWA,EAAMC,QAC1C,CAOA,2BAAcC,CAAsBC,EAAiBH,GACjD,GAAKG,EAASC,QAId,GAAID,EAASC,QAAQC,0BACjBC,QAAQC,MAAMC,OADlB,CAKAL,EAASC,QAAQC,2BAA4B,EAC7C,IACI,MAAMI,QAAyB,IAAIC,EAAwBP,EAAUH,GAAOW,aACxEF,IACAG,KAAKZ,MAAQ,IAAKY,KAAKZ,SAAUS,GACjCG,KAAKC,MAAMb,EAAMC,UAGzB,CAAE,MAAOM,GAGLJ,EAASW,QAAQC,UAAUC,oBAAoBT,EACnD,CAdA,CAeJ,CAKA,QAAIU,GACA,OAAOL,KAAKM,MAAMD,IACtB,CAKA,WAAIE,GACA,OAAOP,KAAKM,MAAMC,OACtB,CAEAC,QAAAA,CAASC,GACLT,KAAKM,MAAQ,IAAKN,KAAKM,SAAUG,EACrC,CAEAC,MAAAA,GAEI,MAAMC,EAAQ,IAAIC,EAAkB,CAChCC,UAAW5B,EAAgB6B,KAC3BA,KAAMC,EAAaC,OACnBC,QAASC,EAAgBf,SACzBgB,QAAS,oBAEbnB,KAAKoB,KAAKC,QAAQC,UAAUC,cAAcZ,GAG1C,MAAMN,KAAEA,EAAIE,QAAEA,GAAYP,KAC1BA,KAAKZ,MAAMoC,SAAS,CAAEnB,OAAME,WAAWP,KAC3C,CAEAyB,MAAAA,GAEI,MAAMd,EAAQ,IAAIC,EAAkB,CAChCC,UAAW5B,EAAgB6B,KAC3BA,KAAMC,EAAaW,OACnBT,QAASC,EAAgBf,SACzBgB,QAAS,gCAEbnB,KAAKoB,KAAKC,QAAQC,UAAUC,cAAcZ,GAG1C,MAAMN,KAAEA,EAAIE,QAAEA,GAAYP,KAGtBA,KAAK2B,iBACL3B,KAAK4B,UAGT5B,KAAKZ,MAAMyC,SAAS,CAAExB,OAAME,WAChC,CAEAuB,cAAAA,CAAexB,GAEX,MAAMK,EAAQ,IAAIoB,EAAmB,CACjClB,UAAW5B,EAAgB6B,KAC3BA,KAAMkB,EAAcC,SACpBC,cAAeC,KAAKC,UAAU9B,EAAMD,KAAKgC,QACzCC,OAAQC,EAASC,uBAErBxC,KAAKoB,KAAKC,QAAQC,UAAUC,cAAcZ,EAC9C,CAEmB8B,iBAAAA,GACf,OACIC,EAACC,EAAAA,IACO3C,KAAKZ,MACTwD,gBAAiB5C,KAAK4C,gBACtBC,SAAU7C,KAAKQ,SACfgB,SAAUxB,KAAKU,OACfmB,SAAU7B,KAAKyB,OACfqB,iBAAkB9C,KAAK8B,gBAGnC,CAxIA,WAAAiB,CAAYxD,EAAiBH,GACzB,MAAMD,EAAgBF,EAAgBE,cAAcC,GAGpD4D,MAAMzD,EAFgBJ,OAAgB8D,EAAY7D,GAJtD8D,EAAAlD,KAAiB2B,mBAA2B,GAQxC3B,KAAKU,OAASV,KAAKU,OAAOyC,KAAKnD,MAC/BA,KAAKyB,OAASzB,KAAKyB,OAAO0B,KAAKnD,MAC/BA,KAAK8B,eAAiB9B,KAAK8B,eAAeqB,KAAKnD,MAE/CA,KAAK2B,gBAAkBxC,EAEnBI,EAASC,SAAWL,GACfa,KAAKV,sBAAsBC,EAAUH,EAElD,EAnBA8D,EADEjE,EACqB6B,OAAOsC,EAAWjD,UAkCzC+C,EAnCEjE,EAmCqBoE,eAAe,CAClCxB,SAAU,OACVL,SAAU"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as e}from"../../../external/preact/dist/preact.js";import{useState as t,useEffect as
|
|
1
|
+
import{createElement as e}from"../../../external/preact/dist/preact.js";import{useState as t,useRef as o,useEffect as n}from"../../../external/preact/hooks/dist/hooks.js";import a from"./CampaignContent.js";import s from"../../internal/Button/Button.js";import r from"../../internal/Img/Img.js";import{useCoreContext as u}from"../../../core/Context/CoreProvider.js";import c from"../../internal/DisclaimerMessage/DisclaimerMessage.js";import i from"../../../core/Context/useImage.js";import m from"./FixedAmounts.js";import d from"./Roundup.js";import{getRoundupAmount as l,getAmountLabel as g,getRoundupAmountLabel as p}from"./utils.js";function _(_){const{donation:y,commercialTxAmount:f,onAmountSelected:h,onCancel:v,onDonate:k,showCancelButton:C=!0,termsAndConditionsUrl:x}=_,{i18n:A}=u(),j=i(),{currency:N,type:B}=y,R="roundup"===B,[D,S]=t("ready"),[w,F]=t(R),[I,M]=t({currency:N,value:R?l(y.maxRoundupAmount,f):null}),P=o({setStatus:S});n(()=>{_.setComponentRef(P.current)},[_.setComponentRef]);const T=()=>{S("loading"),k({data:{amount:I}})};return n(()=>{_.onChange({data:{amount:I},isValid:w})},[I,w]),"error"===D?e("div",{className:"adyen-checkout__adyen-giving"},e(r,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--error",src:j({imageFolder:"components/"})("error"),alt:A.get("error.message.unknown")}),e("div",{className:"adyen-checkout__status__text"},A.get("error.message.unknown"))):"success"===D?e("div",{className:"adyen-checkout__adyen-giving"},e(r,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--success",src:j({imageFolder:"components/"})("heart"),alt:A.get("thanksForYourSupport")}),e("div",{className:"adyen-checkout__status__text"},A.get("thanksForYourSupport"))):e("div",{className:"adyen-checkout__adyen-giving"},e(a,_),e("div",{className:"adyen-checkout__adyen-giving-actions"},x&&e(c,{message:A.get("donationTermsCondition"),urls:[x]}),R?e(d,{donationAmount:p(A,{maxRoundupAmount:y.maxRoundupAmount,commercialTxAmount:f,currency:N}),originalPaymentAmount:g(A,{value:f,currency:N}),status:D,onDonateButtonClicked:T}):e(m,{selectedAmount:I.value,values:y.values,currency:N,status:D,onAmountSelected:({target:e})=>{const t=parseInt(e.value,10);F(!0),M(e=>({...e,value:t})),h({data:{amount:{...I,value:t}}})},onDonateButtonClicked:T}),C&&e(s,{classNameModifiers:["decline"],variant:"ghost",onClick:()=>{S("ready"),v({data:{amount:I},isValid:w})},disabled:"loading"===D,label:`${A.get("notNowButton")} ›`})))}_.defaultProps={onCancel:()=>{},onChange:()=>{},onDonate:()=>{},donation:{},showCancelButton:!0};export{_ as default};
|
|
2
2
|
//# sourceMappingURL=DonationComponent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DonationComponent.js","sources":["../../../../../src/components/Donation/components/DonationComponent.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useEffect, useState } from 'preact/hooks';\nimport CampaignContent from './CampaignContent';\nimport Button from '../../internal/Button';\nimport Img from '../../internal/Img';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport '../Donation.scss';\nimport DisclaimerMessage from '../../internal/DisclaimerMessage';\nimport { DonationAmount, DonationComponentProps, Status } from './types';\nimport useImage from '../../../core/Context/useImage';\nimport FixedAmounts from './FixedAmounts';\nimport Roundup from './Roundup';\nimport { getAmountLabel, getRoundupAmount, getRoundupAmountLabel } from './utils';\n\nexport default function DonationComponent(props: Readonly<DonationComponentProps>) {\n const { donation, commercialTxAmount, onAmountSelected, onCancel, onDonate, showCancelButton = true, termsAndConditionsUrl } = props;\n const { i18n } = useCoreContext();\n const getImage = useImage();\n const { currency, type } = donation;\n const isRoundupDonation = type === 'roundup';\n const [status, setStatus] = useState<Status>('ready');\n const [isValid, setIsValid] = useState<boolean>(isRoundupDonation);\n const [amount, setAmount] = useState<DonationAmount>({\n currency,\n value: isRoundupDonation ? getRoundupAmount(donation.maxRoundupAmount, commercialTxAmount) : null\n });\n\n
|
|
1
|
+
{"version":3,"file":"DonationComponent.js","sources":["../../../../../src/components/Donation/components/DonationComponent.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport CampaignContent from './CampaignContent';\nimport Button from '../../internal/Button';\nimport Img from '../../internal/Img';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport '../Donation.scss';\nimport DisclaimerMessage from '../../internal/DisclaimerMessage';\nimport { DonationAmount, DonationComponentProps, Status } from './types';\nimport useImage from '../../../core/Context/useImage';\nimport FixedAmounts from './FixedAmounts';\nimport Roundup from './Roundup';\nimport { getAmountLabel, getRoundupAmount, getRoundupAmountLabel } from './utils';\nimport { ComponentMethodsRef } from '../../types';\n\nexport default function DonationComponent(props: Readonly<DonationComponentProps>) {\n const { donation, commercialTxAmount, onAmountSelected, onCancel, onDonate, showCancelButton = true, termsAndConditionsUrl } = props;\n const { i18n } = useCoreContext();\n const getImage = useImage();\n const { currency, type } = donation;\n const isRoundupDonation = type === 'roundup';\n const [status, setStatus] = useState<Status>('ready');\n const [isValid, setIsValid] = useState<boolean>(isRoundupDonation);\n const [amount, setAmount] = useState<DonationAmount>({\n currency,\n value: isRoundupDonation ? getRoundupAmount(donation.maxRoundupAmount, commercialTxAmount) : null\n });\n\n const donationComponentRef = useRef<ComponentMethodsRef>({\n setStatus: setStatus\n });\n\n useEffect(() => {\n props.setComponentRef(donationComponentRef.current);\n }, [props.setComponentRef]);\n\n const handleAmountSelected = ({ target }) => {\n const value = parseInt(target.value, 10);\n setIsValid(true);\n setAmount((amount: DonationAmount) => ({ ...amount, value }));\n\n onAmountSelected({ data: { amount: { ...amount, value } } });\n };\n\n const handleDonate = () => {\n setStatus('loading');\n onDonate({ data: { amount } });\n };\n\n const handleDecline = () => {\n setStatus('ready');\n onCancel({ data: { amount }, isValid });\n };\n\n useEffect(() => {\n props.onChange({ data: { amount }, isValid });\n }, [amount, isValid]);\n\n if (status === 'error') {\n return (\n <div className=\"adyen-checkout__adyen-giving\">\n <Img\n className=\"adyen-checkout__status__icon adyen-checkout__status__icon--error\"\n src={getImage({ imageFolder: 'components/' })('error')}\n alt={i18n.get('error.message.unknown')}\n />\n <div className=\"adyen-checkout__status__text\">{i18n.get('error.message.unknown')}</div>\n </div>\n );\n }\n\n if (status === 'success') {\n return (\n <div className=\"adyen-checkout__adyen-giving\">\n <Img\n className=\"adyen-checkout__status__icon adyen-checkout__status__icon--success\"\n src={getImage({ imageFolder: 'components/' })('heart')}\n alt={i18n.get('thanksForYourSupport')}\n />\n\n <div className=\"adyen-checkout__status__text\">{i18n.get('thanksForYourSupport')}</div>\n </div>\n );\n }\n\n return (\n <div className=\"adyen-checkout__adyen-giving\">\n <CampaignContent {...props} />\n\n <div className=\"adyen-checkout__adyen-giving-actions\">\n {termsAndConditionsUrl && <DisclaimerMessage message={i18n.get('donationTermsCondition')} urls={[termsAndConditionsUrl]} />}\n {isRoundupDonation ? (\n <Roundup\n donationAmount={getRoundupAmountLabel(i18n, { maxRoundupAmount: donation.maxRoundupAmount, commercialTxAmount, currency })}\n originalPaymentAmount={getAmountLabel(i18n, { value: commercialTxAmount, currency })}\n status={status}\n onDonateButtonClicked={handleDonate}\n ></Roundup>\n ) : (\n <FixedAmounts\n selectedAmount={amount.value}\n values={donation.values}\n currency={currency}\n status={status}\n onAmountSelected={handleAmountSelected}\n onDonateButtonClicked={handleDonate}\n ></FixedAmounts>\n )}\n {showCancelButton && (\n <Button\n classNameModifiers={['decline']}\n variant=\"ghost\"\n onClick={handleDecline}\n disabled={status === 'loading'}\n label={`${i18n.get('notNowButton')} ›`}\n />\n )}\n </div>\n </div>\n );\n}\n\nDonationComponent.defaultProps = {\n onCancel: () => {},\n onChange: () => {},\n onDonate: () => {},\n donation: {},\n showCancelButton: true\n};\n"],"names":["DonationComponent","props","donation","commercialTxAmount","onAmountSelected","onCancel","onDonate","showCancelButton","termsAndConditionsUrl","i18n","useCoreContext","getImage","useImage","currency","type","isRoundupDonation","status","setStatus","useState","isValid","setIsValid","amount","setAmount","value","getRoundupAmount","maxRoundupAmount","donationComponentRef","useRef","useEffect","setComponentRef","current","handleDonate","data","onChange","h","div","className","Img","src","imageFolder","alt","get","CampaignContent","DisclaimerMessage","message","urls","Roundup","donationAmount","getRoundupAmountLabel","originalPaymentAmount","getAmountLabel","onDonateButtonClicked","FixedAmounts","selectedAmount","values","target","parseInt","Button","classNameModifiers","variant","onClick","disabled","label","defaultProps"],"mappings":"8nBAee,SAASA,EAAkBC,GACtC,MAAMC,SAAEA,EAAQC,mBAAEA,EAAkBC,iBAAEA,EAAgBC,SAAEA,EAAQC,SAAEA,EAAQC,iBAAEA,GAAmB,EAAIC,sBAAEA,GAA0BP,GACzHQ,KAAEA,GAASC,IACXC,EAAWC,KACXC,SAAEA,EAAQC,KAAEA,GAASZ,EACrBa,EAA6B,YAATD,GACnBE,EAAQC,GAAaC,EAAiB,UACtCC,EAASC,GAAcF,EAAkBH,IACzCM,EAAQC,GAAaJ,EAAyB,CACjDL,WACAU,MAAOR,EAAoBS,EAAiBtB,EAASuB,iBAAkBtB,GAAsB,OAG3FuB,EAAuBC,EAA4B,CACrDV,UAAWA,IAGfW,EAAU,KACN3B,EAAM4B,gBAAgBH,EAAqBI,UAC5C,CAAC7B,EAAM4B,kBAEV,MAQME,EAAe,KACjBd,EAAU,WACVX,EAAS,CAAE0B,KAAM,CAAEX,aAYvB,OAJAO,EAAU,KACN3B,EAAMgC,SAAS,CAAED,KAAM,CAAEX,UAAUF,aACpC,CAACE,EAAQF,IAEG,UAAXH,EAEIkB,EAACC,MAAAA,CAAIC,UAAU,gCACXF,EAACG,EAAAA,CACGD,UAAU,mEACVE,IAAK3B,EAAS,CAAE4B,YAAa,eAAxB5B,CAAyC,SAC9C6B,IAAK/B,EAAKgC,IAAI,2BAElBP,EAACC,MAAAA,CAAIC,UAAU,gCAAgC3B,EAAKgC,IAAI,2BAKrD,YAAXzB,EAEIkB,EAACC,MAAAA,CAAIC,UAAU,gCACXF,EAACG,EAAAA,CACGD,UAAU,qEACVE,IAAK3B,EAAS,CAAE4B,YAAa,eAAxB5B,CAAyC,SAC9C6B,IAAK/B,EAAKgC,IAAI,0BAGlBP,EAACC,MAAAA,CAAIC,UAAU,gCAAgC3B,EAAKgC,IAAI,0BAMhEP,EAACC,MAAAA,CAAIC,UAAU,gCACXF,EAACQ,EAAoBzC,GAErBiC,EAACC,MAAAA,CAAIC,UAAU,wCACV5B,GAAyB0B,EAACS,EAAAA,CAAkBC,QAASnC,EAAKgC,IAAI,0BAA2BI,KAAM,CAACrC,KAChGO,EACGmB,EAACY,EAAAA,CACGC,eAAgBC,EAAsBvC,EAAM,CAAEgB,iBAAkBvB,EAASuB,iBAAkBtB,qBAAoBU,aAC/GoC,sBAAuBC,EAAezC,EAAM,CAAEc,MAAOpB,EAAoBU,aACzEG,OAAQA,EACRmC,sBAAuBpB,IAG3BG,EAACkB,EAAAA,CACGC,eAAgBhC,EAAOE,MACvB+B,OAAQpD,EAASoD,OACjBzC,SAAUA,EACVG,OAAQA,EACRZ,iBApES,EAAGmD,aAC5B,MAAMhC,EAAQiC,SAASD,EAAOhC,MAAO,IACrCH,GAAW,GACXE,EAAWD,QAAiCA,EAAQE,WAEpDnB,EAAiB,CAAE4B,KAAM,CAAEX,OAAQ,IAAKA,EAAQE,aAgEhC4B,sBAAuBpB,IAG9BxB,GACG2B,EAACuB,EAAAA,CACGC,mBAAoB,CAAC,WACrBC,QAAQ,QACRC,QA/DE,KAClB3C,EAAU,SACVZ,EAAS,CAAE2B,KAAM,CAAEX,UAAUF,aA8Db0C,SAAqB,YAAX7C,EACV8C,MAAO,GAAGrD,EAAKgC,IAAI,uBAM3C,CAEAzC,EAAkB+D,aAAe,CAC7B1D,SAAU,OACV4B,SAAU,OACV3B,SAAU,OACVJ,SAAU,CAAA,EACVK,kBAAkB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import n from"./defaultProps.js";import{DropinComponent as o}from"./components/DropinComponent.js";import s from"./elements/createElements.js";import i from"./elements/createStoredElements.js";import a from"./elements/createInstantPaymentElements.js";import{hasOwnProperty as r}from"../../utils/hasOwnProperty.js";import h from"./elements/splitPaymentMethods.js";import{TxVariants as d}from"../tx-variants.js";function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const p=["paywithgoogle","googlepay","applepay"];class l extends t{reportIntegrationFlavor(){this.analytics.sendFlavor("dropin")}storeElementRefOnCore(){this.core.storeElementReference(this)}formatProps(e){return{...super.formatProps(e),instantPaymentTypes:Array.from(new Set(e.instantPaymentTypes)).filter(e=>p.includes(e))}}get isValid(){return!!this.dropinRef&&!!this.dropinRef.state.activePaymentMethod&&!!this.dropinRef.state.activePaymentMethod.isValid}showValidation(){return this.dropinRef.state.activePaymentMethod&&this.dropinRef.state.activePaymentMethod.showValidation(),this}setStatus(e,t={}){return this.dropinRef?.setStatus(e,t),this}get activePaymentMethod(){return this.dropinRef?.state||this.dropinRef?.state.activePaymentMethod?this.dropinRef.state.activePaymentMethod:null}get data(){return this.activePaymentMethod?this.dropinRef.state.activePaymentMethod.data:null}displayFinalAnimation(e){this.props.disableFinalAnimation||this.dropinRef?.setStatus(e)}submit(){if(!this.activePaymentMethod)throw new Error("No active payment method.");this.activePaymentMethod.isValid||this.activePaymentMethod.showValidation(),this.activePaymentMethod.isInstantPayment&&this.closeActivePaymentMethod(),this.activePaymentMethod.submit()}updateAmount(e,t){this.props={...this.props,...e&&{amount:e},...t&&{secondaryAmount:t}},this.amountProviderRef.current?.update(e,t),this.paymentMethodElements.forEach(n=>{n.updateAmount(e,t)})}handleElementsCreated(e){e&&0!==e.length||(this.paymentMethodElements=[]),this.paymentMethodElements=e}handleAction(e,t={}){if(!e||!e.type){if(r(e,"action")&&r(e,"resultCode"))throw new Error('handleAction::Invalid Action - the passed action object itself has an "action" property and a "resultCode": have you passed in the whole response object by mistake?');throw new Error('handleAction::Invalid Action - the passed action object does not have a "type" property')}if("redirect"!==e.type&&this.activePaymentMethod?.updateWithAction)return this.activePaymentMethod.updateWithAction(e);this.elementRef instanceof l&&(t={...this.elementRef.activePaymentMethod?.props,...t});const n=this.core.createFromAction(e,{...t,elementRef:this.elementRef,isDropin:!0});return n?(this.setStatus(n.props.statusType,{component:n}),this.componentFromAction=n,this):null}closeActivePaymentMethod(){this.dropinRef.closeActivePaymentMethod()}handleKeyDown(e){if("Enter"===e.key||"Enter"===e.code){if("radio"===document?.activeElement?.getAttribute("role"))return;super.handleKeyDown(e)}}onEnterKeyPressed(e,t){const n=this.activePaymentMethod??t;this.activePaymentMethod?.onEnterKeyPressed(e,n)}componentToRender(){return e(o,{...this.props,core:this.core,elementRef:this.elementRef,onCreateElements:this.handleCreate,onElementsCreated:this.handleElementsCreated,ref:e=>{this.dropinRef=e}})}constructor(e,t){super(e,t),m(this,"dropinRef",null),m(this,"paymentMethodsConfiguration",void 0),m(this,"componentFromAction",void 0),m(this,"paymentMethodElements",[]),m(this,"handleCreate",()=>{const{paymentMethodsConfiguration:e,showStoredPaymentMethods:t,showPaymentMethods:n,instantPaymentTypes:o}=this.props,{paymentMethods:r,storedPaymentMethods:d,instantPaymentMethods:m,fastlanePaymentMethod:p}=h(this.core.paymentMethodsResponse,o),l={elementRef:this.elementRef,isDropin:!0},c=n?s(r,e,l,this.core):Promise.resolve([]),y=a(m,e,l,this.core);return[t?i(this.props.filterStoredPaymentMethods?.(d)??d,e,l,this.core):Promise.resolve([]),c,y,p?s([p],e,l,this.core):[]]}),m(this,"handleOrder",({order:e})=>{this.updateParent({order:e})}),this.submit=this.submit.bind(this),this.handleAction=this.handleAction.bind(this),this.handleElementsCreated=this.handleElementsCreated.bind(this),this.props.paymentMethodComponents.forEach(e=>this.core.register(e)),this.paymentMethodsConfiguration=this.props.paymentMethodsConfiguration||{}}}m(l,"type",d.dropin),m(l,"defaultProps",n);export{l as default};
|
|
1
|
+
import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import n from"./defaultProps.js";import{DropinComponent as o}from"./components/DropinComponent.js";import s from"./elements/createElements.js";import i from"./elements/createStoredElements.js";import a from"./elements/createInstantPaymentElements.js";import{hasOwnProperty as r}from"../../utils/hasOwnProperty.js";import h from"./elements/splitPaymentMethods.js";import{TxVariants as d}from"../tx-variants.js";function m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const p=["paywithgoogle","googlepay","applepay"];class l extends t{reportIntegrationFlavor(){this.analytics.sendFlavor("dropin")}storeElementRefOnCore(){this.core.storeElementReference(this)}formatProps(e){return{...super.formatProps(e),instantPaymentTypes:Array.from(new Set(e.instantPaymentTypes)).filter(e=>p.includes(e))}}get isValid(){return!!this.dropinRef&&!!this.dropinRef.state.activePaymentMethod&&!!this.dropinRef.state.activePaymentMethod.isValid}showValidation(){return this.dropinRef.state.activePaymentMethod&&this.dropinRef.state.activePaymentMethod.showValidation(),this}setElementStatus(e,t){return this.elementRef?.setStatus?.(e,t),this}setStatus(e,t={}){return this.dropinRef?.setStatus(e,t),this}get activePaymentMethod(){return this.dropinRef?.state||this.dropinRef?.state.activePaymentMethod?this.dropinRef.state.activePaymentMethod:null}get data(){return this.activePaymentMethod?this.dropinRef.state.activePaymentMethod.data:null}displayFinalAnimation(e){this.props.disableFinalAnimation||this.dropinRef?.setStatus(e)}submit(){if(!this.activePaymentMethod)throw new Error("No active payment method.");this.activePaymentMethod.isValid||this.activePaymentMethod.showValidation(),this.activePaymentMethod.isInstantPayment&&this.closeActivePaymentMethod(),this.activePaymentMethod.submit()}updateAmount(e,t){this.props={...this.props,...e&&{amount:e},...t&&{secondaryAmount:t}},this.amountProviderRef.current?.update(e,t),this.paymentMethodElements.forEach(n=>{n.updateAmount(e,t)})}handleElementsCreated(e){e&&0!==e.length||(this.paymentMethodElements=[]),this.paymentMethodElements=e}handleAction(e,t={}){if(!e||!e.type){if(r(e,"action")&&r(e,"resultCode"))throw new Error('handleAction::Invalid Action - the passed action object itself has an "action" property and a "resultCode": have you passed in the whole response object by mistake?');throw new Error('handleAction::Invalid Action - the passed action object does not have a "type" property')}if("redirect"!==e.type&&this.activePaymentMethod?.updateWithAction)return this.activePaymentMethod.updateWithAction(e);this.elementRef instanceof l&&(t={...this.elementRef.activePaymentMethod?.props,...t});const n=this.core.createFromAction(e,{...t,elementRef:this.elementRef,isDropin:!0});return n?(this.setStatus(n.props.statusType,{component:n}),this.componentFromAction=n,this):null}closeActivePaymentMethod(){this.dropinRef.closeActivePaymentMethod()}handleKeyDown(e){if("Enter"===e.key||"Enter"===e.code){if("radio"===document?.activeElement?.getAttribute("role"))return;super.handleKeyDown(e)}}onEnterKeyPressed(e,t){const n=this.activePaymentMethod??t;this.activePaymentMethod?.onEnterKeyPressed(e,n)}componentToRender(){return e(o,{...this.props,core:this.core,elementRef:this.elementRef,onCreateElements:this.handleCreate,onElementsCreated:this.handleElementsCreated,ref:e=>{this.dropinRef=e}})}constructor(e,t){super(e,t),m(this,"dropinRef",null),m(this,"elementRef",void 0),m(this,"paymentMethodsConfiguration",void 0),m(this,"componentFromAction",void 0),m(this,"paymentMethodElements",[]),m(this,"handleCreate",()=>{const{paymentMethodsConfiguration:e,showStoredPaymentMethods:t,showPaymentMethods:n,instantPaymentTypes:o}=this.props,{paymentMethods:r,storedPaymentMethods:d,instantPaymentMethods:m,fastlanePaymentMethod:p}=h(this.core.paymentMethodsResponse,o),l={elementRef:this.elementRef,isDropin:!0},c=n?s(r,e,l,this.core):Promise.resolve([]),y=a(m,e,l,this.core);return[t?i(this.props.filterStoredPaymentMethods?.(d)??d,e,l,this.core):Promise.resolve([]),c,y,p?s([p],e,l,this.core):[]]}),m(this,"handleOrder",({order:e})=>{this.updateParent({order:e})}),this.submit=this.submit.bind(this),this.handleAction=this.handleAction.bind(this),this.handleElementsCreated=this.handleElementsCreated.bind(this),this.props.paymentMethodComponents.forEach(e=>this.core.register(e)),this.paymentMethodsConfiguration=this.props.paymentMethodsConfiguration||{}}}m(l,"type",d.dropin),m(l,"defaultProps",n);export{l as default};
|
|
2
2
|
//# sourceMappingURL=Dropin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropin.js","sources":["../../../../src/components/Dropin/Dropin.tsx"],"sourcesContent":["import { h, TargetedKeyboardEvent } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport defaultProps from './defaultProps';\nimport DropinComponent from '../../components/Dropin/components/DropinComponent';\nimport { createElements, createStoredElements } from './elements';\nimport createInstantPaymentElements from './elements/createInstantPaymentElements';\nimport { hasOwnProperty } from '../../utils/hasOwnProperty';\nimport splitPaymentMethods from './elements/splitPaymentMethods';\nimport { TxVariants } from '../tx-variants';\n\nimport type { DropinComponentProps, DropinConfiguration, InstantPaymentTypes, PaymentMethodsConfiguration } from './types';\nimport type { PaymentAction, PaymentAmount, PaymentResponseData } from '../../types/global-types';\nimport type { ICore } from '../../core/types';\nimport type { IDropin } from './types';\n\nconst SUPPORTED_INSTANT_PAYMENTS = ['paywithgoogle', 'googlepay', 'applepay'];\n\nclass DropinElement extends UIElement<DropinConfiguration> implements IDropin {\n public static readonly type = TxVariants.dropin;\n\n protected static readonly defaultProps = defaultProps;\n\n public dropinRef = null;\n\n private paymentMethodsConfiguration: PaymentMethodsConfiguration;\n /**\n * Reference to the component created from `handleAction` (Ex.: ThreeDS2Challenge)\n */\n public componentFromAction?: UIElement;\n\n /**\n * Reference to all payment method elements being rendered by Drop-in\n */\n public paymentMethodElements: UIElement[] = [];\n\n constructor(checkout: ICore, props?: DropinConfiguration) {\n super(checkout, props);\n this.submit = this.submit.bind(this);\n this.handleAction = this.handleAction.bind(this);\n this.handleElementsCreated = this.handleElementsCreated.bind(this);\n\n this.props.paymentMethodComponents.forEach(PaymentMethod => this.core.register(PaymentMethod));\n this.paymentMethodsConfiguration = this.props.paymentMethodsConfiguration || {};\n }\n\n protected override reportIntegrationFlavor(): void {\n void this.analytics.sendFlavor('dropin');\n }\n\n protected override storeElementRefOnCore() {\n this.core.storeElementReference(this);\n }\n\n formatProps(props) {\n return {\n ...super.formatProps(props),\n instantPaymentTypes: Array.from<InstantPaymentTypes>(new Set(props.instantPaymentTypes)).filter(value =>\n SUPPORTED_INSTANT_PAYMENTS.includes(value)\n )\n };\n }\n\n get isValid() {\n return !!this.dropinRef && !!this.dropinRef.state.activePaymentMethod && !!this.dropinRef.state.activePaymentMethod.isValid;\n }\n\n showValidation() {\n if (this.dropinRef.state.activePaymentMethod) {\n this.dropinRef.state.activePaymentMethod.showValidation();\n }\n\n return this;\n }\n\n public setStatus(status, props = {}): this {\n this.dropinRef?.setStatus(status, props);\n return this;\n }\n\n get activePaymentMethod() {\n if (!this.dropinRef?.state && !this.dropinRef?.state.activePaymentMethod) {\n return null;\n }\n\n return this.dropinRef.state.activePaymentMethod;\n }\n\n get data() {\n if (!this.activePaymentMethod) {\n return null;\n }\n\n return this.dropinRef.state.activePaymentMethod.data;\n }\n\n public displayFinalAnimation(type: 'success' | 'error') {\n if (this.props.disableFinalAnimation) return;\n\n this.dropinRef?.setStatus(type);\n }\n\n /**\n * Calls the onSubmit event with the state of the activePaymentMethod\n */\n public override submit(): void {\n if (!this.activePaymentMethod) {\n throw new Error('No active payment method.');\n }\n\n if (!this.activePaymentMethod.isValid) {\n this.activePaymentMethod.showValidation();\n }\n\n if (this.activePaymentMethod.isInstantPayment) {\n this.closeActivePaymentMethod();\n }\n\n this.activePaymentMethod.submit();\n }\n\n /**\n * Updates the amount in the props and propagates it to the AmountProvider. That way the children components can use the updated amount.\n *\n * This method **overrides** the parent one to specifically propagate the changes to all payment method elements.\n *\n * @param amount - Primary payment amount object\n * @param secondaryAmount - Optional secondary amount for display purposes (e.g., converted currency)\n * @internal\n */\n public override updateAmount(amount: PaymentAmount, secondaryAmount?: PaymentAmount): void {\n this.props = {\n ...this.props,\n ...(amount && { amount }),\n ...(secondaryAmount && { secondaryAmount })\n };\n\n this.amountProviderRef.current?.update(amount, secondaryAmount);\n\n this.paymentMethodElements.forEach(element => {\n element.updateAmount(amount, secondaryAmount);\n });\n }\n\n /**\n * Assign all elements created in the Component to the paymentMethodElements property\n * @param elements\n */\n private handleElementsCreated(elements: UIElement[]) {\n if (!elements || elements.length === 0) this.paymentMethodElements = [];\n this.paymentMethodElements = elements;\n }\n\n /**\n * Creates the Drop-in elements\n */\n private handleCreate = (): ReturnType<DropinComponentProps['onCreateElements']> => {\n const { paymentMethodsConfiguration, showStoredPaymentMethods, showPaymentMethods, instantPaymentTypes } = this.props;\n\n const { paymentMethods, storedPaymentMethods, instantPaymentMethods, fastlanePaymentMethod } = splitPaymentMethods(\n this.core.paymentMethodsResponse,\n instantPaymentTypes\n );\n\n const dropinProps = {\n elementRef: this.elementRef,\n isDropin: true\n };\n\n const elements = showPaymentMethods\n ? createElements(paymentMethods, paymentMethodsConfiguration, dropinProps, this.core)\n : Promise.resolve([]);\n const instantPaymentElements = createInstantPaymentElements(instantPaymentMethods, paymentMethodsConfiguration, dropinProps, this.core);\n const storedElements = showStoredPaymentMethods\n ? createStoredElements(\n this.props.filterStoredPaymentMethods?.(storedPaymentMethods) ?? storedPaymentMethods,\n paymentMethodsConfiguration,\n dropinProps,\n this.core\n )\n : Promise.resolve([]);\n const fastlanePaymentElement: Promise<UIElement[]> | [] = fastlanePaymentMethod\n ? createElements([fastlanePaymentMethod], paymentMethodsConfiguration, dropinProps, this.core)\n : [];\n\n return [storedElements, elements, instantPaymentElements, fastlanePaymentElement];\n };\n\n public handleAction(action: PaymentAction, props = {}): this | null {\n if (!action || !action.type) {\n if (hasOwnProperty(action, 'action') && hasOwnProperty(action, 'resultCode')) {\n throw new Error(\n 'handleAction::Invalid Action - the passed action object itself has an \"action\" property and ' +\n 'a \"resultCode\": have you passed in the whole response object by mistake?'\n );\n }\n throw new Error('handleAction::Invalid Action - the passed action object does not have a \"type\" property');\n }\n\n if (action.type !== 'redirect' && this.activePaymentMethod?.updateWithAction) {\n return this.activePaymentMethod.updateWithAction(action);\n }\n\n if (this.elementRef instanceof DropinElement) {\n props = {\n ...this.elementRef.activePaymentMethod?.props,\n ...props\n };\n }\n\n const paymentAction: UIElement = this.core.createFromAction(action, {\n ...props,\n elementRef: this.elementRef, // maintain elementRef for 3DS2 flow\n isDropin: true\n });\n\n if (paymentAction) {\n this.setStatus(paymentAction.props.statusType, { component: paymentAction });\n this.componentFromAction = paymentAction;\n return this;\n }\n\n return null;\n }\n\n /**\n * handleOrder is implemented so we don't trigger a callback like in the components\n * @param response - PaymentResponse\n */\n protected handleOrder = ({ order }: PaymentResponseData): void => {\n void this.updateParent({ order });\n };\n\n closeActivePaymentMethod() {\n this.dropinRef.closeActivePaymentMethod();\n }\n\n protected handleKeyDown(e: TargetedKeyboardEvent<HTMLInputElement> | KeyboardEvent) {\n if (e.key === 'Enter' || e.code === 'Enter') {\n // If the active element has role=\"radio\", we're on a header in the PMList, in which case we don't want to validate the form, or, prevent the default behaviour\n const isPMHeader = document?.activeElement?.getAttribute('role') === 'radio';\n if (isPMHeader) {\n return;\n }\n super.handleKeyDown(e);\n }\n }\n\n protected onEnterKeyPressed(activeElement: Element, component: UIElement) {\n // We want to have a ref to the activePM, if we can; not a ref to the Dropin\n const pmComponent = this.activePaymentMethod ?? component;\n this.activePaymentMethod?.onEnterKeyPressed(activeElement, pmComponent);\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <DropinComponent\n {...this.props}\n core={this.core}\n elementRef={this.elementRef}\n onCreateElements={this.handleCreate}\n onElementsCreated={this.handleElementsCreated}\n ref={dropinRef => {\n this.dropinRef = dropinRef;\n }}\n />\n );\n }\n}\n\nexport default DropinElement;\n"],"names":["SUPPORTED_INSTANT_PAYMENTS","DropinElement","UIElement","reportIntegrationFlavor","this","analytics","sendFlavor","storeElementRefOnCore","core","storeElementReference","formatProps","props","super","instantPaymentTypes","Array","from","Set","filter","value","includes","isValid","dropinRef","state","activePaymentMethod","showValidation","setStatus","status","data","displayFinalAnimation","type","disableFinalAnimation","submit","Error","isInstantPayment","closeActivePaymentMethod","updateAmount","amount","secondaryAmount","amountProviderRef","current","update","paymentMethodElements","forEach","element","handleElementsCreated","elements","length","handleAction","action","hasOwnProperty","updateWithAction","elementRef","paymentAction","createFromAction","isDropin","statusType","component","componentFromAction","handleKeyDown","e","key","code","document","activeElement","getAttribute","onEnterKeyPressed","pmComponent","componentToRender","h","DropinComponent","onCreateElements","handleCreate","onElementsCreated","ref","constructor","checkout","_define_property","paymentMethodsConfiguration","showStoredPaymentMethods","showPaymentMethods","paymentMethods","storedPaymentMethods","instantPaymentMethods","fastlanePaymentMethod","splitPaymentMethods","paymentMethodsResponse","dropinProps","createElements","Promise","resolve","instantPaymentElements","createInstantPaymentElements","createStoredElements","filterStoredPaymentMethods","handleOrder","order","updateParent","bind","paymentMethodComponents","PaymentMethod","register","TxVariants","dropin","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropin.js","sources":["../../../../src/components/Dropin/Dropin.tsx"],"sourcesContent":["import { h, TargetedKeyboardEvent } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport defaultProps from './defaultProps';\nimport DropinComponent from '../../components/Dropin/components/DropinComponent';\nimport { createElements, createStoredElements } from './elements';\nimport createInstantPaymentElements from './elements/createInstantPaymentElements';\nimport { hasOwnProperty } from '../../utils/hasOwnProperty';\nimport splitPaymentMethods from './elements/splitPaymentMethods';\nimport { TxVariants } from '../tx-variants';\n\nimport type { DropinComponentProps, DropinConfiguration, InstantPaymentTypes, PaymentMethodsConfiguration } from './types';\nimport type { PaymentAction, PaymentAmount, PaymentResponseData } from '../../types/global-types';\nimport type { ICore } from '../../core/types';\nimport type { IDropin } from './types';\nimport { UIElementStatus } from '../types';\n\nconst SUPPORTED_INSTANT_PAYMENTS = ['paywithgoogle', 'googlepay', 'applepay'];\n\nclass DropinElement extends UIElement<DropinConfiguration> implements IDropin {\n public static readonly type = TxVariants.dropin;\n\n protected static readonly defaultProps = defaultProps;\n\n public dropinRef = null;\n\n public elementRef: DropinElement;\n\n private readonly paymentMethodsConfiguration: PaymentMethodsConfiguration;\n /**\n * Reference to the component created from `handleAction` (Ex.: ThreeDS2Challenge)\n */\n public componentFromAction?: UIElement;\n\n /**\n * Reference to all payment method elements being rendered by Drop-in\n */\n public paymentMethodElements: UIElement[] = [];\n\n constructor(checkout: ICore, props?: DropinConfiguration) {\n super(checkout, props);\n this.submit = this.submit.bind(this);\n this.handleAction = this.handleAction.bind(this);\n this.handleElementsCreated = this.handleElementsCreated.bind(this);\n\n this.props.paymentMethodComponents.forEach(PaymentMethod => this.core.register(PaymentMethod));\n this.paymentMethodsConfiguration = this.props.paymentMethodsConfiguration || {};\n }\n\n protected override reportIntegrationFlavor(): void {\n void this.analytics.sendFlavor('dropin');\n }\n\n protected override storeElementRefOnCore() {\n this.core.storeElementReference(this);\n }\n\n formatProps(props: DropinConfiguration) {\n return {\n ...super.formatProps(props),\n instantPaymentTypes: Array.from<InstantPaymentTypes>(new Set(props.instantPaymentTypes)).filter(value =>\n SUPPORTED_INSTANT_PAYMENTS.includes(value)\n )\n };\n }\n\n get isValid() {\n return !!this.dropinRef && !!this.dropinRef.state.activePaymentMethod && !!this.dropinRef.state.activePaymentMethod.isValid;\n }\n\n showValidation() {\n if (this.dropinRef.state.activePaymentMethod) {\n this.dropinRef.state.activePaymentMethod.showValidation();\n }\n\n return this;\n }\n\n public setElementStatus(status: UIElementStatus, props?: Record<string, unknown>): this {\n this.elementRef?.setStatus?.(status, props);\n return this;\n }\n\n public setStatus(status: UIElementStatus, props: Record<string, unknown> = {}): this {\n this.dropinRef?.setStatus(status, props);\n return this;\n }\n\n get activePaymentMethod() {\n if (!this.dropinRef?.state && !this.dropinRef?.state.activePaymentMethod) {\n return null;\n }\n\n return this.dropinRef.state.activePaymentMethod;\n }\n\n get data() {\n if (!this.activePaymentMethod) {\n return null;\n }\n\n return this.dropinRef.state.activePaymentMethod.data;\n }\n\n public displayFinalAnimation(type: 'success' | 'error') {\n if (this.props.disableFinalAnimation) return;\n\n this.dropinRef?.setStatus(type);\n }\n\n /**\n * Calls the onSubmit event with the state of the activePaymentMethod\n */\n public override submit(): void {\n if (!this.activePaymentMethod) {\n throw new Error('No active payment method.');\n }\n\n if (!this.activePaymentMethod.isValid) {\n this.activePaymentMethod.showValidation();\n }\n\n if (this.activePaymentMethod.isInstantPayment) {\n this.closeActivePaymentMethod();\n }\n\n this.activePaymentMethod.submit();\n }\n\n /**\n * Updates the amount in the props and propagates it to the AmountProvider. That way the children components can use the updated amount.\n *\n * This method **overrides** the parent one to specifically propagate the changes to all payment method elements.\n *\n * @param amount - Primary payment amount object\n * @param secondaryAmount - Optional secondary amount for display purposes (e.g., converted currency)\n * @internal\n */\n public override updateAmount(amount: PaymentAmount, secondaryAmount?: PaymentAmount): void {\n this.props = {\n ...this.props,\n ...(amount && { amount }),\n ...(secondaryAmount && { secondaryAmount })\n };\n\n this.amountProviderRef.current?.update(amount, secondaryAmount);\n\n this.paymentMethodElements.forEach(element => {\n element.updateAmount(amount, secondaryAmount);\n });\n }\n\n /**\n * Assign all elements created in the Component to the paymentMethodElements property\n * @param elements\n */\n private handleElementsCreated(elements: UIElement[]) {\n if (!elements || elements.length === 0) this.paymentMethodElements = [];\n this.paymentMethodElements = elements;\n }\n\n /**\n * Creates the Drop-in elements\n */\n private readonly handleCreate = (): ReturnType<DropinComponentProps['onCreateElements']> => {\n const { paymentMethodsConfiguration, showStoredPaymentMethods, showPaymentMethods, instantPaymentTypes } = this.props;\n\n const { paymentMethods, storedPaymentMethods, instantPaymentMethods, fastlanePaymentMethod } = splitPaymentMethods(\n this.core.paymentMethodsResponse,\n instantPaymentTypes\n );\n\n const dropinProps = {\n elementRef: this.elementRef,\n isDropin: true\n };\n\n const elements = showPaymentMethods\n ? createElements(paymentMethods, paymentMethodsConfiguration, dropinProps, this.core)\n : Promise.resolve([]);\n const instantPaymentElements = createInstantPaymentElements(instantPaymentMethods, paymentMethodsConfiguration, dropinProps, this.core);\n const storedElements = showStoredPaymentMethods\n ? createStoredElements(\n this.props.filterStoredPaymentMethods?.(storedPaymentMethods) ?? storedPaymentMethods,\n paymentMethodsConfiguration,\n dropinProps,\n this.core\n )\n : Promise.resolve([]);\n const fastlanePaymentElement: Promise<UIElement[]> | [] = fastlanePaymentMethod\n ? createElements([fastlanePaymentMethod], paymentMethodsConfiguration, dropinProps, this.core)\n : [];\n\n return [storedElements, elements, instantPaymentElements, fastlanePaymentElement];\n };\n\n public handleAction(action: PaymentAction, props = {}): this | null {\n if (!action || !action.type) {\n if (hasOwnProperty(action, 'action') && hasOwnProperty(action, 'resultCode')) {\n throw new Error(\n 'handleAction::Invalid Action - the passed action object itself has an \"action\" property and ' +\n 'a \"resultCode\": have you passed in the whole response object by mistake?'\n );\n }\n throw new Error('handleAction::Invalid Action - the passed action object does not have a \"type\" property');\n }\n\n if (action.type !== 'redirect' && this.activePaymentMethod?.updateWithAction) {\n return this.activePaymentMethod.updateWithAction(action);\n }\n\n if (this.elementRef instanceof DropinElement) {\n props = {\n ...this.elementRef.activePaymentMethod?.props,\n ...props\n };\n }\n\n const paymentAction: UIElement = this.core.createFromAction(action, {\n ...props,\n elementRef: this.elementRef, // maintain elementRef for 3DS2 flow\n isDropin: true\n });\n\n if (paymentAction) {\n this.setStatus(paymentAction.props.statusType as UIElementStatus, { component: paymentAction });\n this.componentFromAction = paymentAction;\n return this;\n }\n\n return null;\n }\n\n /**\n * handleOrder is implemented so we don't trigger a callback like in the components\n * @param response - PaymentResponse\n */\n protected handleOrder = ({ order }: PaymentResponseData): void => {\n void this.updateParent({ order });\n };\n\n closeActivePaymentMethod() {\n this.dropinRef.closeActivePaymentMethod();\n }\n\n protected handleKeyDown(e: TargetedKeyboardEvent<HTMLInputElement> | KeyboardEvent) {\n if (e.key === 'Enter' || e.code === 'Enter') {\n // If the active element has role=\"radio\", we're on a header in the PMList, in which case we don't want to validate the form, or, prevent the default behaviour\n const isPMHeader = document?.activeElement?.getAttribute('role') === 'radio';\n if (isPMHeader) {\n return;\n }\n super.handleKeyDown(e);\n }\n }\n\n protected onEnterKeyPressed(activeElement: Element, component: UIElement) {\n // We want to have a ref to the activePM, if we can; not a ref to the Dropin\n const pmComponent = this.activePaymentMethod ?? component;\n this.activePaymentMethod?.onEnterKeyPressed(activeElement, pmComponent);\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <DropinComponent\n {...this.props}\n core={this.core}\n elementRef={this.elementRef}\n onCreateElements={this.handleCreate}\n onElementsCreated={this.handleElementsCreated}\n ref={dropinRef => {\n this.dropinRef = dropinRef;\n }}\n />\n );\n }\n}\n\nexport default DropinElement;\n"],"names":["SUPPORTED_INSTANT_PAYMENTS","DropinElement","UIElement","reportIntegrationFlavor","this","analytics","sendFlavor","storeElementRefOnCore","core","storeElementReference","formatProps","props","super","instantPaymentTypes","Array","from","Set","filter","value","includes","isValid","dropinRef","state","activePaymentMethod","showValidation","setElementStatus","status","elementRef","setStatus","data","displayFinalAnimation","type","disableFinalAnimation","submit","Error","isInstantPayment","closeActivePaymentMethod","updateAmount","amount","secondaryAmount","amountProviderRef","current","update","paymentMethodElements","forEach","element","handleElementsCreated","elements","length","handleAction","action","hasOwnProperty","updateWithAction","paymentAction","createFromAction","isDropin","statusType","component","componentFromAction","handleKeyDown","e","key","code","document","activeElement","getAttribute","onEnterKeyPressed","pmComponent","componentToRender","h","DropinComponent","onCreateElements","handleCreate","onElementsCreated","ref","constructor","checkout","_define_property","paymentMethodsConfiguration","showStoredPaymentMethods","showPaymentMethods","paymentMethods","storedPaymentMethods","instantPaymentMethods","fastlanePaymentMethod","splitPaymentMethods","paymentMethodsResponse","dropinProps","createElements","Promise","resolve","instantPaymentElements","createInstantPaymentElements","createStoredElements","filterStoredPaymentMethods","handleOrder","order","updateParent","bind","paymentMethodComponents","PaymentMethod","register","TxVariants","dropin","defaultProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropinComponent.js","sources":["../../../../../src/components/Dropin/components/DropinComponent.tsx"],"sourcesContent":["import { Component, Fragment, h } from 'preact';\nimport PaymentMethodList from './PaymentMethod/PaymentMethodList';\nimport Status from './status';\nimport getOrderStatus from '../../../core/Services/order-status';\nimport './DropinComponent.scss';\nimport { sanitizeOrder } from '../../internal/UIElement/utils';\nimport type { PaymentAmount } from '../../../types/global-types';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport Button from '../../internal/Button';\nimport type {\n DropinComponentProps,\n DropinComponentState,\n DropinStatus,\n DropinStatusProps,\n onOrderCancelData,\n onOrderCancelInternalCallback,\n PaymentMethodDisplayMode\n} from '../types';\nimport splitPaymentMethods from '../elements/splitPaymentMethods';\nimport { createAvailablePaymentsList, createUnavailablePaymentsList, type PaymentMethodDisplayModeEntry } from '../utils/paymentMethodsAnalytics';\nimport UIElement from '../../internal/UIElement';\nimport { AnalyticsInfoEvent, InfoEventType, UiTarget } from '../../../core/Analytics/events/AnalyticsInfoEvent';\nimport { DropinSuccessState } from './DropinSuccessState';\n\nexport class DropinComponent extends Component<DropinComponentProps, DropinComponentState> {\n public state: DropinComponentState = {\n elements: [],\n fastlanePaymentElement: [],\n instantPaymentElements: [],\n storedPaymentElements: [],\n orderStatus: null,\n isDisabling: false,\n status: { type: 'loading', props: undefined },\n activePaymentMethod: null,\n cachedPaymentMethods: {},\n showDefaultPaymentMethodList: true\n };\n\n componentDidMount() {\n this.prepareDropinData();\n }\n\n public prepareDropinData = () => {\n const { order, clientKey, loadingContext } = this.props;\n const [storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise] = this.props.onCreateElements();\n const orderStatusPromise = order ? getOrderStatus({ clientKey, loadingContext }, order) : null;\n\n void Promise.all([storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise, orderStatusPromise])\n .then(([storedPaymentElements, elements, instantPaymentElements, fastlanePaymentElement, orderStatus]) => {\n this.setState({\n orderStatus,\n elements,\n instantPaymentElements,\n storedPaymentElements,\n fastlanePaymentElement,\n showDefaultPaymentMethodList: fastlanePaymentElement.length === 0\n });\n this.setStatus('ready');\n\n this.props.onElementsCreated([...instantPaymentElements, ...storedPaymentElements, ...elements, ...fastlanePaymentElement]);\n\n this.reportPaymentMethodList({\n fastlane: fastlanePaymentElement,\n instant: instantPaymentElements,\n stored: storedPaymentElements,\n regular: elements\n });\n })\n .catch(() => {\n this.setStatus('error');\n });\n\n this.onOrderCancel = this.getOnOrderCancel();\n };\n\n /**\n * Builds and sends the payment list displayed analytics event.\n */\n private reportPaymentMethodList = (availableElementsByDisplayMode: Record<PaymentMethodDisplayMode, UIElement[]>): void => {\n try {\n const { paymentMethods, storedPaymentMethods, instantPaymentMethods, fastlanePaymentMethod } = splitPaymentMethods(\n this.props.core.paymentMethodsResponse,\n this.props.instantPaymentTypes ?? []\n );\n\n const paymentMethodDisplayModes: PaymentMethodDisplayModeEntry[] = [\n { displayMode: 'fastlane', paymentMethods: fastlanePaymentMethod ? [fastlanePaymentMethod] : [] },\n { displayMode: 'instant', paymentMethods: instantPaymentMethods },\n { displayMode: 'stored', paymentMethods: storedPaymentMethods },\n { displayMode: 'regular', paymentMethods: paymentMethods }\n ];\n\n const availablePaymentMethods = createAvailablePaymentsList(\n paymentMethodDisplayModes.map(e => e.displayMode),\n availableElementsByDisplayMode,\n this.props.core\n );\n\n const unavailablePaymentMethods = createUnavailablePaymentsList(paymentMethodDisplayModes, availableElementsByDisplayMode);\n\n const dropinPaymentListDisplayedEvent = new AnalyticsInfoEvent({\n type: InfoEventType.PaymentListDisplayed,\n component: 'dropin',\n availablePaymentMethods,\n unavailablePaymentMethods\n });\n this.props.core.modules.analytics.sendAnalytics(dropinPaymentListDisplayedEvent);\n } catch (error) {\n console.warn('Drop-in: failed to report payment method list analytics', error);\n }\n };\n\n public setStatus = (status: DropinStatus['type'], props: DropinStatusProps = {}) => {\n this.setState({ status: { type: status, props } });\n };\n\n private setActivePaymentMethod = (paymentMethod: UIElement): void => {\n if (paymentMethod === this.state.activePaymentMethod) {\n return;\n }\n\n this.setState(prevState => ({\n activePaymentMethod: paymentMethod,\n cachedPaymentMethods: { ...prevState.cachedPaymentMethods, [paymentMethod._id]: true }\n }));\n\n if (this.state.cachedPaymentMethods[paymentMethod._id]) {\n paymentMethod.activate();\n }\n };\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.status.type !== this.state.status.type && this.state.activePaymentMethod) {\n // @ts-ignore TODO: Drop-in has its own 'status' values ('custom' for ex) which differs from regular UIElementStatus. Need to investigate best way to define/use this status variable\n this.state.activePaymentMethod.setStatus(this.state.status.type);\n }\n\n if (this.state.status.type === 'ready' && prevState.status.type !== 'ready' && this.props.onReady) {\n this.props.onReady();\n }\n }\n\n private handleOnSelectPaymentMethod = paymentMethod => {\n const { activePaymentMethod } = this.state;\n\n this.setActivePaymentMethod(paymentMethod);\n\n if ((activePaymentMethod && activePaymentMethod._id !== paymentMethod._id) || !activePaymentMethod) {\n this.props.onSelect?.(paymentMethod);\n }\n };\n\n private handleDisableStoredPaymentMethod = storedPaymentMethod => {\n this.setState({ isDisabling: true });\n\n new Promise((resolve, reject) => this.props.onDisableStoredPaymentMethod(storedPaymentMethod.props.storedPaymentMethodId, resolve, reject))\n .then(() => {\n this.setState(prevState => ({\n storedPaymentElements: prevState.storedPaymentElements.filter(pm => pm._id !== storedPaymentMethod._id)\n }));\n this.setState({ isDisabling: false });\n })\n .catch(() => {\n this.setState({ isDisabling: false });\n });\n };\n\n private readonly onShowDefaultPaymentMethodListClick = () => {\n this.setState({\n showDefaultPaymentMethodList: true\n });\n\n const event = new AnalyticsInfoEvent({\n type: InfoEventType.clicked,\n target: UiTarget.otherPaymentMethodButton,\n component: 'dropin'\n });\n\n this.props.modules?.analytics.sendAnalytics(event);\n };\n\n closeActivePaymentMethod() {\n this.setState({ activePaymentMethod: null });\n }\n\n /**\n * getOnOrderCancel decides which onOrderCancel logic should be used, manual or sessions\n */\n private readonly getOnOrderCancel = (): ((data: onOrderCancelData) => void) | null => {\n if (this.props.onOrderCancel) {\n return (data: onOrderCancelData) => {\n const order = sanitizeOrder(data.order);\n new Promise<{ amount: PaymentAmount }>((resolve, reject) => {\n this.props.onOrderCancel({ order }, { resolve, reject });\n })\n .then(({ amount }) => this.props.elementRef.handleAdvanceFlowPaymentMethodsUpdate(null, amount))\n .catch(error => {\n throw new AdyenCheckoutError('NETWORK_ERROR', error);\n });\n };\n }\n if (this.props.session) {\n return (data: onOrderCancelData) =>\n void this.props.session\n .cancelOrder(data)\n .then(() => this.props.core.update({ order: null }))\n .catch(error => {\n console.error(error);\n this.setStatus(error?.message || 'error');\n });\n }\n return null;\n };\n\n private onOrderCancel: onOrderCancelInternalCallback;\n\n render() {\n const {\n elements,\n fastlanePaymentElement,\n instantPaymentElements,\n storedPaymentElements,\n status,\n activePaymentMethod,\n showDefaultPaymentMethodList\n } = this.state;\n\n const isLoading = status.type === 'loading';\n const isRedirecting = status.type === 'redirect';\n const hasPaymentMethodsToBeDisplayed = !!(elements?.length || instantPaymentElements?.length || storedPaymentElements?.length);\n\n switch (status.type) {\n case 'success':\n return <DropinSuccessState message={status.props?.message} />;\n\n case 'error':\n return <Status.Error message={status.props?.message} />;\n\n case 'custom':\n return status.props?.component?.render();\n\n default:\n return (\n <div className={`adyen-checkout__dropin adyen-checkout__dropin--${status.type}`}>\n {isRedirecting && status.props.component && status.props.component.render()}\n {isLoading && status.props && status.props.component && status.props.component.render()}\n\n {!showDefaultPaymentMethodList && (\n <Fragment>\n <PaymentMethodList\n isLoading={isLoading}\n paymentMethods={fastlanePaymentElement}\n activePaymentMethod={activePaymentMethod}\n onSelect={this.handleOnSelectPaymentMethod}\n openFirstPaymentMethod\n showRadioButton={this.props.showRadioButton}\n />\n\n {hasPaymentMethodsToBeDisplayed && (\n <Button\n classNameModifiers={['dropin-show-paymentmethods']}\n variant=\"link\"\n inline\n label=\"Other payment methods\"\n onClick={this.onShowDefaultPaymentMethodListClick}\n />\n )}\n </Fragment>\n )}\n\n {hasPaymentMethodsToBeDisplayed && showDefaultPaymentMethodList && (\n <PaymentMethodList\n isLoading={isLoading || isRedirecting}\n isDisablingPaymentMethod={this.state.isDisabling}\n paymentMethods={elements}\n instantPaymentMethods={instantPaymentElements}\n storedPaymentMethods={storedPaymentElements}\n activePaymentMethod={activePaymentMethod}\n order={this.props.order}\n orderStatus={this.state.orderStatus}\n onOrderCancel={this.onOrderCancel}\n onSelect={this.handleOnSelectPaymentMethod}\n openPaymentMethod={this.props.openPaymentMethod}\n openFirstPaymentMethod={this.props.openFirstPaymentMethod}\n openFirstStoredPaymentMethod={this.props.openFirstStoredPaymentMethod}\n onDisableStoredPaymentMethod={this.handleDisableStoredPaymentMethod}\n showRemovePaymentMethodButton={this.props.showRemovePaymentMethodButton}\n showRadioButton={this.props.showRadioButton}\n />\n )}\n </div>\n );\n }\n }\n}\n\nexport default DropinComponent;\n"],"names":["DropinComponent","Component","componentDidMount","this","prepareDropinData","componentDidUpdate","prevProps","prevState","status","type","state","activePaymentMethod","setStatus","props","onReady","closeActivePaymentMethod","setState","render","elements","fastlanePaymentElement","instantPaymentElements","storedPaymentElements","showDefaultPaymentMethodList","isLoading","isRedirecting","hasPaymentMethodsToBeDisplayed","length","h","DropinSuccessState","message","Status","Error","component","div","className","Fragment","PaymentMethodList","paymentMethods","onSelect","handleOnSelectPaymentMethod","openFirstPaymentMethod","showRadioButton","Button","classNameModifiers","variant","inline","label","onClick","onShowDefaultPaymentMethodListClick","isDisablingPaymentMethod","isDisabling","instantPaymentMethods","storedPaymentMethods","order","orderStatus","onOrderCancel","openPaymentMethod","openFirstStoredPaymentMethod","onDisableStoredPaymentMethod","handleDisableStoredPaymentMethod","showRemovePaymentMethodButton","super","args","_define_property","undefined","cachedPaymentMethods","clientKey","loadingContext","storedElementsPromises","elementsPromises","instantPaymentsPromises","fastlanePaymentElementPromise","onCreateElements","orderStatusPromise","getOrderStatus","Promise","all","then","onElementsCreated","reportPaymentMethodList","fastlane","instant","stored","regular","catch","getOnOrderCancel","availableElementsByDisplayMode","fastlanePaymentMethod","splitPaymentMethods","core","paymentMethodsResponse","instantPaymentTypes","paymentMethodDisplayModes","displayMode","availablePaymentMethods","createAvailablePaymentsList","map","e","unavailablePaymentMethods","createUnavailablePaymentsList","dropinPaymentListDisplayedEvent","AnalyticsInfoEvent","InfoEventType","PaymentListDisplayed","modules","analytics","sendAnalytics","error","console","warn","setActivePaymentMethod","paymentMethod","_id","activate","storedPaymentMethod","resolve","reject","storedPaymentMethodId","filter","pm","event","clicked","target","UiTarget","otherPaymentMethodButton","data","sanitizeOrder","amount","elementRef","handleAdvanceFlowPaymentMethodsUpdate","AdyenCheckoutError","session","cancelOrder","update"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropinComponent.js","sources":["../../../../../src/components/Dropin/components/DropinComponent.tsx"],"sourcesContent":["import { Component, Fragment, h } from 'preact';\nimport PaymentMethodList from './PaymentMethod/PaymentMethodList';\nimport Status from './status';\nimport getOrderStatus from '../../../core/Services/order-status';\nimport './DropinComponent.scss';\nimport { sanitizeOrder } from '../../internal/UIElement/utils';\nimport type { PaymentAmount } from '../../../types/global-types';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport Button from '../../internal/Button';\nimport type {\n DropinComponentProps,\n DropinComponentState,\n DropinStatus,\n DropinStatusProps,\n onOrderCancelData,\n onOrderCancelInternalCallback,\n PaymentMethodDisplayMode\n} from '../types';\nimport splitPaymentMethods from '../elements/splitPaymentMethods';\nimport { createAvailablePaymentsList, createUnavailablePaymentsList, type PaymentMethodDisplayModeEntry } from '../utils/paymentMethodsAnalytics';\nimport UIElement from '../../internal/UIElement';\nimport { AnalyticsInfoEvent, InfoEventType, UiTarget } from '../../../core/Analytics/events/AnalyticsInfoEvent';\nimport { DropinSuccessState } from './DropinSuccessState';\n\nexport class DropinComponent extends Component<DropinComponentProps, DropinComponentState> {\n public state: DropinComponentState = {\n elements: [],\n fastlanePaymentElement: [],\n instantPaymentElements: [],\n storedPaymentElements: [],\n orderStatus: null,\n isDisabling: false,\n status: { type: 'loading', props: undefined },\n activePaymentMethod: null,\n cachedPaymentMethods: {},\n showDefaultPaymentMethodList: true\n };\n\n componentDidMount() {\n this.prepareDropinData();\n }\n\n public prepareDropinData = () => {\n const { order, clientKey, loadingContext } = this.props;\n const [storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise] = this.props.onCreateElements();\n const orderStatusPromise = order ? getOrderStatus({ clientKey, loadingContext }, order) : null;\n\n void Promise.all([storedElementsPromises, elementsPromises, instantPaymentsPromises, fastlanePaymentElementPromise, orderStatusPromise])\n .then(([storedPaymentElements, elements, instantPaymentElements, fastlanePaymentElement, orderStatus]) => {\n this.setState({\n orderStatus,\n elements,\n instantPaymentElements,\n storedPaymentElements,\n fastlanePaymentElement,\n showDefaultPaymentMethodList: fastlanePaymentElement.length === 0\n });\n this.setStatus('ready');\n\n this.props.onElementsCreated([...instantPaymentElements, ...storedPaymentElements, ...elements, ...fastlanePaymentElement]);\n\n this.reportPaymentMethodList({\n fastlane: fastlanePaymentElement,\n instant: instantPaymentElements,\n stored: storedPaymentElements,\n regular: elements\n });\n })\n .catch(() => {\n this.setStatus('error');\n });\n\n this.onOrderCancel = this.getOnOrderCancel();\n };\n\n /**\n * Builds and sends the payment list displayed analytics event.\n */\n private reportPaymentMethodList = (availableElementsByDisplayMode: Record<PaymentMethodDisplayMode, UIElement[]>): void => {\n try {\n const { paymentMethods, storedPaymentMethods, instantPaymentMethods, fastlanePaymentMethod } = splitPaymentMethods(\n this.props.core.paymentMethodsResponse,\n this.props.instantPaymentTypes ?? []\n );\n\n const paymentMethodDisplayModes: PaymentMethodDisplayModeEntry[] = [\n { displayMode: 'fastlane', paymentMethods: fastlanePaymentMethod ? [fastlanePaymentMethod] : [] },\n { displayMode: 'instant', paymentMethods: instantPaymentMethods },\n { displayMode: 'stored', paymentMethods: storedPaymentMethods },\n { displayMode: 'regular', paymentMethods: paymentMethods }\n ];\n\n const availablePaymentMethods = createAvailablePaymentsList(\n paymentMethodDisplayModes.map(e => e.displayMode),\n availableElementsByDisplayMode,\n this.props.core\n );\n\n const unavailablePaymentMethods = createUnavailablePaymentsList(paymentMethodDisplayModes, availableElementsByDisplayMode);\n\n const dropinPaymentListDisplayedEvent = new AnalyticsInfoEvent({\n type: InfoEventType.PaymentListDisplayed,\n component: 'dropin',\n availablePaymentMethods,\n unavailablePaymentMethods\n });\n this.props.core.modules.analytics.sendAnalytics(dropinPaymentListDisplayedEvent);\n } catch (error) {\n console.warn('Drop-in: failed to report payment method list analytics', error);\n }\n };\n\n public setStatus = (status: DropinStatus['type'], props: DropinStatusProps = {}) => {\n this.setState({ status: { type: status, props } });\n };\n\n private setActivePaymentMethod = (paymentMethod: UIElement): void => {\n if (paymentMethod === this.state.activePaymentMethod) {\n return;\n }\n\n this.setState(prevState => ({\n activePaymentMethod: paymentMethod,\n cachedPaymentMethods: { ...prevState.cachedPaymentMethods, [paymentMethod._id]: true }\n }));\n\n if (this.state.cachedPaymentMethods[paymentMethod._id]) {\n paymentMethod.activate();\n }\n };\n\n componentDidUpdate(prevProps, prevState) {\n if (prevState.status.type !== this.state.status.type && this.state.activePaymentMethod) {\n // @ts-ignore TODO: Drop-in has its own 'status' values ('custom' for ex) which differs from regular UIElementStatus. Need to investigate best way to define/use this status variable\n this.state.activePaymentMethod.setStatus(this.state.status.type);\n }\n\n if (this.state.status.type === 'ready' && prevState.status.type !== 'ready' && this.props.onReady) {\n this.props.onReady();\n }\n }\n\n private handleOnSelectPaymentMethod = paymentMethod => {\n const { activePaymentMethod } = this.state;\n\n this.setActivePaymentMethod(paymentMethod);\n\n if ((activePaymentMethod && activePaymentMethod._id !== paymentMethod._id) || !activePaymentMethod) {\n this.props.onSelect?.(paymentMethod);\n }\n };\n\n private handleDisableStoredPaymentMethod = storedPaymentMethod => {\n this.setState({ isDisabling: true });\n\n new Promise((resolve, reject) => this.props.onDisableStoredPaymentMethod(storedPaymentMethod.props.storedPaymentMethodId, resolve, reject))\n .then(() => {\n this.setState(prevState => ({\n storedPaymentElements: prevState.storedPaymentElements.filter(pm => pm._id !== storedPaymentMethod._id)\n }));\n this.setState({ isDisabling: false });\n })\n .catch(() => {\n this.setState({ isDisabling: false });\n });\n };\n\n private readonly onShowDefaultPaymentMethodListClick = () => {\n this.setState({\n showDefaultPaymentMethodList: true\n });\n\n const event = new AnalyticsInfoEvent({\n type: InfoEventType.clicked,\n target: UiTarget.otherPaymentMethodButton,\n component: 'dropin'\n });\n\n this.props.modules?.analytics.sendAnalytics(event);\n };\n\n closeActivePaymentMethod() {\n this.setState({ activePaymentMethod: null });\n }\n\n /**\n * getOnOrderCancel decides which onOrderCancel logic should be used, manual or sessions\n */\n private readonly getOnOrderCancel = (): ((data: onOrderCancelData) => void) | null => {\n if (this.props.onOrderCancel) {\n return (data: onOrderCancelData) => {\n const order = sanitizeOrder(data.order);\n new Promise<{ amount: PaymentAmount }>((resolve, reject) => {\n this.props.onOrderCancel({ order }, { resolve, reject });\n })\n // @ts-ignore - handleAdvanceFlowPaymentMethodsUpdate is protected but we need to call it from here\n .then(({ amount }) => this.props.elementRef.handleAdvanceFlowPaymentMethodsUpdate(null, amount))\n .catch(error => {\n throw new AdyenCheckoutError('NETWORK_ERROR', error);\n });\n };\n }\n if (this.props.session) {\n return (data: onOrderCancelData) =>\n void this.props.session\n .cancelOrder(data)\n .then(() => this.props.core.update({ order: null }))\n .catch(error => {\n console.error(error);\n this.setStatus(error?.message || 'error');\n });\n }\n return null;\n };\n\n private onOrderCancel: onOrderCancelInternalCallback;\n\n render() {\n const {\n elements,\n fastlanePaymentElement,\n instantPaymentElements,\n storedPaymentElements,\n status,\n activePaymentMethod,\n showDefaultPaymentMethodList\n } = this.state;\n\n const isLoading = status.type === 'loading';\n const isRedirecting = status.type === 'redirect';\n const hasPaymentMethodsToBeDisplayed = !!(elements?.length || instantPaymentElements?.length || storedPaymentElements?.length);\n\n switch (status.type) {\n case 'success':\n return <DropinSuccessState message={status.props?.message} />;\n\n case 'error':\n return <Status.Error message={status.props?.message} />;\n\n case 'custom':\n return status.props?.component?.render();\n\n default:\n return (\n <div className={`adyen-checkout__dropin adyen-checkout__dropin--${status.type}`}>\n {isRedirecting && status.props.component && status.props.component.render()}\n {isLoading && status.props && status.props.component && status.props.component.render()}\n\n {!showDefaultPaymentMethodList && (\n <Fragment>\n <PaymentMethodList\n isLoading={isLoading}\n paymentMethods={fastlanePaymentElement}\n activePaymentMethod={activePaymentMethod}\n onSelect={this.handleOnSelectPaymentMethod}\n openFirstPaymentMethod\n showRadioButton={this.props.showRadioButton}\n />\n\n {hasPaymentMethodsToBeDisplayed && (\n <Button\n classNameModifiers={['dropin-show-paymentmethods']}\n variant=\"link\"\n inline\n label=\"Other payment methods\"\n onClick={this.onShowDefaultPaymentMethodListClick}\n />\n )}\n </Fragment>\n )}\n\n {hasPaymentMethodsToBeDisplayed && showDefaultPaymentMethodList && (\n <PaymentMethodList\n isLoading={isLoading || isRedirecting}\n isDisablingPaymentMethod={this.state.isDisabling}\n paymentMethods={elements}\n instantPaymentMethods={instantPaymentElements}\n storedPaymentMethods={storedPaymentElements}\n activePaymentMethod={activePaymentMethod}\n order={this.props.order}\n orderStatus={this.state.orderStatus}\n onOrderCancel={this.onOrderCancel}\n onSelect={this.handleOnSelectPaymentMethod}\n openPaymentMethod={this.props.openPaymentMethod}\n openFirstPaymentMethod={this.props.openFirstPaymentMethod}\n openFirstStoredPaymentMethod={this.props.openFirstStoredPaymentMethod}\n onDisableStoredPaymentMethod={this.handleDisableStoredPaymentMethod}\n showRemovePaymentMethodButton={this.props.showRemovePaymentMethodButton}\n showRadioButton={this.props.showRadioButton}\n />\n )}\n </div>\n );\n }\n }\n}\n\nexport default DropinComponent;\n"],"names":["DropinComponent","Component","componentDidMount","this","prepareDropinData","componentDidUpdate","prevProps","prevState","status","type","state","activePaymentMethod","setStatus","props","onReady","closeActivePaymentMethod","setState","render","elements","fastlanePaymentElement","instantPaymentElements","storedPaymentElements","showDefaultPaymentMethodList","isLoading","isRedirecting","hasPaymentMethodsToBeDisplayed","length","h","DropinSuccessState","message","Status","Error","component","div","className","Fragment","PaymentMethodList","paymentMethods","onSelect","handleOnSelectPaymentMethod","openFirstPaymentMethod","showRadioButton","Button","classNameModifiers","variant","inline","label","onClick","onShowDefaultPaymentMethodListClick","isDisablingPaymentMethod","isDisabling","instantPaymentMethods","storedPaymentMethods","order","orderStatus","onOrderCancel","openPaymentMethod","openFirstStoredPaymentMethod","onDisableStoredPaymentMethod","handleDisableStoredPaymentMethod","showRemovePaymentMethodButton","super","args","_define_property","undefined","cachedPaymentMethods","clientKey","loadingContext","storedElementsPromises","elementsPromises","instantPaymentsPromises","fastlanePaymentElementPromise","onCreateElements","orderStatusPromise","getOrderStatus","Promise","all","then","onElementsCreated","reportPaymentMethodList","fastlane","instant","stored","regular","catch","getOnOrderCancel","availableElementsByDisplayMode","fastlanePaymentMethod","splitPaymentMethods","core","paymentMethodsResponse","instantPaymentTypes","paymentMethodDisplayModes","displayMode","availablePaymentMethods","createAvailablePaymentsList","map","e","unavailablePaymentMethods","createUnavailablePaymentsList","dropinPaymentListDisplayedEvent","AnalyticsInfoEvent","InfoEventType","PaymentListDisplayed","modules","analytics","sendAnalytics","error","console","warn","setActivePaymentMethod","paymentMethod","_id","activate","storedPaymentMethod","resolve","reject","storedPaymentMethodId","filter","pm","event","clicked","target","UiTarget","otherPaymentMethodButton","data","sanitizeOrder","amount","elementRef","handleAdvanceFlowPaymentMethodsUpdate","AdyenCheckoutError","session","cancelOrder","update"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Giftcard.js","sources":["../../../../src/components/Giftcard/Giftcard.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport GiftcardComponent from './components/GiftcardComponent';\nimport PayButton from '../internal/PayButton';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport { PaymentAmount } from '../../types/global-types';\nimport { GiftCardElementData, GiftCardConfiguration, balanceCheckResponseType, GiftCardBalanceCheckErrorType } from './types';\nimport { TxVariants } from '../tx-variants';\nimport { PayButtonProps } from '../internal/PayButton/PayButton';\n\nexport class GiftcardElement extends UIElement<GiftCardConfiguration> {\n public static readonly type: TxVariants = TxVariants.giftcard;\n\n protected componentRef: GiftcardComponent | undefined;\n\n protected static readonly defaultProps = {\n brandsConfiguration: {}\n };\n\n formatProps(props) {\n return {\n ...props?.configuration,\n ...props\n };\n }\n\n formatData(): GiftCardElementData {\n return {\n paymentMethod: {\n type: this.constructor['type'],\n brand: this.props.brand,\n encryptedCardNumber: this.state.data?.encryptedCardNumber,\n encryptedSecurityCode: this.state.data?.encryptedSecurityCode\n }\n };\n }\n\n get isValid() {\n return !!this.state.isValid;\n }\n\n get icon() {\n return this.props.brandsConfiguration[this.props.brand]?.icon || this.props.icon || this.resources.getImage()(this.props.brand);\n }\n\n get displayName() {\n return this.props.brandsConfiguration[this.props.brand]?.name || this.props.name;\n }\n\n private setBalanceCheckError(errorMessage: GiftCardBalanceCheckErrorType | null): void {\n this.componentRef?.setBalanceCheckErrors?.(errorMessage);\n }\n\n private handleBalanceCheck = (data: GiftCardElementData): Promise<balanceCheckResponseType> => {\n if (this.props.onBalanceCheck) {\n return new Promise((resolve, reject) => {\n void this.props.onBalanceCheck(resolve, reject, data);\n });\n }\n\n if (this.props.session) {\n return this.props.session.checkBalance(data);\n }\n };\n\n private onOrderRequest = data => {\n if (this.props.onOrderRequest)\n return new Promise((resolve, reject) => {\n void this.props.onOrderRequest(resolve, reject, data);\n });\n if (this.props.session) {\n return this.props.session.createOrder();\n }\n };\n\n public balanceCheck() {\n return this.onBalanceCheck();\n }\n\n private onBalanceCheck = (): void => {\n if (!this.isValid) {\n this.showValidation();\n return;\n }\n\n // skip balance check if no onBalanceCheck event has been defined\n const hasBalanceCheck = this.props.session || this.props.onBalanceCheck;\n if (!hasBalanceCheck) return super.submit();\n\n this.setStatus('loading');\n\n this.handleBalanceCheck(this.formatData())\n .then(({ balance, transactionLimit = {} as PaymentAmount }) => {\n // Clear any previous balance check errors on success\n this.setBalanceCheckError(null);\n\n // We still need to throw these errors, otherwise it would be a breaking changing\n if (!balance) throw new Error('card-error'); // card doesn't exist\n if (balance?.currency !== this.props.amount?.currency) throw new Error('currency-error');\n if (balance?.value <= 0) throw new Error('no-balance');\n\n if (this.props.amount.value > balance.value || this.props.amount.value > transactionLimit.value) {\n if (this.props.order) {\n return this.executePaymentsCall();\n }\n\n return this.onOrderRequest(this.data).then((order: { orderData: string; pspReference: string }) => {\n this.setState({ order: { orderData: order.orderData, pspReference: order.pspReference } });\n return this.executePaymentsCall();\n });\n } else {\n return this.handleOnRequiringConfirmation(balance, transactionLimit);\n }\n })\n .catch(error => {\n // Simply pass the raw error message to setBalanceCheckError\n this.setBalanceCheckError(error?.message);\n\n // Still call handleError for other side effects (analytics, onError callback)\n if (error instanceof AdyenCheckoutError) {\n this.handleError(error);\n } else {\n this.handleError(new AdyenCheckoutError('ERROR', error));\n }\n });\n };\n\n /**\n * Check if it should call onRequiringConfirmation\n */\n private handleOnRequiringConfirmation = (balance: PaymentAmount, transactionLimit: PaymentAmount): Promise<void> | void => {\n this.componentRef.setBalance({ balance, transactionLimit });\n this.setStatus('ready');\n\n // 1. if we show pay button we don't need to ask for confirmation\n if (this.props.showPayButton) {\n return;\n }\n // 2. there's no callback, we throw error\n if (!this.props.onRequiringConfirmation) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'onRequiringConfirmation must be provided');\n }\n // 3. success case if in case of custom pay button\n return (\n new Promise<void>((resolve, reject) => {\n void this.props.onRequiringConfirmation(resolve, reject);\n })\n //when this resolve passed to onRequiringConfirmation gets resolved make payments call\n .then(() => this.makeSubmitCall())\n //when it gets rejected handle cancellation\n .catch(() => {})\n );\n };\n\n public submit() {\n // for simplicity of the merchant we always only expose .submit()\n // however to make the actual payment call we call makeSubmitCall\n this.balanceCheck();\n }\n\n // this makes the payment, as .submit is used by the merchant to trigger the payButton action\n private makeSubmitCall() {\n super.submit();\n }\n\n // Giftcards override the regular payButton flow\n protected override payButton = (props: PayButtonProps) => {\n return <PayButton {...props} showReview={props.showReview ?? !!this.props.onReview} />;\n };\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <GiftcardComponent\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n handleKeyDown={this.handleKeyDown}\n showPayButton={this.props.showPayButton}\n onChange={this.setState}\n makeBalanceCheck={() => this.onBalanceCheck()}\n makePayment={() => this.makeSubmitCall()}\n payButton={this.payButton}\n onSubmitAnalytics={this.submitAnalytics}\n />\n );\n }\n}\n\nexport default GiftcardElement;\n"],"names":["GiftcardElement","UIElement","formatProps","props","configuration","formatData","paymentMethod","type","this","constructor","brand","encryptedCardNumber","state","data","encryptedSecurityCode","isValid","icon","brandsConfiguration","resources","getImage","displayName","name","setBalanceCheckError","errorMessage","componentRef","setBalanceCheckErrors","balanceCheck","onBalanceCheck","submit","makeSubmitCall","super","componentToRender","h","GiftcardComponent","ref","handleKeyDown","showPayButton","onChange","setState","makeBalanceCheck","makePayment","payButton","onSubmitAnalytics","submitAnalytics","args","_define_property","handleBalanceCheck","Promise","resolve","reject","session","checkBalance","onOrderRequest","createOrder","showValidation","setStatus","then","balance","transactionLimit","Error","currency","amount","value","order","executePaymentsCall","orderData","pspReference","handleOnRequiringConfirmation","catch","error","message","AdyenCheckoutError","handleError","setBalance","onRequiringConfirmation","PayButton","showReview","onReview","TxVariants","giftcard","defaultProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Giftcard.js","sources":["../../../../src/components/Giftcard/Giftcard.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport GiftcardComponent from './components/GiftcardComponent';\nimport PayButton from '../internal/PayButton';\nimport AdyenCheckoutError from '../../core/Errors/AdyenCheckoutError';\nimport { PaymentAmount } from '../../types/global-types';\nimport { GiftCardElementData, GiftCardConfiguration, balanceCheckResponseType, GiftCardBalanceCheckErrorType } from './types';\nimport { TxVariants } from '../tx-variants';\nimport { PayButtonProps } from '../internal/PayButton/PayButton';\n\nexport class GiftcardElement extends UIElement<GiftCardConfiguration> {\n public static readonly type: TxVariants = TxVariants.giftcard;\n\n protected componentRef: GiftcardComponent | undefined;\n\n protected static readonly defaultProps = {\n brandsConfiguration: {}\n };\n\n formatProps(props) {\n return {\n ...props?.configuration,\n ...props\n };\n }\n\n formatData(): GiftCardElementData {\n return {\n paymentMethod: {\n type: this.constructor['type'],\n brand: this.props.brand,\n encryptedCardNumber: this.state.data?.encryptedCardNumber,\n encryptedSecurityCode: this.state.data?.encryptedSecurityCode\n }\n };\n }\n\n get isValid() {\n return !!this.state.isValid;\n }\n\n get icon() {\n return this.props.brandsConfiguration[this.props.brand]?.icon || this.props.icon || this.resources.getImage()(this.props.brand);\n }\n\n get displayName() {\n return this.props.brandsConfiguration[this.props.brand]?.name || this.props.name;\n }\n\n private setBalanceCheckError(errorMessage: GiftCardBalanceCheckErrorType | null): void {\n this.componentRef?.setBalanceCheckErrors?.(errorMessage);\n }\n\n private readonly handleBalanceCheck = (data: GiftCardElementData): Promise<balanceCheckResponseType> => {\n if (this.props.onBalanceCheck) {\n return new Promise((resolve, reject) => {\n void this.props.onBalanceCheck(resolve, reject, data);\n });\n }\n\n if (this.props.session) {\n return this.props.session.checkBalance(data);\n }\n };\n\n private readonly onOrderRequest = data => {\n if (this.props.onOrderRequest)\n return new Promise((resolve, reject) => {\n void this.props.onOrderRequest(resolve, reject, data);\n });\n if (this.props.session) {\n return this.props.session.createOrder();\n }\n };\n\n public balanceCheck() {\n return this.onBalanceCheck();\n }\n\n private readonly onBalanceCheck = (): void => {\n if (!this.isValid) {\n this.showValidation();\n return;\n }\n\n // skip balance check if no onBalanceCheck event has been defined\n const hasBalanceCheck = this.props.session || this.props.onBalanceCheck;\n if (!hasBalanceCheck) return super.submit();\n\n this.setStatus('loading');\n\n this.handleBalanceCheck(this.formatData())\n .then(({ balance, transactionLimit = {} as PaymentAmount }) => {\n // Clear any previous balance check errors on success\n this.setBalanceCheckError(null);\n\n // We still need to throw these errors, otherwise it would be a breaking changing\n if (!balance) throw new Error('card-error'); // card doesn't exist\n if (balance?.currency !== this.props.amount?.currency) throw new Error('currency-error');\n if (balance?.value <= 0) throw new Error('no-balance');\n\n if (this.props.amount.value > balance.value || this.props.amount.value > transactionLimit.value) {\n if (this.props.order) {\n return this.executePaymentsCall();\n }\n\n return this.onOrderRequest(this.data).then((order: { orderData: string; pspReference: string }) => {\n this.setState({ order: { orderData: order.orderData, pspReference: order.pspReference } });\n return this.executePaymentsCall();\n });\n } else {\n return this.handleOnRequiringConfirmation(balance, transactionLimit);\n }\n })\n .catch(error => {\n // Simply pass the raw error message to setBalanceCheckError\n this.setBalanceCheckError(error?.message);\n\n // Still call handleError for other side effects (analytics, onError callback)\n if (error instanceof AdyenCheckoutError) {\n this.handleError(error);\n } else {\n this.handleError(new AdyenCheckoutError('ERROR', error));\n }\n });\n };\n\n /**\n * Check if it should call onRequiringConfirmation\n */\n private readonly handleOnRequiringConfirmation = (balance: PaymentAmount, transactionLimit: PaymentAmount): Promise<void> | void => {\n this.componentRef.setBalance({ balance, transactionLimit });\n this.setStatus('ready');\n\n // 1. if we show pay button we don't need to ask for confirmation\n if (this.props.showPayButton) {\n return;\n }\n // 2. there's no callback, we throw error\n if (!this.props.onRequiringConfirmation) {\n throw new AdyenCheckoutError('IMPLEMENTATION_ERROR', 'onRequiringConfirmation must be provided');\n }\n // 3. success case if in case of custom pay button\n return (\n new Promise<void>((resolve, reject) => {\n void this.props.onRequiringConfirmation(resolve, reject);\n })\n //when this resolve passed to onRequiringConfirmation gets resolved make payments call\n .then(() => this.makeSubmitCall())\n //when it gets rejected handle cancellation\n .catch(() => {})\n );\n };\n\n public submit() {\n // for simplicity of the merchant we always only expose .submit()\n // however to make the actual payment call we call makeSubmitCall\n this.balanceCheck();\n }\n\n // this makes the payment, as .submit is used by the merchant to trigger the payButton action\n private makeSubmitCall() {\n super.submit();\n }\n\n // Giftcards override the regular payButton flow\n protected override payButton = (props: PayButtonProps) => {\n return <PayButton {...props} showReview={props.showReview ?? !!this.props.onReview} />;\n };\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <GiftcardComponent\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n handleKeyDown={this.handleKeyDown}\n showPayButton={this.props.showPayButton}\n onChange={this.setState}\n makeBalanceCheck={() => this.onBalanceCheck()}\n makePayment={() => this.makeSubmitCall()}\n payButton={this.payButton}\n onSubmitAnalytics={this.submitAnalytics}\n />\n );\n }\n}\n\nexport default GiftcardElement;\n"],"names":["GiftcardElement","UIElement","formatProps","props","configuration","formatData","paymentMethod","type","this","constructor","brand","encryptedCardNumber","state","data","encryptedSecurityCode","isValid","icon","brandsConfiguration","resources","getImage","displayName","name","setBalanceCheckError","errorMessage","componentRef","setBalanceCheckErrors","balanceCheck","onBalanceCheck","submit","makeSubmitCall","super","componentToRender","h","GiftcardComponent","ref","handleKeyDown","showPayButton","onChange","setState","makeBalanceCheck","makePayment","payButton","onSubmitAnalytics","submitAnalytics","args","_define_property","handleBalanceCheck","Promise","resolve","reject","session","checkBalance","onOrderRequest","createOrder","showValidation","setStatus","then","balance","transactionLimit","Error","currency","amount","value","order","executePaymentsCall","orderData","pspReference","handleOnRequiringConfirmation","catch","error","message","AdyenCheckoutError","handleError","setBalance","onRequiringConfirmation","PayButton","showReview","onReview","TxVariants","giftcard","defaultProps"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GiftcardComponent.js","sources":["../../../../../src/components/Giftcard/components/GiftcardComponent.tsx"],"sourcesContent":["import { Component, FunctionComponent, h } from 'preact';\nimport SecuredFieldsProvider from '../../internal/SecuredFields/SFP/SecuredFieldsProvider';\nimport Alert from '../../internal/Alert';\nimport GiftcardResult from './GiftcardResult';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport { GIFT_CARD } from '../../internal/SecuredFields/lib/constants';\nimport { GiftCardFields } from './GiftcardFields';\nimport { GiftcardFieldsProps, Placeholders } from './types';\nimport { useSRPanelForGiftcardErrors } from './useSRPanelForGiftcardErrors';\nimport { GiftCardBalanceCheckErrorType, GiftCardValidationError } from '../types';\nimport { PayButtonProps } from '../../internal/PayButton/PayButton';\nimport { useAmount } from '../../../core/Context/AmountProvider';\nimport type { AbstractAnalyticsEvent } from '../../../core/Analytics/events/AbstractAnalyticsEvent';\nimport type { SFPProps } from '../../internal/SecuredFields/SFP/types';\n\ninterface GiftcardComponentProps extends Partial<Pick<SFPProps, 'clientKey' | 'loadingContext'>> {\n onChange: (state) => void;\n onFocus: (event) => void;\n onBlur: (event) => void;\n makeBalanceCheck: (event) => void;\n makePayment: (event) => void;\n showPayButton: boolean;\n payButton: (props: PayButtonProps) => h.JSX.Element;\n pinRequired: boolean;\n expiryDateRequired?: boolean;\n fieldsLayoutComponent: FunctionComponent<GiftcardFieldsProps>;\n placeholders?: Placeholders;\n handleKeyDown?: (event: KeyboardEvent) => void;\n onSubmitAnalytics?: (event: AbstractAnalyticsEvent) => void;\n}\n\nclass Giftcard extends Component<Readonly<GiftcardComponentProps>> {\n public state = {\n status: 'ready',\n data: {},\n balance: null,\n transactionLimit: null,\n focusedElement: false,\n isValid: false,\n sfpState: {},\n isValidating: false,\n transformedErrors: {}\n };\n\n public static readonly defaultProps = {\n pinRequired: true,\n expiryDateRequired: false,\n onChange: () => {},\n onFocus: () => {},\n onBlur: () => {},\n fieldsLayoutComponent: GiftCardFields\n };\n\n public sfp: SecuredFieldsProvider;\n\n /**\n * Maps string error codes from SecuredFields to validation rule objects\n */\n public mapErrorsToValidationObjects = () => {\n // Use the sfp reference to call mapErrorsToValidationRuleResult\n if (!this.sfp) return {};\n return this.sfp.mapErrorsToValidationRuleResult();\n };\n\n private updateTransformedErrors = (balanceCheckErrors?: Record<string, GiftCardValidationError>) => {\n const transformedErrors = this.mapErrorsToValidationObjects();\n\n const mergedErrors = { ...transformedErrors, ...balanceCheckErrors };\n\n this.setState({ transformedErrors: mergedErrors });\n };\n\n public onChange = sfpState => {\n this.setState({ sfpState }, () => this.updateTransformedErrors());\n\n this.props.onChange({\n data: sfpState.data,\n isValid: sfpState.isSfpValid\n });\n };\n\n public handleFocus = e => {\n this.setState({ focusedElement: e.currentFocusObject });\n\n const isFocused = e.focus === true;\n if (isFocused) {\n this.props.onFocus(e);\n } else {\n this.props.onBlur(e);\n }\n };\n\n public setBalance = ({ balance, transactionLimit }) => {\n this.setState({ balance, transactionLimit });\n };\n\n /**\n * Generates balance check errors in the same format as SFP errors\n * Compatible with the transformedErrors structure\n */\n private generateBalanceCheckErrors(errorType?: GiftCardBalanceCheckErrorType | null): Record<string, GiftCardValidationError> {\n const balanceCheckErrors: Record<string, GiftCardValidationError> = {};\n\n // This is the field that the error is associated with, only used for SR logic\n const fieldToAnnounce = 'encryptedCardNumber';\n\n // If errorType is null, clear errors\n if (errorType === null) {\n return balanceCheckErrors;\n }\n\n // Create error in the same format as SFP errors for consistency\n balanceCheckErrors[fieldToAnnounce] = {\n isValid: false,\n errorMessage: `error.giftcard.${errorType}`,\n error: errorType\n };\n\n return balanceCheckErrors;\n }\n\n /**\n * Checks if a status represents a balance check error\n */\n private isBalanceCheckError(status: string): boolean {\n return ['no-balance', 'card-error', 'currency-error'].includes(status);\n }\n\n /**\n * Method called by GiftcardElement to set balance check errors only\n */\n public setBalanceCheckErrors = (errorType: GiftCardBalanceCheckErrorType | null): void => {\n // Check if the errors should be displayed\n if (this.isBalanceCheckError(errorType)) {\n // Generate balance check errors in the style of useForm\n // This is usefull because then we can use the same logic for SF and balance check errors\n // Also we can use the same logic for SRPanel errors\n const balanceCheckErrors = this.generateBalanceCheckErrors(errorType);\n this.updateTransformedErrors(balanceCheckErrors);\n }\n };\n\n public showValidation = () => {\n this.setState({ isValidating: true });\n\n // Validate SecuredFields\n this.sfp?.showValidation();\n };\n\n public setIsValidating = (val: boolean) => {\n this.setState({ isValidating: val });\n };\n\n render(props, { focusedElement, balance, transactionLimit, isValidating, transformedErrors }) {\n const { i18n } = useCoreContext();\n const { amount } = useAmount();\n\n // Handle SRPanel errors in render with transformed error objects\n useSRPanelForGiftcardErrors({\n errors: transformedErrors,\n isValidating,\n setIsValidating: this.setIsValidating,\n sfp: this.sfp\n });\n\n const transactionAmount = transactionLimit?.value < balance?.value ? transactionLimit : balance;\n const hasEnoughBalance = transactionAmount?.value >= amount?.value;\n\n if (transactionAmount && hasEnoughBalance) {\n return (\n <GiftcardResult\n balance={balance}\n transactionLimit={transactionLimit}\n makePayment={props.makePayment}\n status={this.state.status}\n makeBalanceCheck={props.makeBalanceCheck}\n showPayButton={this.props.showPayButton}\n payButton={this.props.payButton}\n />\n );\n }\n\n const getCardErrorMessage = sfpState => {\n if (sfpState.errors.encryptedCardNumber) return i18n.get(sfpState.errors.encryptedCardNumber);\n\n // This logic is a bit of a hack, but it's the only way to get the error message for balance check errors\n // In the future we should move this logic to useForm\n if (transformedErrors.encryptedCardNumber) {\n return i18n.get(transformedErrors.encryptedCardNumber.errorMessage);\n }\n\n return null;\n };\n\n return (\n <div className=\"adyen-checkout__giftcard\">\n {this.state.status === 'error' && <Alert icon={'cross'}>{i18n.get('error.message.unknown')}</Alert>}\n\n <SecuredFieldsProvider\n {...this.props}\n clientKey={this.props.clientKey}\n loadingContext={this.props.loadingContext}\n ref={ref => {\n this.sfp = ref;\n }}\n onChange={this.onChange}\n onFocus={this.handleFocus}\n onSubmitAnalytics={props.onSubmitAnalytics}\n type={GIFT_CARD}\n componentType={props.type}\n render={({ setRootNode, setFocusOn }, sfpState) =>\n this.props.fieldsLayoutComponent({\n i18n: i18n,\n pinRequired: this.props.pinRequired,\n focusedElement: focusedElement,\n getCardErrorMessage: getCardErrorMessage,\n setRootNode: setRootNode,\n setFocusOn: setFocusOn,\n sfpState: sfpState\n })\n }\n />\n\n {this.props.showPayButton &&\n this.props.payButton({\n status: this.state.status,\n onClick: this.props.makeBalanceCheck,\n label: i18n.get('applyGiftcard'),\n showReview: false\n })}\n </div>\n );\n }\n}\n\nexport default Giftcard;\n"],"names":["Giftcard","Component","generateBalanceCheckErrors","errorType","balanceCheckErrors","isValid","errorMessage","error","isBalanceCheckError","status","includes","render","props","focusedElement","balance","transactionLimit","isValidating","transformedErrors","i18n","useCoreContext","amount","useAmount","useSRPanelForGiftcardErrors","errors","setIsValidating","this","sfp","transactionAmount","value","h","GiftcardResult","makePayment","state","makeBalanceCheck","showPayButton","payButton","getCardErrorMessage","sfpState","encryptedCardNumber","get","div","className","Alert","icon","SecuredFieldsProvider","clientKey","loadingContext","ref","onChange","onFocus","handleFocus","onSubmitAnalytics","type","GIFT_CARD","componentType","setRootNode","setFocusOn","fieldsLayoutComponent","pinRequired","onClick","label","showReview","super","args","_define_property","data","mapErrorsToValidationObjects","mapErrorsToValidationRuleResult","updateTransformedErrors","mergedErrors","setState","isSfpValid","e","currentFocusObject","focus","onBlur","setBalance","setBalanceCheckErrors","showValidation","val","defaultProps","expiryDateRequired","GiftCardFields"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GiftcardComponent.js","sources":["../../../../../src/components/Giftcard/components/GiftcardComponent.tsx"],"sourcesContent":["import { Component, FunctionComponent, h } from 'preact';\nimport SecuredFieldsProvider from '../../internal/SecuredFields/SFP/SecuredFieldsProvider';\nimport Alert from '../../internal/Alert';\nimport GiftcardResult from './GiftcardResult';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport { GIFT_CARD } from '../../internal/SecuredFields/lib/constants';\nimport { GiftCardFields } from './GiftcardFields';\nimport { GiftcardFieldsProps, Placeholders } from './types';\nimport { useSRPanelForGiftcardErrors } from './useSRPanelForGiftcardErrors';\nimport { GiftCardBalanceCheckErrorType, GiftCardValidationError } from '../types';\nimport { PayButtonProps } from '../../internal/PayButton/PayButton';\nimport { useAmount } from '../../../core/Context/AmountProvider';\nimport type { AbstractAnalyticsEvent } from '../../../core/Analytics/events/AbstractAnalyticsEvent';\nimport type { SFPProps } from '../../internal/SecuredFields/SFP/types';\n\ninterface GiftcardComponentProps extends Partial<Pick<SFPProps, 'clientKey' | 'loadingContext'>> {\n onChange: (state) => void;\n onFocus: (event) => void;\n onBlur: (event) => void;\n makeBalanceCheck: (event) => void;\n makePayment: (event) => void;\n showPayButton: boolean;\n payButton: (props: PayButtonProps) => h.JSX.Element;\n pinRequired: boolean;\n expiryDateRequired?: boolean;\n fieldsLayoutComponent: FunctionComponent<GiftcardFieldsProps>;\n placeholders?: Placeholders;\n handleKeyDown?: (event: KeyboardEvent) => void;\n onSubmitAnalytics?: (event: AbstractAnalyticsEvent) => void;\n}\n\nclass Giftcard extends Component<Readonly<GiftcardComponentProps>> {\n public state = {\n status: 'ready',\n data: {},\n balance: null,\n transactionLimit: null,\n focusedElement: false,\n isValid: false,\n sfpState: {},\n isValidating: false,\n transformedErrors: {}\n };\n\n public static readonly defaultProps = {\n pinRequired: true,\n expiryDateRequired: false,\n onChange: () => {},\n onFocus: () => {},\n onBlur: () => {},\n fieldsLayoutComponent: GiftCardFields\n };\n\n public sfp: SecuredFieldsProvider;\n\n /**\n * Maps string error codes from SecuredFields to validation rule objects\n */\n public mapErrorsToValidationObjects = () => {\n // Use the sfp reference to call mapErrorsToValidationRuleResult\n if (!this.sfp) return {};\n return this.sfp.mapErrorsToValidationRuleResult();\n };\n\n private readonly updateTransformedErrors = (balanceCheckErrors?: Record<string, GiftCardValidationError>) => {\n const transformedErrors = this.mapErrorsToValidationObjects();\n\n const mergedErrors = { ...transformedErrors, ...balanceCheckErrors };\n\n this.setState({ transformedErrors: mergedErrors });\n };\n\n public onChange = sfpState => {\n this.setState({ sfpState }, () => this.updateTransformedErrors());\n\n this.props.onChange({\n data: sfpState.data,\n isValid: sfpState.isSfpValid\n });\n };\n\n public handleFocus = e => {\n this.setState({ focusedElement: e.currentFocusObject });\n\n const isFocused = e.focus === true;\n if (isFocused) {\n this.props.onFocus(e);\n } else {\n this.props.onBlur(e);\n }\n };\n\n public setBalance = ({ balance, transactionLimit }) => {\n this.setState({ balance, transactionLimit });\n };\n\n /**\n * Generates balance check errors in the same format as SFP errors\n * Compatible with the transformedErrors structure\n */\n private generateBalanceCheckErrors(errorType?: GiftCardBalanceCheckErrorType | null): Record<string, GiftCardValidationError> {\n const balanceCheckErrors: Record<string, GiftCardValidationError> = {};\n\n // This is the field that the error is associated with, only used for SR logic\n const fieldToAnnounce = 'encryptedCardNumber';\n\n // If errorType is null, clear errors\n if (errorType === null) {\n return balanceCheckErrors;\n }\n\n // Create error in the same format as SFP errors for consistency\n balanceCheckErrors[fieldToAnnounce] = {\n isValid: false,\n errorMessage: `error.giftcard.${errorType}`,\n error: errorType\n };\n\n return balanceCheckErrors;\n }\n\n /**\n * Checks if a status represents a balance check error\n */\n private isBalanceCheckError(status: string): boolean {\n return ['no-balance', 'card-error', 'currency-error'].includes(status);\n }\n\n /**\n * Method called by GiftcardElement to set balance check errors only\n */\n public setBalanceCheckErrors = (errorType: GiftCardBalanceCheckErrorType | null): void => {\n // Check if the errors should be displayed\n if (this.isBalanceCheckError(errorType)) {\n // Generate balance check errors in the style of useForm\n // This is usefull because then we can use the same logic for SF and balance check errors\n // Also we can use the same logic for SRPanel errors\n const balanceCheckErrors = this.generateBalanceCheckErrors(errorType);\n this.updateTransformedErrors(balanceCheckErrors);\n }\n };\n\n public showValidation = () => {\n this.setState({ isValidating: true });\n\n // Validate SecuredFields\n this.sfp?.showValidation();\n };\n\n public setIsValidating = (val: boolean) => {\n this.setState({ isValidating: val });\n };\n\n render(props, { focusedElement, balance, transactionLimit, isValidating, transformedErrors }) {\n const { i18n } = useCoreContext();\n const { amount } = useAmount();\n\n // Handle SRPanel errors in render with transformed error objects\n useSRPanelForGiftcardErrors({\n errors: transformedErrors,\n isValidating,\n setIsValidating: this.setIsValidating,\n sfp: this.sfp\n });\n\n const transactionAmount = transactionLimit?.value < balance?.value ? transactionLimit : balance;\n const hasEnoughBalance = transactionAmount?.value >= amount?.value;\n\n if (transactionAmount && hasEnoughBalance) {\n return (\n <GiftcardResult\n balance={balance}\n transactionLimit={transactionLimit}\n makePayment={props.makePayment}\n status={this.state.status}\n makeBalanceCheck={props.makeBalanceCheck}\n showPayButton={this.props.showPayButton}\n payButton={this.props.payButton}\n />\n );\n }\n\n const getCardErrorMessage = sfpState => {\n if (sfpState.errors.encryptedCardNumber) return i18n.get(sfpState.errors.encryptedCardNumber);\n\n // This logic is a bit of a hack, but it's the only way to get the error message for balance check errors\n // In the future we should move this logic to useForm\n if (transformedErrors.encryptedCardNumber) {\n return i18n.get(transformedErrors.encryptedCardNumber.errorMessage);\n }\n\n return null;\n };\n\n return (\n <div className=\"adyen-checkout__giftcard\">\n {this.state.status === 'error' && <Alert icon={'cross'}>{i18n.get('error.message.unknown')}</Alert>}\n\n <SecuredFieldsProvider\n {...this.props}\n clientKey={this.props.clientKey}\n loadingContext={this.props.loadingContext}\n ref={ref => {\n this.sfp = ref;\n }}\n onChange={this.onChange}\n onFocus={this.handleFocus}\n onSubmitAnalytics={props.onSubmitAnalytics}\n type={GIFT_CARD}\n componentType={props.type}\n render={({ setRootNode, setFocusOn }, sfpState) =>\n this.props.fieldsLayoutComponent({\n i18n: i18n,\n pinRequired: this.props.pinRequired,\n focusedElement: focusedElement,\n getCardErrorMessage: getCardErrorMessage,\n setRootNode: setRootNode,\n setFocusOn: setFocusOn,\n sfpState: sfpState\n })\n }\n />\n\n {this.props.showPayButton &&\n this.props.payButton({\n status: this.state.status,\n onClick: this.props.makeBalanceCheck,\n label: i18n.get('applyGiftcard'),\n showReview: false\n })}\n </div>\n );\n }\n}\n\nexport default Giftcard;\n"],"names":["Giftcard","Component","generateBalanceCheckErrors","errorType","balanceCheckErrors","isValid","errorMessage","error","isBalanceCheckError","status","includes","render","props","focusedElement","balance","transactionLimit","isValidating","transformedErrors","i18n","useCoreContext","amount","useAmount","useSRPanelForGiftcardErrors","errors","setIsValidating","this","sfp","transactionAmount","value","h","GiftcardResult","makePayment","state","makeBalanceCheck","showPayButton","payButton","getCardErrorMessage","sfpState","encryptedCardNumber","get","div","className","Alert","icon","SecuredFieldsProvider","clientKey","loadingContext","ref","onChange","onFocus","handleFocus","onSubmitAnalytics","type","GIFT_CARD","componentType","setRootNode","setFocusOn","fieldsLayoutComponent","pinRequired","onClick","label","showReview","super","args","_define_property","data","mapErrorsToValidationObjects","mapErrorsToValidationRuleResult","updateTransformedErrors","mergedErrors","setState","isSfpValid","e","currentFocusObject","focus","onBlur","setBalance","setBalanceCheckErrors","showValidation","val","defaultProps","expiryDateRequired","GiftCardFields"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as t}from"../../external/preact/dist/preact.js";import e from"../Redirect/Redirect.js";import r from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as o}from"../tx-variants.js";class s extends e{get displayName(){return this.props.name||this.constructor.type}componentToRender(){return this.props.showPayButton?t(r,{...this.props,showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,
|
|
1
|
+
import{createElement as t}from"../../external/preact/dist/preact.js";import e from"../Redirect/Redirect.js";import r from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as o}from"../tx-variants.js";class s extends e{get displayName(){return this.props.name||this.constructor.type}componentToRender(){return this.props.showPayButton?t(r,{...this.props,showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,setComponentRef:this.setComponentRef}):null}}var n,i,a;n=s,i="type",a=o.giropay,i in n?Object.defineProperty(n,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[i]=a;export{s as default};
|
|
2
2
|
//# sourceMappingURL=Giropay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Giropay.js","sources":["../../../../src/components/Giropay/Giropay.tsx"],"sourcesContent":["import { h } from 'preact';\nimport RedirectElement from '../Redirect';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\n\nclass GiropayElement extends RedirectElement {\n public static override readonly type: TxVariants = TxVariants.giropay;\n\n public override get displayName() {\n return this.props.name || this.constructor['type'];\n }\n\n protected override componentToRender(): h.JSX.Element {\n if (this.props.showPayButton) {\n return (\n <RedirectButton\n {...this.props}\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n
|
|
1
|
+
{"version":3,"file":"Giropay.js","sources":["../../../../src/components/Giropay/Giropay.tsx"],"sourcesContent":["import { h } from 'preact';\nimport RedirectElement from '../Redirect';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\n\nclass GiropayElement extends RedirectElement {\n public static override readonly type: TxVariants = TxVariants.giropay;\n\n public override get displayName() {\n return this.props.name || this.constructor['type'];\n }\n\n protected override componentToRender(): h.JSX.Element {\n if (this.props.showPayButton) {\n return (\n <RedirectButton\n {...this.props}\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n setComponentRef={this.setComponentRef}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default GiropayElement;\n"],"names":["GiropayElement","RedirectElement","displayName","this","props","name","constructor","componentToRender","showPayButton","h","RedirectButton","onSubmit","submit","payButton","setComponentRef","type","TxVariants","giropay"],"mappings":"uNAKA,MAAMA,UAAuBC,EAGzB,eAAoBC,GAChB,OAAOC,KAAKC,MAAMC,MAAQF,KAAKG,YAAY,IAC/C,CAEmBC,iBAAAA,GACf,OAAIJ,KAAKC,MAAMI,cAEPC,EAACC,EAAAA,IACOP,KAAKC,MACTI,cAAeL,KAAKC,MAAMI,cAC1BH,KAAMF,KAAKD,YACXS,SAAUR,KAAKS,OACfC,UAAWV,KAAKU,UAChBC,gBAAiBX,KAAKW,kBAK3B,IACX,cAtBEd,IAC8Be,SAAmBC,EAAWC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import o from"./components/MBWayInput/MBWayInput.js";import n from"./components/MBWayAwait/config.js";import{Await as a}from"../internal/Await/Await.js";import{TxVariants as r}from"../tx-variants.js";class s extends t{formatProps(e){const{data:t={},placeholders:o={}}=e;return{...e,data:{phoneNumber:t.telephoneNumber||t.phoneNumber,phonePrefix:t.phonePrefix||"+351"},placeholders:{phoneNumber:o.telephoneNumber||o.phoneNumber}}}formatData(){return{paymentMethod:{type:s.type,...this.state.data?.phoneNumber&&{telephoneNumber:this.state.data.phonePrefix+this.state.data.phoneNumber}}}}get isValid(){return!!this.state.isValid}get displayName(){return this.props.name}componentToRender(){return this.props.paymentData?e(a,{clientKey:this.props.clientKey,paymentData:this.props.paymentData,onError:this.props.onError,onComplete:this.onComplete,brandLogo:this.icon,brandName:this.displayName,type:n.type,messageText:this.props.i18n.get(n.messageTextId),awaitText:this.props.i18n.get(n.awaitTextId),showCountdownTimer:n.showCountdownTimer,delay:n.STATUS_INTERVAL,countdownTime:n.COUNTDOWN_MINUTES,throttleTime:n.THROTTLE_TIME,throttleInterval:n.THROTTLE_INTERVAL,onActionHandled:this.onActionHandled}):e(o,{
|
|
1
|
+
import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import o from"./components/MBWayInput/MBWayInput.js";import n from"./components/MBWayAwait/config.js";import{Await as a}from"../internal/Await/Await.js";import{TxVariants as r}from"../tx-variants.js";class s extends t{formatProps(e){const{data:t={},placeholders:o={}}=e;return{...e,data:{phoneNumber:t.telephoneNumber||t.phoneNumber,phonePrefix:t.phonePrefix||"+351"},placeholders:{phoneNumber:o.telephoneNumber||o.phoneNumber}}}formatData(){return{paymentMethod:{type:s.type,...this.state.data?.phoneNumber&&{telephoneNumber:this.state.data.phonePrefix+this.state.data.phoneNumber}}}}get isValid(){return!!this.state.isValid}get displayName(){return this.props.name}componentToRender(){return this.props.paymentData?e(a,{clientKey:this.props.clientKey,paymentData:this.props.paymentData,onError:this.props.onError,onComplete:this.onComplete,brandLogo:this.icon,brandName:this.displayName,type:n.type,messageText:this.props.i18n.get(n.messageTextId),awaitText:this.props.i18n.get(n.awaitTextId),showCountdownTimer:n.showCountdownTimer,delay:n.STATUS_INTERVAL,countdownTime:n.COUNTDOWN_MINUTES,throttleTime:n.THROTTLE_TIME,throttleInterval:n.THROTTLE_INTERVAL,onActionHandled:this.onActionHandled}):e(o,{...this.props,setComponentRef:this.setComponentRef,onChange:this.setState,onSubmit:this.submit,payButton:this.payButton})}}var p,i,m;p=s,i="type",m=r.mbway,i in p?Object.defineProperty(p,i,{value:m,enumerable:!0,configurable:!0,writable:!0}):p[i]=m;export{s as MBWayElement,s as default};
|
|
2
2
|
//# sourceMappingURL=MBWay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MBWay.js","sources":["../../../../src/components/MBWay/MBWay.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport MBWayInput from './components/MBWayInput';\nimport config from './components/MBWayAwait/config';\nimport { Await } from '../../components/internal/Await';\nimport { TxVariants } from '../tx-variants';\nimport { AwaitConfiguration } from '../internal/Await/types';\n\nexport class MBWayElement extends UIElement<AwaitConfiguration> {\n public static readonly type = TxVariants.mbway;\n\n formatProps(props) {\n const { data = {}, placeholders = {} } = props;\n\n return {\n ...props,\n data: {\n phoneNumber: data.telephoneNumber || data.phoneNumber,\n phonePrefix: data.phonePrefix || '+351' // if not specified default to Portuguese country code\n },\n placeholders: {\n phoneNumber: placeholders.telephoneNumber || placeholders.phoneNumber\n }\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData():
|
|
1
|
+
{"version":3,"file":"MBWay.js","sources":["../../../../src/components/MBWay/MBWay.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport MBWayInput from './components/MBWayInput';\nimport config from './components/MBWayAwait/config';\nimport { Await } from '../../components/internal/Await';\nimport { TxVariants } from '../tx-variants';\nimport { AwaitConfiguration } from '../internal/Await/types';\nimport { PaymentData } from '../../types';\n\nexport class MBWayElement extends UIElement<AwaitConfiguration> {\n public static readonly type = TxVariants.mbway;\n\n formatProps(props) {\n const { data = {}, placeholders = {} } = props;\n\n return {\n ...props,\n data: {\n phoneNumber: data.telephoneNumber || data.phoneNumber,\n phonePrefix: data.phonePrefix || '+351' // if not specified default to Portuguese country code\n },\n placeholders: {\n phoneNumber: placeholders.telephoneNumber || placeholders.phoneNumber\n }\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData(): PaymentData {\n return {\n paymentMethod: {\n type: MBWayElement.type,\n ...(this.state.data?.phoneNumber && { telephoneNumber: this.state.data.phonePrefix + this.state.data.phoneNumber })\n }\n };\n }\n\n get isValid(): boolean {\n return !!this.state.isValid;\n }\n\n get displayName(): string {\n return this.props.name;\n }\n\n protected override componentToRender(): h.JSX.Element {\n if (this.props.paymentData) {\n return (\n <Await\n clientKey={this.props.clientKey}\n paymentData={this.props.paymentData}\n onError={this.props.onError}\n onComplete={this.onComplete}\n brandLogo={this.icon}\n brandName={this.displayName}\n type={config.type}\n messageText={this.props.i18n.get(config.messageTextId)}\n awaitText={this.props.i18n.get(config.awaitTextId)}\n showCountdownTimer={config.showCountdownTimer}\n delay={config.STATUS_INTERVAL}\n countdownTime={config.COUNTDOWN_MINUTES}\n throttleTime={config.THROTTLE_TIME}\n throttleInterval={config.THROTTLE_INTERVAL}\n onActionHandled={this.onActionHandled}\n />\n );\n }\n\n return (\n <MBWayInput\n {...this.props}\n setComponentRef={this.setComponentRef}\n onChange={this.setState}\n onSubmit={this.submit}\n payButton={this.payButton}\n />\n );\n }\n}\n\nexport default MBWayElement;\n"],"names":["MBWayElement","UIElement","formatProps","props","data","placeholders","phoneNumber","telephoneNumber","phonePrefix","formatData","paymentMethod","type","this","state","isValid","displayName","name","componentToRender","paymentData","h","Await","clientKey","onError","onComplete","brandLogo","icon","brandName","config","messageText","i18n","get","messageTextId","awaitText","awaitTextId","showCountdownTimer","delay","STATUS_INTERVAL","countdownTime","COUNTDOWN_MINUTES","throttleTime","THROTTLE_TIME","throttleInterval","THROTTLE_INTERVAL","onActionHandled","MBWayInput","setComponentRef","onChange","setState","onSubmit","submit","payButton","TxVariants","mbway"],"mappings":"4UASO,MAAMA,UAAqBC,EAG9BC,WAAAA,CAAYC,GACR,MAAMC,KAAEA,EAAO,CAAA,EAAEC,aAAEA,EAAe,CAAA,GAAOF,EAEzC,MAAO,IACAA,EACHC,KAAM,CACFE,YAAaF,EAAKG,iBAAmBH,EAAKE,YAC1CE,YAAaJ,EAAKI,aAAe,QAErCH,aAAc,CACVC,YAAaD,EAAaE,iBAAmBF,EAAaC,aAGtE,CAKAG,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMX,EAAaW,QACfC,KAAKC,MAAMT,MAAME,aAAe,CAAEC,gBAAiBK,KAAKC,MAAMT,KAAKI,YAAcI,KAAKC,MAAMT,KAAKE,cAGjH,CAEA,WAAIQ,GACA,QAASF,KAAKC,MAAMC,OACxB,CAEA,eAAIC,GACA,OAAOH,KAAKT,MAAMa,IACtB,CAEmBC,iBAAAA,GACf,OAAIL,KAAKT,MAAMe,YAEPC,EAACC,EAAAA,CACGC,UAAWT,KAAKT,MAAMkB,UACtBH,YAAaN,KAAKT,MAAMe,YACxBI,QAASV,KAAKT,MAAMmB,QACpBC,WAAYX,KAAKW,WACjBC,UAAWZ,KAAKa,KAChBC,UAAWd,KAAKG,YAChBJ,KAAMgB,EAAOhB,KACbiB,YAAahB,KAAKT,MAAM0B,KAAKC,IAAIH,EAAOI,eACxCC,UAAWpB,KAAKT,MAAM0B,KAAKC,IAAIH,EAAOM,aACtCC,mBAAoBP,EAAOO,mBAC3BC,MAAOR,EAAOS,gBACdC,cAAeV,EAAOW,kBACtBC,aAAcZ,EAAOa,cACrBC,iBAAkBd,EAAOe,kBACzBC,gBAAiB/B,KAAK+B,kBAM9BxB,EAACyB,EAAAA,IACOhC,KAAKT,MACT0C,gBAAiBjC,KAAKiC,gBACtBC,SAAUlC,KAAKmC,SACfC,SAAUpC,KAAKqC,OACfC,UAAWtC,KAAKsC,WAG5B,cAtESlD,IACcW,SAAOwC,EAAWC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createElement as e}from"../../../../external/preact/dist/preact.js";import{useState as o}from"../../../../external/preact/hooks/dist/hooks.js";import{useCoreContext as
|
|
1
|
+
import{createElement as e}from"../../../../external/preact/dist/preact.js";import{useState as o,useRef as t,useCallback as a}from"../../../../external/preact/hooks/dist/hooks.js";import{useCoreContext as r}from"../../../../core/Context/CoreProvider.js";import n from"../../../internal/PhoneInput/PhoneInputForm.js";import s from"../../../internal/LoadingWrapper/LoadingWrapper.js";import i from"../../../internal/PhoneInput/usePhonePrefixes.js";function l(l){const{i18n:d,loadingContext:m}=r(),{allowedCountries:u=[]}=l,[p,h]=o("ready"),{loadingStatus:f,phonePrefixes:c}=i({allowedCountries:u,loadingContext:m,handleError:l.onError}),C=t({setStatus:h,showValidation:()=>{}}),P=a(e=>{C.current.showValidation=e.showValidation,l.setComponentRef(C.current)},[l.setComponentRef]);return e(s,{status:f},e("div",{className:"adyen-checkout__mb-way"},e(n,{...l,setComponentRef:P,items:c,onChange:({data:e,valid:o,errors:t,isValid:a})=>{l.onChange({data:e,valid:o,errors:t,isValid:a})},data:l.data}),l.showPayButton&&l.payButton({status:p,label:d.get("confirmPurchase")})))}l.defaultProps={onChange:()=>{},phoneNumberKey:"mobileNumber",phoneNumberErrorKey:"mobileNumber.invalid"};export{l as default};
|
|
2
2
|
//# sourceMappingURL=MBWayInput.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MBWayInput.js","sources":["../../../../../../src/components/MBWay/components/MBWayInput/MBWayInput.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useState } from 'preact/hooks';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\nimport { MBWayInputProps } from './types';\nimport './MBWayInput.scss';\nimport PhoneInputForm from '../../../internal/PhoneInput';\nimport LoadingWrapper from '../../../internal/LoadingWrapper';\nimport usePhonePrefixes from '../../../internal/PhoneInput/usePhonePrefixes';\n\nfunction MBWayInput(props: Readonly<MBWayInputProps>) {\n const { i18n, loadingContext } = useCoreContext();\n\n const { allowedCountries = [] } = props;\n\n const [status, setStatus] = useState<string>('ready');\n\n
|
|
1
|
+
{"version":3,"file":"MBWayInput.js","sources":["../../../../../../src/components/MBWay/components/MBWayInput/MBWayInput.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useCallback, useRef, useState } from 'preact/hooks';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\nimport { MBWayInputProps } from './types';\nimport './MBWayInput.scss';\nimport PhoneInputForm from '../../../internal/PhoneInput';\nimport LoadingWrapper from '../../../internal/LoadingWrapper';\nimport usePhonePrefixes from '../../../internal/PhoneInput/usePhonePrefixes';\nimport type { ComponentMethodsRef } from '../../../internal/UIElement/types';\n\nfunction MBWayInput(props: Readonly<MBWayInputProps>) {\n const { i18n, loadingContext } = useCoreContext();\n\n const { allowedCountries = [] } = props;\n\n const [status, setStatus] = useState<string>('ready');\n\n const { loadingStatus: prefixLoadingStatus, phonePrefixes } = usePhonePrefixes({ allowedCountries, loadingContext, handleError: props.onError });\n\n const mbwayRef = useRef<ComponentMethodsRef>({\n setStatus,\n showValidation: () => {}\n });\n\n const onChange = ({ data, valid, errors, isValid }) => {\n props.onChange({ data, valid, errors, isValid });\n };\n\n const setPhoneInputRef = useCallback(\n (ref: ComponentMethodsRef) => {\n mbwayRef.current.showValidation = ref.showValidation;\n props.setComponentRef(mbwayRef.current);\n },\n [props.setComponentRef]\n );\n\n return (\n <LoadingWrapper status={prefixLoadingStatus}>\n <div className=\"adyen-checkout__mb-way\">\n <PhoneInputForm {...props} setComponentRef={setPhoneInputRef} items={phonePrefixes} onChange={onChange} data={props.data} />\n\n {props.showPayButton && props.payButton({ status, label: i18n.get('confirmPurchase') })}\n </div>\n </LoadingWrapper>\n );\n}\n\nMBWayInput.defaultProps = {\n onChange: () => {},\n phoneNumberKey: 'mobileNumber',\n phoneNumberErrorKey: 'mobileNumber.invalid'\n};\n\nexport default MBWayInput;\n"],"names":["MBWayInput","props","i18n","loadingContext","useCoreContext","allowedCountries","status","setStatus","useState","loadingStatus","prefixLoadingStatus","phonePrefixes","usePhonePrefixes","handleError","onError","mbwayRef","useRef","showValidation","setPhoneInputRef","useCallback","ref","current","setComponentRef","h","LoadingWrapper","div","className","PhoneInputForm","items","onChange","data","valid","errors","isValid","showPayButton","payButton","label","get","defaultProps","phoneNumberKey","phoneNumberErrorKey"],"mappings":"6bAUA,SAASA,EAAWC,GAChB,MAAMC,KAAEA,EAAIC,eAAEA,GAAmBC,KAE3BC,iBAAEA,EAAmB,IAAOJ,GAE3BK,EAAQC,GAAaC,EAAiB,UAErCC,cAAeC,EAAmBC,cAAEA,GAAkBC,EAAiB,CAAEP,mBAAkBF,iBAAgBU,YAAaZ,EAAMa,UAEhIC,EAAWC,EAA4B,CACzCT,YACAU,eAAgB,SAOdC,EAAmBC,EACpBC,IACGL,EAASM,QAAQJ,eAAiBG,EAAIH,eACtChB,EAAMqB,gBAAgBP,EAASM,UAEnC,CAACpB,EAAMqB,kBAGX,OACIC,EAACC,EAAAA,CAAelB,OAAQI,GACpBa,EAACE,MAAAA,CAAIC,UAAU,0BACXH,EAACI,EAAAA,IAAmB1B,EAAOqB,gBAAiBJ,EAAkBU,MAAOjB,EAAekB,SAf/E,EAAGC,OAAMC,QAAOC,SAAQC,cACrChC,EAAM4B,SAAS,CAAEC,OAAMC,QAAOC,SAAQC,aAc0EH,KAAM7B,EAAM6B,OAEnH7B,EAAMiC,eAAiBjC,EAAMkC,UAAU,CAAE7B,SAAQ8B,MAAOlC,EAAKmC,IAAI,sBAIlF,CAEArC,EAAWsC,aAAe,CACtBT,SAAU,OACVU,eAAgB,eAChBC,oBAAqB"}
|