@adyen/adyen-web 6.44.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.
Files changed (313) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/adyen.css +17 -17
  3. package/dist/cjs/adyen.css.map +1 -1
  4. package/dist/cjs/index.cjs +2 -2
  5. package/dist/cjs/index.cjs.map +1 -1
  6. package/dist/cjs/index.d.cts +2001 -1879
  7. package/dist/es/adyen.css +17 -17
  8. package/dist/es/adyen.css.map +1 -1
  9. package/dist/es/components/ANCV/components/ANCVInput.js +1 -1
  10. package/dist/es/components/ANCV/components/ANCVInput.js.map +1 -1
  11. package/dist/es/components/Ach/Ach.js +1 -1
  12. package/dist/es/components/Ach/Ach.js.map +1 -1
  13. package/dist/es/components/Ach/components/AchComponent.js +1 -1
  14. package/dist/es/components/Ach/components/AchComponent.js.map +1 -1
  15. package/dist/es/components/AmazonPay/AmazonPay.js +1 -1
  16. package/dist/es/components/AmazonPay/AmazonPay.js.map +1 -1
  17. package/dist/es/components/BacsDD/BacsDD.js +1 -1
  18. package/dist/es/components/BacsDD/BacsDD.js.map +1 -1
  19. package/dist/es/components/BacsDD/components/BacsInput.js +1 -1
  20. package/dist/es/components/BacsDD/components/BacsInput.js.map +1 -1
  21. package/dist/es/components/BankTransfer/BankTransfer.js +1 -1
  22. package/dist/es/components/BankTransfer/BankTransfer.js.map +1 -1
  23. package/dist/es/components/BankTransfer/components/BankTransferInput/BankTransferInput.js +1 -1
  24. package/dist/es/components/BankTransfer/components/BankTransferInput/BankTransferInput.js.map +1 -1
  25. package/dist/es/components/Blik/Blik.js +1 -1
  26. package/dist/es/components/Blik/Blik.js.map +1 -1
  27. package/dist/es/components/Blik/components/BlikInput.js +1 -1
  28. package/dist/es/components/Blik/components/BlikInput.js.map +1 -1
  29. package/dist/es/components/Card/Card.js +1 -1
  30. package/dist/es/components/Card/Card.js.map +1 -1
  31. package/dist/es/components/Card/components/CardInput/types.js.map +1 -1
  32. package/dist/es/components/Card/components/ClickToPayHolder.js.map +1 -1
  33. package/dist/es/components/Card/components/ClickToPayWrapper.js +1 -1
  34. package/dist/es/components/Card/components/ClickToPayWrapper.js.map +1 -1
  35. package/dist/es/components/CashAppPay/CashAppPay.js +1 -1
  36. package/dist/es/components/CashAppPay/CashAppPay.js.map +1 -1
  37. package/dist/es/components/CustomCard/CustomCard.js +1 -1
  38. package/dist/es/components/CustomCard/CustomCard.js.map +1 -1
  39. package/dist/es/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  40. package/dist/es/components/Donation/Donation.js +1 -1
  41. package/dist/es/components/Donation/Donation.js.map +1 -1
  42. package/dist/es/components/Donation/DonationCampaignService.js +1 -1
  43. package/dist/es/components/Donation/DonationCampaignService.js.map +1 -1
  44. package/dist/es/components/Donation/components/DonationComponent.js +1 -1
  45. package/dist/es/components/Donation/components/DonationComponent.js.map +1 -1
  46. package/dist/es/components/Dropin/Dropin.js +1 -1
  47. package/dist/es/components/Dropin/Dropin.js.map +1 -1
  48. package/dist/es/components/Dropin/components/DropinComponent.js.map +1 -1
  49. package/dist/es/components/Dropin/components/PaymentMethod/PaymentMethodDetails.js +1 -1
  50. package/dist/es/components/Dropin/components/PaymentMethod/PaymentMethodDetails.js.map +1 -1
  51. package/dist/es/components/Giftcard/Giftcard.js +1 -1
  52. package/dist/es/components/Giftcard/Giftcard.js.map +1 -1
  53. package/dist/es/components/Giftcard/components/GiftcardComponent.js +1 -1
  54. package/dist/es/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  55. package/dist/es/components/Giropay/Giropay.js +1 -1
  56. package/dist/es/components/Giropay/Giropay.js.map +1 -1
  57. package/dist/es/components/GooglePay/GooglePay.js +1 -1
  58. package/dist/es/components/GooglePay/GooglePay.js.map +1 -1
  59. package/dist/es/components/GooglePay/GooglePayService.js +1 -1
  60. package/dist/es/components/GooglePay/GooglePayService.js.map +1 -1
  61. package/dist/es/components/Klarna/KlarnaPayments.js +1 -1
  62. package/dist/es/components/Klarna/KlarnaPayments.js.map +1 -1
  63. package/dist/es/components/MBWay/MBWay.js +1 -1
  64. package/dist/es/components/MBWay/MBWay.js.map +1 -1
  65. package/dist/es/components/MBWay/components/MBWayInput/MBWayInput.js +1 -1
  66. package/dist/es/components/MBWay/components/MBWayInput/MBWayInput.js.map +1 -1
  67. package/dist/es/components/Multibanco/Multibanco.js +1 -1
  68. package/dist/es/components/Multibanco/Multibanco.js.map +1 -1
  69. package/dist/es/components/PayByBankPix/PayByBankPix.js +1 -1
  70. package/dist/es/components/PayByBankPix/PayByBankPix.js.map +1 -1
  71. package/dist/es/components/PayByBankUS/PayByBankUS.js +1 -1
  72. package/dist/es/components/PayByBankUS/PayByBankUS.js.map +1 -1
  73. package/dist/es/components/PayTo/PayTo.js +1 -1
  74. package/dist/es/components/PayTo/PayTo.js.map +1 -1
  75. package/dist/es/components/PayTo/components/BSBInput.js +1 -1
  76. package/dist/es/components/PayTo/components/BSBInput.js.map +1 -1
  77. package/dist/es/components/PayTo/components/PayToNameFields.js +1 -1
  78. package/dist/es/components/PayTo/components/PayToNameFields.js.map +1 -1
  79. package/dist/es/components/PayTo/components/PayToPhone.js +1 -1
  80. package/dist/es/components/PayTo/components/PayToPhone.js.map +1 -1
  81. package/dist/es/components/Pix/Pix.js +1 -1
  82. package/dist/es/components/Pix/Pix.js.map +1 -1
  83. package/dist/es/components/Pix/components/PixInput/PixInput.js +1 -1
  84. package/dist/es/components/Pix/components/PixInput/PixInput.js.map +1 -1
  85. package/dist/es/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js +1 -1
  86. package/dist/es/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js.map +1 -1
  87. package/dist/es/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js +1 -1
  88. package/dist/es/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js.map +1 -1
  89. package/dist/es/components/Redirect/Redirect.js +1 -1
  90. package/dist/es/components/Redirect/Redirect.js.map +1 -1
  91. package/dist/es/components/Sepa/Sepa.js.map +1 -1
  92. package/dist/es/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
  93. package/dist/es/components/Trustly/Trustly.js +1 -1
  94. package/dist/es/components/Trustly/Trustly.js.map +1 -1
  95. package/dist/es/components/Twint/Twint.js +1 -1
  96. package/dist/es/components/Twint/Twint.js.map +1 -1
  97. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  98. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  99. package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
  100. package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
  101. package/dist/es/components/internal/Address/Specifications.js.map +1 -1
  102. package/dist/es/components/internal/Address/components/AddressSearch.js.map +1 -1
  103. package/dist/es/components/internal/Address/components/FieldContainer.js.map +1 -1
  104. package/dist/es/components/internal/Address/validate.formats.js +1 -1
  105. package/dist/es/components/internal/Address/validate.formats.js.map +1 -1
  106. package/dist/es/components/internal/Address/validate.js +1 -1
  107. package/dist/es/components/internal/Address/validate.js.map +1 -1
  108. package/dist/es/components/internal/BaseElement/BaseElement.js.map +1 -1
  109. package/dist/es/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js +1 -1
  110. package/dist/es/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js.map +1 -1
  111. package/dist/es/components/internal/ClickToPay/context/ClickToPayProvider.js.map +1 -1
  112. package/dist/es/components/internal/ClickToPay/services/sdks/AbstractSrcInitiator.js.map +1 -1
  113. package/dist/es/components/internal/ClickToPay/services/sdks/MastercardSdk.js.map +1 -1
  114. package/dist/es/components/internal/ClickToPay/services/sdks/VisaSdk.js.map +1 -1
  115. package/dist/es/components/internal/IbanInput/IbanInput.js +1 -1
  116. package/dist/es/components/internal/IbanInput/IbanInput.js.map +1 -1
  117. package/dist/es/components/internal/IbanInput/validate.js +1 -1
  118. package/dist/es/components/internal/IbanInput/validate.js.map +1 -1
  119. package/dist/es/components/internal/OpenInvoice/OpenInvoice.js +1 -1
  120. package/dist/es/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
  121. package/dist/es/components/internal/PayButton/PayButton.js +1 -1
  122. package/dist/es/components/internal/PayButton/PayButton.js.map +1 -1
  123. package/dist/es/components/internal/PayButton/utils.js +1 -1
  124. package/dist/es/components/internal/PayButton/utils.js.map +1 -1
  125. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  126. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
  127. package/dist/es/components/internal/RedirectButton/RedirectButton.js +1 -1
  128. package/dist/es/components/internal/RedirectButton/RedirectButton.js.map +1 -1
  129. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  130. package/dist/es/components/internal/UIElement/UIElement.js +1 -1
  131. package/dist/es/components/internal/UIElement/UIElement.js.map +1 -1
  132. package/dist/es/components/internal/UIElement/utils.js +1 -1
  133. package/dist/es/components/internal/UIElement/utils.js.map +1 -1
  134. package/dist/es/core/Analytics/constants.js +1 -1
  135. package/dist/es/core/Analytics/constants.js.map +1 -1
  136. package/dist/es/core/Analytics/events/AnalyticsLogEvent.js +1 -1
  137. package/dist/es/core/Analytics/events/AnalyticsLogEvent.js.map +1 -1
  138. package/dist/es/core/Errors/constants.js +1 -1
  139. package/dist/es/core/Errors/constants.js.map +1 -1
  140. package/dist/es/core/config.js +1 -1
  141. package/dist/es/core/config.js.map +1 -1
  142. package/dist/es/core/core.js +1 -1
  143. package/dist/es/core/core.js.map +1 -1
  144. package/dist/es/core/utils.js +1 -1
  145. package/dist/es/core/utils.js.map +1 -1
  146. package/dist/es/external/preact/compat/dist/compat.js.map +1 -1
  147. package/dist/es/external/preact/dist/preact.js +1 -1
  148. package/dist/es/external/preact/dist/preact.js.map +1 -1
  149. package/dist/es/index.d.ts +2001 -1879
  150. package/dist/es/utils/Validator/Validator.js +1 -1
  151. package/dist/es/utils/Validator/Validator.js.map +1 -1
  152. package/dist/es/utils/useForm/reducer.js +1 -1
  153. package/dist/es/utils/useForm/reducer.js.map +1 -1
  154. package/dist/es/utils/useForm/useForm.js +1 -1
  155. package/dist/es/utils/useForm/useForm.js.map +1 -1
  156. package/dist/es/utils/useForm/useFormWithA11y.js +1 -1
  157. package/dist/es/utils/useForm/useFormWithA11y.js.map +1 -1
  158. package/dist/es/utils/validator-utils.js +1 -1
  159. package/dist/es/utils/validator-utils.js.map +1 -1
  160. package/dist/es-legacy/adyen.css +17 -17
  161. package/dist/es-legacy/adyen.css.map +1 -1
  162. package/dist/es-legacy/components/ANCV/components/ANCVInput.js +1 -1
  163. package/dist/es-legacy/components/ANCV/components/ANCVInput.js.map +1 -1
  164. package/dist/es-legacy/components/Ach/Ach.js +1 -1
  165. package/dist/es-legacy/components/Ach/Ach.js.map +1 -1
  166. package/dist/es-legacy/components/Ach/components/AchComponent.js +1 -1
  167. package/dist/es-legacy/components/Ach/components/AchComponent.js.map +1 -1
  168. package/dist/es-legacy/components/AmazonPay/AmazonPay.js +1 -1
  169. package/dist/es-legacy/components/AmazonPay/AmazonPay.js.map +1 -1
  170. package/dist/es-legacy/components/BacsDD/BacsDD.js +1 -1
  171. package/dist/es-legacy/components/BacsDD/BacsDD.js.map +1 -1
  172. package/dist/es-legacy/components/BacsDD/components/BacsInput.js +1 -1
  173. package/dist/es-legacy/components/BacsDD/components/BacsInput.js.map +1 -1
  174. package/dist/es-legacy/components/BankTransfer/BankTransfer.js +1 -1
  175. package/dist/es-legacy/components/BankTransfer/BankTransfer.js.map +1 -1
  176. package/dist/es-legacy/components/BankTransfer/components/BankTransferInput/BankTransferInput.js +1 -1
  177. package/dist/es-legacy/components/BankTransfer/components/BankTransferInput/BankTransferInput.js.map +1 -1
  178. package/dist/es-legacy/components/Blik/Blik.js +1 -1
  179. package/dist/es-legacy/components/Blik/Blik.js.map +1 -1
  180. package/dist/es-legacy/components/Blik/components/BlikInput.js +1 -1
  181. package/dist/es-legacy/components/Blik/components/BlikInput.js.map +1 -1
  182. package/dist/es-legacy/components/Card/Card.js +1 -1
  183. package/dist/es-legacy/components/Card/Card.js.map +1 -1
  184. package/dist/es-legacy/components/Card/components/CardInput/types.js.map +1 -1
  185. package/dist/es-legacy/components/Card/components/ClickToPayHolder.js.map +1 -1
  186. package/dist/es-legacy/components/Card/components/ClickToPayWrapper.js +1 -1
  187. package/dist/es-legacy/components/Card/components/ClickToPayWrapper.js.map +1 -1
  188. package/dist/es-legacy/components/CashAppPay/CashAppPay.js +1 -1
  189. package/dist/es-legacy/components/CashAppPay/CashAppPay.js.map +1 -1
  190. package/dist/es-legacy/components/CustomCard/CustomCard.js +1 -1
  191. package/dist/es-legacy/components/CustomCard/CustomCard.js.map +1 -1
  192. package/dist/es-legacy/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  193. package/dist/es-legacy/components/Donation/Donation.js +1 -1
  194. package/dist/es-legacy/components/Donation/Donation.js.map +1 -1
  195. package/dist/es-legacy/components/Donation/DonationCampaignService.js +1 -1
  196. package/dist/es-legacy/components/Donation/DonationCampaignService.js.map +1 -1
  197. package/dist/es-legacy/components/Donation/components/DonationComponent.js +1 -1
  198. package/dist/es-legacy/components/Donation/components/DonationComponent.js.map +1 -1
  199. package/dist/es-legacy/components/Dropin/Dropin.js +1 -1
  200. package/dist/es-legacy/components/Dropin/Dropin.js.map +1 -1
  201. package/dist/es-legacy/components/Dropin/components/DropinComponent.js.map +1 -1
  202. package/dist/es-legacy/components/Dropin/components/PaymentMethod/PaymentMethodDetails.js +1 -1
  203. package/dist/es-legacy/components/Dropin/components/PaymentMethod/PaymentMethodDetails.js.map +1 -1
  204. package/dist/es-legacy/components/Giftcard/Giftcard.js +1 -1
  205. package/dist/es-legacy/components/Giftcard/Giftcard.js.map +1 -1
  206. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js +1 -1
  207. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  208. package/dist/es-legacy/components/Giropay/Giropay.js +1 -1
  209. package/dist/es-legacy/components/Giropay/Giropay.js.map +1 -1
  210. package/dist/es-legacy/components/GooglePay/GooglePay.js +1 -1
  211. package/dist/es-legacy/components/GooglePay/GooglePay.js.map +1 -1
  212. package/dist/es-legacy/components/GooglePay/GooglePayService.js +1 -1
  213. package/dist/es-legacy/components/GooglePay/GooglePayService.js.map +1 -1
  214. package/dist/es-legacy/components/Klarna/KlarnaPayments.js +1 -1
  215. package/dist/es-legacy/components/Klarna/KlarnaPayments.js.map +1 -1
  216. package/dist/es-legacy/components/MBWay/MBWay.js +1 -1
  217. package/dist/es-legacy/components/MBWay/MBWay.js.map +1 -1
  218. package/dist/es-legacy/components/MBWay/components/MBWayInput/MBWayInput.js +1 -1
  219. package/dist/es-legacy/components/MBWay/components/MBWayInput/MBWayInput.js.map +1 -1
  220. package/dist/es-legacy/components/Multibanco/Multibanco.js +1 -1
  221. package/dist/es-legacy/components/Multibanco/Multibanco.js.map +1 -1
  222. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js +1 -1
  223. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js.map +1 -1
  224. package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js +1 -1
  225. package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js.map +1 -1
  226. package/dist/es-legacy/components/PayTo/PayTo.js +1 -1
  227. package/dist/es-legacy/components/PayTo/PayTo.js.map +1 -1
  228. package/dist/es-legacy/components/PayTo/components/BSBInput.js +1 -1
  229. package/dist/es-legacy/components/PayTo/components/BSBInput.js.map +1 -1
  230. package/dist/es-legacy/components/PayTo/components/PayToNameFields.js +1 -1
  231. package/dist/es-legacy/components/PayTo/components/PayToNameFields.js.map +1 -1
  232. package/dist/es-legacy/components/PayTo/components/PayToPhone.js +1 -1
  233. package/dist/es-legacy/components/PayTo/components/PayToPhone.js.map +1 -1
  234. package/dist/es-legacy/components/Pix/Pix.js +1 -1
  235. package/dist/es-legacy/components/Pix/Pix.js.map +1 -1
  236. package/dist/es-legacy/components/Pix/components/PixInput/PixInput.js +1 -1
  237. package/dist/es-legacy/components/Pix/components/PixInput/PixInput.js.map +1 -1
  238. package/dist/es-legacy/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js +1 -1
  239. package/dist/es-legacy/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js.map +1 -1
  240. package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js +1 -1
  241. package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js.map +1 -1
  242. package/dist/es-legacy/components/Redirect/Redirect.js +1 -1
  243. package/dist/es-legacy/components/Redirect/Redirect.js.map +1 -1
  244. package/dist/es-legacy/components/Sepa/Sepa.js.map +1 -1
  245. package/dist/es-legacy/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
  246. package/dist/es-legacy/components/Trustly/Trustly.js +1 -1
  247. package/dist/es-legacy/components/Trustly/Trustly.js.map +1 -1
  248. package/dist/es-legacy/components/Twint/Twint.js +1 -1
  249. package/dist/es-legacy/components/Twint/Twint.js.map +1 -1
  250. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  251. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  252. package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
  253. package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
  254. package/dist/es-legacy/components/internal/Address/Specifications.js.map +1 -1
  255. package/dist/es-legacy/components/internal/Address/components/AddressSearch.js.map +1 -1
  256. package/dist/es-legacy/components/internal/Address/components/FieldContainer.js.map +1 -1
  257. package/dist/es-legacy/components/internal/Address/validate.formats.js +1 -1
  258. package/dist/es-legacy/components/internal/Address/validate.formats.js.map +1 -1
  259. package/dist/es-legacy/components/internal/Address/validate.js +1 -1
  260. package/dist/es-legacy/components/internal/Address/validate.js.map +1 -1
  261. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
  262. package/dist/es-legacy/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js +1 -1
  263. package/dist/es-legacy/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js.map +1 -1
  264. package/dist/es-legacy/components/internal/ClickToPay/context/ClickToPayProvider.js.map +1 -1
  265. package/dist/es-legacy/components/internal/ClickToPay/services/sdks/AbstractSrcInitiator.js.map +1 -1
  266. package/dist/es-legacy/components/internal/ClickToPay/services/sdks/MastercardSdk.js.map +1 -1
  267. package/dist/es-legacy/components/internal/ClickToPay/services/sdks/VisaSdk.js.map +1 -1
  268. package/dist/es-legacy/components/internal/IbanInput/IbanInput.js +1 -1
  269. package/dist/es-legacy/components/internal/IbanInput/IbanInput.js.map +1 -1
  270. package/dist/es-legacy/components/internal/IbanInput/validate.js +1 -1
  271. package/dist/es-legacy/components/internal/IbanInput/validate.js.map +1 -1
  272. package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js +1 -1
  273. package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
  274. package/dist/es-legacy/components/internal/PayButton/PayButton.js +1 -1
  275. package/dist/es-legacy/components/internal/PayButton/PayButton.js.map +1 -1
  276. package/dist/es-legacy/components/internal/PayButton/utils.js +1 -1
  277. package/dist/es-legacy/components/internal/PayButton/utils.js.map +1 -1
  278. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  279. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
  280. package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js +1 -1
  281. package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js.map +1 -1
  282. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  283. package/dist/es-legacy/components/internal/UIElement/UIElement.js +1 -1
  284. package/dist/es-legacy/components/internal/UIElement/UIElement.js.map +1 -1
  285. package/dist/es-legacy/components/internal/UIElement/utils.js +1 -1
  286. package/dist/es-legacy/components/internal/UIElement/utils.js.map +1 -1
  287. package/dist/es-legacy/core/Analytics/constants.js +1 -1
  288. package/dist/es-legacy/core/Analytics/constants.js.map +1 -1
  289. package/dist/es-legacy/core/Analytics/events/AnalyticsLogEvent.js +1 -1
  290. package/dist/es-legacy/core/Analytics/events/AnalyticsLogEvent.js.map +1 -1
  291. package/dist/es-legacy/core/Errors/constants.js +1 -1
  292. package/dist/es-legacy/core/Errors/constants.js.map +1 -1
  293. package/dist/es-legacy/core/config.js +1 -1
  294. package/dist/es-legacy/core/config.js.map +1 -1
  295. package/dist/es-legacy/core/core.js +1 -1
  296. package/dist/es-legacy/core/core.js.map +1 -1
  297. package/dist/es-legacy/core/utils.js +1 -1
  298. package/dist/es-legacy/core/utils.js.map +1 -1
  299. package/dist/es-legacy/external/preact/compat/dist/compat.js.map +1 -1
  300. package/dist/es-legacy/external/preact/dist/preact.js +1 -1
  301. package/dist/es-legacy/external/preact/dist/preact.js.map +1 -1
  302. package/dist/es-legacy/utils/Validator/Validator.js +1 -1
  303. package/dist/es-legacy/utils/Validator/Validator.js.map +1 -1
  304. package/dist/es-legacy/utils/useForm/reducer.js +1 -1
  305. package/dist/es-legacy/utils/useForm/reducer.js.map +1 -1
  306. package/dist/es-legacy/utils/useForm/useForm.js +1 -1
  307. package/dist/es-legacy/utils/useForm/useForm.js.map +1 -1
  308. package/dist/es-legacy/utils/useForm/useFormWithA11y.js +1 -1
  309. package/dist/es-legacy/utils/useForm/useFormWithA11y.js.map +1 -1
  310. package/dist/es-legacy/utils/validator-utils.js +1 -1
  311. package/dist/es-legacy/utils/validator-utils.js.map +1 -1
  312. package/package.json +22 -22
  313. package/styles/adyen.css +17 -17
@@ -1 +1 @@
1
- {"version":3,"file":"CustomCardInput.js","sources":["../../../../../src/components/CustomCard/CustomCardInput/CustomCardInput.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useState, useEffect, useRef, useMemo } from 'preact/hooks';\nimport Language from '../../../language/Language';\nimport SecuredFieldsProvider from '../../internal/SecuredFields/SFP/SecuredFieldsProvider';\nimport { SFPState } from '../../internal/SecuredFields/SFP/types';\nimport { BinLookupResponse, CardBrandsConfiguration, CardPlaceholders } from '../../Card/types';\nimport SFExtensions from '../../internal/SecuredFields/binLookup/extensions';\nimport { StylesObject } from '../../internal/SecuredFields/lib/types';\nimport { Resources } from '../../../core/Context/Resources';\nimport { SFError } from '../../Card/components/CardInput/types';\nimport { ValidationError } from '../types';\nimport type { AbstractAnalyticsEvent } from '../../../core/Analytics/events/AbstractAnalyticsEvent';\n\ninterface SecuredFieldsProps {\n autoFocus?: boolean;\n brand?: string;\n brands?: string[];\n brandsConfiguration?: CardBrandsConfiguration;\n clientKey: string;\n countryCode?: string;\n forceCompat?: boolean;\n i18n: Language;\n implementationType?: 'components' | 'custom';\n keypadFix?: boolean;\n loadingContext?: string;\n legacyInputMode?: boolean;\n minimumExpiryDate?: string;\n onAdditionalSFConfig?: () => {};\n onAdditionalSFRemoved?: () => {};\n onAllValid?: () => {};\n onAutoComplete?: () => {};\n onBinValue?: () => {};\n onBrand?: () => {};\n onConfigSuccess?: () => {};\n onChange: (data) => void;\n onSubmitAnalytics?: (event: AbstractAnalyticsEvent) => void;\n handleKeyDown?: (event: KeyboardEvent) => void;\n onError?: () => {};\n onFieldValid?: () => {};\n onFocus?: (e) => {};\n onLoad?: () => {};\n placeholders?: CardPlaceholders;\n rootNode: HTMLElement;\n resources: Resources;\n showWarnings?: boolean;\n styles?: StylesObject;\n trimTrailingSeparator?: boolean;\n type: string;\n maskSecurityCode?: boolean;\n}\n\nconst defaultProps = {\n onChange: () => {},\n onError: () => {},\n onValidationError: () => {}\n};\n\nfunction CustomCardInput(props: Readonly<SecuredFieldsProps>) {\n const sfp = useRef(null);\n\n const [errors, setErrors] = useState({});\n const [valid, setValid] = useState({});\n const [data, setData] = useState({});\n\n const [isSfpValid, setIsSfpValid] = useState(false);\n\n const [issuingCountryCode, setIssuingCountryCode] = useState(null);\n\n const [dualBrandSelectElements, setDualBrandSelectElements] = useState([]);\n const [selectedBrandValue, setSelectedBrandValue] = useState('');\n\n const handleSecuredFieldsChange = (sfState: SFPState): void => {\n setData({ ...data, ...sfState.data });\n setErrors({ ...errors, ...sfState.errors });\n setValid({ ...valid, ...sfState.valid });\n\n setIsSfpValid(sfState.isSfpValid);\n };\n\n // Farm the handlers for binLookup related functionality out to another 'extensions' file\n const extensions = useMemo(\n () =>\n SFExtensions(\n props,\n { sfp },\n { dualBrandSelectElements, setDualBrandSelectElements, setSelectedBrandValue, issuingCountryCode, setIssuingCountryCode }\n ),\n [dualBrandSelectElements, issuingCountryCode]\n );\n\n /**\n * EXPECTED METHODS ON SecuredFields.this\n */\n this.processBinLookupResponse = (binLookupResponse: BinLookupResponse, isReset: boolean) => {\n extensions.processBinLookup(binLookupResponse, isReset);\n };\n\n this.dualBrandingChangeHandler = extensions.handleDualBrandSelection;\n\n /**\n * EFFECT HOOKS\n */\n useEffect(() => {\n // componentDidMount\n this.setFocusOn = sfp.current.setFocusOn;\n this.updateStyles = sfp.current.updateStyles;\n this.showValidation = sfp.current.showValidation;\n this.handleUnsupportedCard = sfp.current.handleUnsupportedCard;\n\n // componentWillUnmount\n return () => {\n sfp.current.destroy();\n };\n }, []);\n\n /**\n * Main 'componentDidUpdate' handler\n */\n useEffect(() => {\n const sfStateErrorsObj = sfp.current.mapErrorsToValidationRuleResult();\n\n const mappedErrors = { ...errors, ...sfStateErrorsObj }; // maps sfErrors\n\n props.onChange({\n data,\n valid,\n errors: mappedErrors,\n isValid: isSfpValid,\n selectedBrandValue\n });\n\n // Create an array of Validation error objects and send to callback\n if (Object.keys(mappedErrors).length) {\n const validationErrors: ValidationError[] = Object.entries(mappedErrors).map(([fieldType, error]) => {\n const valErr: ValidationError = {\n fieldType,\n ...(error ? (error as SFError) : { error: '', rootNode: this.props.rootNode })\n };\n return valErr;\n });\n this.props.onValidationError?.(validationErrors);\n }\n }, [data, valid, errors, selectedBrandValue]);\n\n /**\n * RENDER\n */\n // prettier-ignore\n return (\n <SecuredFieldsProvider\n ref={sfp}\n {...extractPropsForSFP(props)}\n type={props.brand}\n componentType={props.type}\n onChange={handleSecuredFieldsChange}\n onSubmitAnalytics={props.onSubmitAnalytics}\n exposeExpiryDate={false}\n disableIOSArrowKeys={null}\n render={() => null}\n />\n );\n}\n\nCustomCardInput.defaultProps = defaultProps;\n\nexport default CustomCardInput;\n\nconst extractPropsForSFP = (props: SecuredFieldsProps) => {\n return {\n autoFocus: props.autoFocus,\n brands: props.brands,\n brandsConfiguration: props.brandsConfiguration,\n clientKey: props.clientKey,\n forceCompat: props.forceCompat,\n i18n: props.i18n,\n implementationType: props.implementationType,\n keypadFix: props.keypadFix,\n legacyInputMode: props.legacyInputMode,\n loadingContext: props.loadingContext,\n minimumExpiryDate: props.minimumExpiryDate,\n onAdditionalSFConfig: props.onAdditionalSFConfig,\n onAdditionalSFRemoved: props.onAdditionalSFRemoved,\n onAllValid: props.onAllValid,\n onAutoComplete: props.onAutoComplete,\n onBinValue: props.onBinValue,\n onBrand: props.onBrand,\n onConfigSuccess: props.onConfigSuccess,\n handleKeyDown: props.handleKeyDown,\n onError: props.onError,\n onFieldValid: props.onFieldValid,\n onFocus: props.onFocus,\n onLoad: props.onLoad,\n rootNode: props.rootNode,\n showWarnings: props.showWarnings,\n styles: props.styles,\n trimTrailingSeparator: props.trimTrailingSeparator,\n resources: props.resources,\n maskSecurityCode: props.maskSecurityCode,\n placeholders: props.placeholders\n };\n};\n"],"names":["CustomCardInput","props","sfp","useRef","errors","setErrors","useState","valid","setValid","data","setData","isSfpValid","setIsSfpValid","issuingCountryCode","setIssuingCountryCode","dualBrandSelectElements","setDualBrandSelectElements","selectedBrandValue","setSelectedBrandValue","extensions","useMemo","SFExtensions","this","processBinLookupResponse","binLookupResponse","isReset","processBinLookup","dualBrandingChangeHandler","handleDualBrandSelection","useEffect","setFocusOn","current","updateStyles","showValidation","handleUnsupportedCard","destroy","sfStateErrorsObj","mapErrorsToValidationRuleResult","mappedErrors","_object_spread","onChange","isValid","Object","keys","length","_this_props_onValidationError","_this_props","validationErrors","entries","map","fieldType","error","rootNode","onValidationError","call","h","SecuredFieldsProvider","ref","extractPropsForSFP","type","brand","componentType","sfState","onSubmitAnalytics","exposeExpiryDate","disableIOSArrowKeys","render","defaultProps","onError","autoFocus","brands","brandsConfiguration","clientKey","forceCompat","i18n","implementationType","keypadFix","legacyInputMode","loadingContext","minimumExpiryDate","onAdditionalSFConfig","onAdditionalSFRemoved","onAllValid","onAutoComplete","onBinValue","onBrand","onConfigSuccess","handleKeyDown","onFieldValid","onFocus","onLoad","showWarnings","styles","trimTrailingSeparator","resources","maskSecurityCode","placeholders"],"mappings":"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"}
1
+ {"version":3,"file":"CustomCardInput.js","sources":["../../../../../src/components/CustomCard/CustomCardInput/CustomCardInput.tsx"],"sourcesContent":["import { h, Ref } from 'preact';\nimport { useState, useEffect, useRef, useMemo } from 'preact/hooks';\nimport Language from '../../../language/Language';\nimport SecuredFieldsProvider from '../../internal/SecuredFields/SFP/SecuredFieldsProvider';\nimport { SFPState } from '../../internal/SecuredFields/SFP/types';\nimport { BinLookupResponse, CardBrandsConfiguration, CardPlaceholders } from '../../Card/types';\nimport SFExtensions from '../../internal/SecuredFields/binLookup/extensions';\nimport {\n CardAllValidData,\n CardAutoCompleteData,\n CardBinValueData,\n CardBrandData,\n CardConfigSuccessData,\n CardFieldValidData,\n CardFocusData,\n CardLoadData,\n CardErrorData,\n SFFieldType,\n StylesObject\n} from '../../internal/SecuredFields/lib/types';\nimport { Resources } from '../../../core/Context/Resources';\nimport { SFError } from '../../Card/components/CardInput/types';\nimport { ValidationError } from '../types';\nimport type { AbstractAnalyticsEvent } from '../../../core/Analytics/events/AbstractAnalyticsEvent';\nimport type AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport type UIElement from '../../internal/UIElement';\nimport type { ComponentMethodsRef } from '../../internal/UIElement/types';\n\n/**\n * Methods that CustomCardInput exposes to the CustomCard element through the ref\n */\nexport interface CustomCardInputRef extends ComponentMethodsRef {\n processBinLookupResponse(binLookupResponse: BinLookupResponse, isReset?: boolean): void;\n dualBrandingChangeHandler(event: Event | string): void;\n setFocusOn(frame: SFFieldType): void;\n updateStyles(stylesObj: StylesObject): void;\n handleUnsupportedCard(errObj: CardErrorData): boolean;\n}\n\ninterface SecuredFieldsProps {\n autoFocus?: boolean;\n brand?: string;\n brands?: string[];\n brandsConfiguration?: CardBrandsConfiguration;\n clientKey?: string;\n countryCode?: string;\n forceCompat?: boolean;\n i18n?: Language;\n implementationType?: 'components' | 'custom';\n keypadFix?: boolean;\n loadingContext?: string;\n legacyInputMode?: boolean;\n minimumExpiryDate?: string;\n onAdditionalSFConfig?: () => void;\n onAdditionalSFRemoved?: () => void;\n onAllValid?: (data: CardAllValidData) => void;\n onAutoComplete?: (data: CardAutoCompleteData) => void;\n onBinValue?: (data: CardBinValueData) => void;\n onBrand?: (data: CardBrandData) => void;\n onConfigSuccess?: (data: CardConfigSuccessData) => void;\n onChange?: (data) => void;\n onSubmitAnalytics?: (event: AbstractAnalyticsEvent) => void;\n handleKeyDown?: (event: KeyboardEvent) => void;\n onError?: (error: AdyenCheckoutError, component?: UIElement) => void;\n onFieldValid?: (data: CardFieldValidData) => void;\n onFocus?: (data: CardFocusData) => void;\n onLoad?: (data: CardLoadData) => void;\n placeholders?: CardPlaceholders;\n rootNode?: HTMLElement;\n resources?: Resources;\n showWarnings?: boolean;\n styles?: StylesObject;\n trimTrailingSeparator?: boolean;\n type?: string;\n maskSecurityCode?: boolean;\n ref?: Ref<CustomCardInputRef>;\n}\n\nconst defaultProps = {\n onChange: () => {},\n onError: () => {},\n onValidationError: () => {}\n};\n\nfunction CustomCardInput(props: Readonly<SecuredFieldsProps>) {\n const sfp = useRef(null);\n\n const [errors, setErrors] = useState({});\n const [valid, setValid] = useState({});\n const [data, setData] = useState({});\n\n const [isSfpValid, setIsSfpValid] = useState(false);\n\n const [issuingCountryCode, setIssuingCountryCode] = useState(null);\n\n const [dualBrandSelectElements, setDualBrandSelectElements] = useState([]);\n const [selectedBrandValue, setSelectedBrandValue] = useState('');\n\n const handleSecuredFieldsChange = (sfState: SFPState): void => {\n setData({ ...data, ...sfState.data });\n setErrors({ ...errors, ...sfState.errors });\n setValid({ ...valid, ...sfState.valid });\n\n setIsSfpValid(sfState.isSfpValid);\n };\n\n // Farm the handlers for binLookup related functionality out to another 'extensions' file\n const extensions = useMemo(\n () =>\n SFExtensions(\n props,\n { sfp },\n { dualBrandSelectElements, setDualBrandSelectElements, setSelectedBrandValue, issuingCountryCode, setIssuingCountryCode }\n ),\n [dualBrandSelectElements, issuingCountryCode]\n );\n\n /**\n * EXPECTED METHODS ON SecuredFields.this\n */\n this.processBinLookupResponse = (binLookupResponse: BinLookupResponse, isReset: boolean) => {\n extensions.processBinLookup(binLookupResponse, isReset);\n };\n\n this.dualBrandingChangeHandler = extensions.handleDualBrandSelection;\n\n useEffect(() => {\n this.setFocusOn = sfp.current.setFocusOn;\n this.updateStyles = sfp.current.updateStyles;\n this.showValidation = sfp.current.showValidation;\n this.handleUnsupportedCard = sfp.current.handleUnsupportedCard;\n\n return () => {\n sfp.current.destroy();\n };\n }, []);\n\n useEffect(() => {\n const sfStateErrorsObj = sfp.current.mapErrorsToValidationRuleResult();\n\n const mappedErrors = { ...errors, ...sfStateErrorsObj }; // maps sfErrors\n\n props.onChange({\n data,\n valid,\n errors: mappedErrors,\n isValid: isSfpValid,\n selectedBrandValue\n });\n\n // Create an array of Validation error objects and send to callback\n if (Object.keys(mappedErrors).length) {\n const validationErrors: ValidationError[] = Object.entries(mappedErrors).map(([fieldType, error]) => {\n const valErr: ValidationError = {\n fieldType,\n ...(error ? (error as SFError) : { error: '', rootNode: this.props.rootNode })\n };\n return valErr;\n });\n this.props.onValidationError?.(validationErrors);\n }\n }, [data, valid, errors, selectedBrandValue]);\n\n return (\n <SecuredFieldsProvider\n ref={sfp}\n {...extractPropsForSFP(props)}\n type={props.brand}\n componentType={props.type}\n onChange={handleSecuredFieldsChange}\n onSubmitAnalytics={props.onSubmitAnalytics}\n exposeExpiryDate={false}\n disableIOSArrowKeys={null}\n render={() => null}\n />\n );\n}\n\nCustomCardInput.defaultProps = defaultProps;\n\nexport default CustomCardInput;\n\nconst extractPropsForSFP = (props: SecuredFieldsProps) => {\n return {\n autoFocus: props.autoFocus,\n brands: props.brands,\n brandsConfiguration: props.brandsConfiguration,\n clientKey: props.clientKey,\n forceCompat: props.forceCompat,\n i18n: props.i18n,\n implementationType: props.implementationType,\n keypadFix: props.keypadFix,\n legacyInputMode: props.legacyInputMode,\n loadingContext: props.loadingContext,\n minimumExpiryDate: props.minimumExpiryDate,\n onAdditionalSFConfig: props.onAdditionalSFConfig,\n onAdditionalSFRemoved: props.onAdditionalSFRemoved,\n onAllValid: props.onAllValid,\n onAutoComplete: props.onAutoComplete,\n onBinValue: props.onBinValue,\n onBrand: props.onBrand,\n onConfigSuccess: props.onConfigSuccess,\n handleKeyDown: props.handleKeyDown,\n onError: props.onError,\n onFieldValid: props.onFieldValid,\n onFocus: props.onFocus,\n onLoad: props.onLoad,\n rootNode: props.rootNode,\n showWarnings: props.showWarnings,\n styles: props.styles,\n trimTrailingSeparator: props.trimTrailingSeparator,\n resources: props.resources,\n maskSecurityCode: props.maskSecurityCode,\n placeholders: props.placeholders\n };\n};\n"],"names":["CustomCardInput","props","sfp","useRef","errors","setErrors","useState","valid","setValid","data","setData","isSfpValid","setIsSfpValid","issuingCountryCode","setIssuingCountryCode","dualBrandSelectElements","setDualBrandSelectElements","selectedBrandValue","setSelectedBrandValue","extensions","useMemo","SFExtensions","this","processBinLookupResponse","binLookupResponse","isReset","processBinLookup","dualBrandingChangeHandler","handleDualBrandSelection","useEffect","setFocusOn","current","updateStyles","showValidation","handleUnsupportedCard","destroy","sfStateErrorsObj","mapErrorsToValidationRuleResult","mappedErrors","_object_spread","onChange","isValid","Object","keys","length","_this_props_onValidationError","_this_props","validationErrors","entries","map","fieldType","error","rootNode","onValidationError","call","h","SecuredFieldsProvider","ref","extractPropsForSFP","type","brand","componentType","sfState","onSubmitAnalytics","exposeExpiryDate","disableIOSArrowKeys","render","defaultProps","onError","autoFocus","brands","brandsConfiguration","clientKey","forceCompat","i18n","implementationType","keypadFix","legacyInputMode","loadingContext","minimumExpiryDate","onAdditionalSFConfig","onAdditionalSFRemoved","onAllValid","onAutoComplete","onBinValue","onBrand","onConfigSuccess","handleKeyDown","onFieldValid","onFocus","onLoad","showWarnings","styles","trimTrailingSeparator","resources","maskSecurityCode","placeholders"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import n from"./components/DonationComponent.js";import{TxVariants as o}from"../tx-variants.js";import{AnalyticsLogEvent as i,LogEventSubtype as s,LogEventType as a}from"../../core/Analytics/events/AnalyticsLogEvent.js";import{AnalyticsInfoEvent as r,UiTarget as c,InfoEventType as l}from"../../core/Analytics/events/AnalyticsInfoEvent.js";import d,{REPARENT_WITHOUT_AUTO_START_ERROR_MSG as p}from"./DonationCampaignService.js";function u(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function m(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),o.forEach(function(e){u(t,e,n[e])})}return t}function h(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e.push.apply(e,n)}return e}(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}),t}class y extends e{static isServiceMode(t){return"rootNode"in t&&!!t.rootNode}async initialiseServiceMode(t,e){if(t.session)if(t.session.sessionsDonationInitiated)console.error(p);else{t.session.sessionsDonationInitiated=!0;try{const n=await new d(t,e).initialise();n&&(this.props=m({},this.props,n),this.mount(e.rootNode))}catch(e){var n,o;null===(o=t.options.donation)||void 0===o||null===(n=o.onDonationFailure)||void 0===n||n.call(o,e)}}}get data(){return this.state.data}get isValid(){return this.state.isValid}setState(t){this.state=m({},this.state,t)}donate(){const t=new i({component:y.type,type:a.submit,subType:s.donation,message:"Making donation"});this.core.modules.analytics.sendAnalytics(t);const{data:e,isValid:n}=this;this.props.onDonate({data:e,isValid:n},this)}cancel(){const t=new i({component:y.type,type:a.closed,subType:s.donation,message:"Opting to not make donation"});this.core.modules.analytics.sendAnalytics(t);const{data:e,isValid:n}=this;this.isInServiceMode&&this.unmount(),this.props.onCancel({data:e,isValid:n})}amountSelected(t){const e=new r({component:y.type,type:l.selected,selectedValue:JSON.stringify(t.data.amount),target:c.donationAmountButton});this.core.modules.analytics.sendAnalytics(e)}componentToRender(){return t(n,h(m({},this.props),{ref:t=>{this.componentRef=t},onChange:this.setState,onDonate:this.donate,onCancel:this.cancel,onAmountSelected:this.amountSelected}))}constructor(t,e){const n=y.isServiceMode(e);super(t,n?void 0:e),u(this,"isInServiceMode",!1),this.donate=this.donate.bind(this),this.cancel=this.cancel.bind(this),this.amountSelected=this.amountSelected.bind(this),this.isInServiceMode=n,t.session&&n&&this.initialiseServiceMode(t,e)}}u(y,"type",o.donation),u(y,"defaultProps",{onCancel:()=>{},onDonate:()=>{}});export{y as default};
1
+ import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import n from"./components/DonationComponent.js";import{TxVariants as o}from"../tx-variants.js";import{AnalyticsLogEvent as s,LogEventSubtype as i,LogEventType as a}from"../../core/Analytics/events/AnalyticsLogEvent.js";import{AnalyticsInfoEvent as r,UiTarget as c,InfoEventType as l}from"../../core/Analytics/events/AnalyticsInfoEvent.js";import d,{REPARENT_WITHOUT_AUTO_START_ERROR_MSG as p}from"./DonationCampaignService.js";function u(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function m(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(t){return Object.getOwnPropertyDescriptor(n,t).enumerable}))),o.forEach(function(e){u(t,e,n[e])})}return t}function h(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e.push.apply(e,n)}return e}(Object(e)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(e,n))}),t}class y extends e{static isServiceMode(t){return"rootNode"in t&&!!t.rootNode}async initialiseServiceMode(t,e){if(t.session)if(t.session.sessionsDonationInitiated)console.error(p);else{t.session.sessionsDonationInitiated=!0;try{const n=await new d(t,e).initialise();n&&(this.props=m({},this.props,n),this.mount(e.rootNode))}catch(e){var n,o;null===(o=t.options.donation)||void 0===o||null===(n=o.onDonationFailure)||void 0===n||n.call(o,e)}}}get data(){return this.state.data}get isValid(){return this.state.isValid}setState(t){this.state=m({},this.state,t)}donate(){const t=new s({component:y.type,type:a.submit,subType:i.donation,message:"Making donation"});this.core.modules.analytics.sendAnalytics(t);const{data:e,isValid:n}=this;this.props.onDonate({data:e,isValid:n},this)}cancel(){const t=new s({component:y.type,type:a.closed,subType:i.donation,message:"Opting to not make donation"});this.core.modules.analytics.sendAnalytics(t);const{data:e,isValid:n}=this;this.isInServiceMode&&this.unmount(),this.props.onCancel({data:e,isValid:n})}amountSelected(t){const e=new r({component:y.type,type:l.selected,selectedValue:JSON.stringify(t.data.amount),target:c.donationAmountButton});this.core.modules.analytics.sendAnalytics(e)}componentToRender(){return t(n,h(m({},this.props),{setComponentRef:this.setComponentRef,onChange:this.setState,onDonate:this.donate,onCancel:this.cancel,onAmountSelected:this.amountSelected}))}constructor(t,e){const n=y.isServiceMode(e);super(t,n?void 0:e),u(this,"isInServiceMode",!1),this.donate=this.donate.bind(this),this.cancel=this.cancel.bind(this),this.amountSelected=this.amountSelected.bind(this),this.isInServiceMode=n,t.session&&n&&this.initialiseServiceMode(t,e)}}u(y,"type",o.donation),u(y,"defaultProps",{onCancel:()=>{},onDonate:()=>{}});export{y as default};
2
2
  //# sourceMappingURL=Donation.js.map
@@ -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 // @ts-ignore ref is internal from the Component\n ref={ref => {\n this.componentRef = ref;\n }}\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","_object_spread","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","ref","componentRef","onChange","onAmountSelected","constructor","super","undefined","_define_property","bind","TxVariants","defaultProps"],"mappings":"y1CAWA,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,MAAQa,KAAKD,KAAKZ,MAAUS,GACjCG,KAAKE,MAAMd,EAAMC,UAGzB,CAAE,MAAOM,OAGLJ,EAAAA,EAAyB,QAAzBA,EAAAA,EAASY,QAAQC,oBAAjBb,GAA4C,QAA5CA,EAAAA,EAA2Bc,yBAA3Bd,IAAAA,GAAAA,EAAAA,KAAAA,EAA+CI,EACnD,CAdA,CAeJ,CAKA,QAAIW,GACA,OAAON,KAAKO,MAAMD,IACtB,CAKA,WAAIE,GACA,OAAOR,KAAKO,MAAMC,OACtB,CAEAC,QAAAA,CAASC,GACLV,KAAKO,MAAQN,KAAKD,KAAKO,MAAUG,EACrC,CAEAC,MAAAA,GAEI,MAAMC,EAAQ,IAAIC,EAAkB,CAChCC,UAAW7B,EAAgB8B,KAC3BA,KAAMC,EAAaC,OACnBC,QAASC,EAAgBf,SACzBgB,QAAS,oBAEbpB,KAAKqB,KAAKC,QAAQC,UAAUC,cAAcZ,GAG1C,MAAMN,KAAEA,EAAIE,QAAEA,GAAYR,KAC1BA,KAAKZ,MAAMqC,SAAS,CAAEnB,OAAME,WAAWR,KAC3C,CAEA0B,MAAAA,GAEI,MAAMd,EAAQ,IAAIC,EAAkB,CAChCC,UAAW7B,EAAgB8B,KAC3BA,KAAMC,EAAaW,OACnBT,QAASC,EAAgBf,SACzBgB,QAAS,gCAEbpB,KAAKqB,KAAKC,QAAQC,UAAUC,cAAcZ,GAG1C,MAAMN,KAAEA,EAAIE,QAAEA,GAAYR,KAGtBA,KAAK4B,iBACL5B,KAAK6B,UAGT7B,KAAKZ,MAAM0C,SAAS,CAAExB,OAAME,WAChC,CAEAuB,cAAAA,CAAexB,GAEX,MAAMK,EAAQ,IAAIoB,EAAmB,CACjClB,UAAW7B,EAAgB8B,KAC3BA,KAAMkB,EAAcC,SACpBC,cAAeC,KAAKC,UAAU9B,EAAMD,KAAKgC,QACzCC,OAAQC,EAASC,uBAErBzC,KAAKqB,KAAKC,QAAQC,UAAUC,cAAcZ,EAC9C,CAEmB8B,iBAAAA,GACf,OACIC,EAACC,EAAAA,EAAAA,EAAAA,GACO5C,KAAKZ,OAAK,CAEdyD,IAAKA,IACD7C,KAAK8C,aAAeD,GAExBE,SAAU/C,KAAKS,SACfgB,SAAUzB,KAAKW,OACfmB,SAAU9B,KAAK0B,OACfsB,iBAAkBhD,KAAK+B,iBAGnC,CA3IA,WAAAkB,CAAY1D,EAAiBH,GACzB,MAAMD,EAAgBF,EAAgBE,cAAcC,GAGpD8D,MAAM3D,EAFgBJ,OAAgBgE,EAAY/D,GAJtDgE,EAAApD,KAAiB4B,mBAA2B,GAQxC5B,KAAKW,OAASX,KAAKW,OAAO0C,KAAKrD,MAC/BA,KAAK0B,OAAS1B,KAAK0B,OAAO2B,KAAKrD,MAC/BA,KAAK+B,eAAiB/B,KAAK+B,eAAesB,KAAKrD,MAE/CA,KAAK4B,gBAAkBzC,EAEnBI,EAASC,SAAWL,GACfa,KAAKV,sBAAsBC,EAAUH,EAElD,EAnBAgE,EADEnE,EACqB8B,OAAOuC,EAAWlD,UAkCzCgD,EAnCEnE,EAmCqBsE,eAAe,CAClCzB,SAAU,OACVL,SAAU"}
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","_object_spread","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":"y1CAWA,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,MAAQa,KAAKD,KAAKZ,MAAUS,GACjCG,KAAKE,MAAMd,EAAMC,UAGzB,CAAE,MAAOM,OAGLJ,EAAAA,EAAyB,QAAzBA,EAAAA,EAASY,QAAQC,oBAAjBb,GAA4C,QAA5CA,EAAAA,EAA2Bc,yBAA3Bd,IAAAA,GAAAA,EAAAA,KAAAA,EAA+CI,EACnD,CAdA,CAeJ,CAKA,QAAIW,GACA,OAAON,KAAKO,MAAMD,IACtB,CAKA,WAAIE,GACA,OAAOR,KAAKO,MAAMC,OACtB,CAEAC,QAAAA,CAASC,GACLV,KAAKO,MAAQN,KAAKD,KAAKO,MAAUG,EACrC,CAEAC,MAAAA,GAEI,MAAMC,EAAQ,IAAIC,EAAkB,CAChCC,UAAW7B,EAAgB8B,KAC3BA,KAAMC,EAAaC,OACnBC,QAASC,EAAgBf,SACzBgB,QAAS,oBAEbpB,KAAKqB,KAAKC,QAAQC,UAAUC,cAAcZ,GAG1C,MAAMN,KAAEA,EAAIE,QAAEA,GAAYR,KAC1BA,KAAKZ,MAAMqC,SAAS,CAAEnB,OAAME,WAAWR,KAC3C,CAEA0B,MAAAA,GAEI,MAAMd,EAAQ,IAAIC,EAAkB,CAChCC,UAAW7B,EAAgB8B,KAC3BA,KAAMC,EAAaW,OACnBT,QAASC,EAAgBf,SACzBgB,QAAS,gCAEbpB,KAAKqB,KAAKC,QAAQC,UAAUC,cAAcZ,GAG1C,MAAMN,KAAEA,EAAIE,QAAEA,GAAYR,KAGtBA,KAAK4B,iBACL5B,KAAK6B,UAGT7B,KAAKZ,MAAM0C,SAAS,CAAExB,OAAME,WAChC,CAEAuB,cAAAA,CAAexB,GAEX,MAAMK,EAAQ,IAAIoB,EAAmB,CACjClB,UAAW7B,EAAgB8B,KAC3BA,KAAMkB,EAAcC,SACpBC,cAAeC,KAAKC,UAAU9B,EAAMD,KAAKgC,QACzCC,OAAQC,EAASC,uBAErBzC,KAAKqB,KAAKC,QAAQC,UAAUC,cAAcZ,EAC9C,CAEmB8B,iBAAAA,GACf,OACIC,EAACC,EAAAA,EAAAA,EAAAA,GACO5C,KAAKZ,OAAK,CACdyD,gBAAiB7C,KAAK6C,gBACtBC,SAAU9C,KAAKS,SACfgB,SAAUzB,KAAKW,OACfmB,SAAU9B,KAAK0B,OACfqB,iBAAkB/C,KAAK+B,iBAGnC,CAxIA,WAAAiB,CAAYzD,EAAiBH,GACzB,MAAMD,EAAgBF,EAAgBE,cAAcC,GAGpD6D,MAAM1D,EAFgBJ,OAAgB+D,EAAY9D,GAJtD+D,EAAAnD,KAAiB4B,mBAA2B,GAQxC5B,KAAKW,OAASX,KAAKW,OAAOyC,KAAKpD,MAC/BA,KAAK0B,OAAS1B,KAAK0B,OAAO0B,KAAKpD,MAC/BA,KAAK+B,eAAiB/B,KAAK+B,eAAeqB,KAAKpD,MAE/CA,KAAK4B,gBAAkBzC,EAEnBI,EAASC,SAAWL,GACfa,KAAKV,sBAAsBC,EAAUH,EAElD,EAnBA+D,EADElE,EACqB8B,OAAOsC,EAAWjD,UAkCzC+C,EAnCElE,EAmCqBqE,eAAe,CAClCxB,SAAU,OACVL,SAAU"}
@@ -1,2 +1,2 @@
1
- import{AnalyticsLogEvent as n,LogEventSubtype as o,LogEventType as t}from"../../core/Analytics/events/AnalyticsLogEvent.js";function e(n,o,t){return o in n?Object.defineProperty(n,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[o]=t,n}function i(n,o){return o=null!=o?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):function(n){var o=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);o.push.apply(o,t)}return o}(Object(o)).forEach(function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(o,t))}),n}function a(n,o){if(null==n)return{};var t,e,i,a={};if("undefined"!=typeof Reflect&&Reflect.ownKeys){for(t=Reflect.ownKeys(Object(n)),i=0;i<t.length;i++)e=t[i],o.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(n,e)&&(a[e]=n[e]);return a}if(a=function(n,o){if(null==n)return{};var t,e,i={},a=Object.getOwnPropertyNames(n);for(e=0;e<a.length;e++)t=a[e],o.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(i[t]=n[t]);return i}(n,o),Object.getOwnPropertySymbols)for(t=Object.getOwnPropertySymbols(n),i=0;i<t.length;i++)e=t[i],o.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(n,e)&&(a[e]=n[e]);return a}const s=3e3,r="Donation instantiation error:: You need to set donation.autoMount to false if you wish to display the Donation component in a different container.\nThe Donation component will be displayed in the default container.";class l{async initialise(){const[n]=await Promise.all([this.callSessionsDonationCampaigns(),new Promise(n=>setTimeout(n,this.delayMS))]);return n}async callSessionsDonationCampaigns(){const e=new n({component:l.type,type:t.apiRequest,subType:o.donationCampaigns,message:"Sessions flow: calling donationCampaigns endpoint"});this.core.modules.analytics.sendAnalytics(e);const i=await this.makeSessionsDonationCampaignsCall(),[a]=(null==i?void 0:i.donationCampaigns)||[];return a?this.handleDonationCampaign(a):null}handleDonationCampaign(n){const{id:o,campaignName:t}=n,s=a(n,["id","campaignName"]),r=s.donation.type,l=i(function(n){for(var o=1;o<arguments.length;o++){var t=null!=arguments[o]?arguments[o]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),i.forEach(function(o){e(n,o,t[o])})}return n}({},s),{onCancel:n=>{var o;null===(o=this.onDonationCompleted)||void 0===o||o.call(this,{didDonate:!1})},onDonate:(n,t)=>{const e={amount:n.data.amount,donationCampaignId:o,donationType:r};this.callSessionsDonations(e,t)},commercialTxAmount:this.commercialTxAmount});if("roundup"===r&&!this.commercialTxAmount)throw new Error('The donation type is "roundup" and the commercialTxAmount is not set.\nIt will not be possible to mount a Donation component.');return l}async callSessionsDonations(n,o){try{const i=await this.makeSessionDonationsCall(n);var t,e;if("Authorised"===i.resultCode)o.setStatus("success"),null===(t=this.onDonationCompleted)||void 0===t||t.call(this,{didDonate:!0});else o.setStatus("error"),null===(e=this.onDonationFailed)||void 0===e||e.call(this,i.resultCode)}catch(n){var i;o.setStatus("error"),null===(i=this.onDonationFailed)||void 0===i||i.call(this,n)}}async makeSessionsDonationCampaignsCall(){if(!this.core.session)throw new Error("DonationCampaignService requires a session to be configured");return await this.core.session.fetchDonationCampaigns()}async makeSessionDonationsCall(n){if(!this.core.session)throw new Error("DonationCampaignService requires a session to be configured");return await this.core.session.makeDonation(n)}constructor(n,o){var t,i,a,s;e(this,"core",void 0),e(this,"commercialTxAmount",0),e(this,"onDonationCompleted",void 0),e(this,"onDonationFailed",void 0),e(this,"delayMS",void 0),this.core=n,this.onDonationCompleted=null===(i=n.options.donation)||void 0===i?void 0:i.onDonationSuccess,this.onDonationFailed=null===(a=n.options.donation)||void 0===a?void 0:a.onDonationFailure,this.commercialTxAmount=o.commercialTxAmount,this.delayMS=null!==(t=null===(s=n.options.donation)||void 0===s?void 0:s.delay)&&void 0!==t?t:3e3}}e(l,"type","donationCampaignService");export{s as DEFAULT_DONATION_AUTO_START_DELAY_MS,r as REPARENT_WITHOUT_AUTO_START_ERROR_MSG,l as default};
1
+ import{AnalyticsLogEvent as n,LogEventSubtype as o,LogEventType as t}from"../../core/Analytics/events/AnalyticsLogEvent.js";function e(n,o,t){return o in n?Object.defineProperty(n,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[o]=t,n}function i(n,o){return o=null!=o?o:{},Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(o)):function(n){var o=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);o.push.apply(o,t)}return o}(Object(o)).forEach(function(t){Object.defineProperty(n,t,Object.getOwnPropertyDescriptor(o,t))}),n}function a(n,o){if(null==n)return{};var t,e,i,a={};if("undefined"!=typeof Reflect&&Reflect.ownKeys){for(t=Reflect.ownKeys(Object(n)),i=0;i<t.length;i++)e=t[i],o.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(n,e)&&(a[e]=n[e]);return a}if(a=function(n,o){if(null==n)return{};var t,e,i={},a=Object.getOwnPropertyNames(n);for(e=0;e<a.length;e++)t=a[e],o.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(n,t)&&(i[t]=n[t]);return i}(n,o),Object.getOwnPropertySymbols)for(t=Object.getOwnPropertySymbols(n),i=0;i<t.length;i++)e=t[i],o.indexOf(e)>=0||Object.prototype.propertyIsEnumerable.call(n,e)&&(a[e]=n[e]);return a}const s=3e3,r="Donation instantiation error:: You need to set donation.autoMount to false if you wish to display the Donation component in a different container.\nThe Donation component will be displayed in the default container.";class l{async initialise(){const[n]=await Promise.all([this.callSessionsDonationCampaigns(),new Promise(n=>setTimeout(n,this.delayMS))]);return n}async callSessionsDonationCampaigns(){const e=new n({component:l.type,type:t.apiRequest,subType:o.donationCampaigns,message:"Sessions flow: calling donationCampaigns endpoint"});this.core.modules.analytics.sendAnalytics(e);const i=await this.makeSessionsDonationCampaignsCall(),[a]=(null==i?void 0:i.donationCampaigns)||[];return a?this.handleDonationCampaign(a):null}handleDonationCampaign(n){const{id:o,campaignName:t}=n,s=a(n,["id","campaignName"]),r=s.donation.type,l=i(function(n){for(var o=1;o<arguments.length;o++){var t=null!=arguments[o]?arguments[o]:{},i=Object.keys(t);"function"==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(t).filter(function(n){return Object.getOwnPropertyDescriptor(t,n).enumerable}))),i.forEach(function(o){e(n,o,t[o])})}return n}({},s),{onCancel:n=>{var o;null===(o=this.onDonationCompleted)||void 0===o||o.call(this,{didDonate:!1})},onDonate:(n,t)=>{const e={amount:n.data.amount,donationCampaignId:o,donationType:r};this.callSessionsDonations(e,t)},commercialTxAmount:this.commercialTxAmount});if("roundup"===r&&!this.commercialTxAmount)throw new Error('The donation type is "roundup" and the commercialTxAmount is not set.\nIt will not be possible to mount a Donation component.');return l}async callSessionsDonations(n,o){try{const i=await this.makeSessionDonationsCall(n);var t,e;if("Authorised"===i.resultCode)o.setStatus("success"),null===(t=this.onDonationCompleted)||void 0===t||t.call(this,{didDonate:!0});else o.setStatus("error"),null===(e=this.onDonationFailed)||void 0===e||e.call(this,i.resultCode)}catch(n){var i;o.setStatus("error"),null===(i=this.onDonationFailed)||void 0===i||i.call(this,n)}}async makeSessionsDonationCampaignsCall(){if(!this.core.session)throw new Error("DonationCampaignService requires a session to be configured");return await this.core.session.fetchDonationCampaigns()}async makeSessionDonationsCall(n){if(!this.core.session)throw new Error("DonationCampaignService requires a session to be configured");return await this.core.session.makeDonation(n)}constructor(n,o){var t,i,a,s,r,l,c;e(this,"core",void 0),e(this,"commercialTxAmount",0),e(this,"onDonationCompleted",void 0),e(this,"onDonationFailed",void 0),e(this,"delayMS",void 0),this.core=n,this.onDonationCompleted=null===(s=n.options.donation)||void 0===s?void 0:s.onDonationSuccess,this.onDonationFailed=null===(r=n.options.donation)||void 0===r?void 0:r.onDonationFailure,this.commercialTxAmount=null!==(t=null!==(i=o.commercialTxAmount)&&void 0!==i?i:null===(l=n.options.amount)||void 0===l?void 0:l.value)&&void 0!==t?t:0,this.delayMS=null!==(a=null===(c=n.options.donation)||void 0===c?void 0:c.delay)&&void 0!==a?a:3e3}}e(l,"type","donationCampaignService");export{s as DEFAULT_DONATION_AUTO_START_DELAY_MS,r as REPARENT_WITHOUT_AUTO_START_ERROR_MSG,l as default};
2
2
  //# sourceMappingURL=DonationCampaignService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DonationCampaignService.js","sources":["../../../../src/components/Donation/DonationCampaignService.tsx"],"sourcesContent":["import type { ICore } from '../../core/types';\nimport { DonationCampaign, DonationConfiguration, DonationCampaignOptions } from './types';\nimport type { DonationPayload } from './components/types';\nimport type {\n CheckoutSessionDonationCampaignsResponse,\n CheckoutSessionDonationsRequestData,\n CheckoutSessionDonationsResponse\n} from '../../core/CheckoutSession/types';\nimport Donation from './Donation';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\n\nexport const DEFAULT_DONATION_AUTO_START_DELAY_MS = 3000;\n\nexport const REPARENT_WITHOUT_AUTO_START_ERROR_MSG =\n 'Donation instantiation error:: You need to set donation.autoMount to false if you wish to display the Donation component in a different container.\\nThe Donation component will be displayed in the default container.';\n\nclass DonationCampaignService {\n public static readonly type = 'donationCampaignService';\n\n private readonly core: ICore;\n\n private readonly commercialTxAmount: number = 0;\n private readonly onDonationCompleted?: (result: { didDonate: boolean }) => void;\n private readonly onDonationFailed?: (reason: unknown) => void;\n\n private readonly delayMS: number;\n\n constructor(checkout: ICore, donationCampaignProps: DonationCampaignOptions) {\n this.core = checkout;\n\n this.onDonationCompleted = checkout.options.donation?.onDonationSuccess;\n this.onDonationFailed = checkout.options.donation?.onDonationFailure;\n\n this.commercialTxAmount = donationCampaignProps.commercialTxAmount;\n\n this.delayMS = checkout.options.donation?.delay ?? DEFAULT_DONATION_AUTO_START_DELAY_MS;\n }\n\n public async initialise(): Promise<DonationConfiguration | null> {\n const [donationConfiguration] = await Promise.all([\n this.callSessionsDonationCampaigns(),\n new Promise(resolve => setTimeout(resolve, this.delayMS))\n ]);\n return donationConfiguration;\n }\n\n private async callSessionsDonationCampaigns(): Promise<DonationConfiguration | null> {\n // Send analytics\n const event = new AnalyticsLogEvent({\n component: DonationCampaignService.type,\n type: LogEventType.apiRequest,\n subType: LogEventSubtype.donationCampaigns,\n message: 'Sessions flow: calling donationCampaigns endpoint'\n });\n this.core.modules.analytics.sendAnalytics(event);\n\n const response: CheckoutSessionDonationCampaignsResponse = await this.makeSessionsDonationCampaignsCall();\n const [donationCampaign] = response?.donationCampaigns || [];\n return donationCampaign ? this.handleDonationCampaign(donationCampaign) : null;\n }\n\n private handleDonationCampaign(donationCampaign: DonationCampaign): DonationConfiguration {\n const { id, campaignName, ...restDonationCampaignProps } = donationCampaign;\n\n const donationType = restDonationCampaignProps.donation.type;\n\n const donationComponentProps: DonationConfiguration = {\n ...(restDonationCampaignProps as DonationConfiguration),\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCancel: (state: DonationPayload) => {\n // Call merchant defined onDonationCompleted callback\n this.onDonationCompleted?.({ didDonate: false });\n },\n onDonate: (state: DonationPayload, component: Donation) => {\n // Make the request\n const donationRequestData: CheckoutSessionDonationsRequestData = {\n amount: state.data.amount,\n donationCampaignId: id,\n donationType: donationType\n };\n\n void this.callSessionsDonations(donationRequestData, component);\n },\n commercialTxAmount: this.commercialTxAmount\n };\n\n if (donationType === 'roundup' && !this.commercialTxAmount) {\n // This error will be handled gracefully by the Donation component. The question remains whether we want analytics on this?\n throw new Error(\n 'The donation type is \"roundup\" and the commercialTxAmount is not set.\\nIt will not be possible to mount a Donation component.'\n );\n }\n\n return donationComponentProps;\n }\n\n private async callSessionsDonations(donationRequestData: CheckoutSessionDonationsRequestData, component: Donation): Promise<void> {\n try {\n const response: CheckoutSessionDonationsResponse = await this.makeSessionDonationsCall(donationRequestData);\n\n if (response.resultCode === 'Authorised') {\n component.setStatus('success');\n this.onDonationCompleted?.({ didDonate: true });\n } else {\n component.setStatus('error');\n this.onDonationFailed?.(response.resultCode);\n }\n } catch (error: unknown) {\n component.setStatus('error');\n this.onDonationFailed?.(error);\n }\n }\n\n private async makeSessionsDonationCampaignsCall(): Promise<CheckoutSessionDonationCampaignsResponse> {\n if (!this.core.session) {\n throw new Error('DonationCampaignService requires a session to be configured');\n }\n return await this.core.session.fetchDonationCampaigns();\n }\n\n private async makeSessionDonationsCall(donationRequestData: CheckoutSessionDonationsRequestData): Promise<CheckoutSessionDonationsResponse> {\n if (!this.core.session) {\n throw new Error('DonationCampaignService requires a session to be configured');\n }\n return await this.core.session.makeDonation(donationRequestData);\n }\n}\n\nexport default DonationCampaignService;\n"],"names":["DEFAULT_DONATION_AUTO_START_DELAY_MS","REPARENT_WITHOUT_AUTO_START_ERROR_MSG","DonationCampaignService","initialise","donationConfiguration","Promise","all","this","callSessionsDonationCampaigns","resolve","setTimeout","delayMS","event","AnalyticsLogEvent","component","type","LogEventType","apiRequest","subType","LogEventSubtype","donationCampaigns","message","core","modules","analytics","sendAnalytics","response","makeSessionsDonationCampaignsCall","donationCampaign","handleDonationCampaign","id","campaignName","restDonationCampaignProps","donationType","donation","donationComponentProps","_object_spread_props","_object_spread","onCancel","state","_this_onDonationCompleted","onDonationCompleted","didDonate","onDonate","donationRequestData","amount","data","donationCampaignId","callSessionsDonations","commercialTxAmount","Error","makeSessionDonationsCall","_this_onDonationFailed","resultCode","setStatus","onDonationFailed","call","error","_this_onDonationFailed1","session","fetchDonationCampaigns","makeDonation","constructor","checkout","donationCampaignProps","_define_property","options","onDonationSuccess","onDonationFailure","_ref","delay"],"mappings":"0tCAWO,MAAMA,EAAuC,IAEvCC,EACT,yNAEJ,MAAMC,EAsBF,gBAAaC,GACT,MAAOC,SAA+BC,QAAQC,IAAI,CAC9CC,KAAKC,gCACL,IAAIH,QAAQI,GAAWC,WAAWD,EAASF,KAAKI,YAEpD,OAAOP,CACX,CAEA,mCAAcI,GAEV,MAAMI,EAAQ,IAAIC,EAAkB,CAChCC,UAAWZ,EAAwBa,KACnCA,KAAMC,EAAaC,WACnBC,QAASC,EAAgBC,kBACzBC,QAAS,sDAEbd,KAAKe,KAAKC,QAAQC,UAAUC,cAAcb,GAE1C,MAAMc,QAA2DnB,KAAKoB,qCAC/DC,IAAoBF,aAAAA,EAAAA,EAAUN,oBAAqB,GAC1D,OAAOQ,EAAmBrB,KAAKsB,uBAAuBD,GAAoB,IAC9E,CAEQC,sBAAAA,CAAuBD,GAC3B,MAAME,GAAEA,EAAEC,aAAEA,GAA+CH,EAA9BI,EAAAA,EAA8BJ,EAAAA,uBAErDK,EAAeD,EAA0BE,SAASnB,KAElDoB,EAAgDC,oUAAAC,CAAA,CAAA,EAC9CL,GAAAA,CAGJM,SAAWC,QAEPC,EAAwB,QAAxBA,EAAAjC,KAAKkC,2BAAL,IAAAD,GAAAA,OAAAjC,KAA2B,CAAEmC,WAAW,KAE5CC,SAAU,CAACJ,EAAwBzB,KAE/B,MAAM8B,EAA2D,CAC7DC,OAAQN,EAAMO,KAAKD,OACnBE,mBAAoBjB,EACpBG,aAAcA,GAGb1B,KAAKyC,sBAAsBJ,EAAqB9B,IAEzDmC,mBAAoB1C,KAAK0C,qBAG7B,GAAqB,YAAjBhB,IAA+B1B,KAAK0C,mBAEpC,MAAM,IAAIC,MACN,iIAIR,OAAOf,CACX,CAEA,2BAAca,CAAsBJ,EAA0D9B,GAC1F,IACI,MAAMY,QAAmDnB,KAAK4C,yBAAyBP,OAInFJ,EAGAY,EALJ,GAA4B,eAAxB1B,EAAS2B,WACTvC,EAAUwC,UAAU,WACI,QAAxBd,EAAAjC,KAAKkC,2BAAL,IAAAD,GAAAA,OAAAjC,KAA2B,CAAEmC,WAAW,SAExC5B,EAAUwC,UAAU,iBACpBF,EAAA7C,KAAKgD,wBAAL,IAAAH,GAAAA,EAAAI,KAAAjD,KAAwBmB,EAAS2B,WAEzC,CAAE,MAAOI,OAELC,EADA5C,EAAUwC,UAAU,SACC,QAArBI,EAAAnD,KAAKgD,wBAAL,IAAAG,GAAAA,OAAAnD,KAAwBkD,EAC5B,CACJ,CAEA,uCAAc9B,GACV,IAAKpB,KAAKe,KAAKqC,QACX,MAAM,IAAIT,MAAM,+DAEpB,aAAa3C,KAAKe,KAAKqC,QAAQC,wBACnC,CAEA,8BAAcT,CAAyBP,GACnC,IAAKrC,KAAKe,KAAKqC,QACX,MAAM,IAAIT,MAAM,+DAEpB,aAAa3C,KAAKe,KAAKqC,QAAQE,aAAajB,EAChD,CAnGA,WAAAkB,CAAYC,EAAiBC,SAGED,EACHA,EAITA,EAhBnBE,EAAA1D,KAAiBe,eAEjB2C,EAAA1D,KAAiB0C,qBAA6B,GAC9CgB,EAAA1D,KAAiBkC,8BACjBwB,EAAA1D,KAAiBgD,2BAEjBU,EAAA1D,KAAiBI,kBAGbJ,KAAKe,KAAOyC,EAEZxD,KAAKkC,oBAA+C,QAAzBsB,EAAAA,EAASG,QAAQhC,gBAAjB6B,IAAAA,OAAAA,EAAAA,EAA2BI,kBACtD5D,KAAKgD,iBAA4C,QAAzBQ,EAAAA,EAASG,QAAQhC,gBAAjB6B,IAAAA,OAAAA,EAAAA,EAA2BK,kBAEnD7D,KAAK0C,mBAAqBe,EAAsBf,mBAEhD1C,KAAKI,QAA0C,QAAnC0D,EAA4B,QAAzBN,EAAAA,EAASG,QAAQhC,oBAAjB6B,OAAAA,EAAAA,EAA2BO,aAAK,IAAAD,EAAAA,EAxBH,GAyBhD,EAnBAJ,EADE/D,EACqBa,OAAO"}
1
+ {"version":3,"file":"DonationCampaignService.js","sources":["../../../../src/components/Donation/DonationCampaignService.tsx"],"sourcesContent":["import type { ICore } from '../../core/types';\nimport { DonationCampaign, DonationConfiguration, DonationCampaignOptions } from './types';\nimport type { DonationPayload } from './components/types';\nimport type {\n CheckoutSessionDonationCampaignsResponse,\n CheckoutSessionDonationsRequestData,\n CheckoutSessionDonationsResponse\n} from '../../core/CheckoutSession/types';\nimport Donation from './Donation';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\n\nexport const DEFAULT_DONATION_AUTO_START_DELAY_MS = 3000;\n\nexport const REPARENT_WITHOUT_AUTO_START_ERROR_MSG =\n 'Donation instantiation error:: You need to set donation.autoMount to false if you wish to display the Donation component in a different container.\\nThe Donation component will be displayed in the default container.';\n\nclass DonationCampaignService {\n public static readonly type = 'donationCampaignService';\n\n private readonly core: ICore;\n\n private readonly commercialTxAmount: number = 0;\n private readonly onDonationCompleted?: (result: { didDonate: boolean }) => void;\n private readonly onDonationFailed?: (reason: unknown) => void;\n\n private readonly delayMS: number;\n\n constructor(checkout: ICore, donationCampaignProps: DonationCampaignOptions) {\n this.core = checkout;\n\n this.onDonationCompleted = checkout.options.donation?.onDonationSuccess;\n this.onDonationFailed = checkout.options.donation?.onDonationFailure;\n\n this.commercialTxAmount = donationCampaignProps.commercialTxAmount ?? checkout.options.amount?.value ?? 0;\n\n this.delayMS = checkout.options.donation?.delay ?? DEFAULT_DONATION_AUTO_START_DELAY_MS;\n }\n\n public async initialise(): Promise<DonationConfiguration | null> {\n const [donationConfiguration] = await Promise.all([\n this.callSessionsDonationCampaigns(),\n new Promise(resolve => setTimeout(resolve, this.delayMS))\n ]);\n return donationConfiguration;\n }\n\n private async callSessionsDonationCampaigns(): Promise<DonationConfiguration | null> {\n // Send analytics\n const event = new AnalyticsLogEvent({\n component: DonationCampaignService.type,\n type: LogEventType.apiRequest,\n subType: LogEventSubtype.donationCampaigns,\n message: 'Sessions flow: calling donationCampaigns endpoint'\n });\n this.core.modules.analytics.sendAnalytics(event);\n\n const response: CheckoutSessionDonationCampaignsResponse = await this.makeSessionsDonationCampaignsCall();\n const [donationCampaign] = response?.donationCampaigns || [];\n return donationCampaign ? this.handleDonationCampaign(donationCampaign) : null;\n }\n\n private handleDonationCampaign(donationCampaign: DonationCampaign): DonationConfiguration {\n const { id, campaignName, ...restDonationCampaignProps } = donationCampaign;\n\n const donationType = restDonationCampaignProps.donation.type;\n\n const donationComponentProps: DonationConfiguration = {\n ...(restDonationCampaignProps as DonationConfiguration),\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onCancel: (state: DonationPayload) => {\n // Call merchant defined onDonationCompleted callback\n this.onDonationCompleted?.({ didDonate: false });\n },\n onDonate: (state: DonationPayload, component: Donation) => {\n // Make the request\n const donationRequestData: CheckoutSessionDonationsRequestData = {\n amount: state.data.amount,\n donationCampaignId: id,\n donationType: donationType\n };\n\n void this.callSessionsDonations(donationRequestData, component);\n },\n commercialTxAmount: this.commercialTxAmount\n };\n\n if (donationType === 'roundup' && !this.commercialTxAmount) {\n // This error will be handled gracefully by the Donation component. The question remains whether we want analytics on this?\n throw new Error(\n 'The donation type is \"roundup\" and the commercialTxAmount is not set.\\nIt will not be possible to mount a Donation component.'\n );\n }\n\n return donationComponentProps;\n }\n\n private async callSessionsDonations(donationRequestData: CheckoutSessionDonationsRequestData, component: Donation): Promise<void> {\n try {\n const response: CheckoutSessionDonationsResponse = await this.makeSessionDonationsCall(donationRequestData);\n\n if (response.resultCode === 'Authorised') {\n component.setStatus('success');\n this.onDonationCompleted?.({ didDonate: true });\n } else {\n component.setStatus('error');\n this.onDonationFailed?.(response.resultCode);\n }\n } catch (error: unknown) {\n component.setStatus('error');\n this.onDonationFailed?.(error);\n }\n }\n\n private async makeSessionsDonationCampaignsCall(): Promise<CheckoutSessionDonationCampaignsResponse> {\n if (!this.core.session) {\n throw new Error('DonationCampaignService requires a session to be configured');\n }\n return await this.core.session.fetchDonationCampaigns();\n }\n\n private async makeSessionDonationsCall(donationRequestData: CheckoutSessionDonationsRequestData): Promise<CheckoutSessionDonationsResponse> {\n if (!this.core.session) {\n throw new Error('DonationCampaignService requires a session to be configured');\n }\n return await this.core.session.makeDonation(donationRequestData);\n }\n}\n\nexport default DonationCampaignService;\n"],"names":["DEFAULT_DONATION_AUTO_START_DELAY_MS","REPARENT_WITHOUT_AUTO_START_ERROR_MSG","DonationCampaignService","initialise","donationConfiguration","Promise","all","this","callSessionsDonationCampaigns","resolve","setTimeout","delayMS","event","AnalyticsLogEvent","component","type","LogEventType","apiRequest","subType","LogEventSubtype","donationCampaigns","message","core","modules","analytics","sendAnalytics","response","makeSessionsDonationCampaignsCall","donationCampaign","handleDonationCampaign","id","campaignName","restDonationCampaignProps","donationType","donation","donationComponentProps","_object_spread_props","_object_spread","onCancel","state","_this_onDonationCompleted","onDonationCompleted","didDonate","onDonate","donationRequestData","amount","data","donationCampaignId","callSessionsDonations","commercialTxAmount","Error","makeSessionDonationsCall","_this_onDonationFailed","resultCode","setStatus","onDonationFailed","call","error","_this_onDonationFailed1","session","fetchDonationCampaigns","makeDonation","constructor","checkout","donationCampaignProps","_define_property","options","onDonationSuccess","onDonationFailure","value","_ref1","delay"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../external/preact/dist/preact.js";import{useState as t,useEffect as n}from"../../../external/preact/hooks/dist/hooks.js";import o from"./CampaignContent.js";import r from"../../internal/Button/Button.js";import a from"../../internal/Img/Img.js";import{useCoreContext as s}from"../../../core/Context/CoreProvider.js";import c from"../../internal/DisclaimerMessage/DisclaimerMessage.js";import u from"../../../core/Context/useImage.js";import i from"./FixedAmounts.js";import m from"./Roundup.js";import{getRoundupAmount as l,getAmountLabel as d,getRoundupAmountLabel as p}from"./utils.js";function g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function y(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){g(e,t,n[t])})}return e}function f(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function _(g){const{donation:_,commercialTxAmount:h,onAmountSelected:j,onCancel:v,onDonate:b,showCancelButton:O=!0,termsAndConditionsUrl:k}=g,{i18n:C}=s(),w=u(),{currency:P,type:x}=_,A="roundup"===x,[D,N]=t("ready"),[S,B]=t(A),[F,E]=t({currency:P,value:A?l(_.maxRoundupAmount,h):null});this.setStatus=e=>{N(e)};const I=()=>{N("loading"),b({data:{amount:F}})};return n(()=>{g.onChange({data:{amount:F},isValid:S})},[F,S]),"error"===D?e("div",{className:"adyen-checkout__adyen-giving"},e(a,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--error",src:w({imageFolder:"components/"})("error"),alt:C.get("error.message.unknown")}),e("div",{className:"adyen-checkout__status__text"},C.get("error.message.unknown"))):"success"===D?e("div",{className:"adyen-checkout__adyen-giving"},e(a,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--success",src:w({imageFolder:"components/"})("heart"),alt:C.get("thanksForYourSupport")}),e("div",{className:"adyen-checkout__status__text"},C.get("thanksForYourSupport"))):e("div",{className:"adyen-checkout__adyen-giving"},e(o,g),e("div",{className:"adyen-checkout__adyen-giving-actions"},k&&e(c,{message:C.get("donationTermsCondition"),urls:[k]}),A?e(m,{donationAmount:p(C,{maxRoundupAmount:_.maxRoundupAmount,commercialTxAmount:h,currency:P}),originalPaymentAmount:d(C,{value:h,currency:P}),status:D,onDonateButtonClicked:I}):e(i,{selectedAmount:F.value,values:_.values,currency:P,status:D,onAmountSelected:({target:e})=>{const t=parseInt(e.value,10);B(!0),E(e=>f(y({},e),{value:t})),j({data:{amount:f(y({},F),{value:t})}})},onDonateButtonClicked:I}),O&&e(r,{classNameModifiers:["decline"],variant:"ghost",onClick:()=>{N("ready"),v({data:{amount:F},isValid:S})},disabled:"loading"===D,label:`${C.get("notNowButton")} ›`})))}_.defaultProps={onCancel:()=>{},onChange:()=>{},onDonate:()=>{},donation:{},showCancelButton:!0};export{_ as default};
1
+ import{createElement as e}from"../../../external/preact/dist/preact.js";import{useState as t,useRef as n,useEffect as o}from"../../../external/preact/hooks/dist/hooks.js";import r from"./CampaignContent.js";import a from"../../internal/Button/Button.js";import s from"../../internal/Img/Img.js";import{useCoreContext as c}from"../../../core/Context/CoreProvider.js";import u from"../../internal/DisclaimerMessage/DisclaimerMessage.js";import i from"../../../core/Context/useImage.js";import m from"./FixedAmounts.js";import l from"./Roundup.js";import{getRoundupAmount as d,getAmountLabel as p,getRoundupAmountLabel as g}from"./utils.js";function y(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){y(e,t,n[t])})}return e}function _(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function j(y){const{donation:j,commercialTxAmount:v,onAmountSelected:b,onCancel:h,onDonate:O,showCancelButton:k=!0,termsAndConditionsUrl:C}=y,{i18n:w}=c(),P=i(),{currency:x,type:A}=j,D="roundup"===A,[N,S]=t("ready"),[B,R]=t(D),[F,E]=t({currency:x,value:D?d(j.maxRoundupAmount,v):null}),I=n({setStatus:S});o(()=>{y.setComponentRef(I.current)},[y.setComponentRef]);const M=()=>{S("loading"),O({data:{amount:F}})};return o(()=>{y.onChange({data:{amount:F},isValid:B})},[F,B]),"error"===N?e("div",{className:"adyen-checkout__adyen-giving"},e(s,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--error",src:P({imageFolder:"components/"})("error"),alt:w.get("error.message.unknown")}),e("div",{className:"adyen-checkout__status__text"},w.get("error.message.unknown"))):"success"===N?e("div",{className:"adyen-checkout__adyen-giving"},e(s,{className:"adyen-checkout__status__icon adyen-checkout__status__icon--success",src:P({imageFolder:"components/"})("heart"),alt:w.get("thanksForYourSupport")}),e("div",{className:"adyen-checkout__status__text"},w.get("thanksForYourSupport"))):e("div",{className:"adyen-checkout__adyen-giving"},e(r,y),e("div",{className:"adyen-checkout__adyen-giving-actions"},C&&e(u,{message:w.get("donationTermsCondition"),urls:[C]}),D?e(l,{donationAmount:g(w,{maxRoundupAmount:j.maxRoundupAmount,commercialTxAmount:v,currency:x}),originalPaymentAmount:p(w,{value:v,currency:x}),status:N,onDonateButtonClicked:M}):e(m,{selectedAmount:F.value,values:j.values,currency:x,status:N,onAmountSelected:({target:e})=>{const t=parseInt(e.value,10);R(!0),E(e=>_(f({},e),{value:t})),b({data:{amount:_(f({},F),{value:t})}})},onDonateButtonClicked:M}),k&&e(a,{classNameModifiers:["decline"],variant:"ghost",onClick:()=>{S("ready"),h({data:{amount:F},isValid:B})},disabled:"loading"===N,label:`${w.get("notNowButton")} ›`})))}j.defaultProps={onCancel:()=>{},onChange:()=>{},onDonate:()=>{},donation:{},showCancelButton:!0};export{j 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 this.setStatus = (status: Status) => {\n setStatus(status);\n };\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","this","handleDonate","data","useEffect","onChange","h","div","className","Img","src","imageFolder","alt","get","CampaignContent","DisclaimerMessage","message","urls","Roundup","donationAmount","getRoundupAmountLabel","originalPaymentAmount","getAmountLabel","onDonateButtonClicked","FixedAmounts","selectedAmount","values","target","parseInt","_object_spread_props","_object_spread","Button","classNameModifiers","variant","onClick","disabled","label","defaultProps"],"mappings":"25CAce,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,OAGjGuB,KAAKT,UAAaD,IACdC,EAAUD,IAGd,MAQMW,EAAe,KACjBV,EAAU,WACVX,EAAS,CAAEsB,KAAM,CAAEP,aAYvB,OAJAQ,EAAU,KACN5B,EAAM6B,SAAS,CAAEF,KAAM,CAAEP,UAAUF,aACpC,CAACE,EAAQF,IAEG,UAAXH,EAEIe,EAACC,MAAAA,CAAIC,UAAU,gCACXF,EAACG,EAAAA,CACGD,UAAU,mEACVE,IAAKxB,EAAS,CAAEyB,YAAa,eAAxBzB,CAAyC,SAC9C0B,IAAK5B,EAAK6B,IAAI,2BAElBP,EAACC,MAAAA,CAAIC,UAAU,gCAAgCxB,EAAK6B,IAAI,2BAKrD,YAAXtB,EAEIe,EAACC,MAAAA,CAAIC,UAAU,gCACXF,EAACG,EAAAA,CACGD,UAAU,qEACVE,IAAKxB,EAAS,CAAEyB,YAAa,eAAxBzB,CAAyC,SAC9C0B,IAAK5B,EAAK6B,IAAI,0BAGlBP,EAACC,MAAAA,CAAIC,UAAU,gCAAgCxB,EAAK6B,IAAI,0BAMhEP,EAACC,MAAAA,CAAIC,UAAU,gCACXF,EAACQ,EAAoBtC,GAErB8B,EAACC,MAAAA,CAAIC,UAAU,wCACVzB,GAAyBuB,EAACS,EAAAA,CAAkBC,QAAShC,EAAK6B,IAAI,0BAA2BI,KAAM,CAAClC,KAChGO,EACGgB,EAACY,EAAAA,CACGC,eAAgBC,EAAsBpC,EAAM,CAAEgB,iBAAkBvB,EAASuB,iBAAkBtB,qBAAoBU,aAC/GiC,sBAAuBC,EAAetC,EAAM,CAAEc,MAAOpB,EAAoBU,aACzEG,OAAQA,EACRgC,sBAAuBrB,IAG3BI,EAACkB,EAAAA,CACGC,eAAgB7B,EAAOE,MACvB4B,OAAQjD,EAASiD,OACjBtC,SAAUA,EACVG,OAAQA,EACRZ,iBApES,EAAGgD,aAC5B,MAAM7B,EAAQ8B,SAASD,EAAO7B,MAAO,IACrCH,GAAW,GACXE,EAAWD,GAA4BiC,EAAAC,EAAA,CAAA,EAAKlC,GAAAA,CAAQE,WAEpDnB,EAAiB,CAAEwB,KAAM,CAAEP,OAAQiC,EAAAC,EAAA,CAAA,EAAKlC,GAAAA,CAAQE,cAgEhCyB,sBAAuBrB,IAG9BpB,GACGwB,EAACyB,EAAAA,CACGC,mBAAoB,CAAC,WACrBC,QAAQ,QACRC,QA/DE,KAClB1C,EAAU,SACVZ,EAAS,CAAEuB,KAAM,CAAEP,UAAUF,aA8DbyC,SAAqB,YAAX5C,EACV6C,MAAO,GAAGpD,EAAK6B,IAAI,uBAM3C,CAEAtC,EAAkB8D,aAAe,CAC7BzD,SAAU,OACVyB,SAAU,OACVxB,SAAU,OACVJ,SAAU,CAAA,EACVK,kBAAkB"}
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","_object_spread_props","_object_spread","Button","classNameModifiers","variant","onClick","disabled","label","defaultProps"],"mappings":"u6CAee,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,GAA4BoC,EAAAC,EAAA,CAAA,EAAKrC,GAAAA,CAAQE,WAEpDnB,EAAiB,CAAE4B,KAAM,CAAEX,OAAQoC,EAAAC,EAAA,CAAA,EAAKrC,GAAAA,CAAQE,cAgEhC4B,sBAAuBpB,IAG9BxB,GACG2B,EAACyB,EAAAA,CACGC,mBAAoB,CAAC,WACrBC,QAAQ,QACRC,QA/DE,KAClB7C,EAAU,SACVZ,EAAS,CAAE2B,KAAM,CAAEX,UAAUF,aA8Db4C,SAAqB,YAAX/C,EACVgD,MAAO,GAAGvD,EAAKgC,IAAI,uBAM3C,CAEAzC,EAAkBiE,aAAe,CAC7B5D,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 i from"./elements/createElements.js";import r from"./elements/createStoredElements.js";import s from"./elements/createInstantPaymentElements.js";import{hasOwnProperty as a}from"../../utils/hasOwnProperty.js";import h from"./elements/splitPaymentMethods.js";import{TxVariants as d}from"../tx-variants.js";function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){l(e,t,n[t])})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}const c=["paywithgoogle","googlepay","applepay"];class y extends t{reportIntegrationFlavor(){this.analytics.sendFlavor("dropin")}storeElementRefOnCore(){this.core.storeElementReference(this)}formatProps(e){return p(m({},super.formatProps(e)),{instantPaymentTypes:Array.from(new Set(e.instantPaymentTypes)).filter(e=>c.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={}){var n;return null===(n=this.dropinRef)||void 0===n||n.setStatus(e,t),this}get activePaymentMethod(){var e,t;return(null===(e=this.dropinRef)||void 0===e?void 0:e.state)||(null===(t=this.dropinRef)||void 0===t?void 0:t.state.activePaymentMethod)?this.dropinRef.state.activePaymentMethod:null}get data(){return this.activePaymentMethod?this.dropinRef.state.activePaymentMethod.data:null}displayFinalAnimation(e){var t;this.props.disableFinalAnimation||null===(t=this.dropinRef)||void 0===t||t.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){var n;this.props=m({},this.props,e&&{amount:e},t&&{secondaryAmount:t}),null===(n=this.amountProviderRef.current)||void 0===n||n.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={}){var n,o;if(!e||!e.type){if(a(e,"action")&&a(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&&(null===(n=this.activePaymentMethod)||void 0===n?void 0:n.updateWithAction))return this.activePaymentMethod.updateWithAction(e);this.elementRef instanceof y&&(t=m({},null===(o=this.elementRef.activePaymentMethod)||void 0===o?void 0:o.props,t));const i=this.core.createFromAction(e,p(m({},t),{elementRef:this.elementRef,isDropin:!0}));return i?(this.setStatus(i.props.statusType,{component:i}),this.componentFromAction=i,this):null}closeActivePaymentMethod(){this.dropinRef.closeActivePaymentMethod()}handleKeyDown(e){if("Enter"===e.key||"Enter"===e.code){var t,n;if("radio"===(null===(n=document)||void 0===n||null===(t=n.activeElement)||void 0===t?void 0:t.getAttribute("role")))return;super.handleKeyDown(e)}}onEnterKeyPressed(e,t){var n,o;const i=null!==(n=this.activePaymentMethod)&&void 0!==n?n:t;null===(o=this.activePaymentMethod)||void 0===o||o.onEnterKeyPressed(e,i)}componentToRender(){return e(o,p(m({},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),l(this,"dropinRef",null),l(this,"paymentMethodsConfiguration",void 0),l(this,"componentFromAction",void 0),l(this,"paymentMethodElements",[]),l(this,"handleCreate",()=>{var e,t,n;const{paymentMethodsConfiguration:o,showStoredPaymentMethods:a,showPaymentMethods:d,instantPaymentTypes:l}=this.props,{paymentMethods:m,storedPaymentMethods:p,instantPaymentMethods:c,fastlanePaymentMethod:y}=h(this.core.paymentMethodsResponse,l),u={elementRef:this.elementRef,isDropin:!0},f=d?i(m,o,u,this.core):Promise.resolve([]),v=s(c,o,u,this.core);return[a?r(null!==(e=null===(t=(n=this.props).filterStoredPaymentMethods)||void 0===t?void 0:t.call(n,p))&&void 0!==e?e:p,o,u,this.core):Promise.resolve([]),f,v,y?i([y],o,u,this.core):[]]}),l(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||{}}}l(y,"type",d.dropin),l(y,"defaultProps",n);export{y 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 i from"./elements/createElements.js";import r from"./elements/createStoredElements.js";import s from"./elements/createInstantPaymentElements.js";import{hasOwnProperty as a}from"../../utils/hasOwnProperty.js";import h from"./elements/splitPaymentMethods.js";import{TxVariants as d}from"../tx-variants.js";function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){l(e,t,n[t])})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t}(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}const c=["paywithgoogle","googlepay","applepay"];class u extends t{reportIntegrationFlavor(){this.analytics.sendFlavor("dropin")}storeElementRefOnCore(){this.core.storeElementReference(this)}formatProps(e){return p(m({},super.formatProps(e)),{instantPaymentTypes:Array.from(new Set(e.instantPaymentTypes)).filter(e=>c.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){var n,o;return null===(o=this.elementRef)||void 0===o||null===(n=o.setStatus)||void 0===n||n.call(o,e,t),this}setStatus(e,t={}){var n;return null===(n=this.dropinRef)||void 0===n||n.setStatus(e,t),this}get activePaymentMethod(){var e,t;return(null===(e=this.dropinRef)||void 0===e?void 0:e.state)||(null===(t=this.dropinRef)||void 0===t?void 0:t.state.activePaymentMethod)?this.dropinRef.state.activePaymentMethod:null}get data(){return this.activePaymentMethod?this.dropinRef.state.activePaymentMethod.data:null}displayFinalAnimation(e){var t;this.props.disableFinalAnimation||null===(t=this.dropinRef)||void 0===t||t.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){var n;this.props=m({},this.props,e&&{amount:e},t&&{secondaryAmount:t}),null===(n=this.amountProviderRef.current)||void 0===n||n.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={}){var n,o;if(!e||!e.type){if(a(e,"action")&&a(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&&(null===(n=this.activePaymentMethod)||void 0===n?void 0:n.updateWithAction))return this.activePaymentMethod.updateWithAction(e);this.elementRef instanceof u&&(t=m({},null===(o=this.elementRef.activePaymentMethod)||void 0===o?void 0:o.props,t));const i=this.core.createFromAction(e,p(m({},t),{elementRef:this.elementRef,isDropin:!0}));return i?(this.setStatus(i.props.statusType,{component:i}),this.componentFromAction=i,this):null}closeActivePaymentMethod(){this.dropinRef.closeActivePaymentMethod()}handleKeyDown(e){if("Enter"===e.key||"Enter"===e.code){var t,n;if("radio"===(null===(n=document)||void 0===n||null===(t=n.activeElement)||void 0===t?void 0:t.getAttribute("role")))return;super.handleKeyDown(e)}}onEnterKeyPressed(e,t){var n,o;const i=null!==(n=this.activePaymentMethod)&&void 0!==n?n:t;null===(o=this.activePaymentMethod)||void 0===o||o.onEnterKeyPressed(e,i)}componentToRender(){return e(o,p(m({},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),l(this,"dropinRef",null),l(this,"elementRef",void 0),l(this,"paymentMethodsConfiguration",void 0),l(this,"componentFromAction",void 0),l(this,"paymentMethodElements",[]),l(this,"handleCreate",()=>{var e,t,n;const{paymentMethodsConfiguration:o,showStoredPaymentMethods:a,showPaymentMethods:d,instantPaymentTypes:l}=this.props,{paymentMethods:m,storedPaymentMethods:p,instantPaymentMethods:c,fastlanePaymentMethod:u}=h(this.core.paymentMethodsResponse,l),y={elementRef:this.elementRef,isDropin:!0},f=d?i(m,o,y,this.core):Promise.resolve([]),v=s(c,o,y,this.core);return[a?r(null!==(e=null===(t=(n=this.props).filterStoredPaymentMethods)||void 0===t?void 0:t.call(n,p))&&void 0!==e?e:p,o,y,this.core):Promise.resolve([]),f,v,u?i([u],o,y,this.core):[]]}),l(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||{}}}l(u,"type",d.dropin),l(u,"defaultProps",n);export{u 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","_object_spread_props","_object_spread","super","instantPaymentTypes","Array","from","Set","filter","value","includes","isValid","dropinRef","state","activePaymentMethod","showValidation","setStatus","status","_this_dropinRef","_this_dropinRef1","data","displayFinalAnimation","type","disableFinalAnimation","submit","Error","isInstantPayment","closeActivePaymentMethod","updateAmount","amount","secondaryAmount","_this_amountProviderRef_current","amountProviderRef","current","update","paymentMethodElements","forEach","element","handleElementsCreated","elements","length","handleAction","action","_this_activePaymentMethod","_this_elementRef_activePaymentMethod","hasOwnProperty","updateWithAction","elementRef","paymentAction","createFromAction","isDropin","statusType","component","componentFromAction","handleKeyDown","e","key","code","document","activeElement","getAttribute","onEnterKeyPressed","_this_activePaymentMethod1","pmComponent","componentToRender","h","DropinComponent","onCreateElements","handleCreate","onElementsCreated","ref","constructor","checkout","_define_property","paymentMethodsConfiguration","_this_props_filterStoredPaymentMethods","_this_props","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","_object_spread_props","_object_spread","super","instantPaymentTypes","Array","from","Set","filter","value","includes","isValid","dropinRef","state","activePaymentMethod","showValidation","setElementStatus","status","_this_elementRef_setStatus","_this_elementRef","elementRef","setStatus","call","_this_dropinRef","_this_dropinRef1","data","displayFinalAnimation","type","disableFinalAnimation","submit","Error","isInstantPayment","closeActivePaymentMethod","updateAmount","amount","secondaryAmount","_this_amountProviderRef_current","amountProviderRef","current","update","paymentMethodElements","forEach","element","handleElementsCreated","elements","length","handleAction","action","_this_activePaymentMethod","_this_elementRef_activePaymentMethod","hasOwnProperty","updateWithAction","paymentAction","createFromAction","isDropin","statusType","component","componentFromAction","handleKeyDown","e","key","code","document","activeElement","getAttribute","onEnterKeyPressed","_this_activePaymentMethod1","pmComponent","componentToRender","h","DropinComponent","onCreateElements","handleCreate","onElementsCreated","ref","constructor","checkout","_define_property","paymentMethodsConfiguration","_this_props_filterStoredPaymentMethods","_this_props","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","_this_props_instantPaymentTypes","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","_object_spread_props","_object_spread","_id","activate","_this_props_onSelect","_this_props","call","storedPaymentMethod","resolve","reject","storedPaymentMethodId","filter","pm","_this_props_modules","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","_this_props_instantPaymentTypes","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","_object_spread_props","_object_spread","_id","activate","_this_props_onSelect","_this_props","call","storedPaymentMethod","resolve","reject","storedPaymentMethodId","filter","pm","_this_props_modules","event","clicked","target","UiTarget","otherPaymentMethodButton","data","sanitizeOrder","amount","elementRef","handleAdvanceFlowPaymentMethodsUpdate","AdyenCheckoutError","session","cancelOrder","update"],"mappings":"miDAwBO,MAAMA,UAAwBC,EAcjCC,iBAAAA,GACIC,KAAKC,mBACT,CA2FAC,kBAAAA,CAAmBC,EAAWC,GACtBA,EAAUC,OAAOC,OAASN,KAAKO,MAAMF,OAAOC,MAAQN,KAAKO,MAAMC,qBAE/DR,KAAKO,MAAMC,oBAAoBC,UAAUT,KAAKO,MAAMF,OAAOC,MAGhC,UAA3BN,KAAKO,MAAMF,OAAOC,MAA8C,UAA1BF,EAAUC,OAAOC,MAAoBN,KAAKU,MAAMC,SACtFX,KAAKU,MAAMC,SAEnB,CAyCAC,wBAAAA,GACIZ,KAAKa,SAAS,CAAEL,oBAAqB,MACzC,CAkCAM,MAAAA,GACI,MAAMC,SACFA,EAAQC,uBACRA,EAAsBC,uBACtBA,EAAsBC,sBACtBA,EAAqBb,OACrBA,EAAMG,oBACNA,EAAmBW,6BACnBA,GACAnB,KAAKO,MAEHa,EAA4B,YAAhBf,EAAOC,KACnBe,EAAgC,aAAhBhB,EAAOC,KACvBgB,MAAoCP,eAAAA,EAAUQ,UAAUN,aAAAA,EAAAA,EAAwBM,UAAUL,aAAAA,EAAAA,EAAuBK,SAEvH,OAAQlB,EAAOC,MACX,IAAK,UACmCD,IAAAA,EAApC,OAAOmB,EAACC,EAAAA,CAAmBC,QAAqB,QAAZrB,EAAAA,EAAOK,aAAPL,IAAAA,OAAAA,EAAAA,EAAcqB,UAEtD,IAAK,QAC6BrB,IAAAA,EAA9B,OAAOmB,EAACG,EAAOC,MAAK,CAACF,QAAqB,QAAZrB,EAAAA,EAAOK,aAAPL,IAAAA,OAAAA,EAAAA,EAAcqB,UAEhD,IAAK,aACMrB,EAAAA,EAAP,OAAmB,QAAZA,EAAAA,EAAOK,aAAPL,IAAAA,GAAuB,QAAvBA,EAAAA,EAAcwB,iBAAdxB,IAAAA,SAAAA,EAAyBS,SAEpC,QACI,OACIU,EAACM,MAAAA,CAAIC,UAAW,kDAAkD1B,EAAOC,QACpEe,GAAiBhB,EAAOK,MAAMmB,WAAaxB,EAAOK,MAAMmB,UAAUf,SAClEM,GAAaf,EAAOK,OAASL,EAAOK,MAAMmB,WAAaxB,EAAOK,MAAMmB,UAAUf,UAE7EK,GACEK,EAACQ,OACGR,EAACS,EAAAA,CACGb,UAAWA,EACXc,eAAgBlB,EAChBR,oBAAqBA,EACrB2B,SAAUnC,KAAKoC,4BACfC,wBAAAA,EACAC,gBAAiBtC,KAAKU,MAAM4B,kBAG/BhB,GACGE,EAACe,EAAAA,CACGC,mBAAoB,CAAC,8BACrBC,QAAQ,OACRC,QAAAA,EACAC,MAAM,wBACNC,QAAS5C,KAAK6C,uCAM7BvB,GAAkCH,GAC/BK,EAACS,EAAAA,CACGb,UAAWA,GAAaC,EACxByB,yBAA0B9C,KAAKO,MAAMwC,YACrCb,eAAgBnB,EAChBiC,sBAAuB/B,EACvBgC,qBAAsB/B,EACtBV,oBAAqBA,EACrB0C,MAAOlD,KAAKU,MAAMwC,MAClBC,YAAanD,KAAKO,MAAM4C,YACxBC,cAAepD,KAAKoD,cACpBjB,SAAUnC,KAAKoC,4BACfiB,kBAAmBrD,KAAKU,MAAM2C,kBAC9BhB,uBAAwBrC,KAAKU,MAAM2B,uBACnCiB,6BAA8BtD,KAAKU,MAAM4C,6BACzCC,6BAA8BvD,KAAKwD,iCACnCC,8BAA+BzD,KAAKU,MAAM+C,8BAC1CnB,gBAAiBtC,KAAKU,MAAM4B,mBAMxD,mBA9QGoB,SAAAC,GACHC,OAAOrD,QAA8B,CACjCQ,SAAU,GACVC,uBAAwB,GACxBC,uBAAwB,GACxBC,sBAAuB,GACvBiC,YAAa,KACbJ,aAAa,EACb1C,OAAQ,CAAEC,KAAM,UAAWI,WAAOmD,GAClCrD,oBAAqB,KACrBsD,qBAAsB,CAAA,EACtB3C,8BAA8B,IAOlCyC,OAAO3D,oBAAoB,KACvB,MAAMiD,MAAEA,EAAKa,UAAEA,EAASC,eAAEA,GAAmBhE,KAAKU,OAC3CuD,EAAwBC,EAAkBC,EAAyBC,GAAiCpE,KAAKU,MAAM2D,mBAChHC,EAAqBpB,EAAQqB,EAAe,CAAER,YAAWC,kBAAkBd,GAAS,KAErFsB,QAAQC,IAAI,CAACR,EAAwBC,EAAkBC,EAAyBC,EAA+BE,IAC/GI,KAAK,EAAExD,EAAuBH,EAAUE,EAAwBD,EAAwBmC,MACrFnD,KAAKa,SAAS,CACVsC,cACApC,WACAE,yBACAC,wBACAF,yBACAG,6BAAgE,IAAlCH,EAAuBO,SAEzDvB,KAAKS,UAAU,SAEfT,KAAKU,MAAMiE,kBAAkB,IAAI1D,KAA2BC,KAA0BH,KAAaC,IAEnGhB,KAAK4E,wBAAwB,CACzBC,SAAU7D,EACV8D,QAAS7D,EACT8D,OAAQ7D,EACR8D,QAASjE,MAGhBkE,MAAM,KACHjF,KAAKS,UAAU,WAGvBT,KAAKoD,cAAgBpD,KAAKkF,qBAM9BtB,EAAA5D,KAAQ4E,0BAA2BO,IAC/B,IAGQ,IAAAC,EAFJ,MAAMlD,eAAEA,EAAce,qBAAEA,EAAoBD,sBAAEA,EAAqBqC,sBAAEA,GAA0BC,EAC3FtF,KAAKU,MAAM6E,KAAKC,uBACc,QAA9BJ,EAAApF,KAAKU,MAAM+E,2BAAX,IAAAL,EAAAA,EAAkC,IAGhCM,EAA6D,CAC/D,CAAEC,YAAa,WAAYzD,eAAgBmD,EAAwB,CAACA,GAAyB,IAC7F,CAAEM,YAAa,UAAWzD,eAAgBc,GAC1C,CAAE2C,YAAa,SAAUzD,eAAgBe,GACzC,CAAE0C,YAAa,UAAWzD,eAAgBA,IAGxC0D,EAA0BC,EAC5BH,EAA0BI,IAAIC,GAAKA,EAAEJ,aACrCR,EACAnF,KAAKU,MAAM6E,MAGTS,EAA4BC,EAA8BP,EAA2BP,GAErFe,EAAkC,IAAIC,EAAmB,CAC3D7F,KAAM8F,EAAcC,qBACpBxE,UAAW,SACX+D,0BACAI,8BAEJhG,KAAKU,MAAM6E,KAAKe,QAAQC,UAAUC,cAAcN,EACpD,CAAE,MAAOO,GACLC,QAAQC,KAAK,0DAA2DF,EAC5E,IAGJ7C,OAAOnD,YAAY,CAACJ,EAA8BK,EAA2B,MACzEV,KAAKa,SAAS,CAAER,OAAQ,CAAEC,KAAMD,EAAQK,aAG5CkD,EAAA5D,KAAQ4G,yBAA0BC,IAC1BA,IAAkB7G,KAAKO,MAAMC,sBAIjCR,KAAKa,SAAST,KACVI,oBAAqBqG,EACrB/C,qBAAsBgD,EAAAC,EAAA,CAAA,EAAK3G,EAAU0D,sBAAoB,CAAE,CAAC+C,EAAcG,MAAM,OAGhFhH,KAAKO,MAAMuD,qBAAqB+C,EAAcG,MAC9CH,EAAcI,cAetBrD,EAAA5D,KAAQoC,8BAA8ByE,IAClC,MAAMrG,oBAAEA,GAAwBR,KAAKO,UAKjC2G,EAAAC,GAHJnH,KAAK4G,uBAAuBC,GAEvBrG,GAAuBA,EAAoBwG,MAAQH,EAAcG,MAASxG,KACxD,QAAnB0G,GAAAC,EAAAnH,KAAKU,OAAMyB,gBAAX,IAAA+E,GAAAA,EAAAE,KAAAD,EAAsBN,MAI9BjD,EAAA5D,KAAQwD,mCAAmC6D,IACvCrH,KAAKa,SAAS,CAAEkC,aAAa,IAE7B,IAAIyB,QAAQ,CAAC8C,EAASC,IAAWvH,KAAKU,MAAM6C,6BAA6B8D,EAAoB3G,MAAM8G,sBAAuBF,EAASC,IAC9H7C,KAAK,KACF1E,KAAKa,SAAST,KACVc,sBAAuBd,EAAUc,sBAAsBuG,OAAOC,GAAMA,EAAGV,MAAQK,EAAoBL,QAEvGhH,KAAKa,SAAS,CAAEkC,aAAa,MAEhCkC,MAAM,KACHjF,KAAKa,SAAS,CAAEkC,aAAa,QAIzCa,OAAiBf,sCAAsC,KAWnD,IAAA8E,EAVA3H,KAAKa,SAAS,CACVM,8BAA8B,IAGlC,MAAMyG,EAAQ,IAAIzB,EAAmB,CACjC7F,KAAM8F,EAAcyB,QACpBC,OAAQC,EAASC,yBACjBnG,UAAW,WAGG,QAAlB8F,EAAA3H,KAAKU,MAAM4F,eAAX,IAAAqB,GAAAA,EAAoBpB,UAAUC,cAAcoB,KAUhDhE,OAAiBsB,mBAAmB,IAC5BlF,KAAKU,MAAM0C,cACH6E,IACJ,MAAM/E,EAAQgF,EAAcD,EAAK/E,OACjC,IAAIsB,QAAmC,CAAC8C,EAASC,KAC7CvH,KAAKU,MAAM0C,cAAc,CAAEF,SAAS,CAAEoE,UAASC,aAG9C7C,KAAK,EAAGyD,YAAanI,KAAKU,MAAM0H,WAAWC,sCAAsC,KAAMF,IACvFlD,MAAMwB,IACH,MAAM,IAAI6B,EAAmB,gBAAiB7B,MAI1DzG,KAAKU,MAAM6H,QACHN,IACCjI,KAAKU,MAAM6H,QACXC,YAAYP,GACZvD,KAAK,IAAM1E,KAAKU,MAAM6E,KAAKkD,OAAO,CAAEvF,MAAO,QAC3C+B,MAAMwB,IACHC,QAAQD,MAAMA,GACdzG,KAAKS,WAAUgG,eAAAA,EAAO/E,UAAW,YAG1C,MAGXkC,EAAA5D,KAAQoD,qBAAR"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../../external/preact/dist/preact.js";import{memo as t}from"../../../../external/preact/compat/dist/compat.js";const n=t(({paymentMethodComponent:t,isSelected:n})=>n?e("div",{className:"adyen-checkout__payment-method__details__content"},t.render()):null,function(e,t){return null!==e.isSelected&&(!0===e.isSelected&&!1===t.isSelected)});export{n as PaymentMethodDetails};
1
+ import{createElement as e}from"../../../../external/preact/dist/preact.js";import{useRef as t}from"../../../../external/preact/hooks/dist/hooks.js";const r=({paymentMethodComponent:r,isSelected:n})=>{const o=t(null),c=t(!1);return n&&!c.current&&(o.current=r.render()),c.current=n,o.current?e("div",{className:"adyen-checkout__payment-method__details__content"},o.current):null};export{r as PaymentMethodDetails};
2
2
  //# sourceMappingURL=PaymentMethodDetails.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PaymentMethodDetails.js","sources":["../../../../../../src/components/Dropin/components/PaymentMethod/PaymentMethodDetails.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { memo } from 'preact/compat';\nimport UIElement from '../../../internal/UIElement';\n\ninterface PaymentMethodDetailsProps {\n paymentMethodComponent: UIElement;\n isSelected: boolean;\n}\n\n/**\n * The payment method 'render()' trigger analytics. If a Component is removed from the DOM, the state is reset.\n * In order to preserve the state and also trigger analytics when a Component is selected, we cache renders when\n * the 'isSelect' changes from true -> false\n */\nfunction isComponentCached(oldProps: PaymentMethodDetailsProps, newProps: PaymentMethodDetailsProps) {\n const isInitialRender = oldProps.isSelected === null;\n\n if (isInitialRender) return false;\n\n const componentIsDeselected = oldProps.isSelected === true && newProps.isSelected === false;\n return componentIsDeselected;\n}\n\nconst PaymentMethodDetails = memo(({ paymentMethodComponent, isSelected }: Readonly<PaymentMethodDetailsProps>) => {\n if (!isSelected) {\n return null;\n }\n\n return <div className={'adyen-checkout__payment-method__details__content'}>{paymentMethodComponent.render()}</div>;\n}, isComponentCached);\n\nexport { PaymentMethodDetails };\n"],"names":["PaymentMethodDetails","memo","paymentMethodComponent","isSelected","h","div","className","render","oldProps","newProps"],"mappings":"oJAuBA,MAAMA,EAAuBC,EAAK,EAAGC,yBAAwBC,gBACpDA,EAIEC,EAACC,MAAAA,CAAIC,UAAW,oDAAqDJ,EAAuBK,UAHxF,KAXf,SAA2BC,EAAqCC,GAG5D,OAFgD,OAAxBD,EAASL,cAIqB,IAAxBK,EAASL,aAA+C,IAAxBM,EAASN,WAE3E"}
1
+ {"version":3,"file":"PaymentMethodDetails.js","sources":["../../../../../../src/components/Dropin/components/PaymentMethod/PaymentMethodDetails.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useRef } from 'preact/hooks';\nimport UIElement from '../../../internal/UIElement';\n\ninterface PaymentMethodDetailsProps {\n paymentMethodComponent: UIElement;\n isSelected: boolean;\n}\n\n/**\n * The payment method 'render()' triggers analytics, therefore it must be called only when the payment method gets\n * selected by the shopper. On any other re-render we re-use the vnode created by the previous 'render()' call, so that\n * analytics events aren't duplicated and the Component isn't unmounted (which would reset its state).\n */\nconst PaymentMethodDetails = ({ paymentMethodComponent, isSelected }: Readonly<PaymentMethodDetailsProps>) => {\n const renderedComponent = useRef<h.JSX.Element>(null);\n const wasSelected = useRef<boolean>(false);\n\n if (isSelected && !wasSelected.current) {\n renderedComponent.current = paymentMethodComponent.render();\n }\n wasSelected.current = isSelected;\n\n if (!renderedComponent.current) {\n return null;\n }\n\n return <div className={'adyen-checkout__payment-method__details__content'}>{renderedComponent.current}</div>;\n};\n\nexport { PaymentMethodDetails };\n"],"names":["PaymentMethodDetails","paymentMethodComponent","isSelected","renderedComponent","useRef","wasSelected","current","render","h","div","className"],"mappings":"0JAcMA,EAAuB,EAAGC,yBAAwBC,iBACpD,MAAMC,EAAoBC,EAAsB,MAC1CC,EAAcD,GAAgB,GAOpC,OALIF,IAAeG,EAAYC,UAC3BH,EAAkBG,QAAUL,EAAuBM,UAEvDF,EAAYC,QAAUJ,EAEjBC,EAAkBG,QAIhBE,EAACC,MAAAA,CAAIC,UAAW,oDAAqDP,EAAkBG,SAHnF"}
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import r from"./components/GiftcardComponent.js";import n from"../internal/PayButton/PayButton.js";import o from"../../core/Errors/AdyenCheckoutError.js";import{TxVariants as i}from"../tx-variants.js";function s(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function a(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),n.forEach(function(e){s(t,e,r[e])})}return t}function c(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e.push.apply(e,r)}return e}(Object(e)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))}),t}class p extends e{formatProps(t){return a({},null==t?void 0:t.configuration,t)}formatData(){var t,e;return{paymentMethod:{type:this.constructor.type,brand:this.props.brand,encryptedCardNumber:null===(t=this.state.data)||void 0===t?void 0:t.encryptedCardNumber,encryptedSecurityCode:null===(e=this.state.data)||void 0===e?void 0:e.encryptedSecurityCode}}}get isValid(){return!!this.state.isValid}get icon(){var t;return(null===(t=this.props.brandsConfiguration[this.props.brand])||void 0===t?void 0:t.icon)||this.props.icon||this.resources.getImage()(this.props.brand)}get displayName(){var t;return(null===(t=this.props.brandsConfiguration[this.props.brand])||void 0===t?void 0:t.name)||this.props.name}setBalanceCheckError(t){var e,r;null===(r=this.componentRef)||void 0===r||null===(e=r.setBalanceCheckErrors)||void 0===e||e.call(r,t)}balanceCheck(){return this.onBalanceCheck()}submit(){this.balanceCheck()}makeSubmitCall(){super.submit()}componentToRender(){return t(r,c(a({ref:t=>{this.componentRef=t}},this.props),{handleKeyDown:this.handleKeyDown,showPayButton:this.props.showPayButton,onChange:this.setState,makeBalanceCheck:()=>this.onBalanceCheck(),makePayment:()=>this.makeSubmitCall(),payButton:this.payButton,onSubmitAnalytics:this.submitAnalytics}))}constructor(...e){super(...e),s(this,"componentRef",void 0),s(this,"handleBalanceCheck",t=>this.props.onBalanceCheck?new Promise((e,r)=>{this.props.onBalanceCheck(e,r,t)}):this.props.session?this.props.session.checkBalance(t):void 0),s(this,"onOrderRequest",t=>this.props.onOrderRequest?new Promise((e,r)=>{this.props.onOrderRequest(e,r,t)}):this.props.session?this.props.session.createOrder():void 0),s(this,"onBalanceCheck",()=>{if(!this.isValid)return void this.showValidation();if(!(this.props.session||this.props.onBalanceCheck))return super.submit();this.setStatus("loading"),this.handleBalanceCheck(this.formatData()).then(({balance:t,transactionLimit:e={}})=>{var r;if(this.setBalanceCheckError(null),!t)throw new Error("card-error");if((null==t?void 0:t.currency)!==(null===(r=this.props.amount)||void 0===r?void 0:r.currency))throw new Error("currency-error");if((null==t?void 0:t.value)<=0)throw new Error("no-balance");return this.props.amount.value>t.value||this.props.amount.value>e.value?this.props.order?this.makeSubmitCall():this.onOrderRequest(this.data).then(t=>(this.setState({order:{orderData:t.orderData,pspReference:t.pspReference}}),this.makeSubmitCall())):this.handleOnRequiringConfirmation(t,e)}).catch(t=>{this.setBalanceCheckError(null==t?void 0:t.message),t instanceof o?this.handleError(t):this.handleError(new o("ERROR",t))})}),s(this,"handleOnRequiringConfirmation",(t,e)=>{if(this.componentRef.setBalance({balance:t,transactionLimit:e}),this.setStatus("ready"),!this.props.showPayButton){if(!this.props.onRequiringConfirmation)throw new o("IMPLEMENTATION_ERROR","onRequiringConfirmation must be provided");return new Promise((t,e)=>{this.props.onRequiringConfirmation(t,e)}).then(()=>this.makeSubmitCall()).catch(()=>{})}}),s(this,"payButton",e=>t(n,e))}}s(p,"type",i.giftcard),s(p,"defaultProps",{brandsConfiguration:{}});export{p as GiftcardElement,p as default};
1
+ import{createElement as e}from"../../external/preact/dist/preact.js";import{UIElement as t}from"../internal/UIElement/UIElement.js";import r from"./components/GiftcardComponent.js";import n from"../internal/PayButton/PayButton.js";import o from"../../core/Errors/AdyenCheckoutError.js";import{TxVariants as i}from"../tx-variants.js";function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},n=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(r).filter(function(e){return Object.getOwnPropertyDescriptor(r,e).enumerable}))),n.forEach(function(t){s(e,t,r[t])})}return e}function c(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t.push.apply(t,r)}return t}(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}),e}class h extends t{formatProps(e){return a({},null==e?void 0:e.configuration,e)}formatData(){var e,t;return{paymentMethod:{type:this.constructor.type,brand:this.props.brand,encryptedCardNumber:null===(e=this.state.data)||void 0===e?void 0:e.encryptedCardNumber,encryptedSecurityCode:null===(t=this.state.data)||void 0===t?void 0:t.encryptedSecurityCode}}}get isValid(){return!!this.state.isValid}get icon(){var e;return(null===(e=this.props.brandsConfiguration[this.props.brand])||void 0===e?void 0:e.icon)||this.props.icon||this.resources.getImage()(this.props.brand)}get displayName(){var e;return(null===(e=this.props.brandsConfiguration[this.props.brand])||void 0===e?void 0:e.name)||this.props.name}setBalanceCheckError(e){var t,r;null===(r=this.componentRef)||void 0===r||null===(t=r.setBalanceCheckErrors)||void 0===t||t.call(r,e)}balanceCheck(){return this.onBalanceCheck()}submit(){this.balanceCheck()}makeSubmitCall(){super.submit()}componentToRender(){return e(r,c(a({ref:e=>{this.componentRef=e}},this.props),{handleKeyDown:this.handleKeyDown,showPayButton:this.props.showPayButton,onChange:this.setState,makeBalanceCheck:()=>this.onBalanceCheck(),makePayment:()=>this.makeSubmitCall(),payButton:this.payButton,onSubmitAnalytics:this.submitAnalytics}))}constructor(...t){super(...t),s(this,"componentRef",void 0),s(this,"handleBalanceCheck",e=>this.props.onBalanceCheck?new Promise((t,r)=>{this.props.onBalanceCheck(t,r,e)}):this.props.session?this.props.session.checkBalance(e):void 0),s(this,"onOrderRequest",e=>this.props.onOrderRequest?new Promise((t,r)=>{this.props.onOrderRequest(t,r,e)}):this.props.session?this.props.session.createOrder():void 0),s(this,"onBalanceCheck",()=>{if(!this.isValid)return void this.showValidation();if(!(this.props.session||this.props.onBalanceCheck))return super.submit();this.setStatus("loading"),this.handleBalanceCheck(this.formatData()).then(({balance:e,transactionLimit:t={}})=>{var r;if(this.setBalanceCheckError(null),!e)throw new Error("card-error");if((null==e?void 0:e.currency)!==(null===(r=this.props.amount)||void 0===r?void 0:r.currency))throw new Error("currency-error");if((null==e?void 0:e.value)<=0)throw new Error("no-balance");return this.props.amount.value>e.value||this.props.amount.value>t.value?this.props.order?this.executePaymentsCall():this.onOrderRequest(this.data).then(e=>(this.setState({order:{orderData:e.orderData,pspReference:e.pspReference}}),this.executePaymentsCall())):this.handleOnRequiringConfirmation(e,t)}).catch(e=>{this.setBalanceCheckError(null==e?void 0:e.message),e instanceof o?this.handleError(e):this.handleError(new o("ERROR",e))})}),s(this,"handleOnRequiringConfirmation",(e,t)=>{if(this.componentRef.setBalance({balance:e,transactionLimit:t}),this.setStatus("ready"),!this.props.showPayButton){if(!this.props.onRequiringConfirmation)throw new o("IMPLEMENTATION_ERROR","onRequiringConfirmation must be provided");return new Promise((e,t)=>{this.props.onRequiringConfirmation(e,t)}).then(()=>this.makeSubmitCall()).catch(()=>{})}}),s(this,"payButton",t=>{var r;return e(n,c(a({},t),{showReview:null!==(r=t.showReview)&&void 0!==r?r:!!this.props.onReview}))})}}s(h,"type",i.giftcard),s(h,"defaultProps",{brandsConfiguration:{}});export{h as GiftcardElement,h as default};
2
2
  //# sourceMappingURL=Giftcard.js.map