@adyen/adyen-web 6.45.1 → 6.45.2

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 (205) hide show
  1. package/dist/cjs/index.cjs +2 -2
  2. package/dist/cjs/index.cjs.map +1 -1
  3. package/dist/cjs/index.d.cts +1846 -1889
  4. package/dist/es/components/ANCV/components/ANCVInput.js +1 -1
  5. package/dist/es/components/ANCV/components/ANCVInput.js.map +1 -1
  6. package/dist/es/components/Ach/Ach.js +1 -1
  7. package/dist/es/components/Ach/Ach.js.map +1 -1
  8. package/dist/es/components/Ach/components/AchComponent.js +1 -1
  9. package/dist/es/components/Ach/components/AchComponent.js.map +1 -1
  10. package/dist/es/components/AmazonPay/AmazonPay.js +1 -1
  11. package/dist/es/components/AmazonPay/AmazonPay.js.map +1 -1
  12. package/dist/es/components/BacsDD/BacsDD.js +1 -1
  13. package/dist/es/components/BacsDD/BacsDD.js.map +1 -1
  14. package/dist/es/components/BacsDD/components/BacsInput.js +1 -1
  15. package/dist/es/components/BacsDD/components/BacsInput.js.map +1 -1
  16. package/dist/es/components/BankTransfer/BankTransfer.js +1 -1
  17. package/dist/es/components/BankTransfer/BankTransfer.js.map +1 -1
  18. package/dist/es/components/BankTransfer/components/BankTransferInput/BankTransferInput.js +1 -1
  19. package/dist/es/components/BankTransfer/components/BankTransferInput/BankTransferInput.js.map +1 -1
  20. package/dist/es/components/Blik/Blik.js +1 -1
  21. package/dist/es/components/Blik/Blik.js.map +1 -1
  22. package/dist/es/components/Blik/components/BlikInput.js +1 -1
  23. package/dist/es/components/Blik/components/BlikInput.js.map +1 -1
  24. package/dist/es/components/Card/Card.js +1 -1
  25. package/dist/es/components/Card/Card.js.map +1 -1
  26. package/dist/es/components/Card/components/CardInput/types.js.map +1 -1
  27. package/dist/es/components/CashAppPay/CashAppPay.js +1 -1
  28. package/dist/es/components/CashAppPay/CashAppPay.js.map +1 -1
  29. package/dist/es/components/CustomCard/CustomCard.js +1 -1
  30. package/dist/es/components/CustomCard/CustomCard.js.map +1 -1
  31. package/dist/es/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  32. package/dist/es/components/Donation/Donation.js +1 -1
  33. package/dist/es/components/Donation/Donation.js.map +1 -1
  34. package/dist/es/components/Donation/components/DonationComponent.js +1 -1
  35. package/dist/es/components/Donation/components/DonationComponent.js.map +1 -1
  36. package/dist/es/components/Dropin/Dropin.js +1 -1
  37. package/dist/es/components/Dropin/Dropin.js.map +1 -1
  38. package/dist/es/components/Dropin/components/DropinComponent.js.map +1 -1
  39. package/dist/es/components/Giftcard/Giftcard.js.map +1 -1
  40. package/dist/es/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  41. package/dist/es/components/Giropay/Giropay.js +1 -1
  42. package/dist/es/components/Giropay/Giropay.js.map +1 -1
  43. package/dist/es/components/MBWay/MBWay.js +1 -1
  44. package/dist/es/components/MBWay/MBWay.js.map +1 -1
  45. package/dist/es/components/MBWay/components/MBWayInput/MBWayInput.js +1 -1
  46. package/dist/es/components/MBWay/components/MBWayInput/MBWayInput.js.map +1 -1
  47. package/dist/es/components/Multibanco/Multibanco.js +1 -1
  48. package/dist/es/components/Multibanco/Multibanco.js.map +1 -1
  49. package/dist/es/components/PayByBankPix/PayByBankPix.js +1 -1
  50. package/dist/es/components/PayByBankPix/PayByBankPix.js.map +1 -1
  51. package/dist/es/components/PayByBankUS/PayByBankUS.js +1 -1
  52. package/dist/es/components/PayByBankUS/PayByBankUS.js.map +1 -1
  53. package/dist/es/components/PayTo/components/BSBInput.js +1 -1
  54. package/dist/es/components/PayTo/components/BSBInput.js.map +1 -1
  55. package/dist/es/components/PayTo/components/PayToNameFields.js +1 -1
  56. package/dist/es/components/PayTo/components/PayToNameFields.js.map +1 -1
  57. package/dist/es/components/PayTo/components/PayToPhone.js +1 -1
  58. package/dist/es/components/PayTo/components/PayToPhone.js.map +1 -1
  59. package/dist/es/components/Pix/Pix.js +1 -1
  60. package/dist/es/components/Pix/Pix.js.map +1 -1
  61. package/dist/es/components/Pix/components/PixInput/PixInput.js +1 -1
  62. package/dist/es/components/Pix/components/PixInput/PixInput.js.map +1 -1
  63. package/dist/es/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js +1 -1
  64. package/dist/es/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js.map +1 -1
  65. package/dist/es/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js +1 -1
  66. package/dist/es/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js.map +1 -1
  67. package/dist/es/components/Redirect/Redirect.js +1 -1
  68. package/dist/es/components/Redirect/Redirect.js.map +1 -1
  69. package/dist/es/components/Sepa/Sepa.js.map +1 -1
  70. package/dist/es/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
  71. package/dist/es/components/Trustly/Trustly.js +1 -1
  72. package/dist/es/components/Trustly/Trustly.js.map +1 -1
  73. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  74. package/dist/es/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  75. package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
  76. package/dist/es/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
  77. package/dist/es/components/internal/BaseElement/BaseElement.js.map +1 -1
  78. package/dist/es/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js +1 -1
  79. package/dist/es/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js.map +1 -1
  80. package/dist/es/components/internal/IbanInput/IbanInput.js +1 -1
  81. package/dist/es/components/internal/IbanInput/IbanInput.js.map +1 -1
  82. package/dist/es/components/internal/IbanInput/validate.js +1 -1
  83. package/dist/es/components/internal/IbanInput/validate.js.map +1 -1
  84. package/dist/es/components/internal/OpenInvoice/OpenInvoice.js +1 -1
  85. package/dist/es/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
  86. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  87. package/dist/es/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
  88. package/dist/es/components/internal/RedirectButton/RedirectButton.js +1 -1
  89. package/dist/es/components/internal/RedirectButton/RedirectButton.js.map +1 -1
  90. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  91. package/dist/es/components/internal/UIElement/UIElement.js +1 -1
  92. package/dist/es/components/internal/UIElement/UIElement.js.map +1 -1
  93. package/dist/es/components/internal/UIElement/utils.js +1 -1
  94. package/dist/es/components/internal/UIElement/utils.js.map +1 -1
  95. package/dist/es/core/config.js +1 -1
  96. package/dist/es/index.d.ts +1846 -1889
  97. package/dist/es/utils/Validator/Validator.js +1 -1
  98. package/dist/es/utils/Validator/Validator.js.map +1 -1
  99. package/dist/es/utils/useForm/reducer.js +1 -1
  100. package/dist/es/utils/useForm/reducer.js.map +1 -1
  101. package/dist/es/utils/useForm/useForm.js +1 -1
  102. package/dist/es/utils/useForm/useForm.js.map +1 -1
  103. package/dist/es/utils/useForm/useFormWithA11y.js +1 -1
  104. package/dist/es/utils/useForm/useFormWithA11y.js.map +1 -1
  105. package/dist/es-legacy/components/ANCV/components/ANCVInput.js +1 -1
  106. package/dist/es-legacy/components/ANCV/components/ANCVInput.js.map +1 -1
  107. package/dist/es-legacy/components/Ach/Ach.js +1 -1
  108. package/dist/es-legacy/components/Ach/Ach.js.map +1 -1
  109. package/dist/es-legacy/components/Ach/components/AchComponent.js +1 -1
  110. package/dist/es-legacy/components/Ach/components/AchComponent.js.map +1 -1
  111. package/dist/es-legacy/components/AmazonPay/AmazonPay.js +1 -1
  112. package/dist/es-legacy/components/AmazonPay/AmazonPay.js.map +1 -1
  113. package/dist/es-legacy/components/BacsDD/BacsDD.js +1 -1
  114. package/dist/es-legacy/components/BacsDD/BacsDD.js.map +1 -1
  115. package/dist/es-legacy/components/BacsDD/components/BacsInput.js +1 -1
  116. package/dist/es-legacy/components/BacsDD/components/BacsInput.js.map +1 -1
  117. package/dist/es-legacy/components/BankTransfer/BankTransfer.js +1 -1
  118. package/dist/es-legacy/components/BankTransfer/BankTransfer.js.map +1 -1
  119. package/dist/es-legacy/components/BankTransfer/components/BankTransferInput/BankTransferInput.js +1 -1
  120. package/dist/es-legacy/components/BankTransfer/components/BankTransferInput/BankTransferInput.js.map +1 -1
  121. package/dist/es-legacy/components/Blik/Blik.js +1 -1
  122. package/dist/es-legacy/components/Blik/Blik.js.map +1 -1
  123. package/dist/es-legacy/components/Blik/components/BlikInput.js +1 -1
  124. package/dist/es-legacy/components/Blik/components/BlikInput.js.map +1 -1
  125. package/dist/es-legacy/components/Card/Card.js +1 -1
  126. package/dist/es-legacy/components/Card/Card.js.map +1 -1
  127. package/dist/es-legacy/components/Card/components/CardInput/types.js.map +1 -1
  128. package/dist/es-legacy/components/CashAppPay/CashAppPay.js +1 -1
  129. package/dist/es-legacy/components/CashAppPay/CashAppPay.js.map +1 -1
  130. package/dist/es-legacy/components/CustomCard/CustomCard.js +1 -1
  131. package/dist/es-legacy/components/CustomCard/CustomCard.js.map +1 -1
  132. package/dist/es-legacy/components/CustomCard/CustomCardInput/CustomCardInput.js.map +1 -1
  133. package/dist/es-legacy/components/Donation/Donation.js +1 -1
  134. package/dist/es-legacy/components/Donation/Donation.js.map +1 -1
  135. package/dist/es-legacy/components/Donation/components/DonationComponent.js +1 -1
  136. package/dist/es-legacy/components/Donation/components/DonationComponent.js.map +1 -1
  137. package/dist/es-legacy/components/Dropin/Dropin.js +1 -1
  138. package/dist/es-legacy/components/Dropin/Dropin.js.map +1 -1
  139. package/dist/es-legacy/components/Dropin/components/DropinComponent.js.map +1 -1
  140. package/dist/es-legacy/components/Giftcard/Giftcard.js.map +1 -1
  141. package/dist/es-legacy/components/Giftcard/components/GiftcardComponent.js.map +1 -1
  142. package/dist/es-legacy/components/Giropay/Giropay.js +1 -1
  143. package/dist/es-legacy/components/Giropay/Giropay.js.map +1 -1
  144. package/dist/es-legacy/components/MBWay/MBWay.js +1 -1
  145. package/dist/es-legacy/components/MBWay/MBWay.js.map +1 -1
  146. package/dist/es-legacy/components/MBWay/components/MBWayInput/MBWayInput.js +1 -1
  147. package/dist/es-legacy/components/MBWay/components/MBWayInput/MBWayInput.js.map +1 -1
  148. package/dist/es-legacy/components/Multibanco/Multibanco.js +1 -1
  149. package/dist/es-legacy/components/Multibanco/Multibanco.js.map +1 -1
  150. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js +1 -1
  151. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js.map +1 -1
  152. package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js +1 -1
  153. package/dist/es-legacy/components/PayByBankUS/PayByBankUS.js.map +1 -1
  154. package/dist/es-legacy/components/PayTo/components/BSBInput.js +1 -1
  155. package/dist/es-legacy/components/PayTo/components/BSBInput.js.map +1 -1
  156. package/dist/es-legacy/components/PayTo/components/PayToNameFields.js +1 -1
  157. package/dist/es-legacy/components/PayTo/components/PayToNameFields.js.map +1 -1
  158. package/dist/es-legacy/components/PayTo/components/PayToPhone.js +1 -1
  159. package/dist/es-legacy/components/PayTo/components/PayToPhone.js.map +1 -1
  160. package/dist/es-legacy/components/Pix/Pix.js +1 -1
  161. package/dist/es-legacy/components/Pix/Pix.js.map +1 -1
  162. package/dist/es-legacy/components/Pix/components/PixInput/PixInput.js +1 -1
  163. package/dist/es-legacy/components/Pix/components/PixInput/PixInput.js.map +1 -1
  164. package/dist/es-legacy/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js +1 -1
  165. package/dist/es-legacy/components/PreAuthorizedDebitCanada/PreAuthorizedDebitCanada.js.map +1 -1
  166. package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js +1 -1
  167. package/dist/es-legacy/components/PreAuthorizedDebitCanada/components/PreAuthorizedDebitCanadaComponent.js.map +1 -1
  168. package/dist/es-legacy/components/Redirect/Redirect.js +1 -1
  169. package/dist/es-legacy/components/Redirect/Redirect.js.map +1 -1
  170. package/dist/es-legacy/components/Sepa/Sepa.js.map +1 -1
  171. package/dist/es-legacy/components/ThreeDS2/ThreeDS2DeviceFingerprint.js.map +1 -1
  172. package/dist/es-legacy/components/Trustly/Trustly.js +1 -1
  173. package/dist/es-legacy/components/Trustly/Trustly.js.map +1 -1
  174. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js +1 -1
  175. package/dist/es-legacy/components/helpers/IssuerListContainer/IssuerListContainer.js.map +1 -1
  176. package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js +1 -1
  177. package/dist/es-legacy/components/helpers/QRLoaderContainer/QRLoaderContainer.js.map +1 -1
  178. package/dist/es-legacy/components/internal/BaseElement/BaseElement.js.map +1 -1
  179. package/dist/es-legacy/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js +1 -1
  180. package/dist/es-legacy/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.js.map +1 -1
  181. package/dist/es-legacy/components/internal/IbanInput/IbanInput.js +1 -1
  182. package/dist/es-legacy/components/internal/IbanInput/IbanInput.js.map +1 -1
  183. package/dist/es-legacy/components/internal/IbanInput/validate.js +1 -1
  184. package/dist/es-legacy/components/internal/IbanInput/validate.js.map +1 -1
  185. package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js +1 -1
  186. package/dist/es-legacy/components/internal/OpenInvoice/OpenInvoice.js.map +1 -1
  187. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js +1 -1
  188. package/dist/es-legacy/components/internal/PhoneInput/PhoneInputForm.js.map +1 -1
  189. package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js +1 -1
  190. package/dist/es-legacy/components/internal/RedirectButton/RedirectButton.js.map +1 -1
  191. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  192. package/dist/es-legacy/components/internal/UIElement/UIElement.js +1 -1
  193. package/dist/es-legacy/components/internal/UIElement/UIElement.js.map +1 -1
  194. package/dist/es-legacy/components/internal/UIElement/utils.js +1 -1
  195. package/dist/es-legacy/components/internal/UIElement/utils.js.map +1 -1
  196. package/dist/es-legacy/core/config.js +1 -1
  197. package/dist/es-legacy/utils/Validator/Validator.js +1 -1
  198. package/dist/es-legacy/utils/Validator/Validator.js.map +1 -1
  199. package/dist/es-legacy/utils/useForm/reducer.js +1 -1
  200. package/dist/es-legacy/utils/useForm/reducer.js.map +1 -1
  201. package/dist/es-legacy/utils/useForm/useForm.js +1 -1
  202. package/dist/es-legacy/utils/useForm/useForm.js.map +1 -1
  203. package/dist/es-legacy/utils/useForm/useFormWithA11y.js +1 -1
  204. package/dist/es-legacy/utils/useForm/useFormWithA11y.js.map +1 -1
  205. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Sepa.js","sources":["../../../../src/components/Sepa/Sepa.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport IbanInput from '../internal/IbanInput';\nimport { SepaElementData, SepaConfiguration } from './types';\nimport { TxVariants } from '../tx-variants';\nimport FormInstruction from '../internal/FormInstruction';\nimport type { ICore } from '../../core/types';\n\nclass SepaElement extends UIElement<SepaConfiguration> {\n public static readonly type = TxVariants.sepadirectdebit;\n\n constructor(checkout: ICore, props?: SepaConfiguration) {\n super(checkout, props);\n this.state = { ...this.state, ...{ data: { ibanNumber: '', ownerName: '' } } };\n }\n\n /**\n * Formats props on construction time\n */\n formatProps(props: SepaConfiguration): SepaConfiguration & { holderName: boolean } {\n return {\n holderName: true,\n ...props\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData(): SepaElementData {\n return {\n paymentMethod: {\n type: SepaElement.type,\n iban: this.state.data['ibanNumber'],\n ownerName: this.state.data['ownerName']\n }\n };\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 protected override componentToRender(): h.JSX.Element {\n return (\n <Fragment>\n <FormInstruction />\n\n <IbanInput\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n onChange={this.setState}\n payButton={this.payButton}\n />\n </Fragment>\n );\n }\n}\n\nexport default SepaElement;\n"],"names":["SepaElement","UIElement","formatProps","props","holderName","formatData","paymentMethod","type","iban","this","state","data","ownerName","isValid","componentToRender","h","Fragment","FormInstruction","IbanInput","ref","componentRef","onChange","setState","payButton","constructor","checkout","super","ibanNumber","TxVariants","sepadirectdebit"],"mappings":"iTAQA,MAAMA,UAAoBC,EAWtBC,WAAAA,CAAYC,GACR,MAAO,CACHC,YAAY,KACTD,EAEX,CAKAE,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMP,EAAYO,KAClBC,KAAMC,KAAKC,MAAMC,KAAK,WACtBC,UAAWH,KAAKC,MAAMC,KAAK,WAGvC,CAKA,WAAIE,GACA,QAASJ,KAAKC,MAAMG,OACxB,CAEmBC,iBAAAA,GACf,OACIC,EAACC,EAAAA,KACGD,EAACE,EAAAA,MAEDF,EAACG,EAAAA,CACGC,IAAKA,IACDV,KAAKW,aAAeD,MAEpBV,KAAKN,MACTkB,SAAUZ,KAAKa,SACfC,UAAWd,KAAKc,YAIhC,CAlDA,WAAAC,CAAYC,EAAiBtB,GACzBuB,MAAMD,EAAUtB,GAChBM,KAAKC,MAAQ,IAAKD,KAAKC,MAAYC,KAAM,CAAEgB,WAAY,GAAIf,UAAW,IAC1E,cANEZ,IACqBO,SAAOqB,EAAWC"}
1
+ {"version":3,"file":"Sepa.js","sources":["../../../../src/components/Sepa/Sepa.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport IbanInput from '../internal/IbanInput';\nimport { SepaElementData, SepaConfiguration } from './types';\nimport { TxVariants } from '../tx-variants';\nimport FormInstruction from '../internal/FormInstruction';\nimport type { ICore } from '../../core/types';\n\nclass SepaElement extends UIElement<SepaConfiguration> {\n public static readonly type = TxVariants.sepadirectdebit;\n\n constructor(checkout: ICore, props?: SepaConfiguration) {\n super(checkout, props);\n this.state = { ...this.state, ...{ data: { ibanNumber: '', ownerName: '' } } };\n }\n\n /**\n * Formats props on construction time\n */\n formatProps(props) {\n return {\n holderName: true,\n ...props\n };\n }\n\n /**\n * Formats the component data output\n */\n formatData(): SepaElementData {\n return {\n paymentMethod: {\n type: SepaElement.type,\n iban: this.state.data['ibanNumber'],\n ownerName: this.state.data['ownerName']\n }\n };\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 protected override componentToRender(): h.JSX.Element {\n return (\n <Fragment>\n <FormInstruction />\n\n {/* @ts-ignore TODO: add props */}\n <IbanInput\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n onChange={this.setState}\n // onSubmit={this.submit}\n payButton={this.payButton}\n />\n </Fragment>\n );\n }\n}\n\nexport default SepaElement;\n"],"names":["SepaElement","UIElement","formatProps","props","holderName","formatData","paymentMethod","type","iban","this","state","data","ownerName","isValid","componentToRender","h","Fragment","FormInstruction","IbanInput","ref","componentRef","onChange","setState","payButton","constructor","checkout","super","ibanNumber","TxVariants","sepadirectdebit"],"mappings":"iTAQA,MAAMA,UAAoBC,EAWtBC,WAAAA,CAAYC,GACR,MAAO,CACHC,YAAY,KACTD,EAEX,CAKAE,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMP,EAAYO,KAClBC,KAAMC,KAAKC,MAAMC,KAAK,WACtBC,UAAWH,KAAKC,MAAMC,KAAK,WAGvC,CAKA,WAAIE,GACA,QAASJ,KAAKC,MAAMG,OACxB,CAEmBC,iBAAAA,GACf,OACIC,EAACC,EAAAA,KACGD,EAACE,EAAAA,MAGDF,EAACG,EAAAA,CACGC,IAAKA,IACDV,KAAKW,aAAeD,MAEpBV,KAAKN,MACTkB,SAAUZ,KAAKa,SAEfC,UAAWd,KAAKc,YAIhC,CApDA,WAAAC,CAAYC,EAAiBtB,GACzBuB,MAAMD,EAAUtB,GAChBM,KAAKC,MAAQ,IAAKD,KAAKC,MAAYC,KAAM,CAAEgB,WAAY,GAAIf,UAAW,IAC1E,cANEZ,IACqBO,SAAOqB,EAAWC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThreeDS2DeviceFingerprint.js","sources":["../../../../src/components/ThreeDS2/ThreeDS2DeviceFingerprint.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PrepareFingerprint from './components/DeviceFingerprint';\nimport callSubmit3DS2Fingerprint from './callSubmit3DS2Fingerprint';\nimport { existy } from '../../utils/commonUtils';\nimport { TxVariants } from '../tx-variants';\nimport { FingerprintResolveData, ThreeDS2DeviceFingerprintConfiguration } from './types';\nimport AdyenCheckoutError, { API_ERROR } from '../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_FINGERPRINT, THREEDS2_FINGERPRINT_ERROR } from './constants';\nimport { ActionHandledReturnObject } from '../../types/global-types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\nimport { AdditionalDetailsData } from '../../types';\n\nclass ThreeDS2DeviceFingerprint extends UIElement<ThreeDS2DeviceFingerprintConfiguration> {\n public static readonly type = TxVariants.threeDS2Fingerprint;\n\n public static readonly defaultProps = {\n dataKey: 'fingerprintResult',\n type: THREEDS2_FINGERPRINT\n };\n\n private readonly callSubmit3DS2Fingerprint = callSubmit3DS2Fingerprint.bind(this); // New 3DS2 flow\n\n protected override beforeRender() {\n /* Do not send rendered events for ThreeDS2DeviceFingerprint - it will have the same timestamp as the \"threeDSMethodData sent\" event */\n }\n\n protected onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n const event = new AnalyticsLogEvent({\n component: this.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.fingerprintIframeLoaded,\n message: rtnObj.actionDescription\n });\n\n this.submitAnalytics(event);\n\n super.onActionHandled(rtnObj);\n };\n\n /**\n * Can be called directly from PrepareFingerprint (MDFlow) or after the call to /submitThreeDS2Fingerprint endpoint (native flow)\n */\n onComplete(state: FingerprintResolveData) {\n if (this.props.isMDFlow) {\n this.props.on3DS2RedirectFlowComplete?.(state, this.elementRef);\n } else {\n super.onComplete(state as AdditionalDetailsData);\n }\n\n this.unmount(); // re. fixing issue around back to back fingerprinting calls\n }\n\n protected override componentToRender(): h.JSX.Element {\n /**\n * In the regular components (aka \"native\") flow we can't proceed because something has gone wrong with the payment if paymentData is missing from the threeDS2 action.\n * In the MDFlow the paymentData is always present (albeit an empty string, which is why we use 'existy' since we should be allowed to proceed with this)\n */\n if (!existy(this.props.paymentData)) {\n this.props.onError(new AdyenCheckoutError(API_ERROR, `No paymentData received. 3DS2 Fingerprint cannot proceed`));\n\n // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.type,\n code: ErrorEventCode.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Missing 'paymentData' property from threeDS2 action`\n });\n\n this.submitAnalytics(event);\n\n return null;\n }\n\n /**\n * this.props.isMDFlow indicates the action to create this component came from the 3DS2InMDFlow process and upon completion should call the\n * passed onComplete callback (as defined in the 3DS2InMDFlow) instead of the /submitThreeDS2Fingerprint endpoint for the regular, \"native\" flow\n */\n return (\n <PrepareFingerprint\n {...this.props}\n // For MDFlow will bypass the /submitThreeDS2Fingerprint endpoint\n onComplete={this.props.isMDFlow ? this.onComplete : this.callSubmit3DS2Fingerprint}\n onSubmitAnalytics={this.submitAnalytics}\n onActionHandled={this.onActionHandled}\n />\n );\n }\n}\n\nexport default ThreeDS2DeviceFingerprint;\n"],"names":["ThreeDS2DeviceFingerprint","UIElement","beforeRender","onComplete","state","this","props","isMDFlow","on3DS2RedirectFlowComplete","elementRef","super","unmount","componentToRender","existy","paymentData","onError","AdyenCheckoutError","API_ERROR","event","AnalyticsErrorEvent","component","type","code","ErrorEventCode","THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA","errorType","ErrorEventType","threeDS2","message","THREEDS2_FINGERPRINT_ERROR","submitAnalytics","h","PrepareFingerprint","callSubmit3DS2Fingerprint","onSubmitAnalytics","onActionHandled","args","_define_property","bind","rtnObj","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","fingerprintIframeLoaded","actionDescription","TxVariants","threeDS2Fingerprint","defaultProps","dataKey","THREEDS2_FINGERPRINT"],"mappings":"+2BAcA,MAAMA,UAAkCC,EAUjBC,YAAAA,GAEnB,CAkBAC,UAAAA,CAAWC,GACHC,KAAKC,MAAMC,SACXF,KAAKC,MAAME,6BAA6BJ,EAAOC,KAAKI,YAEpDC,MAAMP,WAAWC,GAGrBC,KAAKM,SACT,CAEmBC,iBAAAA,GAKf,IAAKC,EAAOR,KAAKC,MAAMQ,aAAc,CACjCT,KAAKC,MAAMS,QAAQ,IAAIC,EAAmBC,EAAW,6DAGrD,MAAMC,EAAQ,IAAIC,EAAoB,CAClCC,UAAWf,KAAKgB,KAChBC,KAAMC,EAAeC,wCACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,2DAKhB,OAFAxB,KAAKyB,gBAAgBZ,GAEd,IACX,CAMA,OACIa,EAACC,EAAAA,IACO3B,KAAKC,MAETH,WAAYE,KAAKC,MAAMC,SAAWF,KAAKF,WAAaE,KAAK4B,0BACzDC,kBAAmB7B,KAAKyB,gBACxBK,gBAAiB9B,KAAK8B,iBAGlC,mBA1EJzB,SAAA0B,GAQIC,OAAiBJ,4BAA4BA,EAA0BK,KAAKjC,OAM5EgC,EAAAhC,KAAU8B,kBAAmBI,IACzB,MAAMrB,EAAQ,IAAIsB,EAAkB,CAChCpB,UAAWf,KAAKgB,KAChBA,KAAMoB,EAAad,SACnBe,QAASC,EAAgBC,wBACzBhB,QAASW,EAAOM,oBAGpBxC,KAAKyB,gBAAgBZ,GAErBR,MAAMyB,gBAAgBI,MAvB1BF,EADErC,EACqBqB,OAAOyB,EAAWC,qBAEzCV,EAHErC,EAGqBgD,eAAe,CAClCC,QAAS,oBACT5B,KAAM6B"}
1
+ {"version":3,"file":"ThreeDS2DeviceFingerprint.js","sources":["../../../../src/components/ThreeDS2/ThreeDS2DeviceFingerprint.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport PrepareFingerprint from './components/DeviceFingerprint';\nimport callSubmit3DS2Fingerprint from './callSubmit3DS2Fingerprint';\nimport { existy } from '../../utils/commonUtils';\nimport { TxVariants } from '../tx-variants';\nimport { FingerprintResolveData, ThreeDS2DeviceFingerprintConfiguration } from './types';\nimport AdyenCheckoutError, { API_ERROR } from '../../core/Errors/AdyenCheckoutError';\nimport { THREEDS2_FINGERPRINT, THREEDS2_FINGERPRINT_ERROR } from './constants';\nimport { ActionHandledReturnObject } from '../../types/global-types';\nimport { AnalyticsLogEvent, LogEventSubtype, LogEventType } from '../../core/Analytics/events/AnalyticsLogEvent';\nimport { AnalyticsErrorEvent, ErrorEventCode, ErrorEventType } from '../../core/Analytics/events/AnalyticsErrorEvent';\n\nclass ThreeDS2DeviceFingerprint extends UIElement<ThreeDS2DeviceFingerprintConfiguration> {\n public static readonly type = TxVariants.threeDS2Fingerprint;\n\n public static readonly defaultProps = {\n dataKey: 'fingerprintResult',\n type: THREEDS2_FINGERPRINT\n };\n\n private callSubmit3DS2Fingerprint = callSubmit3DS2Fingerprint.bind(this); // New 3DS2 flow\n\n protected override beforeRender() {\n /* Do not send rendered events for ThreeDS2DeviceFingerprint - it will have the same timestamp as the \"threeDSMethodData sent\" event */\n }\n\n protected onActionHandled = (rtnObj: ActionHandledReturnObject) => {\n const event = new AnalyticsLogEvent({\n component: this.type,\n type: LogEventType.threeDS2,\n subType: LogEventSubtype.fingerprintIframeLoaded,\n message: rtnObj.actionDescription\n });\n\n this.submitAnalytics(event);\n\n super.onActionHandled(rtnObj);\n };\n\n /**\n * Can be called directly from PrepareFingerprint (MDFlow) or after the call to /submitThreeDS2Fingerprint endpoint (native flow)\n */\n onComplete(state: FingerprintResolveData) {\n if (this.props.isMDFlow) {\n this.props.on3DS2RedirectFlowComplete?.(state, this.elementRef);\n } else {\n super.onComplete(state);\n }\n\n this.unmount(); // re. fixing issue around back to back fingerprinting calls\n }\n\n protected override componentToRender(): h.JSX.Element {\n /**\n * In the regular components (aka \"native\") flow we can't proceed because something has gone wrong with the payment if paymentData is missing from the threeDS2 action.\n * In the MDFlow the paymentData is always present (albeit an empty string, which is why we use 'existy' since we should be allowed to proceed with this)\n */\n if (!existy(this.props.paymentData)) {\n this.props.onError(new AdyenCheckoutError(API_ERROR, `No paymentData received. 3DS2 Fingerprint cannot proceed`));\n\n // TODO - check logs to see if this *ever* happens\n const event = new AnalyticsErrorEvent({\n component: this.type,\n code: ErrorEventCode.THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA,\n errorType: ErrorEventType.threeDS2,\n message: `${THREEDS2_FINGERPRINT_ERROR}: Missing 'paymentData' property from threeDS2 action`\n });\n\n this.submitAnalytics(event);\n\n return null;\n }\n\n /**\n * this.props.isMDFlow indicates the action to create this component came from the 3DS2InMDFlow process and upon completion should call the\n * passed onComplete callback (as defined in the 3DS2InMDFlow) instead of the /submitThreeDS2Fingerprint endpoint for the regular, \"native\" flow\n */\n return (\n <PrepareFingerprint\n {...this.props}\n // For MDFlow will bypass the /submitThreeDS2Fingerprint endpoint\n onComplete={this.props.isMDFlow ? this.onComplete : this.callSubmit3DS2Fingerprint}\n onSubmitAnalytics={this.submitAnalytics}\n onActionHandled={this.onActionHandled}\n />\n );\n }\n}\n\nexport default ThreeDS2DeviceFingerprint;\n"],"names":["ThreeDS2DeviceFingerprint","UIElement","beforeRender","onComplete","state","this","props","isMDFlow","on3DS2RedirectFlowComplete","elementRef","super","unmount","componentToRender","existy","paymentData","onError","AdyenCheckoutError","API_ERROR","event","AnalyticsErrorEvent","component","type","code","ErrorEventCode","THREEDS2_ACTION_IS_MISSING_PAYMENT_DATA","errorType","ErrorEventType","threeDS2","message","THREEDS2_FINGERPRINT_ERROR","submitAnalytics","h","PrepareFingerprint","callSubmit3DS2Fingerprint","onSubmitAnalytics","onActionHandled","args","_define_property","bind","rtnObj","AnalyticsLogEvent","LogEventType","subType","LogEventSubtype","fingerprintIframeLoaded","actionDescription","TxVariants","threeDS2Fingerprint","defaultProps","dataKey","THREEDS2_FINGERPRINT"],"mappings":"+2BAaA,MAAMA,UAAkCC,EAUjBC,YAAAA,GAEnB,CAkBAC,UAAAA,CAAWC,GACHC,KAAKC,MAAMC,SACXF,KAAKC,MAAME,6BAA6BJ,EAAOC,KAAKI,YAEpDC,MAAMP,WAAWC,GAGrBC,KAAKM,SACT,CAEmBC,iBAAAA,GAKf,IAAKC,EAAOR,KAAKC,MAAMQ,aAAc,CACjCT,KAAKC,MAAMS,QAAQ,IAAIC,EAAmBC,EAAW,6DAGrD,MAAMC,EAAQ,IAAIC,EAAoB,CAClCC,UAAWf,KAAKgB,KAChBC,KAAMC,EAAeC,wCACrBC,UAAWC,EAAeC,SAC1BC,QAAS,GAAGC,2DAKhB,OAFAxB,KAAKyB,gBAAgBZ,GAEd,IACX,CAMA,OACIa,EAACC,EAAAA,IACO3B,KAAKC,MAETH,WAAYE,KAAKC,MAAMC,SAAWF,KAAKF,WAAaE,KAAK4B,0BACzDC,kBAAmB7B,KAAKyB,gBACxBK,gBAAiB9B,KAAK8B,iBAGlC,mBA1EJzB,SAAA0B,GAQIC,OAAQJ,4BAA4BA,EAA0BK,KAAKjC,OAMnEgC,EAAAhC,KAAU8B,kBAAmBI,IACzB,MAAMrB,EAAQ,IAAIsB,EAAkB,CAChCpB,UAAWf,KAAKgB,KAChBA,KAAMoB,EAAad,SACnBe,QAASC,EAAgBC,wBACzBhB,QAASW,EAAOM,oBAGpBxC,KAAKyB,gBAAgBZ,GAErBR,MAAMyB,gBAAgBI,MAvB1BF,EADErC,EACqBqB,OAAOyB,EAAWC,qBAEzCV,EAHErC,EAGqBgD,eAAe,CAClCC,QAAS,oBACT5B,KAAM6B"}
@@ -1,2 +1,2 @@
1
- import{createElement as t,Fragment as e}from"../../external/preact/dist/preact.js";import s from"../Redirect/Redirect.js";import r from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as i}from"../tx-variants.js";class o extends s{get displayName(){return this.props.name||this.constructor.type}componentToRender(){return t(e,null,t("div",{className:"adyen-checkout-trustly"},t("p",{className:"adyen-checkout-trustly__descriptor"},this.props.i18n.get("trustly.descriptor")),t("ul",{className:"adyen-checkout-trustly__description-list"},t("li",null,this.props.i18n.get("trustly.description1")),t("li",null,this.props.i18n.get("trustly.description2")))),this.props.showPayButton&&t(r,{...this.props,showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,setComponentRef:this.setComponentRef}))}}var n,a,p;n=o,a="type",p=i.trustly,a in n?Object.defineProperty(n,a,{value:p,enumerable:!0,configurable:!0,writable:!0}):n[a]=p;export{o as default};
1
+ import{createElement as t,Fragment as e}from"../../external/preact/dist/preact.js";import s from"../Redirect/Redirect.js";import r from"../internal/RedirectButton/RedirectButton.js";import{TxVariants as i}from"../tx-variants.js";class o extends s{get displayName(){return this.props.name||this.constructor.type}componentToRender(){return t(e,null,t("div",{className:"adyen-checkout-trustly"},t("p",{className:"adyen-checkout-trustly__descriptor"},this.props.i18n.get("trustly.descriptor")),t("ul",{className:"adyen-checkout-trustly__description-list"},t("li",null,this.props.i18n.get("trustly.description1")),t("li",null,this.props.i18n.get("trustly.description2")))),this.props.showPayButton&&t(r,{...this.props,showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}}))}}var n,a,p;n=o,a="type",p=i.trustly,a in n?Object.defineProperty(n,a,{value:p,enumerable:!0,configurable:!0,writable:!0}):n[a]=p;export{o as default};
2
2
  //# sourceMappingURL=Trustly.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Trustly.js","sources":["../../../../src/components/Trustly/Trustly.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport RedirectElement from '../Redirect';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport './Trustly.scss';\n\nclass TrustlyElement extends RedirectElement {\n public static override readonly type: TxVariants = TxVariants.trustly;\n\n override get displayName() {\n return this.props.name || this.constructor['type'];\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <Fragment>\n <div className=\"adyen-checkout-trustly\">\n <p className=\"adyen-checkout-trustly__descriptor\">{this.props.i18n.get('trustly.descriptor')}</p>\n <ul className=\"adyen-checkout-trustly__description-list\">\n <li>{this.props.i18n.get('trustly.description1')}</li>\n <li>{this.props.i18n.get('trustly.description2')}</li>\n </ul>\n </div>\n\n {this.props.showPayButton && (\n <RedirectButton\n {...this.props}\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n setComponentRef={this.setComponentRef}\n />\n )}\n </Fragment>\n );\n }\n}\n\nexport default TrustlyElement;\n"],"names":["TrustlyElement","RedirectElement","displayName","this","props","name","constructor","componentToRender","h","Fragment","div","className","p","i18n","get","ul","li","showPayButton","RedirectButton","onSubmit","submit","payButton","setComponentRef","type","TxVariants","trustly"],"mappings":"qOAMA,MAAMA,UAAuBC,EAGzB,eAAaC,GACT,OAAOC,KAAKC,MAAMC,MAAQF,KAAKG,YAAY,IAC/C,CAEmBC,iBAAAA,GACf,OACIC,EAACC,OACGD,EAACE,MAAAA,CAAIC,UAAU,0BACXH,EAACI,IAAAA,CAAED,UAAU,sCAAsCR,KAAKC,MAAMS,KAAKC,IAAI,uBACvEN,EAACO,KAAAA,CAAGJ,UAAU,4CACVH,EAACQ,KAAAA,KAAIb,KAAKC,MAAMS,KAAKC,IAAI,yBACzBN,EAACQ,KAAAA,KAAIb,KAAKC,MAAMS,KAAKC,IAAI,2BAIhCX,KAAKC,MAAMa,eACRT,EAACU,EAAAA,IACOf,KAAKC,MACTa,cAAed,KAAKC,MAAMa,cAC1BZ,KAAMF,KAAKD,YACXiB,SAAUhB,KAAKiB,OACfC,UAAWlB,KAAKkB,UAChBC,gBAAiBnB,KAAKmB,kBAK1C,cA9BEtB,IAC8BuB,SAAmBC,EAAWC"}
1
+ {"version":3,"file":"Trustly.js","sources":["../../../../src/components/Trustly/Trustly.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport RedirectElement from '../Redirect';\nimport RedirectButton from '../internal/RedirectButton';\nimport { TxVariants } from '../tx-variants';\nimport './Trustly.scss';\n\nclass TrustlyElement extends RedirectElement {\n public static override readonly type: TxVariants = TxVariants.trustly;\n\n override get displayName() {\n return this.props.name || this.constructor['type'];\n }\n\n protected override componentToRender(): h.JSX.Element {\n return (\n <Fragment>\n <div className=\"adyen-checkout-trustly\">\n <p className=\"adyen-checkout-trustly__descriptor\">{this.props.i18n.get('trustly.descriptor')}</p>\n <ul className=\"adyen-checkout-trustly__description-list\">\n <li>{this.props.i18n.get('trustly.description1')}</li>\n <li>{this.props.i18n.get('trustly.description2')}</li>\n </ul>\n </div>\n\n {this.props.showPayButton && (\n <RedirectButton\n {...this.props}\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n )}\n </Fragment>\n );\n }\n}\n\nexport default TrustlyElement;\n"],"names":["TrustlyElement","RedirectElement","displayName","this","props","name","constructor","componentToRender","h","Fragment","div","className","p","i18n","get","ul","li","showPayButton","RedirectButton","onSubmit","submit","payButton","ref","componentRef","type","TxVariants","trustly"],"mappings":"qOAMA,MAAMA,UAAuBC,EAGzB,eAAaC,GACT,OAAOC,KAAKC,MAAMC,MAAQF,KAAKG,YAAY,IAC/C,CAEmBC,iBAAAA,GACf,OACIC,EAACC,OACGD,EAACE,MAAAA,CAAIC,UAAU,0BACXH,EAACI,IAAAA,CAAED,UAAU,sCAAsCR,KAAKC,MAAMS,KAAKC,IAAI,uBACvEN,EAACO,KAAAA,CAAGJ,UAAU,4CACVH,EAACQ,KAAAA,KAAIb,KAAKC,MAAMS,KAAKC,IAAI,yBACzBN,EAACQ,KAAAA,KAAIb,KAAKC,MAAMS,KAAKC,IAAI,2BAIhCX,KAAKC,MAAMa,eACRT,EAACU,EAAAA,IACOf,KAAKC,MACTa,cAAed,KAAKC,MAAMa,cAC1BZ,KAAMF,KAAKD,YACXiB,SAAUhB,KAAKiB,OACfC,UAAWlB,KAAKkB,UAChBC,IAAKA,IACDnB,KAAKoB,aAAeD,KAM5C,cAhCEtB,IAC8BwB,SAAmBC,EAAWC"}
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../../external/preact/dist/preact.js";import{UIElement as s}from"../../internal/UIElement/UIElement.js";import e from"../../internal/IssuerList/IssuerList.js";import i from"../../../utils/get-issuer-image.js";import{FALLBACK_CONTEXT as o}from"../../../core/config.js";import r from"../../internal/RedirectButton/RedirectButton.js";class n extends s{formatProps(t){const s=t?.details?.length&&t.details.find(t=>"issuer"===t.key)?.items||t.issuers||[];return{...t,issuers:s}}formatData(){return{paymentMethod:{type:this.type,issuer:this.state?.data?.issuer}}}get isValid(){return 0===this.props.issuers.length||Boolean(this.state?.isValid)}get brands(){return this.props.showPaymentMethodItemImages?this.props.issuers.map(t=>({icon:t.icon,name:t.id})):[]}componentToRender(){return this.props.issuers.length>0?t(e,{items:this.props.issuers,highlightedIds:this.props.highlightedIssuers,...this.props,...this.state,setComponentRef:this.setComponentRef,showImage:this.props.showImage,type:this.constructor.type,onChange:this.setState,onSubmit:this.submit,payButton:this.payButton,contextualText:this.props.i18n.get("issuerList.selectField.contextualText"),onSubmitAnalytics:this.submitAnalytics}):t(r,{showPayButton:this.props.showPayButton,name:this.props.name,...this.props,onSubmit:this.submit,payButton:this.payButton,setComponentRef:this.setComponentRef})}constructor(t,s){super(t,s);const e=t=>this.resources.getImage(t);if(this.props.showImage){const t=i({loadingContext:this.props.loadingContext},this.constructor.type,e);this.props.issuers=this.props.issuers.map(s=>({...s,icon:t(s.id)}))}}}var a,p,h;h={showImage:!0,issuers:[],highlightedIssuers:[],loadingContext:o,showPaymentMethodItemImages:!1},(p="defaultProps")in(a=n)?Object.defineProperty(a,p,{value:h,enumerable:!0,configurable:!0,writable:!0}):a[p]=h;export{n as default};
1
+ import{createElement as t}from"../../../external/preact/dist/preact.js";import{UIElement as s}from"../../internal/UIElement/UIElement.js";import e from"../../internal/IssuerList/IssuerList.js";import i from"../../../utils/get-issuer-image.js";import{FALLBACK_CONTEXT as o}from"../../../core/config.js";import r from"../../internal/RedirectButton/RedirectButton.js";class n extends s{formatProps(t){const s=t?.details?.length&&t.details.find(t=>"issuer"===t.key)?.items||t.issuers||[];return{...t,issuers:s}}formatData(){return{paymentMethod:{type:this.type,issuer:this.state?.data?.issuer}}}get isValid(){return 0===this.props.issuers.length||Boolean(this.state?.isValid)}get brands(){return this.props.showPaymentMethodItemImages?this.props.issuers.map(t=>({icon:t.icon,name:t.id})):[]}componentToRender(){return this.props.issuers.length>0?t(e,{items:this.props.issuers,highlightedIds:this.props.highlightedIssuers,...this.props,...this.state,setComponentRef:this.setComponentRef,showImage:this.props.showImage,type:this.constructor.type,onChange:this.setState,onSubmit:this.submit,payButton:this.payButton,contextualText:this.props.i18n.get("issuerList.selectField.contextualText"),onSubmitAnalytics:this.submitAnalytics}):t(r,{showPayButton:this.props.showPayButton,name:this.props.name,...this.props,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}})}constructor(t,s){super(t,s);const e=t=>this.resources.getImage(t);if(this.props.showImage){const t=i({loadingContext:this.props.loadingContext},this.constructor.type,e);this.props.issuers=this.props.issuers.map(s=>({...s,icon:t(s.id)}))}}}var a,p,h;h={showImage:!0,issuers:[],highlightedIssuers:[],loadingContext:o,showPaymentMethodItemImages:!1},(p="defaultProps")in(a=n)?Object.defineProperty(a,p,{value:h,enumerable:!0,configurable:!0,writable:!0}):a[p]=h;export{n as default};
2
2
  //# sourceMappingURL=IssuerListContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IssuerListContainer.js","sources":["../../../../../src/components/helpers/IssuerListContainer/IssuerListContainer.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../../internal/UIElement/UIElement';\nimport IssuerList from '../../internal/IssuerList';\nimport getIssuerImageUrl from '../../../utils/get-issuer-image';\nimport { FALLBACK_CONTEXT } from '../../../core/config';\nimport RedirectButton from '../../internal/RedirectButton';\nimport { IssuerListConfiguration, IssuerListData } from './types';\nimport type { ICore } from '../../../core/types';\nimport { PaymentData, PaymentMethodBrand } from '../../../types/global-types';\nimport { ImageOptions } from '../../../core/Context/Resources';\n\nclass IssuerListContainer<\n TProps extends IssuerListConfiguration = IssuerListConfiguration,\n TData extends PaymentData = IssuerListData\n> extends UIElement<TProps> {\n protected static readonly defaultProps = {\n showImage: true,\n issuers: [],\n highlightedIssuers: [],\n loadingContext: FALLBACK_CONTEXT,\n showPaymentMethodItemImages: false\n };\n\n constructor(checkout: ICore, props?: TProps) {\n super(checkout, props);\n\n const getImage = (props: ImageOptions) => this.resources.getImage(props);\n\n if (this.props.showImage) {\n const getIssuerIcon = getIssuerImageUrl({ loadingContext: this.props.loadingContext }, this.constructor['type'], getImage);\n\n this.props.issuers = this.props.issuers.map(item => ({\n ...item,\n icon: getIssuerIcon(item.id)\n }));\n }\n }\n\n formatProps(props: TProps): TProps {\n const issuers =\n // @ts-expect-error - details is not in the props type but we need it for backward compatibility\n (props?.details?.length && props.details.find((d: Record<string, unknown>) => d.key === 'issuer')?.items) || props.issuers || [];\n return { ...props, issuers };\n }\n\n /**\n * Formats the component data output\n */\n formatData(): TData {\n return {\n paymentMethod: {\n type: this.type,\n issuer: this.state?.data?.issuer\n }\n } as unknown as TData;\n }\n\n /**\n * Returns whether the component state is valid or not\n */\n get isValid() {\n if (this.props.issuers.length === 0) {\n return true;\n }\n return Boolean(this.state?.isValid);\n }\n\n /**\n * Returns brands array (similar to card) depending on showPaymentMethodItemImages\n * This is used to show the brands in the PaymentMethodItem\n * Requires brands icons to be loaded in the payment method\n */\n get brands(): PaymentMethodBrand[] {\n if (this.props.showPaymentMethodItemImages) {\n return this.props.issuers.map(brand => {\n const brandIcon = brand.icon;\n return { icon: brandIcon, name: brand.id };\n });\n }\n\n return [];\n }\n\n protected override componentToRender(): h.JSX.Element {\n return this.props.issuers.length > 0 ? (\n <IssuerList\n items={this.props.issuers}\n highlightedIds={this.props.highlightedIssuers}\n {...this.props}\n {...this.state}\n setComponentRef={this.setComponentRef}\n showImage={this.props.showImage}\n type={this.constructor['type']}\n onChange={this.setState}\n onSubmit={this.submit}\n payButton={this.payButton}\n contextualText={this.props.i18n.get('issuerList.selectField.contextualText')}\n onSubmitAnalytics={this.submitAnalytics}\n />\n ) : (\n <RedirectButton\n showPayButton={this.props.showPayButton}\n name={this.props.name}\n {...this.props}\n onSubmit={this.submit}\n payButton={this.payButton}\n setComponentRef={this.setComponentRef}\n />\n );\n }\n}\n\nexport default IssuerListContainer;\n"],"names":["IssuerListContainer","UIElement","formatProps","props","issuers","details","length","find","d","key","items","formatData","paymentMethod","type","this","issuer","state","data","isValid","Boolean","brands","showPaymentMethodItemImages","map","brand","icon","name","id","componentToRender","h","IssuerList","highlightedIds","highlightedIssuers","setComponentRef","showImage","constructor","onChange","setState","onSubmit","submit","payButton","contextualText","i18n","get","onSubmitAnalytics","submitAnalytics","RedirectButton","showPayButton","checkout","super","getImage","resources","getIssuerIcon","getIssuerImageUrl","loadingContext","item","FALLBACK_CONTEXT","defaultProps"],"mappings":"6WAWA,MAAMA,UAGIC,EAwBNC,WAAAA,CAAYC,GACR,MAAMC,EAEDD,GAAOE,SAASC,QAAUH,EAAME,QAAQE,KAAMC,GAAyC,WAAVA,EAAEC,MAAmBC,OAAUP,EAAMC,SAAW,GAClI,MAAO,IAAKD,EAAOC,UACvB,CAKAO,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMC,KAAKD,KACXE,OAAQD,KAAKE,OAAOC,MAAMF,QAGtC,CAKA,WAAIG,GACA,OAAkC,IAA9BJ,KAAKX,MAAMC,QAAQE,QAGhBa,QAAQL,KAAKE,OAAOE,QAC/B,CAOA,UAAIE,GACA,OAAIN,KAAKX,MAAMkB,4BACJP,KAAKX,MAAMC,QAAQkB,IAAIC,IAEnB,CAAEC,KADSD,EAAMC,KACEC,KAAMF,EAAMG,MAIvC,EACX,CAEmBC,iBAAAA,GACf,OAAOb,KAAKX,MAAMC,QAAQE,OAAS,EAC/BsB,EAACC,EAAAA,CACGnB,MAAOI,KAAKX,MAAMC,QAClB0B,eAAgBhB,KAAKX,MAAM4B,sBACvBjB,KAAKX,SACLW,KAAKE,MACTgB,gBAAiBlB,KAAKkB,gBACtBC,UAAWnB,KAAKX,MAAM8B,UACtBpB,KAAMC,KAAKoB,YAAY,KACvBC,SAAUrB,KAAKsB,SACfC,SAAUvB,KAAKwB,OACfC,UAAWzB,KAAKyB,UAChBC,eAAgB1B,KAAKX,MAAMsC,KAAKC,IAAI,yCACpCC,kBAAmB7B,KAAK8B,kBAG5BhB,EAACiB,EAAAA,CACGC,cAAehC,KAAKX,MAAM2C,cAC1BrB,KAAMX,KAAKX,MAAMsB,QACbX,KAAKX,MACTkC,SAAUvB,KAAKwB,OACfC,UAAWzB,KAAKyB,UAChBP,gBAAiBlB,KAAKkB,iBAGlC,CAtFA,WAAAE,CAAYa,EAAiB5C,GACzB6C,MAAMD,EAAU5C,GAEhB,MAAM8C,EAAY9C,GAAwBW,KAAKoC,UAAUD,SAAS9C,GAElE,GAAIW,KAAKX,MAAM8B,UAAW,CACtB,MAAMkB,EAAgBC,EAAkB,CAAEC,eAAgBvC,KAAKX,MAAMkD,gBAAkBvC,KAAKoB,iBAAqBe,GAEjHnC,KAAKX,MAAMC,QAAUU,KAAKX,MAAMC,QAAQkB,IAAIgC,QACrCA,EACH9B,KAAM2B,EAAcG,EAAK5B,MAEjC,CACJ,cArByC,CACrCO,WAAW,EACX7B,QAAS,GACT2B,mBAAoB,GACpBsB,eAAgBE,EAChBlC,6BAA6B,MALPmC,oBAJxBxD"}
1
+ {"version":3,"file":"IssuerListContainer.js","sources":["../../../../../src/components/helpers/IssuerListContainer/IssuerListContainer.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../../internal/UIElement/UIElement';\nimport IssuerList from '../../internal/IssuerList';\nimport getIssuerImageUrl from '../../../utils/get-issuer-image';\nimport { FALLBACK_CONTEXT } from '../../../core/config';\nimport RedirectButton from '../../internal/RedirectButton';\nimport { IssuerListConfiguration, IssuerListData } from './types';\nimport type { ICore } from '../../../core/types';\nimport { PaymentMethodBrand } from '../../../types/global-types';\nimport { ImageOptions } from '../../../core/Context/Resources';\n\nclass IssuerListContainer<TProps extends IssuerListConfiguration = IssuerListConfiguration, TData = IssuerListData> extends UIElement<TProps> {\n protected static readonly defaultProps = {\n showImage: true,\n issuers: [],\n highlightedIssuers: [],\n loadingContext: FALLBACK_CONTEXT,\n showPaymentMethodItemImages: false\n };\n\n constructor(checkout: ICore, props?: TProps) {\n super(checkout, props);\n\n const getImage = (props: ImageOptions) => this.resources.getImage(props);\n\n if (this.props.showImage) {\n const getIssuerIcon = getIssuerImageUrl({ loadingContext: this.props.loadingContext }, this.constructor['type'], getImage);\n\n this.props.issuers = this.props.issuers.map(item => ({\n ...item,\n icon: getIssuerIcon(item.id)\n }));\n }\n }\n\n formatProps(props: TProps): TProps {\n const issuers =\n // @ts-expect-error - details is not in the props type but we need it for backward compatibility\n (props?.details?.length && props.details.find((d: Record<string, unknown>) => d.key === 'issuer')?.items) || props.issuers || [];\n return { ...props, issuers };\n }\n\n /**\n * Formats the component data output\n */\n formatData(): TData {\n return {\n paymentMethod: {\n type: this.type,\n issuer: this.state?.data?.issuer\n }\n } as TData;\n }\n\n /**\n * Returns whether the component state is valid or not\n */\n get isValid() {\n if (this.props.issuers.length === 0) {\n return true;\n }\n return Boolean(this.state?.isValid);\n }\n\n /**\n * Returns brands array (similar to card) depending on showPaymentMethodItemImages\n * This is used to show the brands in the PaymentMethodItem\n * Requires brands icons to be loaded in the payment method\n */\n get brands(): PaymentMethodBrand[] {\n if (this.props.showPaymentMethodItemImages) {\n return this.props.issuers.map(brand => {\n const brandIcon = brand.icon;\n return { icon: brandIcon, name: brand.id };\n });\n }\n\n return [];\n }\n\n protected override componentToRender(): h.JSX.Element {\n return this.props.issuers.length > 0 ? (\n <IssuerList\n items={this.props.issuers}\n highlightedIds={this.props.highlightedIssuers}\n {...this.props}\n {...this.state}\n setComponentRef={this.setComponentRef}\n showImage={this.props.showImage}\n type={this.constructor['type']}\n onChange={this.setState}\n onSubmit={this.submit}\n payButton={this.payButton}\n contextualText={this.props.i18n.get('issuerList.selectField.contextualText')}\n onSubmitAnalytics={this.submitAnalytics}\n />\n ) : (\n <RedirectButton\n showPayButton={this.props.showPayButton}\n name={this.props.name}\n {...this.props}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n );\n }\n}\n\nexport default IssuerListContainer;\n"],"names":["IssuerListContainer","UIElement","formatProps","props","issuers","details","length","find","d","key","items","formatData","paymentMethod","type","this","issuer","state","data","isValid","Boolean","brands","showPaymentMethodItemImages","map","brand","icon","name","id","componentToRender","h","IssuerList","highlightedIds","highlightedIssuers","setComponentRef","showImage","constructor","onChange","setState","onSubmit","submit","payButton","contextualText","i18n","get","onSubmitAnalytics","submitAnalytics","RedirectButton","showPayButton","ref","componentRef","checkout","super","getImage","resources","getIssuerIcon","getIssuerImageUrl","loadingContext","item","FALLBACK_CONTEXT","defaultProps"],"mappings":"6WAWA,MAAMA,UAAsHC,EAwBxHC,WAAAA,CAAYC,GACR,MAAMC,EAEDD,GAAOE,SAASC,QAAUH,EAAME,QAAQE,KAAMC,GAAyC,WAAVA,EAAEC,MAAmBC,OAAUP,EAAMC,SAAW,GAClI,MAAO,IAAKD,EAAOC,UACvB,CAKAO,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMC,KAAKD,KACXE,OAAQD,KAAKE,OAAOC,MAAMF,QAGtC,CAKA,WAAIG,GACA,OAAkC,IAA9BJ,KAAKX,MAAMC,QAAQE,QAGhBa,QAAQL,KAAKE,OAAOE,QAC/B,CAOA,UAAIE,GACA,OAAIN,KAAKX,MAAMkB,4BACJP,KAAKX,MAAMC,QAAQkB,IAAIC,IAEnB,CAAEC,KADSD,EAAMC,KACEC,KAAMF,EAAMG,MAIvC,EACX,CAEmBC,iBAAAA,GACf,OAAOb,KAAKX,MAAMC,QAAQE,OAAS,EAC/BsB,EAACC,EAAAA,CACGnB,MAAOI,KAAKX,MAAMC,QAClB0B,eAAgBhB,KAAKX,MAAM4B,sBACvBjB,KAAKX,SACLW,KAAKE,MACTgB,gBAAiBlB,KAAKkB,gBACtBC,UAAWnB,KAAKX,MAAM8B,UACtBpB,KAAMC,KAAKoB,YAAY,KACvBC,SAAUrB,KAAKsB,SACfC,SAAUvB,KAAKwB,OACfC,UAAWzB,KAAKyB,UAChBC,eAAgB1B,KAAKX,MAAMsC,KAAKC,IAAI,yCACpCC,kBAAmB7B,KAAK8B,kBAG5BhB,EAACiB,EAAAA,CACGC,cAAehC,KAAKX,MAAM2C,cAC1BrB,KAAMX,KAAKX,MAAMsB,QACbX,KAAKX,MACTkC,SAAUvB,KAAKwB,OACfC,UAAWzB,KAAKyB,UAChBQ,IAAKA,IACDjC,KAAKkC,aAAeD,IAIpC,CAxFA,WAAAb,CAAYe,EAAiB9C,GACzB+C,MAAMD,EAAU9C,GAEhB,MAAMgD,EAAYhD,GAAwBW,KAAKsC,UAAUD,SAAShD,GAElE,GAAIW,KAAKX,MAAM8B,UAAW,CACtB,MAAMoB,EAAgBC,EAAkB,CAAEC,eAAgBzC,KAAKX,MAAMoD,gBAAkBzC,KAAKoB,iBAAqBiB,GAEjHrC,KAAKX,MAAMC,QAAUU,KAAKX,MAAMC,QAAQkB,IAAIkC,QACrCA,EACHhC,KAAM6B,EAAcG,EAAK9B,MAEjC,CACJ,cArByC,CACrCO,WAAW,EACX7B,QAAS,GACT2B,mBAAoB,GACpBwB,eAAgBE,EAChBpC,6BAA6B,MALPqC,oBADxB1D"}
@@ -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{QRLoader as o}from"../../internal/QRLoader/QRLoader.js";import"../../../core/Context/CoreProvider.js";import"../../../external/preact/hooks/dist/hooks.js";import"../../../core/Errors/SRPanelContext.js";import"../../internal/Button/Button.js";import"../../internal/QRLoader/QRLoaderDetailsProvider.js";import r from"../../internal/RedirectButton/RedirectButton.js";class n extends e{formatData(){return{paymentMethod:{type:this.type,...this.state.data}}}get isValid(){return!0}renderQRCode(){return t(o,{...this.props,delay:this.props.delay,countdownTime:this.props.countdownTime,instructions:this.props.instructions,type:this.constructor.type,brandLogo:this.props.brandLogo||this.icon,onComplete:this.onComplete,onActionHandled:this.onActionHandled,brandName:this.displayName,onSubmitAnalytics:this.submitAnalytics})}componentToRender(){return this.props.paymentData?this.renderQRCode():this.props.showPayButton?t(r,{showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,setComponentRef:this.setComponentRef}):null}}var s,i,a;a={qrCodeImage:"",amount:null,paymentData:null,onError:()=>{}},(i="defaultProps")in(s=n)?Object.defineProperty(s,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):s[i]=a;export{n as default};
1
+ import{createElement as t}from"../../../external/preact/dist/preact.js";import{UIElement as e}from"../../internal/UIElement/UIElement.js";import{QRLoader as o}from"../../internal/QRLoader/QRLoader.js";import"../../../core/Context/CoreProvider.js";import"../../../external/preact/hooks/dist/hooks.js";import"../../../core/Errors/SRPanelContext.js";import"../../internal/Button/Button.js";import"../../internal/QRLoader/QRLoaderDetailsProvider.js";import r from"../../internal/RedirectButton/RedirectButton.js";class n extends e{formatData(){return{paymentMethod:{type:this.type,...this.state.data}}}get isValid(){return!0}renderQRCode(){return t(o,{...this.props,delay:this.props.delay,countdownTime:this.props.countdownTime,instructions:this.props.instructions,type:this.constructor.type,brandLogo:this.props.brandLogo||this.icon,onComplete:this.onComplete,onActionHandled:this.onActionHandled,brandName:this.displayName,onSubmitAnalytics:this.submitAnalytics})}componentToRender(){return this.props.paymentData?this.renderQRCode():this.props.showPayButton?t(r,{showPayButton:this.props.showPayButton,name:this.displayName,onSubmit:this.submit,payButton:this.payButton,ref:t=>{this.componentRef=t}}):null}}var s,i,a;a={qrCodeImage:"",amount:null,paymentData:null,onError:()=>{}},(i="defaultProps")in(s=n)?Object.defineProperty(s,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):s[i]=a;export{n as default};
2
2
  //# sourceMappingURL=QRLoaderContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"QRLoaderContainer.js","sources":["../../../../../src/components/helpers/QRLoaderContainer/QRLoaderContainer.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../../internal/UIElement/UIElement';\nimport { QRLoader } from '../../internal/QRLoader';\nimport RedirectButton from '../../internal/RedirectButton';\nimport { QRLoaderConfiguration } from './types';\n\nclass QRLoaderContainer<T extends QRLoaderConfiguration = QRLoaderConfiguration> extends UIElement<T> {\n // Using the generic here allow to fully extend the QRLoaderContainer (including it's props)\n protected static readonly defaultProps = {\n qrCodeImage: '',\n amount: null,\n paymentData: null,\n onError: () => {}\n };\n\n formatData() {\n return {\n paymentMethod: {\n type: this.type,\n ...this.state.data\n }\n };\n }\n\n get isValid() {\n return true;\n }\n\n // Makes possible to extend the final QR code step\n public renderQRCode() {\n return (\n <QRLoader\n {...this.props}\n delay={this.props.delay}\n countdownTime={this.props.countdownTime}\n instructions={this.props.instructions}\n type={this.constructor['type']}\n brandLogo={this.props.brandLogo || this.icon}\n onComplete={this.onComplete}\n onActionHandled={this.onActionHandled}\n brandName={this.displayName}\n onSubmitAnalytics={this.submitAnalytics}\n />\n );\n }\n\n protected override componentToRender(): h.JSX.Element {\n if (this.props.paymentData) {\n return this.renderQRCode();\n }\n\n if (this.props.showPayButton) {\n return (\n <RedirectButton\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n setComponentRef={this.setComponentRef}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default QRLoaderContainer;\n"],"names":["QRLoaderContainer","UIElement","formatData","paymentMethod","type","this","state","data","isValid","renderQRCode","h","QRLoader","props","delay","countdownTime","instructions","constructor","brandLogo","icon","onComplete","onActionHandled","brandName","displayName","onSubmitAnalytics","submitAnalytics","componentToRender","paymentData","showPayButton","RedirectButton","name","onSubmit","submit","payButton","setComponentRef","qrCodeImage","amount","onError","defaultProps"],"mappings":"6fAMA,MAAMA,UAAmFC,EASrFC,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMC,KAAKD,QACRC,KAAKC,MAAMC,MAG1B,CAEA,WAAIC,GACA,OAAO,CACX,CAGOC,YAAAA,GACH,OACIC,EAACC,EAAAA,IACON,KAAKO,MACTC,MAAOR,KAAKO,MAAMC,MAClBC,cAAeT,KAAKO,MAAME,cAC1BC,aAAcV,KAAKO,MAAMG,aACzBX,KAAMC,KAAKW,YAAY,KACvBC,UAAWZ,KAAKO,MAAMK,WAAaZ,KAAKa,KACxCC,WAAYd,KAAKc,WACjBC,gBAAiBf,KAAKe,gBACtBC,UAAWhB,KAAKiB,YAChBC,kBAAmBlB,KAAKmB,iBAGpC,CAEmBC,iBAAAA,GACf,OAAIpB,KAAKO,MAAMc,YACJrB,KAAKI,eAGZJ,KAAKO,MAAMe,cAEPjB,EAACkB,EAAAA,CACGD,cAAetB,KAAKO,MAAMe,cAC1BE,KAAMxB,KAAKiB,YACXQ,SAAUzB,KAAK0B,OACfC,UAAW3B,KAAK2B,UAChBC,gBAAiB5B,KAAK4B,kBAK3B,IACX,cAxDyC,CACrCC,YAAa,GACbC,OAAQ,KACRT,YAAa,KACbU,QAAS,WAJaC,oBAFxBrC"}
1
+ {"version":3,"file":"QRLoaderContainer.js","sources":["../../../../../src/components/helpers/QRLoaderContainer/QRLoaderContainer.tsx"],"sourcesContent":["import { h } from 'preact';\nimport UIElement from '../../internal/UIElement/UIElement';\nimport { QRLoader } from '../../internal/QRLoader';\nimport RedirectButton from '../../internal/RedirectButton';\nimport { QRLoaderConfiguration } from './types';\n\nclass QRLoaderContainer<T extends QRLoaderConfiguration = QRLoaderConfiguration> extends UIElement<T> {\n // Using the generic here allow to fully extend the QRLoaderContainer (including it's props)\n protected static readonly defaultProps = {\n qrCodeImage: '',\n amount: null,\n paymentData: null,\n onError: () => {}\n };\n\n formatData() {\n return {\n paymentMethod: {\n type: this.type,\n ...this.state.data\n }\n };\n }\n\n get isValid() {\n return true;\n }\n\n // Makes possible to extend the final QR code step\n public renderQRCode() {\n return (\n <QRLoader\n {...this.props}\n delay={this.props.delay}\n countdownTime={this.props.countdownTime}\n instructions={this.props.instructions}\n type={this.constructor['type']}\n brandLogo={this.props.brandLogo || this.icon}\n onComplete={this.onComplete}\n onActionHandled={this.onActionHandled}\n brandName={this.displayName}\n onSubmitAnalytics={this.submitAnalytics}\n />\n );\n }\n\n protected override componentToRender(): h.JSX.Element {\n if (this.props.paymentData) {\n return this.renderQRCode();\n }\n\n if (this.props.showPayButton) {\n return (\n <RedirectButton\n showPayButton={this.props.showPayButton}\n name={this.displayName}\n onSubmit={this.submit}\n payButton={this.payButton}\n ref={ref => {\n this.componentRef = ref;\n }}\n />\n );\n }\n\n return null;\n }\n}\n\nexport default QRLoaderContainer;\n"],"names":["QRLoaderContainer","UIElement","formatData","paymentMethod","type","this","state","data","isValid","renderQRCode","h","QRLoader","props","delay","countdownTime","instructions","constructor","brandLogo","icon","onComplete","onActionHandled","brandName","displayName","onSubmitAnalytics","submitAnalytics","componentToRender","paymentData","showPayButton","RedirectButton","name","onSubmit","submit","payButton","ref","componentRef","qrCodeImage","amount","onError","defaultProps"],"mappings":"6fAMA,MAAMA,UAAmFC,EASrFC,UAAAA,GACI,MAAO,CACHC,cAAe,CACXC,KAAMC,KAAKD,QACRC,KAAKC,MAAMC,MAG1B,CAEA,WAAIC,GACA,OAAO,CACX,CAGOC,YAAAA,GACH,OACIC,EAACC,EAAAA,IACON,KAAKO,MACTC,MAAOR,KAAKO,MAAMC,MAClBC,cAAeT,KAAKO,MAAME,cAC1BC,aAAcV,KAAKO,MAAMG,aACzBX,KAAMC,KAAKW,YAAY,KACvBC,UAAWZ,KAAKO,MAAMK,WAAaZ,KAAKa,KACxCC,WAAYd,KAAKc,WACjBC,gBAAiBf,KAAKe,gBACtBC,UAAWhB,KAAKiB,YAChBC,kBAAmBlB,KAAKmB,iBAGpC,CAEmBC,iBAAAA,GACf,OAAIpB,KAAKO,MAAMc,YACJrB,KAAKI,eAGZJ,KAAKO,MAAMe,cAEPjB,EAACkB,EAAAA,CACGD,cAAetB,KAAKO,MAAMe,cAC1BE,KAAMxB,KAAKiB,YACXQ,SAAUzB,KAAK0B,OACfC,UAAW3B,KAAK2B,UAChBC,IAAKA,IACD5B,KAAK6B,aAAeD,KAM7B,IACX,cA1DyC,CACrCE,YAAa,GACbC,OAAQ,KACRV,YAAa,KACbW,QAAS,WAJaC,oBAFxBtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"BaseElement.js","sources":["../../../../../src/components/internal/BaseElement/BaseElement.ts"],"sourcesContent":["import { ComponentChild, h, render, TargetedKeyboardEvent } from 'preact';\nimport uuid from '../../../utils/uuid';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport { NO_CHECKOUT_ATTEMPT_ID } from '../../../core/Analytics/constants';\nimport type { ICore } from '../../../core/types';\nimport type { BaseElementProps, BaseElementState, IBaseElement } from './types';\nimport type { PaymentData } from '../../../types/global-types';\nimport { off, on } from '../../../utils/listenerUtils';\nimport { AbstractAnalyticsEvent } from '../../../core/Analytics/events/AbstractAnalyticsEvent';\nimport { createSdkData } from '../../../utils/createSdkData';\nimport getComponentNameOfPaymentType from '../../components-name-map';\nimport { PAYMENT_METHOD_BEHAVIOR } from '../../../core/config';\n\n/**\n * Verify if the first parameter is instance of Core.\n * We do not use 'instanceof' to avoid importing the Core class directly into this class.\n * @param checkout\n */\nfunction assertIsCoreInstance(checkout: ICore): checkout is ICore {\n if (!checkout) return false;\n const isCoreObject = typeof checkout.initialize === 'function' && typeof checkout.createFromAction === 'function';\n return isCoreObject;\n}\n\nabstract class BaseElement<P extends BaseElementProps, S extends BaseElementState = BaseElementState> implements IBaseElement<P> {\n public readonly _id = `${this.constructor['type']}-${uuid()}`;\n public readonly core: ICore;\n\n public props: P;\n public state: S = {} as S;\n public _component: ComponentChild | undefined;\n\n protected _node: HTMLElement = null;\n\n protected static readonly defaultProps = {};\n\n constructor(checkout: ICore, props?: P) {\n const isCoreInstance = assertIsCoreInstance(checkout);\n\n if (!isCoreInstance) {\n throw new AdyenCheckoutError(\n 'IMPLEMENTATION_ERROR',\n `Trying to initialise the component '${this.constructor['type']}' without a reference to an instance of AdyenCheckout`\n );\n }\n\n this.core = checkout;\n this.buildElementProps(props);\n\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n protected buildElementProps(componentProps?: P) {\n this.props = this.formatProps({ ...this.constructor['defaultProps'], ...componentProps });\n }\n\n /**\n * Executed during creation of any payment element.\n * Gives a chance to any paymentMethod to format the props we're receiving.\n */\n protected formatProps(props: P) {\n return props;\n }\n\n /**\n * Executed on the `data` getter.\n * Returns the component data necessary for the /payments request\n */\n protected formatData(): PaymentData {\n return {} as PaymentData;\n }\n\n protected submitAnalytics(_analyticsObj?: AbstractAnalyticsEvent) {\n return null;\n }\n\n protected handleKeyDown(_e: TargetedKeyboardEvent<HTMLInputElement>) {\n return null;\n }\n\n protected setState(newState: S): void {\n this.state = { ...this.state, ...newState };\n }\n\n /**\n * Returns the component payment data ready to submit to the Checkout API\n * Note: this does not ensure validity, check isValid first\n */\n public get data(): PaymentData {\n const order = this.state.order || this.props.order;\n const componentData = this.formatData();\n const doesPaymentMethodHaveNativeComponent = Boolean(getComponentNameOfPaymentType(componentData.paymentMethod?.type));\n const clientData = this.core.modules.risk.data;\n const checkoutAttemptId = this.core.modules.analytics.checkoutAttemptId ?? NO_CHECKOUT_ATTEMPT_ID;\n const paymentMethodBehavior = doesPaymentMethodHaveNativeComponent ? PAYMENT_METHOD_BEHAVIOR.NATIVE : PAYMENT_METHOD_BEHAVIOR.GENERIC;\n\n const sdkData = createSdkData(checkoutAttemptId, clientData, paymentMethodBehavior);\n if (componentData.paymentMethod && checkoutAttemptId) {\n componentData.paymentMethod.checkoutAttemptId = checkoutAttemptId;\n }\n\n if (componentData.paymentMethod && sdkData) {\n componentData.paymentMethod.sdkData = sdkData;\n }\n\n return {\n ...(clientData && { riskData: { clientData } }),\n ...(order && { order: { orderData: order.orderData, pspReference: order.pspReference } }),\n ...componentData,\n clientStateDataIndicator: true\n };\n }\n\n /**\n * Method used to make the payment method active\n * (Useful when there are different payment methods available and activating one PM must trigger a specific task)\n */\n public activate(): void {\n return;\n }\n\n public render(): ComponentChild | Error {\n // render() not implemented in the element\n throw new Error('Payment method cannot be rendered.');\n }\n\n /**\n * Mounts an element into the dom\n * @param domNode - Node (or selector) where we will mount the payment element\n * @returns this - the payment element instance we mounted\n */\n public mount(domNode: HTMLElement | string): this {\n const node = typeof domNode === 'string' ? document.querySelector<HTMLElement>(domNode) : domNode;\n\n if (!node) {\n throw new Error('Component could not mount. Root node was not found.');\n }\n\n if (this._node) {\n this.unmount(); // new, if this._node exists then we are \"remounting\" so we first need to unmount if it's not already been done\n }\n\n this._node = node;\n\n // Add listener for key down events, notably 'Enter' key presses\n on(this._node, 'keydown', this.handleKeyDown, false);\n\n this._component = this.render();\n\n render(this._component, node);\n\n return this;\n }\n\n /**\n * Updates props, resets the internal state and remounts the element.\n *\n * @param props - props to update\n * @returns this - the element instance\n */\n public update(props: Partial<P>): this {\n this.props = this.formatProps({ ...this.props, ...props });\n this.state = {} as S;\n\n return this.unmount().mount(this._node); // for new mount fny\n }\n\n /**\n * Unmounts a payment element from the DOM\n */\n public unmount(): this {\n // Remove listener\n off(this._node, 'keydown', this.handleKeyDown);\n\n if (this._node) {\n render(null, this._node);\n }\n\n return this;\n }\n\n /**\n * Unmounts an element and removes it from the parent instance\n * For \"destroy\" type cleanup - when you don't intend to use the component again\n */\n public remove() {\n this.unmount();\n\n if (this.core) {\n this.core.remove(this);\n }\n }\n}\n\nexport default BaseElement;\n"],"names":["BaseElement","buildElementProps","componentProps","this","props","formatProps","constructor","formatData","submitAnalytics","_analyticsObj","handleKeyDown","_e","setState","newState","state","data","order","componentData","doesPaymentMethodHaveNativeComponent","Boolean","getComponentNameOfPaymentType","paymentMethod","type","clientData","core","modules","risk","checkoutAttemptId","analytics","NO_CHECKOUT_ATTEMPT_ID","paymentMethodBehavior","PAYMENT_METHOD_BEHAVIOR","NATIVE","GENERIC","sdkData","createSdkData","riskData","orderData","pspReference","clientStateDataIndicator","activate","render","Error","mount","domNode","node","document","querySelector","_node","unmount","on","_component","update","off","remove","checkout","_define_property","_id","uuid","isCoreInstance","initialize","createFromAction","assertIsCoreInstance","AdyenCheckoutError","bind","defaultProps"],"mappings":"mlBAwBA,MAAeA,EA4BDC,iBAAAA,CAAkBC,GACxBC,KAAKC,MAAQD,KAAKE,YAAY,IAAKF,KAAKG,YAAY,gBAAoBJ,GAC5E,CAMUG,WAAAA,CAAYD,GAClB,OAAOA,CACX,CAMA,UAAAG,GACI,MAAO,CAAA,CACX,CAEUC,eAAAA,CAAgBC,GACtB,OAAO,IACX,CAEUC,aAAAA,CAAcC,GACpB,OAAO,IACX,CAEUC,QAAAA,CAASC,GACfV,KAAKW,MAAQ,IAAKX,KAAKW,SAAUD,EACrC,CAMA,QAAWE,GACP,MAAMC,EAAQb,KAAKW,MAAME,OAASb,KAAKC,MAAMY,MACvCC,EAAgBd,KAAKI,aACrBW,EAAuCC,QAAQC,EAA8BH,EAAcI,eAAeC,OAC1GC,EAAapB,KAAKqB,KAAKC,QAAQC,KAAKX,KACpCY,EAAoBxB,KAAKqB,KAAKC,QAAQG,UAAUD,mBAAqBE,EACrEC,EAAwBZ,EAAuCa,EAAwBC,OAASD,EAAwBE,QAExHC,EAAUC,EAAcR,EAAmBJ,EAAYO,GAS7D,OARIb,EAAcI,eAAiBM,IAC/BV,EAAcI,cAAcM,kBAAoBA,GAGhDV,EAAcI,eAAiBa,IAC/BjB,EAAcI,cAAca,QAAUA,GAGnC,IACCX,GAAc,CAAEa,SAAU,CAAEb,kBAC5BP,GAAS,CAAEA,MAAO,CAAEqB,UAAWrB,EAAMqB,UAAWC,aAActB,EAAMsB,kBACrErB,EACHsB,0BAA0B,EAElC,CAMA,QAAAC,GAEA,CAEOC,MAAAA,GAEH,MAAM,IAAIC,MAAM,qCACpB,CAOOC,KAAAA,CAAMC,GACT,MAAMC,EAA0B,iBAAZD,EAAuBE,SAASC,cAA2BH,GAAWA,EAE1F,IAAKC,EACD,MAAM,IAAIH,MAAM,uDAgBpB,OAbIvC,KAAK6C,OACL7C,KAAK8C,UAGT9C,KAAK6C,MAAQH,EAGbK,EAAG/C,KAAK6C,MAAO,UAAW7C,KAAKO,eAAe,GAE9CP,KAAKgD,WAAahD,KAAKsC,SAEvBA,EAAOtC,KAAKgD,WAAYN,GAEjB1C,IACX,CAQOiD,MAAAA,CAAOhD,GAIV,OAHAD,KAAKC,MAAQD,KAAKE,YAAY,IAAKF,KAAKC,SAAUA,IAClDD,KAAKW,MAAQ,CAAA,EAENX,KAAK8C,UAAUN,MAAMxC,KAAK6C,MACrC,CAKA,OAAAC,GAQI,OANAI,EAAIlD,KAAK6C,MAAO,UAAW7C,KAAKO,eAE5BP,KAAK6C,OACLP,EAAO,KAAMtC,KAAK6C,OAGf7C,IACX,CAMA,MAAAmD,GACInD,KAAK8C,UAED9C,KAAKqB,MACLrB,KAAKqB,KAAK8B,OAAOnD,KAEzB,CA3JA,WAAAG,CAAYiD,EAAiBnD,GAX7BoD,EAAArD,KAAgBsD,MAAM,GAAGtD,KAAKG,YAAY,QAAWoD,OACrDF,EAAArD,KAAgBqB,eAEhBgC,EAAArD,KAAOC,gBACPoD,EAAArD,KAAOW,QAAW,IAClB0C,EAAArD,KAAOgD,qBAEPK,EAAArD,KAAU6C,QAAqB,MAK3B,MAAMW,EAnBd,SAA8BJ,GAC1B,QAAKA,IAC+C,mBAAxBA,EAASK,YAAkE,mBAA9BL,EAASM,iBAEtF,CAe+BC,CAAqBP,GAE5C,IAAKI,EACD,MAAM,IAAII,EACN,uBACA,uCAAuC5D,KAAKG,YAAY,6DAIhEH,KAAKqB,KAAO+B,EACZpD,KAAKF,kBAAkBG,GAEvBD,KAAKO,cAAgBP,KAAKO,cAAcsD,KAAK7D,KACjD,EAhBAqD,EAVWxD,EAUeiE,eAAe"}
1
+ {"version":3,"file":"BaseElement.js","sources":["../../../../../src/components/internal/BaseElement/BaseElement.ts"],"sourcesContent":["import { ComponentChild, h, render, TargetedKeyboardEvent } from 'preact';\nimport uuid from '../../../utils/uuid';\nimport AdyenCheckoutError from '../../../core/Errors/AdyenCheckoutError';\nimport { NO_CHECKOUT_ATTEMPT_ID } from '../../../core/Analytics/constants';\nimport type { ICore } from '../../../core/types';\nimport type { BaseElementProps, IBaseElement } from './types';\nimport type { PaymentData } from '../../../types/global-types';\nimport { off, on } from '../../../utils/listenerUtils';\nimport { AbstractAnalyticsEvent } from '../../../core/Analytics/events/AbstractAnalyticsEvent';\nimport { createSdkData } from '../../../utils/createSdkData';\nimport getComponentNameOfPaymentType from '../../components-name-map';\nimport { PAYMENT_METHOD_BEHAVIOR } from '../../../core/config';\n\n/**\n * Verify if the first parameter is instance of Core.\n * We do not use 'instanceof' to avoid importing the Core class directly into this class.\n * @param checkout\n */\nfunction assertIsCoreInstance(checkout: ICore): checkout is ICore {\n if (!checkout) return false;\n const isCoreObject = typeof checkout.initialize === 'function' && typeof checkout.createFromAction === 'function';\n return isCoreObject;\n}\n\nabstract class BaseElement<P extends BaseElementProps> implements IBaseElement {\n public readonly _id = `${this.constructor['type']}-${uuid()}`;\n public readonly core: ICore;\n\n public props: P;\n public state: any = {};\n public _component;\n\n protected _node: HTMLElement = null;\n\n protected static readonly defaultProps = {};\n\n constructor(checkout: ICore, props?: P) {\n const isCoreInstance = assertIsCoreInstance(checkout);\n\n if (!isCoreInstance) {\n throw new AdyenCheckoutError(\n 'IMPLEMENTATION_ERROR',\n `Trying to initialise the component '${this.constructor['type']}' without a reference to an instance of AdyenCheckout`\n );\n }\n\n this.core = checkout;\n this.buildElementProps(props);\n\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n protected buildElementProps(componentProps?: P) {\n this.props = this.formatProps({ ...this.constructor['defaultProps'], ...componentProps });\n }\n\n /**\n * Executed during creation of any payment element.\n * Gives a chance to any paymentMethod to format the props we're receiving.\n */\n protected formatProps(props: P) {\n return props;\n }\n\n /**\n * Executed on the `data` getter.\n * Returns the component data necessary for the /payments request\n */\n protected formatData(): any {\n return {};\n }\n\n protected submitAnalytics(_analyticsObj?: AbstractAnalyticsEvent) {\n return null;\n }\n\n protected handleKeyDown(_e: TargetedKeyboardEvent<HTMLInputElement>) {\n return null;\n }\n\n protected setState(newState: object): void {\n this.state = { ...this.state, ...newState };\n }\n\n /**\n * Returns the component payment data ready to submit to the Checkout API\n * Note: this does not ensure validity, check isValid first\n */\n public get data(): PaymentData {\n const order = this.state.order || this.props.order;\n const componentData = this.formatData();\n const doesPaymentMethodHaveNativeComponent = Boolean(getComponentNameOfPaymentType(componentData.paymentMethod?.type));\n const clientData = this.core.modules.risk.data;\n const checkoutAttemptId = this.core.modules.analytics.checkoutAttemptId ?? NO_CHECKOUT_ATTEMPT_ID;\n const paymentMethodBehavior = doesPaymentMethodHaveNativeComponent ? PAYMENT_METHOD_BEHAVIOR.NATIVE : PAYMENT_METHOD_BEHAVIOR.GENERIC;\n\n const sdkData = createSdkData(checkoutAttemptId, clientData, paymentMethodBehavior);\n if (componentData.paymentMethod && checkoutAttemptId) {\n componentData.paymentMethod.checkoutAttemptId = checkoutAttemptId;\n }\n\n if (componentData.paymentMethod && sdkData) {\n componentData.paymentMethod.sdkData = sdkData;\n }\n\n return {\n ...(clientData && { riskData: { clientData } }),\n ...(order && { order: { orderData: order.orderData, pspReference: order.pspReference } }),\n ...componentData,\n clientStateDataIndicator: true\n };\n }\n\n /**\n * Method used to make the payment method active\n * (Useful when there are different payment methods available and activating one PM must trigger a specific task)\n */\n public activate(): void {\n return;\n }\n\n public render(): ComponentChild | Error {\n // render() not implemented in the element\n throw new Error('Payment method cannot be rendered.');\n }\n\n /**\n * Mounts an element into the dom\n * @param domNode - Node (or selector) where we will mount the payment element\n * @returns this - the payment element instance we mounted\n */\n public mount(domNode: HTMLElement | string): this {\n const node = typeof domNode === 'string' ? document.querySelector<HTMLElement>(domNode) : domNode;\n\n if (!node) {\n throw new Error('Component could not mount. Root node was not found.');\n }\n\n if (this._node) {\n this.unmount(); // new, if this._node exists then we are \"remounting\" so we first need to unmount if it's not already been done\n }\n\n this._node = node;\n\n // Add listener for key down events, notably 'Enter' key presses\n on(this._node, 'keydown', this.handleKeyDown, false);\n\n this._component = this.render();\n\n render(this._component, node);\n\n return this;\n }\n\n /**\n * Updates props, resets the internal state and remounts the element.\n *\n * @param props - props to update\n * @returns this - the element instance\n */\n public update(props: Partial<P>): this {\n this.props = this.formatProps({ ...this.props, ...props });\n this.state = {};\n\n return this.unmount().mount(this._node); // for new mount fny\n }\n\n /**\n * Unmounts a payment element from the DOM\n */\n public unmount(): this {\n // Remove listener\n off(this._node, 'keydown', this.handleKeyDown);\n\n if (this._node) {\n render(null, this._node);\n }\n\n return this;\n }\n\n /**\n * Unmounts an element and removes it from the parent instance\n * For \"destroy\" type cleanup - when you don't intend to use the component again\n */\n public remove() {\n this.unmount();\n\n if (this.core) {\n this.core.remove(this);\n }\n }\n}\n\nexport default BaseElement;\n"],"names":["BaseElement","buildElementProps","componentProps","this","props","formatProps","constructor","formatData","submitAnalytics","_analyticsObj","handleKeyDown","_e","setState","newState","state","data","order","componentData","doesPaymentMethodHaveNativeComponent","Boolean","getComponentNameOfPaymentType","paymentMethod","type","clientData","core","modules","risk","checkoutAttemptId","analytics","NO_CHECKOUT_ATTEMPT_ID","paymentMethodBehavior","PAYMENT_METHOD_BEHAVIOR","NATIVE","GENERIC","sdkData","createSdkData","riskData","orderData","pspReference","clientStateDataIndicator","activate","render","Error","mount","domNode","node","document","querySelector","_node","unmount","on","_component","update","off","remove","checkout","_define_property","_id","uuid","isCoreInstance","initialize","createFromAction","assertIsCoreInstance","AdyenCheckoutError","bind","defaultProps"],"mappings":"mlBAwBA,MAAeA,EA4BDC,iBAAAA,CAAkBC,GACxBC,KAAKC,MAAQD,KAAKE,YAAY,IAAKF,KAAKG,YAAY,gBAAoBJ,GAC5E,CAMUG,WAAAA,CAAYD,GAClB,OAAOA,CACX,CAMA,UAAAG,GACI,MAAO,CAAA,CACX,CAEUC,eAAAA,CAAgBC,GACtB,OAAO,IACX,CAEUC,aAAAA,CAAcC,GACpB,OAAO,IACX,CAEUC,QAAAA,CAASC,GACfV,KAAKW,MAAQ,IAAKX,KAAKW,SAAUD,EACrC,CAMA,QAAWE,GACP,MAAMC,EAAQb,KAAKW,MAAME,OAASb,KAAKC,MAAMY,MACvCC,EAAgBd,KAAKI,aACrBW,EAAuCC,QAAQC,EAA8BH,EAAcI,eAAeC,OAC1GC,EAAapB,KAAKqB,KAAKC,QAAQC,KAAKX,KACpCY,EAAoBxB,KAAKqB,KAAKC,QAAQG,UAAUD,mBAAqBE,EACrEC,EAAwBZ,EAAuCa,EAAwBC,OAASD,EAAwBE,QAExHC,EAAUC,EAAcR,EAAmBJ,EAAYO,GAS7D,OARIb,EAAcI,eAAiBM,IAC/BV,EAAcI,cAAcM,kBAAoBA,GAGhDV,EAAcI,eAAiBa,IAC/BjB,EAAcI,cAAca,QAAUA,GAGnC,IACCX,GAAc,CAAEa,SAAU,CAAEb,kBAC5BP,GAAS,CAAEA,MAAO,CAAEqB,UAAWrB,EAAMqB,UAAWC,aAActB,EAAMsB,kBACrErB,EACHsB,0BAA0B,EAElC,CAMA,QAAAC,GAEA,CAEOC,MAAAA,GAEH,MAAM,IAAIC,MAAM,qCACpB,CAOOC,KAAAA,CAAMC,GACT,MAAMC,EAA0B,iBAAZD,EAAuBE,SAASC,cAA2BH,GAAWA,EAE1F,IAAKC,EACD,MAAM,IAAIH,MAAM,uDAgBpB,OAbIvC,KAAK6C,OACL7C,KAAK8C,UAGT9C,KAAK6C,MAAQH,EAGbK,EAAG/C,KAAK6C,MAAO,UAAW7C,KAAKO,eAAe,GAE9CP,KAAKgD,WAAahD,KAAKsC,SAEvBA,EAAOtC,KAAKgD,WAAYN,GAEjB1C,IACX,CAQOiD,MAAAA,CAAOhD,GAIV,OAHAD,KAAKC,MAAQD,KAAKE,YAAY,IAAKF,KAAKC,SAAUA,IAClDD,KAAKW,MAAQ,CAAA,EAENX,KAAK8C,UAAUN,MAAMxC,KAAK6C,MACrC,CAKA,OAAAC,GAQI,OANAI,EAAIlD,KAAK6C,MAAO,UAAW7C,KAAKO,eAE5BP,KAAK6C,OACLP,EAAO,KAAMtC,KAAK6C,OAGf7C,IACX,CAMA,MAAAmD,GACInD,KAAK8C,UAED9C,KAAKqB,MACLrB,KAAKqB,KAAK8B,OAAOnD,KAEzB,CA3JA,WAAAG,CAAYiD,EAAiBnD,GAX7BoD,EAAArD,KAAgBsD,MAAM,GAAGtD,KAAKG,YAAY,QAAWoD,OACrDF,EAAArD,KAAgBqB,eAEhBgC,EAAArD,KAAOC,gBACPoD,EAAArD,KAAOW,QAAa,IACpB0C,EAAArD,KAAOgD,qBAEPK,EAAArD,KAAU6C,QAAqB,MAK3B,MAAMW,EAnBd,SAA8BJ,GAC1B,QAAKA,IAC+C,mBAAxBA,EAASK,YAAkE,mBAA9BL,EAASM,iBAEtF,CAe+BC,CAAqBP,GAE5C,IAAKI,EACD,MAAM,IAAII,EACN,uBACA,uCAAuC5D,KAAKG,YAAY,6DAIhEH,KAAKqB,KAAO+B,EACZpD,KAAKF,kBAAkBG,GAEvBD,KAAKO,cAAgBP,KAAKO,cAAcsD,KAAK7D,KACjD,EAhBAqD,EAVWxD,EAUeiE,eAAe"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../../../external/preact/dist/preact.js";import{useRef as r,useState as o,useCallback as s,useEffect as t}from"../../../../../external/preact/hooks/dist/hooks.js";import{loginValidationRules as n}from"./validate.js";import{useCoreContext as a}from"../../../../../core/Context/CoreProvider.js";import i from"../../../../../utils/useForm/useFormWithA11y.js";import{setFocusOnField as p}from"../../../../../utils/setFocus.js";import l from"../../../FormFields/Field/Field.js";import u from"../../../FormFields/InputEmail.js";const m=m=>{const{i18n:d}=a(),g=r(null),{handleChangeFor:c,data:h,triggerValidation:f,valid:L,errors:F,isValid:v}=i({schema:["shopperLogin"],rules:n,formHolder:g}),j=r({validateInput:null,focusInput:null}),[I,M]=o(!1),b=s(()=>{M(!0),f()},[f]);t(()=>{g.current&&m.errorMessage&&p(g.current,"shopperLogin")},[m.errorMessage]),t(()=>{h.shopperLogin&&M(!0)},[h.shopperLogin]),t(()=>{j.current.validateInput=b,m.onSetInputHandlers(j.current)},[b,m.onSetInputHandlers]);const E=s(e=>{"Enter"===e.key&&m.onPressEnter()},[m.onPressEnter]);return t(()=>{m.onChange({data:h,valid:L,errors:F,isValid:v})},[h,L,F]),e("div",{ref:g},e(l,{name:"shopperLogin",label:d.get("ctp.login.inputLabel"),errorMessage:I?m.errorMessage||(F.shopperLogin&&"string"==typeof F.shopperLogin?.errorMessage?d.get(F.shopperLogin.errorMessage):null):null,classNameModifiers:["shopperLogin"],errorLive:!0},e(u,{name:"shopperLogin",autocorrect:"off",spellcheck:!1,value:h.shopperLogin,disabled:m.disabled,onInput:c("shopperLogin","input"),onBlur:c("shopperLogin","blur"),onKeyDown:E,autocomplete:"email"})))};export{m as default};
1
+ import{createElement as e}from"../../../../../external/preact/dist/preact.js";import{useRef as r,useState as o,useCallback as s,useEffect as t}from"../../../../../external/preact/hooks/dist/hooks.js";import{loginValidationRules as n}from"./validate.js";import{useCoreContext as a}from"../../../../../core/Context/CoreProvider.js";import i from"../../../../../utils/useForm/useFormWithA11y.js";import{setFocusOnField as l}from"../../../../../utils/setFocus.js";import p from"../../../FormFields/Field/Field.js";import u from"../../../FormFields/InputEmail.js";const m=m=>{const{i18n:d}=a(),c=r(null),{handleChangeFor:g,data:h,triggerValidation:f,valid:L,errors:F,isValid:v}=i({schema:["shopperLogin"],rules:n,formHolder:c}),j=r({validateInput:null,focusInput:null}),[I,b]=o(!1),E=s(()=>{b(!0),f()},[f]);t(()=>{c.current&&m.errorMessage&&l(c.current,"shopperLogin")},[m.errorMessage]),t(()=>{h.shopperLogin&&b(!0)},[h.shopperLogin]),t(()=>{j.current.validateInput=E,m.onSetInputHandlers(j.current)},[E,m.onSetInputHandlers]);const M=s(e=>{"Enter"===e.key&&m.onPressEnter()},[m.onPressEnter]);return t(()=>{m.onChange({data:h,valid:L,errors:F,isValid:v})},[h,L,F]),e("div",{ref:c},e(p,{name:"shopperLogin",label:d.get("ctp.login.inputLabel"),errorMessage:I?m.errorMessage||F.shopperLogin&&d.get(F.shopperLogin.errorMessage):null,classNameModifiers:["shopperLogin"],errorLive:!0},e(u,{name:"shopperLogin",autocorrect:"off",spellcheck:!1,value:h.shopperLogin,disabled:m.disabled,onInput:g("shopperLogin","input"),onBlur:g("shopperLogin","blur"),onKeyDown:M,autocomplete:"email"})))};export{m as default};
2
2
  //# sourceMappingURL=CtPLoginInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CtPLoginInput.js","sources":["../../../../../../../src/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.tsx"],"sourcesContent":["import { h, TargetedKeyboardEvent } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport { loginValidationRules } from './validate';\nimport { useCoreContext } from '../../../../../core/Context/CoreProvider';\nimport { useFormWithA11y } from '../../../../../utils/useForm';\nimport Field from '../../../FormFields/Field';\nimport InputEmail from '../../../FormFields/InputEmail';\nimport { setFocusOnField } from '../../../../../utils/setFocus';\n\ntype OnChangeProps = { data: CtPLoginInputDataState; valid; errors; isValid: boolean };\n\ninterface CtPLoginInputProps {\n disabled: boolean;\n errorMessage?: string;\n onPressEnter(): Promise<void>;\n onChange({ data, valid, errors, isValid }: OnChangeProps): void;\n onSetInputHandlers(handlers: CtPLoginInputHandlers): void;\n}\n\ninterface CtPLoginInputDataState {\n shopperLogin?: string;\n}\n\nexport type CtPLoginInputHandlers = {\n validateInput(): void;\n focusInput(): void;\n};\n\nconst CtPLoginInput = (props: Readonly<CtPLoginInputProps>): h.JSX.Element => {\n const { i18n } = useCoreContext();\n const formSchema = ['shopperLogin'];\n const containerRef = useRef<HTMLDivElement>(null);\n const { handleChangeFor, data, triggerValidation, valid, errors, isValid } = useFormWithA11y<CtPLoginInputDataState>({\n schema: formSchema,\n rules: loginValidationRules,\n formHolder: containerRef\n });\n const loginInputHandlersRef = useRef<CtPLoginInputHandlers>({ validateInput: null, focusInput: null });\n const [isLoginInputDirty, setIsLoginInputDirty] = useState<boolean>(false);\n\n const validateInput = useCallback(() => {\n setIsLoginInputDirty(true);\n triggerValidation();\n }, [triggerValidation]);\n\n useEffect(() => {\n if (containerRef.current && props.errorMessage) {\n setFocusOnField(containerRef.current, 'shopperLogin');\n }\n }, [props.errorMessage]);\n\n useEffect(() => {\n if (data.shopperLogin) setIsLoginInputDirty(true);\n }, [data.shopperLogin]);\n\n useEffect(() => {\n loginInputHandlersRef.current.validateInput = validateInput;\n props.onSetInputHandlers(loginInputHandlersRef.current);\n }, [validateInput, props.onSetInputHandlers]);\n\n const handleOnKeyDown = useCallback(\n (event: TargetedKeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n void props.onPressEnter();\n }\n },\n [props.onPressEnter]\n );\n\n useEffect(() => {\n props.onChange({ data, valid, errors, isValid });\n }, [data, valid, errors]);\n\n return (\n <div ref={containerRef}>\n <Field\n name=\"shopperLogin\"\n label={i18n.get('ctp.login.inputLabel')}\n errorMessage={\n isLoginInputDirty\n ? props.errorMessage ||\n (errors.shopperLogin && typeof errors.shopperLogin?.errorMessage === 'string'\n ? i18n.get(errors.shopperLogin.errorMessage)\n : null)\n : null\n }\n classNameModifiers={['shopperLogin']}\n errorLive={true}\n >\n <InputEmail\n name={'shopperLogin'}\n autocorrect={'off'}\n spellcheck={false}\n value={data.shopperLogin}\n disabled={props.disabled}\n onInput={handleChangeFor('shopperLogin', 'input')}\n onBlur={handleChangeFor('shopperLogin', 'blur')}\n onKeyDown={handleOnKeyDown}\n autocomplete={'email'}\n />\n </Field>\n </div>\n );\n};\n\nexport default CtPLoginInput;\n"],"names":["CtPLoginInput","props","i18n","useCoreContext","containerRef","useRef","handleChangeFor","data","triggerValidation","valid","errors","isValid","useFormWithA11y","schema","rules","loginValidationRules","formHolder","loginInputHandlersRef","validateInput","focusInput","isLoginInputDirty","setIsLoginInputDirty","useState","useCallback","useEffect","current","errorMessage","setFocusOnField","shopperLogin","onSetInputHandlers","handleOnKeyDown","event","key","onPressEnter","onChange","h","div","ref","Field","name","label","get","classNameModifiers","errorLive","InputEmail","autocorrect","spellcheck","value","disabled","onInput","onBlur","onKeyDown","autocomplete"],"mappings":"+iBA4BA,MAAMA,EAAiBC,IACnB,MAAMC,KAAEA,GAASC,IAEXC,EAAeC,EAAuB,OACtCC,gBAAEA,EAAeC,KAAEA,EAAIC,kBAAEA,EAAiBC,MAAEA,EAAKC,OAAEA,EAAMC,QAAEA,GAAYC,EAAwC,CACjHC,OAHe,CAAC,gBAIhBC,MAAOC,EACPC,WAAYZ,IAEVa,EAAwBZ,EAA8B,CAAEa,cAAe,KAAMC,WAAY,QACxFC,EAAmBC,GAAwBC,GAAkB,GAE9DJ,EAAgBK,EAAY,KAC9BF,GAAqB,GACrBb,KACD,CAACA,IAEJgB,EAAU,KACFpB,EAAaqB,SAAWxB,EAAMyB,cAC9BC,EAAgBvB,EAAaqB,QAAS,iBAE3C,CAACxB,EAAMyB,eAEVF,EAAU,KACFjB,EAAKqB,cAAcP,GAAqB,IAC7C,CAACd,EAAKqB,eAETJ,EAAU,KACNP,EAAsBQ,QAAQP,cAAgBA,EAC9CjB,EAAM4B,mBAAmBZ,EAAsBQ,UAChD,CAACP,EAAejB,EAAM4B,qBAEzB,MAAMC,EAAkBP,EACnBQ,IACqB,UAAdA,EAAMC,KACD/B,EAAMgC,gBAGnB,CAAChC,EAAMgC,eAOX,OAJAT,EAAU,KACNvB,EAAMiC,SAAS,CAAE3B,OAAME,QAAOC,SAAQC,aACvC,CAACJ,EAAME,EAAOC,IAGbyB,EAACC,MAAAA,CAAIC,IAAKjC,GACN+B,EAACG,EAAAA,CACGC,KAAK,eACLC,MAAOtC,EAAKuC,IAAI,wBAChBf,aACIN,EACMnB,EAAMyB,eACLhB,EAAOkB,cAA6D,iBAAtClB,EAAOkB,cAAcF,aAC9CxB,EAAKuC,IAAI/B,EAAOkB,aAAaF,cAC7B,MACN,KAEVgB,mBAAoB,CAAC,gBACrBC,WAAW,GAEXR,EAACS,EAAAA,CACGL,KAAM,eACNM,YAAa,MACbC,YAAY,EACZC,MAAOxC,EAAKqB,aACZoB,SAAU/C,EAAM+C,SAChBC,QAAS3C,EAAgB,eAAgB,SACzC4C,OAAQ5C,EAAgB,eAAgB,QACxC6C,UAAWrB,EACXsB,aAAc"}
1
+ {"version":3,"file":"CtPLoginInput.js","sources":["../../../../../../../src/components/internal/ClickToPay/components/CtPLogin/CtPLoginInput.tsx"],"sourcesContent":["import { h, TargetedKeyboardEvent } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\nimport { loginValidationRules } from './validate';\nimport { useCoreContext } from '../../../../../core/Context/CoreProvider';\nimport { useFormWithA11y } from '../../../../../utils/useForm';\nimport Field from '../../../FormFields/Field';\nimport InputEmail from '../../../FormFields/InputEmail';\nimport { setFocusOnField } from '../../../../../utils/setFocus';\n\ntype OnChangeProps = { data: CtPLoginInputDataState; valid; errors; isValid: boolean };\n\ninterface CtPLoginInputProps {\n disabled: boolean;\n errorMessage?: string;\n onPressEnter(): Promise<void>;\n onChange({ data, valid, errors, isValid }: OnChangeProps): void;\n onSetInputHandlers(handlers: CtPLoginInputHandlers): void;\n}\n\ninterface CtPLoginInputDataState {\n shopperLogin?: string;\n}\n\nexport type CtPLoginInputHandlers = {\n validateInput(): void;\n focusInput(): void;\n};\n\nconst CtPLoginInput = (props: Readonly<CtPLoginInputProps>): h.JSX.Element => {\n const { i18n } = useCoreContext();\n const formSchema = ['shopperLogin'];\n const containerRef = useRef<HTMLDivElement>(null);\n const { handleChangeFor, data, triggerValidation, valid, errors, isValid } = useFormWithA11y<CtPLoginInputDataState>({\n schema: formSchema,\n rules: loginValidationRules,\n formHolder: containerRef\n });\n const loginInputHandlersRef = useRef<CtPLoginInputHandlers>({ validateInput: null, focusInput: null });\n const [isLoginInputDirty, setIsLoginInputDirty] = useState<boolean>(false);\n\n const validateInput = useCallback(() => {\n setIsLoginInputDirty(true);\n triggerValidation();\n }, [triggerValidation]);\n\n useEffect(() => {\n if (containerRef.current && props.errorMessage) {\n setFocusOnField(containerRef.current, 'shopperLogin');\n }\n }, [props.errorMessage]);\n\n useEffect(() => {\n if (data.shopperLogin) setIsLoginInputDirty(true);\n }, [data.shopperLogin]);\n\n useEffect(() => {\n loginInputHandlersRef.current.validateInput = validateInput;\n props.onSetInputHandlers(loginInputHandlersRef.current);\n }, [validateInput, props.onSetInputHandlers]);\n\n const handleOnKeyDown = useCallback(\n (event: TargetedKeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n void props.onPressEnter();\n }\n },\n [props.onPressEnter]\n );\n\n useEffect(() => {\n props.onChange({ data, valid, errors, isValid });\n }, [data, valid, errors]);\n\n return (\n <div ref={containerRef}>\n <Field\n name=\"shopperLogin\"\n label={i18n.get('ctp.login.inputLabel')}\n errorMessage={isLoginInputDirty ? props.errorMessage || (errors.shopperLogin && i18n.get(errors.shopperLogin.errorMessage)) : null}\n classNameModifiers={['shopperLogin']}\n errorLive={true}\n >\n <InputEmail\n name={'shopperLogin'}\n autocorrect={'off'}\n spellcheck={false}\n value={data.shopperLogin}\n disabled={props.disabled}\n onInput={handleChangeFor('shopperLogin', 'input')}\n onBlur={handleChangeFor('shopperLogin', 'blur')}\n onKeyDown={handleOnKeyDown}\n autocomplete={'email'}\n />\n </Field>\n </div>\n );\n};\n\nexport default CtPLoginInput;\n"],"names":["CtPLoginInput","props","i18n","useCoreContext","containerRef","useRef","handleChangeFor","data","triggerValidation","valid","errors","isValid","useFormWithA11y","schema","rules","loginValidationRules","formHolder","loginInputHandlersRef","validateInput","focusInput","isLoginInputDirty","setIsLoginInputDirty","useState","useCallback","useEffect","current","errorMessage","setFocusOnField","shopperLogin","onSetInputHandlers","handleOnKeyDown","event","key","onPressEnter","onChange","h","div","ref","Field","name","label","get","classNameModifiers","errorLive","InputEmail","autocorrect","spellcheck","value","disabled","onInput","onBlur","onKeyDown","autocomplete"],"mappings":"+iBA4BA,MAAMA,EAAiBC,IACnB,MAAMC,KAAEA,GAASC,IAEXC,EAAeC,EAAuB,OACtCC,gBAAEA,EAAeC,KAAEA,EAAIC,kBAAEA,EAAiBC,MAAEA,EAAKC,OAAEA,EAAMC,QAAEA,GAAYC,EAAwC,CACjHC,OAHe,CAAC,gBAIhBC,MAAOC,EACPC,WAAYZ,IAEVa,EAAwBZ,EAA8B,CAAEa,cAAe,KAAMC,WAAY,QACxFC,EAAmBC,GAAwBC,GAAkB,GAE9DJ,EAAgBK,EAAY,KAC9BF,GAAqB,GACrBb,KACD,CAACA,IAEJgB,EAAU,KACFpB,EAAaqB,SAAWxB,EAAMyB,cAC9BC,EAAgBvB,EAAaqB,QAAS,iBAE3C,CAACxB,EAAMyB,eAEVF,EAAU,KACFjB,EAAKqB,cAAcP,GAAqB,IAC7C,CAACd,EAAKqB,eAETJ,EAAU,KACNP,EAAsBQ,QAAQP,cAAgBA,EAC9CjB,EAAM4B,mBAAmBZ,EAAsBQ,UAChD,CAACP,EAAejB,EAAM4B,qBAEzB,MAAMC,EAAkBP,EACnBQ,IACqB,UAAdA,EAAMC,KACD/B,EAAMgC,gBAGnB,CAAChC,EAAMgC,eAOX,OAJAT,EAAU,KACNvB,EAAMiC,SAAS,CAAE3B,OAAME,QAAOC,SAAQC,aACvC,CAACJ,EAAME,EAAOC,IAGbyB,EAACC,MAAAA,CAAIC,IAAKjC,GACN+B,EAACG,EAAAA,CACGC,KAAK,eACLC,MAAOtC,EAAKuC,IAAI,wBAChBf,aAAcN,EAAoBnB,EAAMyB,cAAiBhB,EAAOkB,cAAgB1B,EAAKuC,IAAI/B,EAAOkB,aAAaF,cAAiB,KAC9HgB,mBAAoB,CAAC,gBACrBC,WAAW,GAEXR,EAACS,EAAAA,CACGL,KAAM,eACNM,YAAa,MACbC,YAAY,EACZC,MAAOxC,EAAKqB,aACZoB,SAAU/C,EAAM+C,SAChBC,QAAS3C,EAAgB,eAAgB,SACzC4C,OAAQ5C,EAAgB,eAAgB,QACxC6C,UAAWrB,EACXsB,aAAc"}
@@ -1,2 +1,2 @@
1
- import{Component as e,createElement as a}from"../../../external/preact/dist/preact.js";import{useCoreContext as t}from"../../../core/Context/CoreProvider.js";import r from"../FormFields/Field/Field.js";import{isValidHolder as s,checkIbanStatus as i}from"./validate.js";import{electronicFormat as n,formatIban as o,getCountryCode as l,getNextCursorPosition as d}from"./utils.js";import h from"../FormFields/Fieldset/Fieldset.js";import u from"../FormFields/InputText.js";function m(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}const b={isValid:!1,errorMessage:"ach.accountHolderNameField.invalid",error:"ach.accountHolderNameField.invalid"},c={isValid:!1,errorMessage:"sepaDirectDebit.ibanField.invalid",error:"sepaDirectDebit.ibanField.invalid"};class p extends e{setStatus(e){this.setState({status:e})}onChange(){const e=!this.props.holderName||s(this.state.data.ownerName),a="valid"===i(this.state.data.ibanNumber).status&&e,t={data:this.state.data,isValid:a,errors:this.state.errors};this.props.onChange(t)}showValidation(){const e=i(this.state.data.ibanNumber).status,a=s(this.state.data.ownerName);this.setError("iban","valid"===e?null:c);const t=a?null:b;this.setError("holder",t,this.onChange)}render({placeholders:e},{data:s,errors:i,valid:n}){const{i18n:o}=t();return a(h,{classNameModifiers:["iban-input"],label:this.props.label},this.props.holderName&&a(r,{className:"adyen-checkout__field--owner-name",label:o.get("sepa.ownerName"),filled:s.ownerName&&s.ownerName.length,errorMessage:!!i.holder&&o.get(i.holder.error),dir:"ltr",i18n:o,name:"ownerName"},a(u,{name:"ownerName",className:"adyen-checkout__iban-input__owner-name",placeholder:e?.ownerName,value:s.ownerName,"aria-invalid":!!this.state.errors.holder,"aria-label":o.get("sepa.ownerName"),onInput:e=>this.handleHolderInput(e.target.value),onBlur:e=>this.handleHolderInput(e.target.value),autocomplete:"name"})),a(r,{className:"adyen-checkout__field--iban-number",label:o.get("sepa.ibanNumber"),errorMessage:!!i.iban&&o.get(i.iban.error),filled:s.ibanNumber&&s.ibanNumber.length,isValid:n.iban,onBlur:this.handleIbanBlur,dir:"ltr",i18n:o,name:"ibanNumber"},a(u,{name:"ibanNumber",className:"adyen-checkout__iban-input__iban-number",classNameModifiers:["large"],placeholder:e?.ibanNumber,value:s.ibanNumber,onInput:this.handleIbanInput,"aria-invalid":!!this.state.errors.iban,"aria-label":o.get("sepa.ibanNumber"),autocorrect:"off",spellcheck:!1,autocomplete:void 0})),this.props.showPayButton&&this.props.payButton({status:this.state.status}))}constructor(e){if(super(e),m(this,"setError",(e,a,t)=>{this.setState(t=>({errors:{...t.errors,[e]:a}}),t)}),m(this,"handleHolderInput",e=>{this.setState(a=>({data:{...a.data,ownerName:e}}),()=>{const e=s(this.state.data.ownerName),a=e&&!e?b:null;this.setError("holder",a,this.onChange)})}),m(this,"handleIbanInput",e=>{const a=e.target.value,t=n(a),r=o(t),s=i(r).status,h=l(t),u=e.target.selectionStart,m=this.state.data.ibanNumber,b=d(u,r,m);this.setState(e=>({data:{...e.data,ibanNumber:r,countryCode:h},errors:{...e.errors,iban:"invalid"===s?c:null},valid:{...e.valid,iban:"valid"===s}}),()=>{e.target.setSelectionRange(b,b),this.onChange()})}),m(this,"handleIbanBlur",e=>{const a=e.target.value;if(a.length>0){const e=i(a).status;this.setError("iban","valid"===e?null:c,this.onChange)}else this.setError("iban",null,this.onChange)}),this.state={status:"ready",data:{ownerName:e?.data?.ownerName||"",ibanNumber:e?.data?.ibanNumber||"",countryCode:e?.data?.countryCode||""},isValid:!1,cursor:0,errors:{},valid:{}},this.state.data.ibanNumber){const e=n(this.state.data.ibanNumber);this.state.data.ibanNumber=o(e)}if(this.state.data.ibanNumber||this.state.data.ownerName){const e=!this.props.holderName||s(this.state.data.ownerName),a=!!this.state.data.ibanNumber&&"valid"===i(this.state.data.ibanNumber).status&&e,t={data:this.state.data,isValid:a};this.props.onChange(t)}}}m(p,"defaultProps",{onChange:()=>{},countryCode:null,holderName:!0,placeholders:{},label:null});export{p as default};
1
+ import{Component as e,createElement as a}from"../../../external/preact/dist/preact.js";import{useCoreContext as t}from"../../../core/Context/CoreProvider.js";import r from"../FormFields/Field/Field.js";import{isValidHolder as s,checkIbanStatus as i}from"./validate.js";import{electronicFormat as n,formatIban as o,getCountryCode as l,getNextCursorPosition as d}from"./utils.js";import h from"../FormFields/Fieldset/Fieldset.js";import u from"../FormFields/InputText.js";function m(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}const b={isValid:!1,errorMessage:"ach.accountHolderNameField.invalid",error:"ach.accountHolderNameField.invalid"},c={isValid:!1,errorMessage:"sepaDirectDebit.ibanField.invalid",error:"sepaDirectDebit.ibanField.invalid"};class p extends e{setStatus(e){this.setState({status:e})}onChange(){const e=!this.props.holderName||s(this.state.data.ownerName),a="valid"===i(this.state.data.ibanNumber).status&&e,t={data:this.state.data,isValid:a,errors:this.state.errors};this.props.onChange(t)}showValidation(){const e=i(this.state.data.ibanNumber).status,a=s(this.state.data.ownerName);this.setError("iban","valid"!==e?c:null);const t=a?null:b;this.setError("holder",t,this.onChange)}render({placeholders:e},{data:s,errors:i,valid:n}){const{i18n:o}=t();return a(h,{classNameModifiers:["iban-input"],label:this.props.label},this.props.holderName&&a(r,{className:"adyen-checkout__field--owner-name",label:o.get("sepa.ownerName"),filled:s.ownerName&&s.ownerName.length,errorMessage:!!i.holder&&o.get(i.holder.error),dir:"ltr",i18n:o,name:"ownerName"},a(u,{name:"ownerName",className:"adyen-checkout__iban-input__owner-name",placeholder:e?.ownerName,value:s.ownerName,"aria-invalid":!!this.state.errors.holder,"aria-label":o.get("sepa.ownerName"),onInput:e=>this.handleHolderInput(e.target.value),onBlur:e=>this.handleHolderInput(e.target.value),autocomplete:"name"})),a(r,{className:"adyen-checkout__field--iban-number",label:o.get("sepa.ibanNumber"),errorMessage:!!i.iban&&o.get(i.iban.error),filled:s.ibanNumber&&s.ibanNumber.length,isValid:n.iban,onBlur:this.handleIbanBlur,dir:"ltr",i18n:o,name:"ibanNumber"},a(u,{setRef:e=>{this.ibanNumber=e},name:"ibanNumber",className:"adyen-checkout__iban-input__iban-number",classNameModifiers:["large"],placeholder:e?.ibanNumber,value:s.ibanNumber,onInput:this.handleIbanInput,"aria-invalid":!!this.state.errors.iban,"aria-label":o.get("sepa.ibanNumber"),autocorrect:"off",spellcheck:!1,autocomplete:void 0})),this.props.showPayButton&&this.props.payButton({status:this.state.status}))}constructor(e){if(super(e),m(this,"ibanNumber",void 0),m(this,"setData",(e,a,t)=>{this.setState(t=>({data:{...t.data,[e]:a}}),t)}),m(this,"setError",(e,a,t)=>{this.setState(t=>({errors:{...t.errors,[e]:a}}),t)}),m(this,"setValid",(e,a,t)=>{this.setState(t=>({valid:{...t.valid,[e]:a}}),t)}),m(this,"handleHolderInput",e=>{this.setState(a=>({data:{...a.data,ownerName:e}}),()=>{const e=s(this.state.data.ownerName),a=null==e||e?null:b;this.setError("holder",a,this.onChange)})}),m(this,"handleIbanInput",e=>{const a=e.target.value,t=n(a),r=o(t),s=i(r).status,h=l(t),u=e.target.selectionStart,m=this.state.data.ibanNumber,b=d(u,r,m);this.setState(e=>({data:{...e.data,ibanNumber:r,countryCode:h},errors:{...e.errors,iban:"invalid"===s?c:null},valid:{...e.valid,iban:"valid"===s}}),()=>{e.target.setSelectionRange(b,b),this.onChange()})}),m(this,"handleIbanBlur",e=>{const a=e.target.value;if(a.length>0){const e=i(a).status;this.setError("iban","valid"!==e?c:null,this.onChange)}else this.setError("iban",null,this.onChange)}),this.state={status:"ready",data:{ownerName:e?.data?.ownerName||"",ibanNumber:e?.data?.ibanNumber||"",countryCode:e?.data?.countryCode||""},isValid:!1,cursor:0,errors:{},valid:{}},this.state.data.ibanNumber){const e=n(this.state.data.ibanNumber);this.state.data.ibanNumber=o(e)}if(this.state.data.ibanNumber||this.state.data.ownerName){const e=this.props.holderName?s(this.state.data.ownerName):"",a=(this.state.data.ibanNumber?"valid"===i(this.state.data.ibanNumber).status:"")&&e,t={data:this.state.data,isValid:a};this.props.onChange(t)}}}m(p,"defaultProps",{onChange:()=>{},countryCode:null,holderName:!0,placeholders:{},label:null});export{p as default};
2
2
  //# sourceMappingURL=IbanInput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IbanInput.js","sources":["../../../../../src/components/internal/IbanInput/IbanInput.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport Field from '../FormFields/Field';\nimport { checkIbanStatus, isValidHolder } from './validate';\nimport { electronicFormat, formatIban, getCountryCode, getNextCursorPosition } from './utils';\nimport Fieldset from '../FormFields/Fieldset';\nimport { GenericError } from '../../../core/Errors/types';\nimport InputText from '../FormFields/InputText';\nimport { UIElementStatus } from '../UIElement/types';\nimport { PayButtonProps } from '../PayButton/PayButton';\n\nexport interface IbanData {\n ownerName?: string;\n ibanNumber?: string;\n countryCode?: string;\n}\n\ninterface IbanInputOnChangeData {\n data: IbanData;\n isValid: boolean;\n errors?: Record<string, GenericError | null>;\n}\n\ninterface IbanInputProps {\n holderName?: boolean;\n placeholders?: Omit<IbanData, 'countryCode'>;\n countryCode?: string;\n showPayButton?: boolean;\n payButton?: (props: PayButtonProps) => h.JSX.Element;\n onChange: (data: IbanInputOnChangeData) => void;\n label: string;\n data?: IbanData;\n}\n\ninterface IbanInputState {\n data: IbanData;\n errors: Record<string, GenericError | null>;\n valid: Record<string, boolean>;\n status: string;\n isValid: boolean;\n cursor: number;\n}\n\nconst ibanHolderNameErrorObj: GenericError = {\n isValid: false,\n errorMessage: 'ach.accountHolderNameField.invalid', // TODO create bespoke translation key\n error: 'ach.accountHolderNameField.invalid'\n};\n\nconst ibanErrorObj: GenericError = {\n isValid: false,\n errorMessage: 'sepaDirectDebit.ibanField.invalid',\n error: 'sepaDirectDebit.ibanField.invalid'\n};\n\nclass IbanInput extends Component<Readonly<IbanInputProps>, IbanInputState> {\n constructor(props) {\n super(props);\n\n this.state = {\n status: 'ready',\n data: {\n ownerName: props?.data?.ownerName || '',\n ibanNumber: props?.data?.ibanNumber || '',\n countryCode: props?.data?.countryCode || ''\n },\n isValid: false,\n cursor: 0,\n errors: {},\n valid: {}\n };\n\n if (this.state.data['ibanNumber']) {\n const electronicFormatIban = electronicFormat(this.state.data['ibanNumber']); // example: NL13TEST0123456789\n this.state.data['ibanNumber'] = formatIban(electronicFormatIban); // example: NL13 TEST 0123 4567 89\n }\n\n if (this.state.data['ibanNumber'] || this.state.data['ownerName']) {\n const holderNameValid = this.props.holderName ? isValidHolder(this.state.data['ownerName']) : true;\n const ibanValid = this.state.data['ibanNumber'] ? checkIbanStatus(this.state.data['ibanNumber']).status === 'valid' : false;\n const isValid = ibanValid && holderNameValid;\n const data = { data: this.state.data, isValid };\n\n this.props.onChange(data);\n }\n }\n\n public static readonly defaultProps = {\n onChange: () => {},\n countryCode: null,\n holderName: true,\n placeholders: {},\n label: null\n };\n\n setStatus(status: UIElementStatus) {\n this.setState({ status });\n }\n\n onChange() {\n const holderNameValid = this.props.holderName ? isValidHolder(this.state.data['ownerName']) : true;\n const ibanValid = checkIbanStatus(this.state.data['ibanNumber']).status === 'valid';\n const isValid = ibanValid && holderNameValid;\n const data = { data: this.state.data, isValid, errors: this.state.errors };\n\n this.props.onChange(data);\n }\n\n public setError = (key, value, cb?) => {\n this.setState(prevState => ({ errors: { ...prevState.errors, [key]: value } }), cb);\n };\n\n public handleHolderInput = holder => {\n this.setState(\n prevState => ({ data: { ...prevState.data, ownerName: holder } }),\n () => {\n const holderStatus = isValidHolder(this.state.data['ownerName']);\n const holderErr = holderStatus && !holderStatus ? ibanHolderNameErrorObj : null;\n\n this.setError('holder', holderErr, this.onChange);\n }\n );\n };\n\n public handleIbanInput = e => {\n const inputValue = e.target.value;\n const electronicFormatIban = electronicFormat(inputValue); // example: NL13TEST0123456789\n const iban = formatIban(electronicFormatIban); // example: NL13 TEST 0123 4567 89\n const validationStatus = checkIbanStatus(iban).status;\n\n const countryCode = getCountryCode(electronicFormatIban);\n\n // calculate cursor's new position\n const cursor = e.target.selectionStart;\n const previousIban = this.state.data['ibanNumber'];\n const newCursorPosition = getNextCursorPosition(cursor, iban, previousIban);\n\n this.setState(\n prevState => ({\n data: { ...prevState.data, ibanNumber: iban, countryCode: countryCode },\n errors: {\n ...prevState.errors,\n iban: validationStatus === 'invalid' ? ibanErrorObj : null\n },\n valid: { ...prevState.valid, iban: validationStatus === 'valid' }\n }),\n () => {\n e.target.setSelectionRange(newCursorPosition, newCursorPosition);\n this.onChange();\n }\n );\n };\n\n public handleIbanBlur = e => {\n const currentIban = e.target.value;\n\n if (currentIban.length > 0) {\n const validationStatus = checkIbanStatus(currentIban).status;\n this.setError('iban', validationStatus === 'valid' ? null : ibanErrorObj, this.onChange);\n } else {\n // Empty field is not in error\n this.setError('iban', null, this.onChange);\n }\n };\n\n showValidation() {\n const validationStatus = checkIbanStatus(this.state.data['ibanNumber']).status;\n const holderStatus = isValidHolder(this.state.data['ownerName']);\n this.setError('iban', validationStatus === 'valid' ? null : ibanErrorObj);\n\n const holderErr = holderStatus ? null : ibanHolderNameErrorObj;\n\n this.setError('holder', holderErr, this.onChange); // add callback param to force propagation of state to parent comp\n }\n\n render({ placeholders }: IbanInputProps, { data, errors, valid }) {\n const { i18n } = useCoreContext();\n return (\n <Fieldset classNameModifiers={['iban-input']} label={this.props.label}>\n {this.props.holderName && (\n <Field\n className={'adyen-checkout__field--owner-name'}\n label={i18n.get('sepa.ownerName')}\n filled={data['ownerName'] && data['ownerName'].length}\n errorMessage={errors.holder ? i18n.get(errors.holder.error) : false}\n dir={'ltr'}\n i18n={i18n}\n name={'ownerName'}\n >\n <InputText\n name={'ownerName'}\n className={'adyen-checkout__iban-input__owner-name'}\n placeholder={placeholders?.ownerName}\n value={data['ownerName']}\n aria-invalid={!!this.state.errors.holder}\n aria-label={i18n.get('sepa.ownerName')}\n onInput={e => this.handleHolderInput((e.target as HTMLInputElement).value)}\n onBlur={e => this.handleHolderInput((e.target as HTMLInputElement).value)}\n autocomplete={'name'}\n />\n </Field>\n )}\n\n <Field\n className={'adyen-checkout__field--iban-number'}\n label={i18n.get('sepa.ibanNumber')}\n errorMessage={errors.iban ? i18n.get(errors.iban.error) : false}\n filled={data['ibanNumber'] && data['ibanNumber'].length}\n isValid={valid.iban}\n onBlur={this.handleIbanBlur}\n dir={'ltr'}\n i18n={i18n}\n name={'ibanNumber'}\n >\n <InputText\n name={'ibanNumber'}\n className={'adyen-checkout__iban-input__iban-number'}\n classNameModifiers={['large']}\n placeholder={placeholders?.ibanNumber}\n value={data['ibanNumber']}\n onInput={this.handleIbanInput}\n aria-invalid={!!this.state.errors.iban}\n aria-label={i18n.get('sepa.ibanNumber')}\n autocorrect={'off'}\n spellcheck={false}\n autocomplete={undefined}\n />\n </Field>\n\n {this.props.showPayButton && this.props.payButton({ status: this.state.status })}\n </Fieldset>\n );\n }\n}\n\nexport default IbanInput;\n"],"names":["ibanHolderNameErrorObj","isValid","errorMessage","error","ibanErrorObj","IbanInput","Component","setStatus","status","this","setState","onChange","holderNameValid","props","holderName","isValidHolder","state","data","checkIbanStatus","errors","showValidation","validationStatus","holderStatus","setError","holderErr","render","placeholders","valid","i18n","useCoreContext","h","Fieldset","classNameModifiers","label","Field","className","get","filled","length","holder","dir","name","InputText","placeholder","ownerName","value","aria-invalid","aria-label","onInput","e","handleHolderInput","target","onBlur","autocomplete","iban","handleIbanBlur","ibanNumber","handleIbanInput","autocorrect","spellcheck","undefined","showPayButton","payButton","constructor","super","_define_property","key","cb","prevState","inputValue","electronicFormatIban","electronicFormat","formatIban","countryCode","getCountryCode","cursor","selectionStart","previousIban","newCursorPosition","getNextCursorPosition","setSelectionRange","currentIban","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"IbanInput.js","sources":["../../../../../src/components/internal/IbanInput/IbanInput.tsx"],"sourcesContent":["import { Component, h } from 'preact';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport Field from '../FormFields/Field';\nimport { checkIbanStatus, isValidHolder } from './validate';\nimport { electronicFormat, formatIban, getCountryCode, getNextCursorPosition } from './utils';\nimport Fieldset from '../FormFields/Fieldset';\nimport { GenericError } from '../../../core/Errors/types';\nimport InputText from '../FormFields/InputText';\n\ninterface IbanInputProps {\n holderName?: boolean;\n placeholders?: Omit<IbanData, 'countryCode'>;\n countryCode?: string;\n showPayButton?: boolean;\n payButton?: any;\n onChange: (data) => void;\n label: string;\n data: IbanData;\n}\n\ninterface IbanData {\n ownerName?: string;\n ibanNumber?: string;\n countryCode?: string;\n}\n\ninterface IbanInputState {\n data: any;\n errors: any;\n valid: any;\n status: string;\n isValid: boolean;\n cursor: number;\n}\n\nconst ibanHolderNameErrorObj: GenericError = {\n isValid: false,\n errorMessage: 'ach.accountHolderNameField.invalid', // TODO create bespoke translation key\n error: 'ach.accountHolderNameField.invalid'\n};\n\nconst ibanErrorObj: GenericError = {\n isValid: false,\n errorMessage: 'sepaDirectDebit.ibanField.invalid',\n error: 'sepaDirectDebit.ibanField.invalid'\n};\n\nclass IbanInput extends Component<Readonly<IbanInputProps>, IbanInputState> {\n private ibanNumber: HTMLInputElement;\n\n constructor(props) {\n super(props);\n\n this.state = {\n status: 'ready',\n data: {\n ownerName: props?.data?.ownerName || '',\n ibanNumber: props?.data?.ibanNumber || '',\n countryCode: props?.data?.countryCode || ''\n },\n isValid: false,\n cursor: 0,\n errors: {},\n valid: {}\n };\n\n if (this.state.data['ibanNumber']) {\n const electronicFormatIban = electronicFormat(this.state.data['ibanNumber']); // example: NL13TEST0123456789\n this.state.data['ibanNumber'] = formatIban(electronicFormatIban); // example: NL13 TEST 0123 4567 89\n }\n\n if (this.state.data['ibanNumber'] || this.state.data['ownerName']) {\n const holderNameValid = this.props.holderName ? isValidHolder(this.state.data['ownerName']) : '';\n const ibanValid = this.state.data['ibanNumber'] ? checkIbanStatus(this.state.data['ibanNumber']).status === 'valid' : '';\n const isValid = ibanValid && holderNameValid;\n const data = { data: this.state.data, isValid };\n\n this.props.onChange(data);\n }\n }\n\n public static readonly defaultProps = {\n onChange: () => {},\n countryCode: null,\n holderName: true,\n placeholders: {},\n label: null\n };\n\n setStatus(status) {\n this.setState({ status });\n }\n\n onChange() {\n const holderNameValid = this.props.holderName ? isValidHolder(this.state.data['ownerName']) : true;\n const ibanValid = checkIbanStatus(this.state.data['ibanNumber']).status === 'valid';\n const isValid = ibanValid && holderNameValid;\n const data = { data: this.state.data, isValid, errors: this.state.errors };\n\n this.props.onChange(data);\n }\n\n public setData = (key, value, cb?) => {\n this.setState(prevState => ({ data: { ...prevState.data, [key]: value } }), cb);\n };\n\n public setError = (key, value, cb?) => {\n this.setState(prevState => ({ errors: { ...prevState.errors, [key]: value } }), cb);\n };\n\n public setValid = (key, value, cb?) => {\n this.setState(prevState => ({ valid: { ...prevState.valid, [key]: value } }), cb);\n };\n\n public handleHolderInput = holder => {\n this.setState(\n prevState => ({ data: { ...prevState.data, ownerName: holder } }),\n () => {\n const holderStatus = isValidHolder(this.state.data['ownerName']);\n const holderErr =\n holderStatus != null && !holderStatus // *don't* consider null, i.e. a value that has just been deleted, to be in error\n ? ibanHolderNameErrorObj\n : null;\n\n this.setError('holder', holderErr, this.onChange);\n }\n );\n };\n\n public handleIbanInput = e => {\n const inputValue = e.target.value;\n const electronicFormatIban = electronicFormat(inputValue); // example: NL13TEST0123456789\n const iban = formatIban(electronicFormatIban); // example: NL13 TEST 0123 4567 89\n const validationStatus = checkIbanStatus(iban).status;\n\n const countryCode = getCountryCode(electronicFormatIban);\n\n // calculate cursor's new position\n const cursor = e.target.selectionStart;\n const previousIban = this.state.data['ibanNumber'];\n const newCursorPosition = getNextCursorPosition(cursor, iban, previousIban);\n\n this.setState(\n prevState => ({\n data: { ...prevState.data, ibanNumber: iban, countryCode: countryCode },\n errors: {\n ...prevState.errors,\n iban: validationStatus === 'invalid' ? ibanErrorObj : null\n },\n valid: { ...prevState.valid, iban: validationStatus === 'valid' }\n }),\n () => {\n e.target.setSelectionRange(newCursorPosition, newCursorPosition);\n this.onChange();\n }\n );\n };\n\n public handleIbanBlur = e => {\n const currentIban = e.target.value;\n\n if (currentIban.length > 0) {\n const validationStatus = checkIbanStatus(currentIban).status;\n this.setError('iban', validationStatus !== 'valid' ? ibanErrorObj : null, this.onChange);\n } else {\n // Empty field is not in error\n this.setError('iban', null, this.onChange);\n }\n };\n\n showValidation() {\n const validationStatus = checkIbanStatus(this.state.data['ibanNumber']).status;\n const holderStatus = isValidHolder(this.state.data['ownerName']);\n this.setError('iban', validationStatus !== 'valid' ? ibanErrorObj : null);\n\n const holderErr = !holderStatus // *do* consider null, i.e. an empty field, to be in error\n ? ibanHolderNameErrorObj\n : null;\n\n this.setError('holder', holderErr, this.onChange); // add callback param to force propagation of state to parent comp\n }\n\n render({ placeholders }: IbanInputProps, { data, errors, valid }) {\n const { i18n } = useCoreContext();\n return (\n <Fieldset classNameModifiers={['iban-input']} label={this.props.label}>\n {this.props.holderName && (\n <Field\n className={'adyen-checkout__field--owner-name'}\n label={i18n.get('sepa.ownerName')}\n filled={data['ownerName'] && data['ownerName'].length}\n errorMessage={errors.holder ? i18n.get(errors.holder.error) : false}\n dir={'ltr'}\n i18n={i18n}\n name={'ownerName'}\n >\n <InputText\n name={'ownerName'}\n className={'adyen-checkout__iban-input__owner-name'}\n placeholder={placeholders?.ownerName}\n value={data['ownerName']}\n aria-invalid={!!this.state.errors.holder}\n aria-label={i18n.get('sepa.ownerName')}\n onInput={e => this.handleHolderInput((e.target as HTMLInputElement).value)}\n onBlur={e => this.handleHolderInput((e.target as HTMLInputElement).value)}\n autocomplete={'name'}\n />\n </Field>\n )}\n\n <Field\n className={'adyen-checkout__field--iban-number'}\n label={i18n.get('sepa.ibanNumber')}\n errorMessage={errors.iban ? i18n.get(errors.iban.error) : false}\n filled={data['ibanNumber'] && data['ibanNumber'].length}\n isValid={valid.iban}\n onBlur={this.handleIbanBlur}\n dir={'ltr'}\n i18n={i18n}\n name={'ibanNumber'}\n >\n <InputText\n setRef={ref => {\n this.ibanNumber = ref;\n }}\n name={'ibanNumber'}\n className={'adyen-checkout__iban-input__iban-number'}\n classNameModifiers={['large']}\n placeholder={placeholders?.ibanNumber}\n value={data['ibanNumber']}\n onInput={this.handleIbanInput}\n aria-invalid={!!this.state.errors.iban}\n aria-label={i18n.get('sepa.ibanNumber')}\n autocorrect={'off'}\n spellcheck={false}\n autocomplete={undefined}\n />\n </Field>\n\n {this.props.showPayButton && this.props.payButton({ status: this.state.status })}\n </Fieldset>\n );\n }\n}\n\nexport default IbanInput;\n"],"names":["ibanHolderNameErrorObj","isValid","errorMessage","error","ibanErrorObj","IbanInput","Component","setStatus","status","this","setState","onChange","holderNameValid","props","holderName","isValidHolder","state","data","checkIbanStatus","errors","showValidation","validationStatus","holderStatus","setError","holderErr","render","placeholders","valid","i18n","useCoreContext","h","Fieldset","classNameModifiers","label","Field","className","get","filled","length","holder","dir","name","InputText","placeholder","ownerName","value","aria-invalid","aria-label","onInput","e","handleHolderInput","target","onBlur","autocomplete","iban","handleIbanBlur","setRef","ref","ibanNumber","handleIbanInput","autocorrect","spellcheck","undefined","showPayButton","payButton","constructor","super","_define_property","setData","key","cb","prevState","setValid","inputValue","electronicFormatIban","electronicFormat","formatIban","countryCode","getCountryCode","cursor","selectionStart","previousIban","newCursorPosition","getNextCursorPosition","setSelectionRange","currentIban","defaultProps"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{electronicFormat as t,getCountryCode as n,getIbanCountrySpecification as e,iso13616Prepare as i,iso7064Mod97_10 as l,regex as s}from"./utils.js";import{isEmpty as o}from"../../../utils/validator-utils.js";function r(t,n=null){this.status=t,this.code=n}const a=n=>{const e=t(n),o=i(e);return 1===l(o)&&(t=>{const n=t.slice(0,2),e=s(t,n);return e.test&&e.test(t.slice(4))||!1})(e)},u=i=>{const l=t(i);if(i.length<2)return new r("no-validate","TOO_SHORT");const s=n(l),o=e(s);return o?l.length>o.length?new r("invalid","TOO_LONG"):l.length===o.length?a(i)?new r("valid","VALID"):new r("invalid","INVALID_IBAN"):new r("no-validate","UNKNOWN"):new r("invalid","INVALID_COUNTRY")},c=t=>!o(t);export{u as checkIbanStatus,c as isValidHolder,a as isValidIBAN};
1
+ import{electronicFormat as t,getCountryCode as n,getIbanCountrySpecification as e,iso13616Prepare as i,iso7064Mod97_10 as l,regex as s}from"./utils.js";import{isEmpty as o}from"../../../utils/validator-utils.js";function r(t,n=null){this.status=t,this.code=n}const a=n=>{const e=t(n),o=i(e);return 1===l(o)&&(t=>{const n=t.slice(0,2),e=s(t,n);return e.test&&e.test(t.slice(4))||!1})(e)},u=i=>{const l=t(i);if(i.length<2)return new r("no-validate","TOO_SHORT");const s=n(l),o=e(s);return o?l.length>o.length?new r("invalid","TOO_LONG"):l.length===o.length?a(i)?new r("valid","VALID"):new r("invalid","INVALID_IBAN"):new r("no-validate","UNKNOWN"):new r("invalid","INVALID_COUNTRY")},c=t=>!o(t)||null;export{u as checkIbanStatus,c as isValidHolder,a as isValidIBAN};
2
2
  //# sourceMappingURL=validate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sources":["../../../../../src/components/internal/IbanInput/validate.ts"],"sourcesContent":["import { iso13616Prepare, iso7064Mod97_10, electronicFormat, regex, getIbanCountrySpecification, getCountryCode } from './utils';\nimport { isEmpty } from '../../../utils/validator-utils';\n\n/**\n * Contains a validation status\n * @internal\n * @param status -\n * @param code -\n */\nfunction ValidationStatus(status, code = null) {\n this.status = status;\n this.code = code;\n}\n\n/**\n * Validates the format of an iban\n * @internal\n * @param iban -\n */\nconst checkIbanStructure = iban => {\n const countryCode = iban.slice(0, 2);\n const ibanRegex = regex(iban, countryCode);\n\n return ((ibanRegex as RegExp).test && (ibanRegex as RegExp).test(iban.slice(4))) || false;\n};\n\n/**\n * Checks validity of an IBAN\n * @param iban -\n */\nexport const isValidIBAN = iban => {\n const electronicFormatIban = electronicFormat(iban);\n const preparedIban = iso13616Prepare(electronicFormatIban);\n const isValidISO = iso7064Mod97_10(preparedIban) === 1;\n\n return isValidISO && checkIbanStructure(electronicFormatIban);\n};\n\n/**\n * Checkss the validity status of an IBAN\n * @param iban -\n */\nexport const checkIbanStatus = iban => {\n const electronicFormatIban = electronicFormat(iban);\n\n if (iban.length < 2) {\n return new ValidationStatus('no-validate', 'TOO_SHORT'); // A\n }\n\n const countryCode = getCountryCode(electronicFormatIban);\n const countrySpecification = getIbanCountrySpecification(countryCode);\n\n if (!countrySpecification) {\n return new ValidationStatus('invalid', 'INVALID_COUNTRY'); // AA13TEST0123456789\n }\n\n if (electronicFormatIban.length > countrySpecification.length) {\n return new ValidationStatus('invalid', 'TOO_LONG'); // NL13TEST01234567891\n }\n\n if (electronicFormatIban.length === countrySpecification.length) {\n if (isValidIBAN(iban)) {\n return new ValidationStatus('valid', 'VALID'); // NL13TEST0123456789\n }\n\n return new ValidationStatus('invalid', 'INVALID_IBAN'); // NL13TEST0123456781\n }\n\n return new ValidationStatus('no-validate', 'UNKNOWN'); // NL13TEST012345678\n};\n\n/**\n * Checks validity of a holder name\n */\nexport const isValidHolder = (value: string) => !isEmpty(value);\n"],"names":["ValidationStatus","status","code","this","isValidIBAN","iban","electronicFormatIban","electronicFormat","preparedIban","iso13616Prepare","iso7064Mod97_10","countryCode","slice","ibanRegex","regex","test","checkIbanStructure","checkIbanStatus","length","getCountryCode","countrySpecification","getIbanCountrySpecification","isValidHolder","value","isEmpty"],"mappings":"oNASA,SAASA,EAAiBC,EAAQC,EAAO,MACrCC,KAAKF,OAASA,EACdE,KAAKD,KAAOA,CAChB,CAOA,MAWaE,EAAcC,IACvB,MAAMC,EAAuBC,EAAiBF,GACxCG,EAAeC,EAAgBH,GAGrC,OAFqD,IAAlCI,EAAgBF,IAdZH,CAAAA,IACvB,MAAMM,EAAcN,EAAKO,MAAM,EAAG,GAC5BC,EAAYC,EAAMT,EAAMM,GAE9B,OAASE,EAAqBE,MAASF,EAAqBE,KAAKV,EAAKO,MAAM,MAAQ,GAY/DI,CAAmBV,IAO/BW,EAAkBZ,IAC3B,MAAMC,EAAuBC,EAAiBF,GAE9C,GAAIA,EAAKa,OAAS,EACd,OAAO,IAAIlB,EAAiB,cAAe,aAG/C,MAAMW,EAAcQ,EAAeb,GAC7Bc,EAAuBC,EAA4BV,GAEzD,OAAKS,EAIDd,EAAqBY,OAASE,EAAqBF,OAC5C,IAAIlB,EAAiB,UAAW,YAGvCM,EAAqBY,SAAWE,EAAqBF,OACjDd,EAAYC,GACL,IAAIL,EAAiB,QAAS,SAGlC,IAAIA,EAAiB,UAAW,gBAGpC,IAAIA,EAAiB,cAAe,WAfhC,IAAIA,EAAiB,UAAW,oBAqBlCsB,EAAiBC,IAAmBC,EAAQD"}
1
+ {"version":3,"file":"validate.js","sources":["../../../../../src/components/internal/IbanInput/validate.ts"],"sourcesContent":["import { iso13616Prepare, iso7064Mod97_10, electronicFormat, regex, getIbanCountrySpecification, getCountryCode } from './utils';\nimport { isEmpty } from '../../../utils/validator-utils';\n\n/**\n * Contains a validation status\n * @internal\n * @param status -\n * @param code -\n */\nfunction ValidationStatus(status, code = null) {\n this.status = status;\n this.code = code;\n}\n\n/**\n * Validates the format of an iban\n * @internal\n * @param iban -\n */\nconst checkIbanStructure = iban => {\n const countryCode = iban.slice(0, 2);\n const ibanRegex = regex(iban, countryCode);\n\n return ((ibanRegex as RegExp).test && (ibanRegex as RegExp).test(iban.slice(4))) || false;\n};\n\n/**\n * Checks validity of an IBAN\n * @param iban -\n */\nexport const isValidIBAN = iban => {\n const electronicFormatIban = electronicFormat(iban);\n const preparedIban = iso13616Prepare(electronicFormatIban);\n const isValidISO = iso7064Mod97_10(preparedIban) === 1;\n\n return isValidISO && checkIbanStructure(electronicFormatIban);\n};\n\n/**\n * Checkss the validity status of an IBAN\n * @param iban -\n */\nexport const checkIbanStatus = iban => {\n const electronicFormatIban = electronicFormat(iban);\n\n if (iban.length < 2) {\n return new ValidationStatus('no-validate', 'TOO_SHORT'); // A\n }\n\n const countryCode = getCountryCode(electronicFormatIban);\n const countrySpecification = getIbanCountrySpecification(countryCode);\n\n if (!countrySpecification) {\n return new ValidationStatus('invalid', 'INVALID_COUNTRY'); // AA13TEST0123456789\n }\n\n if (electronicFormatIban.length > countrySpecification.length) {\n return new ValidationStatus('invalid', 'TOO_LONG'); // NL13TEST01234567891\n }\n\n if (electronicFormatIban.length === countrySpecification.length) {\n if (isValidIBAN(iban)) {\n return new ValidationStatus('valid', 'VALID'); // NL13TEST0123456789\n }\n\n return new ValidationStatus('invalid', 'INVALID_IBAN'); // NL13TEST0123456781\n }\n\n return new ValidationStatus('no-validate', 'UNKNOWN'); // NL13TEST012345678\n};\n\n/**\n * Checks validity of a holder name\n */\nexport const isValidHolder = value => (isEmpty(value) ? null : true); // true, if there are chars other than spaces\n"],"names":["ValidationStatus","status","code","this","isValidIBAN","iban","electronicFormatIban","electronicFormat","preparedIban","iso13616Prepare","iso7064Mod97_10","countryCode","slice","ibanRegex","regex","test","checkIbanStructure","checkIbanStatus","length","getCountryCode","countrySpecification","getIbanCountrySpecification","isValidHolder","value","isEmpty"],"mappings":"oNASA,SAASA,EAAiBC,EAAQC,EAAO,MACrCC,KAAKF,OAASA,EACdE,KAAKD,KAAOA,CAChB,CAOA,MAWaE,EAAcC,IACvB,MAAMC,EAAuBC,EAAiBF,GACxCG,EAAeC,EAAgBH,GAGrC,OAFqD,IAAlCI,EAAgBF,IAdZH,CAAAA,IACvB,MAAMM,EAAcN,EAAKO,MAAM,EAAG,GAC5BC,EAAYC,EAAMT,EAAMM,GAE9B,OAASE,EAAqBE,MAASF,EAAqBE,KAAKV,EAAKO,MAAM,MAAQ,GAY/DI,CAAmBV,IAO/BW,EAAkBZ,IAC3B,MAAMC,EAAuBC,EAAiBF,GAE9C,GAAIA,EAAKa,OAAS,EACd,OAAO,IAAIlB,EAAiB,cAAe,aAG/C,MAAMW,EAAcQ,EAAeb,GAC7Bc,EAAuBC,EAA4BV,GAEzD,OAAKS,EAIDd,EAAqBY,OAASE,EAAqBF,OAC5C,IAAIlB,EAAiB,UAAW,YAGvCM,EAAqBY,SAAWE,EAAqBF,OACjDd,EAAYC,GACL,IAAIL,EAAiB,QAAS,SAGlC,IAAIA,EAAiB,UAAW,gBAGpC,IAAIA,EAAiB,cAAe,WAfhC,IAAIA,EAAiB,UAAW,oBAqBlCsB,EAAgBC,IAAUC,EAAQD,IAAS"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../external/preact/dist/preact.js";import{useRef as s,useState as o,useEffect as r}from"../../../external/preact/hooks/dist/hooks.js";import i from"../../../_virtual/index.js";import{useCoreContext as n}from"../../../core/Context/CoreProvider.js";import a from"../CompanyDetails/CompanyDetails.js";import t from"../PersonalDetails/PersonalDetails.js";import l from"../Address/Address.js";import d from"../FormFields/Checkbox/Checkbox.js";import c from"../FormFields/ConsentCheckbox/ConsentCheckbox.js";import{getInitialActiveFieldsets as m,fieldsetsSchema as p,getActiveFieldsData as b}from"./utils.js";import u from"../IbanInput/IbanInput.js";import C from"../FormFields/Field/Field.js";import y from"../FormInstruction/FormInstruction.js";import h from"./useSRPanelForOpenInvoiceErrors.js";const f={isValid:!1,errorMessage:"consent.checkbox.invalid",error:"consent.checkbox.invalid"};function A(A){const{countryCode:v,visibility:k}=A,{i18n:g}=n(),x=s(!1),D=s(null),F=m(k,A.data),[j,R]=o(F),{current:w}=s(p.reduce((e,s)=>(e[s]=e=>{w[s].current=e},e),{})),E=!!A.consentCheckboxLabel,I=!E&&Object.keys(j).every(e=>!j[e]),S="editable"===k.deliveryAddress&&"hidden"!==k.billingAddress,[V,q]=o({...A.data,...E&&{consentCheckbox:!1}}),[P,M]=o({}),[N,_]=o({}),[L,O]=o("ready"),B=s({setStatus:O,showValidation:()=>{}});B.current.showValidation=()=>{x.current=!0,p.forEach(e=>{w[e].current&&w[e].current.showValidation()}),M({...E&&{consentCheckbox:V.consentCheckbox?null:f}})},r(()=>{A.setComponentRef?.(B.current)},[A.setComponentRef]),h({errors:P,data:V,props:A,isValidating:x,containerRef:D}),r(()=>{const e=Object.keys(j).every(e=>!j[e]||!!N[e]),s=!E||!!N.consentCheckbox,o=e&&s,r=b(j,V);A.onChange({data:r,errors:P,valid:N,isValid:o})},[V,j]);const z=e=>s=>{q(o=>({...o,[e]:s.data})),_(o=>({...o,[e]:s.isValid})),M(o=>({...o,[e]:s.errors}))};return e("div",{ref:D,className:i({"adyen-checkout__open-invoice":!0,"adyen-checkout__open-invoice--loading":"loading"===L})},e(y,null),j.companyDetails&&e(a,{data:A.data.companyDetails,label:"companyDetails",onChange:z("companyDetails"),setComponentRef:w.companyDetails,visibility:k.companyDetails}),j.personalDetails&&e(t,{data:A.data.personalDetails,requiredFields:A.personalDetailsRequiredFields,label:"personalDetails",onChange:z("personalDetails"),setComponentRef:w.personalDetails,visibility:k.personalDetails}),j.bankAccount&&e(u,{holderName:!0,label:"ach.bankAccount",data:V.bankAccount,onChange:z("bankAccount"),ref:w.bankAccount}),j.billingAddress&&e(l,{allowedCountries:A?.billingAddressSpecification?.allowedCountries??A.allowedCountries,countryCode:v,requiredFields:A.billingAddressRequiredFields,specifications:A.billingAddressSpecification,data:V.billingAddress,label:"billingAddress",onChange:z("billingAddress"),setComponentRef:w.billingAddress,visibility:k.billingAddress}),S&&e(C,{classNameModifiers:["separateDeliveryAddress","consentCheckbox"],name:"separateDeliveryAddress",useLabelElement:!1,showErrorElement:!1},e(d,{label:g.get("separateDeliveryAddress"),checked:j.deliveryAddress,classNameModifiers:["separateDeliveryAddress"],name:"separateDeliveryAddress",onChange:()=>{R(e=>({...e,deliveryAddress:!j.deliveryAddress}))}})),j.deliveryAddress&&e(l,{allowedCountries:A?.deliveryAddressSpecification?.allowedCountries??A.allowedCountries,countryCode:v,requiredFields:A.deliveryAddressRequiredFields,specifications:A.deliveryAddressSpecification,data:V.deliveryAddress,label:"deliveryAddress",onChange:z("deliveryAddress"),setComponentRef:w.deliveryAddress,visibility:k.deliveryAddress}),E&&e(c,{data:V,errorMessage:!!P.consentCheckbox,label:A.consentCheckboxLabel,onChange:e=>{const{checked:s}=e.target;q(e=>({...e,consentCheckbox:s})),_(e=>({...e,consentCheckbox:s})),M(e=>({...e,consentCheckbox:s?null:f}))},i18n:g}),A.showPayButton&&A.payButton({status:L,classNameModifiers:[...I?["standalone"]:[]],label:g.get("confirmPurchase")}))}export{A as default};
1
+ import{createElement as e}from"../../../external/preact/dist/preact.js";import{useRef as s,useState as r,useEffect as o}from"../../../external/preact/hooks/dist/hooks.js";import{useCoreContext as i}from"../../../core/Context/CoreProvider.js";import n from"../CompanyDetails/CompanyDetails.js";import t from"../PersonalDetails/PersonalDetails.js";import a from"../Address/Address.js";import l from"../FormFields/Checkbox/Checkbox.js";import d from"../FormFields/ConsentCheckbox/ConsentCheckbox.js";import{getInitialActiveFieldsets as c,fieldsetsSchema as m,getActiveFieldsData as p}from"./utils.js";import u from"../IbanInput/IbanInput.js";import b from"../FormFields/Field/Field.js";import y from"../FormInstruction/FormInstruction.js";import C from"./useSRPanelForOpenInvoiceErrors.js";import h from"../../../_virtual/index.js";const f={isValid:!1,errorMessage:"consent.checkbox.invalid",error:"consent.checkbox.invalid"};function A(A){const{countryCode:v,visibility:k}=A,{i18n:g}=i(),x=s({});Object.keys(x.current).length||A.setComponentRef?.(x.current);const D=s(!1),j=s(null),F=c(k,A.data),[R,w]=r(F),{current:E}=s(m.reduce((e,s)=>(e[s]=e=>{E[s].current=e},e),{})),I=!!A.consentCheckboxLabel,S=!I&&Object.keys(R).every(e=>!R[e]),q="editable"===k.deliveryAddress&&"hidden"!==k.billingAddress,[P,V]=r({...A.data,...I&&{consentCheckbox:!1}}),[M,N]=r({}),[_,O]=r({}),[L,B]=r("ready");x.current.showValidation=()=>{D.current=!0,m.forEach(e=>{E[e].current&&E[e].current.showValidation()}),N({...I&&{consentCheckbox:P.consentCheckbox?null:f}})},x.current.setStatus=B,C({errors:M,data:P,props:A,isValidating:D,containerRef:j}),o(()=>{const e=Object.keys(R).every(e=>!R[e]||!!_[e]),s=!I||!!_.consentCheckbox,r=e&&s,o=p(R,P);A.onChange({data:o,errors:M,valid:_,isValid:r})},[P,R]);const z=e=>s=>{V(r=>({...r,[e]:s.data})),O(r=>({...r,[e]:s.isValid})),N(r=>({...r,[e]:s.errors}))};return e("div",{ref:j,className:h({"adyen-checkout__open-invoice":!0,"adyen-checkout__open-invoice--loading":"loading"===L})},e(y,null),R.companyDetails&&e(n,{data:A.data.companyDetails,label:"companyDetails",onChange:z("companyDetails"),setComponentRef:E.companyDetails,visibility:k.companyDetails}),R.personalDetails&&e(t,{data:A.data.personalDetails,requiredFields:A.personalDetailsRequiredFields,label:"personalDetails",onChange:z("personalDetails"),setComponentRef:E.personalDetails,visibility:k.personalDetails}),R.bankAccount&&e(u,{holderName:!0,label:"ach.bankAccount",data:P.bankAccount,onChange:z("bankAccount"),ref:E.bankAccount}),R.billingAddress&&e(a,{allowedCountries:A?.billingAddressSpecification?.allowedCountries??A.allowedCountries,countryCode:v,requiredFields:A.billingAddressRequiredFields,specifications:A.billingAddressSpecification,data:P.billingAddress,label:"billingAddress",onChange:z("billingAddress"),setComponentRef:E.billingAddress,visibility:k.billingAddress}),q&&e(b,{classNameModifiers:["separateDeliveryAddress","consentCheckbox"],name:"separateDeliveryAddress",useLabelElement:!1,showErrorElement:!1},e(l,{label:g.get("separateDeliveryAddress"),checked:R.deliveryAddress,classNameModifiers:["separateDeliveryAddress"],name:"separateDeliveryAddress",onChange:()=>{w(e=>({...e,deliveryAddress:!R.deliveryAddress}))}})),R.deliveryAddress&&e(a,{allowedCountries:A?.deliveryAddressSpecification?.allowedCountries??A.allowedCountries,countryCode:v,requiredFields:A.deliveryAddressRequiredFields,specifications:A.deliveryAddressSpecification,data:P.deliveryAddress,label:"deliveryAddress",onChange:z("deliveryAddress"),setComponentRef:E.deliveryAddress,visibility:k.deliveryAddress}),I&&e(d,{data:P,errorMessage:!!M.consentCheckbox,label:A.consentCheckboxLabel,onChange:e=>{const{checked:s}=e.target;V(e=>({...e,consentCheckbox:s})),O(e=>({...e,consentCheckbox:s})),N(e=>({...e,consentCheckbox:s?null:f}))},i18n:g}),A.showPayButton&&A.payButton({status:L,classNameModifiers:[...S?["standalone"]:[]],label:g.get("confirmPurchase")}))}export{A as default};
2
2
  //# sourceMappingURL=OpenInvoice.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenInvoice.js","sources":["../../../../../src/components/internal/OpenInvoice/OpenInvoice.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport classNames from 'classnames';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport CompanyDetails from '../CompanyDetails';\nimport PersonalDetails from '../PersonalDetails';\nimport Address from '../Address';\nimport Checkbox from '../FormFields/Checkbox';\nimport ConsentCheckbox from '../FormFields/ConsentCheckbox';\nimport { getActiveFieldsData, getInitialActiveFieldsets, fieldsetsSchema } from './utils';\nimport {\n OpenInvoiceActiveFieldsets,\n OpenInvoiceFieldsetsRefs,\n OpenInvoiceProps,\n OpenInvoiceStateData,\n OpenInvoiceStateError,\n OpenInvoiceStateValid\n} from './types';\nimport IbanInput from '../IbanInput';\nimport { GenericError } from '../../../core/Errors/types';\nimport Field from '../FormFields/Field';\nimport FormInstruction from '../FormInstruction';\nimport { ComponentMethodsRef } from '../UIElement/types';\nimport useSRPanelForOpenInvoiceErrors from './useSRPanelForOpenInvoiceErrors';\nimport './OpenInvoice.scss';\n\nconst consentCBErrorObj: GenericError = {\n isValid: false,\n errorMessage: 'consent.checkbox.invalid',\n error: 'consent.checkbox.invalid'\n};\n\nexport default function OpenInvoice(props: Readonly<OpenInvoiceProps>) {\n const { countryCode, visibility } = props;\n const { i18n } = useCoreContext();\n\n const isValidating = useRef(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const initialActiveFieldsets: OpenInvoiceActiveFieldsets = getInitialActiveFieldsets(visibility, props.data);\n const [activeFieldsets, setActiveFieldsets] = useState<OpenInvoiceActiveFieldsets>(initialActiveFieldsets);\n\n const { current: fieldsetsRefs } = useRef<OpenInvoiceFieldsetsRefs>(\n fieldsetsSchema.reduce((acc, fieldset) => {\n acc[fieldset] = ref => {\n fieldsetsRefs[fieldset].current = ref;\n };\n return acc;\n }, {})\n );\n\n const checkFieldsets = () => Object.keys(activeFieldsets).every(fieldset => !activeFieldsets[fieldset] || !!valid[fieldset]);\n const hasConsentCheckbox = !!props.consentCheckboxLabel;\n const isStandAloneButton = !hasConsentCheckbox && Object.keys(activeFieldsets).every(key => !activeFieldsets[key]);\n const showSeparateDeliveryAddressCheckbox = visibility.deliveryAddress === 'editable' && visibility.billingAddress !== 'hidden';\n\n const [data, setData] = useState<OpenInvoiceStateData>({\n ...props.data,\n ...(hasConsentCheckbox && { consentCheckbox: false })\n });\n const [errors, setErrors] = useState<OpenInvoiceStateError>({});\n const [valid, setValid] = useState<OpenInvoiceStateValid>({});\n const [status, setStatus] = useState('ready');\n\n const openInvoiceRef = useRef<ComponentMethodsRef>({\n setStatus,\n showValidation: () => {}\n });\n\n openInvoiceRef.current.showValidation = () => {\n isValidating.current = true;\n fieldsetsSchema.forEach(fieldset => {\n if (fieldsetsRefs[fieldset].current) fieldsetsRefs[fieldset].current.showValidation();\n });\n\n setErrors({\n ...(hasConsentCheckbox && { consentCheckbox: data.consentCheckbox ? null : consentCBErrorObj })\n });\n };\n\n useEffect(() => {\n props.setComponentRef?.(openInvoiceRef.current);\n }, [props.setComponentRef]);\n\n useSRPanelForOpenInvoiceErrors({ errors, data, props, isValidating, containerRef });\n\n useEffect(() => {\n const fieldsetsAreValid: boolean = checkFieldsets();\n const consentCheckboxValid: boolean = !hasConsentCheckbox || !!valid.consentCheckbox;\n const isValid: boolean = fieldsetsAreValid && consentCheckboxValid;\n const newData: OpenInvoiceStateData = getActiveFieldsData(activeFieldsets, data);\n props.onChange({ data: newData, errors, valid, isValid });\n }, [data, activeFieldsets]);\n\n const handleFieldset = key => state => {\n setData(prevData => ({ ...prevData, [key]: state.data }));\n setValid(prevValid => ({ ...prevValid, [key]: state.isValid }));\n setErrors(prevErrors => ({ ...prevErrors, [key]: state.errors }));\n };\n\n const handleSeparateDeliveryAddress = () => {\n setActiveFieldsets(prevActiveFields => ({\n ...prevActiveFields,\n deliveryAddress: !activeFieldsets.deliveryAddress\n }));\n };\n\n const handleConsentCheckbox = e => {\n const { checked } = e.target;\n setData(prevData => ({ ...prevData, consentCheckbox: checked }));\n setValid(prevValid => ({ ...prevValid, consentCheckbox: checked }));\n setErrors(prevErrors => ({ ...prevErrors, ...{ consentCheckbox: !checked ? consentCBErrorObj : null } }));\n };\n return (\n <div\n ref={containerRef}\n className={classNames({\n 'adyen-checkout__open-invoice': true,\n 'adyen-checkout__open-invoice--loading': status === 'loading'\n })}\n >\n <FormInstruction />\n\n {activeFieldsets.companyDetails && (\n <CompanyDetails\n data={props.data.companyDetails}\n label=\"companyDetails\"\n onChange={handleFieldset('companyDetails')}\n setComponentRef={fieldsetsRefs.companyDetails}\n visibility={visibility.companyDetails}\n />\n )}\n\n {activeFieldsets.personalDetails && (\n <PersonalDetails\n data={props.data.personalDetails}\n requiredFields={props.personalDetailsRequiredFields}\n label=\"personalDetails\"\n onChange={handleFieldset('personalDetails')}\n setComponentRef={fieldsetsRefs.personalDetails}\n visibility={visibility.personalDetails}\n />\n )}\n\n {activeFieldsets.bankAccount && (\n <IbanInput\n holderName={true}\n label=\"ach.bankAccount\"\n data={data.bankAccount}\n onChange={handleFieldset('bankAccount')}\n ref={fieldsetsRefs.bankAccount}\n />\n )}\n\n {activeFieldsets.billingAddress && (\n <Address\n allowedCountries={props?.billingAddressSpecification?.allowedCountries ?? props.allowedCountries}\n countryCode={countryCode}\n requiredFields={props.billingAddressRequiredFields}\n specifications={props.billingAddressSpecification}\n data={data.billingAddress}\n label=\"billingAddress\"\n onChange={handleFieldset('billingAddress')}\n setComponentRef={fieldsetsRefs.billingAddress}\n visibility={visibility.billingAddress}\n />\n )}\n\n {showSeparateDeliveryAddressCheckbox && (\n <Field\n classNameModifiers={['separateDeliveryAddress', 'consentCheckbox']}\n name={'separateDeliveryAddress'}\n useLabelElement={false}\n showErrorElement={false}\n >\n <Checkbox\n label={i18n.get('separateDeliveryAddress')}\n checked={activeFieldsets.deliveryAddress}\n classNameModifiers={['separateDeliveryAddress']}\n name={'separateDeliveryAddress'}\n onChange={handleSeparateDeliveryAddress}\n />\n </Field>\n )}\n\n {activeFieldsets.deliveryAddress && (\n <Address\n allowedCountries={props?.deliveryAddressSpecification?.allowedCountries ?? props.allowedCountries}\n countryCode={countryCode}\n requiredFields={props.deliveryAddressRequiredFields}\n specifications={props.deliveryAddressSpecification}\n data={data.deliveryAddress}\n label=\"deliveryAddress\"\n onChange={handleFieldset('deliveryAddress')}\n setComponentRef={fieldsetsRefs.deliveryAddress}\n visibility={visibility.deliveryAddress}\n />\n )}\n\n {hasConsentCheckbox && (\n <ConsentCheckbox\n data={data}\n errorMessage={!!errors.consentCheckbox}\n label={props.consentCheckboxLabel}\n onChange={handleConsentCheckbox}\n i18n={i18n}\n />\n )}\n\n {props.showPayButton &&\n props.payButton({\n status,\n classNameModifiers: [...(isStandAloneButton ? ['standalone'] : [])],\n label: i18n.get('confirmPurchase')\n })}\n </div>\n );\n}\n"],"names":["consentCBErrorObj","isValid","errorMessage","error","OpenInvoice","props","countryCode","visibility","i18n","useCoreContext","isValidating","useRef","containerRef","initialActiveFieldsets","getInitialActiveFieldsets","data","activeFieldsets","setActiveFieldsets","useState","current","fieldsetsRefs","fieldsetsSchema","reduce","acc","fieldset","ref","hasConsentCheckbox","consentCheckboxLabel","isStandAloneButton","Object","keys","every","key","showSeparateDeliveryAddressCheckbox","deliveryAddress","billingAddress","setData","consentCheckbox","errors","setErrors","valid","setValid","status","setStatus","openInvoiceRef","showValidation","forEach","useEffect","setComponentRef","useSRPanelForOpenInvoiceErrors","fieldsetsAreValid","consentCheckboxValid","newData","getActiveFieldsData","onChange","handleFieldset","state","prevData","prevValid","prevErrors","h","div","className","classNames","FormInstruction","companyDetails","CompanyDetails","label","personalDetails","PersonalDetails","requiredFields","personalDetailsRequiredFields","bankAccount","IbanInput","holderName","Address","allowedCountries","billingAddressSpecification","billingAddressRequiredFields","specifications","Field","classNameModifiers","name","useLabelElement","showErrorElement","Checkbox","get","checked","prevActiveFields","deliveryAddressSpecification","deliveryAddressRequiredFields","ConsentCheckbox","e","target","showPayButton","payButton"],"mappings":"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"}
1
+ {"version":3,"file":"OpenInvoice.js","sources":["../../../../../src/components/internal/OpenInvoice/OpenInvoice.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useEffect, useRef, useState } from 'preact/hooks';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport CompanyDetails from '../CompanyDetails';\nimport PersonalDetails from '../PersonalDetails';\nimport Address from '../Address';\nimport Checkbox from '../FormFields/Checkbox';\nimport ConsentCheckbox from '../FormFields/ConsentCheckbox';\nimport { getActiveFieldsData, getInitialActiveFieldsets, fieldsetsSchema } from './utils';\nimport {\n OpenInvoiceActiveFieldsets,\n OpenInvoiceFieldsetsRefs,\n OpenInvoiceProps,\n OpenInvoiceStateData,\n OpenInvoiceStateError,\n OpenInvoiceStateValid\n} from './types';\nimport './OpenInvoice.scss';\nimport IbanInput from '../IbanInput';\nimport { GenericError } from '../../../core/Errors/types';\nimport Field from '../FormFields/Field';\nimport FormInstruction from '../FormInstruction';\nimport { ComponentMethodsRef } from '../UIElement/types';\nimport useSRPanelForOpenInvoiceErrors from './useSRPanelForOpenInvoiceErrors';\nimport classNames from 'classnames';\n\nconst consentCBErrorObj: GenericError = {\n isValid: false,\n errorMessage: 'consent.checkbox.invalid',\n error: 'consent.checkbox.invalid'\n};\n\nexport default function OpenInvoice(props: Readonly<OpenInvoiceProps>) {\n const { countryCode, visibility } = props;\n const { i18n } = useCoreContext();\n\n /** An object by which to expose 'public' members to the parent UIElement */\n const openInvoiceRef = useRef<ComponentMethodsRef>({});\n // Just call once\n if (!Object.keys(openInvoiceRef.current).length) {\n props.setComponentRef?.(openInvoiceRef.current);\n }\n\n const isValidating = useRef(false);\n const containerRef = useRef<HTMLDivElement>(null);\n\n const initialActiveFieldsets: OpenInvoiceActiveFieldsets = getInitialActiveFieldsets(visibility, props.data);\n const [activeFieldsets, setActiveFieldsets] = useState<OpenInvoiceActiveFieldsets>(initialActiveFieldsets);\n\n const { current: fieldsetsRefs } = useRef<OpenInvoiceFieldsetsRefs>(\n fieldsetsSchema.reduce((acc, fieldset) => {\n acc[fieldset] = ref => {\n fieldsetsRefs[fieldset].current = ref;\n };\n return acc;\n }, {})\n );\n\n const checkFieldsets = () => Object.keys(activeFieldsets).every(fieldset => !activeFieldsets[fieldset] || !!valid[fieldset]);\n const hasConsentCheckbox = !!props.consentCheckboxLabel;\n const isStandAloneButton = !hasConsentCheckbox && Object.keys(activeFieldsets).every(key => !activeFieldsets[key]);\n const showSeparateDeliveryAddressCheckbox = visibility.deliveryAddress === 'editable' && visibility.billingAddress !== 'hidden';\n\n const [data, setData] = useState<OpenInvoiceStateData>({\n ...props.data,\n ...(hasConsentCheckbox && { consentCheckbox: false })\n });\n const [errors, setErrors] = useState<OpenInvoiceStateError>({});\n const [valid, setValid] = useState<OpenInvoiceStateValid>({});\n const [status, setStatus] = useState('ready');\n\n // Expose methods expected by parent\n openInvoiceRef.current.showValidation = () => {\n isValidating.current = true;\n fieldsetsSchema.forEach(fieldset => {\n if (fieldsetsRefs[fieldset].current) fieldsetsRefs[fieldset].current.showValidation();\n });\n\n setErrors({\n ...(hasConsentCheckbox && { consentCheckbox: data.consentCheckbox ? null : consentCBErrorObj })\n });\n };\n\n openInvoiceRef.current.setStatus = setStatus;\n\n useSRPanelForOpenInvoiceErrors({ errors, data, props, isValidating, containerRef });\n\n useEffect(() => {\n const fieldsetsAreValid: boolean = checkFieldsets();\n const consentCheckboxValid: boolean = !hasConsentCheckbox || !!valid.consentCheckbox;\n const isValid: boolean = fieldsetsAreValid && consentCheckboxValid;\n const newData: OpenInvoiceStateData = getActiveFieldsData(activeFieldsets, data);\n props.onChange({ data: newData, errors, valid, isValid });\n }, [data, activeFieldsets]);\n\n const handleFieldset = key => state => {\n setData(prevData => ({ ...prevData, [key]: state.data }));\n setValid(prevValid => ({ ...prevValid, [key]: state.isValid }));\n setErrors(prevErrors => ({ ...prevErrors, [key]: state.errors }));\n };\n\n const handleSeparateDeliveryAddress = () => {\n setActiveFieldsets(prevActiveFields => ({\n ...prevActiveFields,\n deliveryAddress: !activeFieldsets.deliveryAddress\n }));\n };\n\n const handleConsentCheckbox = e => {\n const { checked } = e.target;\n setData(prevData => ({ ...prevData, consentCheckbox: checked }));\n setValid(prevValid => ({ ...prevValid, consentCheckbox: checked }));\n setErrors(prevErrors => ({ ...prevErrors, ...{ consentCheckbox: !checked ? consentCBErrorObj : null } }));\n };\n return (\n <div\n ref={containerRef}\n className={classNames({\n 'adyen-checkout__open-invoice': true,\n 'adyen-checkout__open-invoice--loading': status === 'loading'\n })}\n >\n <FormInstruction />\n\n {activeFieldsets.companyDetails && (\n <CompanyDetails\n data={props.data.companyDetails}\n label=\"companyDetails\"\n onChange={handleFieldset('companyDetails')}\n setComponentRef={fieldsetsRefs.companyDetails}\n visibility={visibility.companyDetails}\n />\n )}\n\n {activeFieldsets.personalDetails && (\n <PersonalDetails\n data={props.data.personalDetails}\n requiredFields={props.personalDetailsRequiredFields}\n label=\"personalDetails\"\n onChange={handleFieldset('personalDetails')}\n setComponentRef={fieldsetsRefs.personalDetails}\n visibility={visibility.personalDetails}\n />\n )}\n\n {activeFieldsets.bankAccount && (\n <IbanInput\n holderName={true}\n label=\"ach.bankAccount\"\n data={data.bankAccount}\n onChange={handleFieldset('bankAccount')}\n ref={fieldsetsRefs.bankAccount}\n />\n )}\n\n {activeFieldsets.billingAddress && (\n <Address\n allowedCountries={props?.billingAddressSpecification?.allowedCountries ?? props.allowedCountries}\n countryCode={countryCode}\n requiredFields={props.billingAddressRequiredFields}\n specifications={props.billingAddressSpecification}\n data={data.billingAddress}\n label=\"billingAddress\"\n onChange={handleFieldset('billingAddress')}\n setComponentRef={fieldsetsRefs.billingAddress}\n visibility={visibility.billingAddress}\n />\n )}\n\n {showSeparateDeliveryAddressCheckbox && (\n <Field\n classNameModifiers={['separateDeliveryAddress', 'consentCheckbox']}\n name={'separateDeliveryAddress'}\n useLabelElement={false}\n showErrorElement={false}\n >\n <Checkbox\n label={i18n.get('separateDeliveryAddress')}\n checked={activeFieldsets.deliveryAddress}\n classNameModifiers={['separateDeliveryAddress']}\n name={'separateDeliveryAddress'}\n onChange={handleSeparateDeliveryAddress}\n />\n </Field>\n )}\n\n {activeFieldsets.deliveryAddress && (\n <Address\n allowedCountries={props?.deliveryAddressSpecification?.allowedCountries ?? props.allowedCountries}\n countryCode={countryCode}\n requiredFields={props.deliveryAddressRequiredFields}\n specifications={props.deliveryAddressSpecification}\n data={data.deliveryAddress}\n label=\"deliveryAddress\"\n onChange={handleFieldset('deliveryAddress')}\n setComponentRef={fieldsetsRefs.deliveryAddress}\n visibility={visibility.deliveryAddress}\n />\n )}\n\n {hasConsentCheckbox && (\n <ConsentCheckbox\n data={data}\n errorMessage={!!errors.consentCheckbox}\n label={props.consentCheckboxLabel}\n onChange={handleConsentCheckbox}\n i18n={i18n}\n />\n )}\n\n {props.showPayButton &&\n props.payButton({\n status,\n classNameModifiers: [...(isStandAloneButton ? ['standalone'] : [])],\n label: i18n.get('confirmPurchase')\n })}\n </div>\n );\n}\n"],"names":["consentCBErrorObj","isValid","errorMessage","error","OpenInvoice","props","countryCode","visibility","i18n","useCoreContext","openInvoiceRef","useRef","Object","keys","current","length","setComponentRef","isValidating","containerRef","initialActiveFieldsets","getInitialActiveFieldsets","data","activeFieldsets","setActiveFieldsets","useState","fieldsetsRefs","fieldsetsSchema","reduce","acc","fieldset","ref","hasConsentCheckbox","consentCheckboxLabel","isStandAloneButton","every","key","showSeparateDeliveryAddressCheckbox","deliveryAddress","billingAddress","setData","consentCheckbox","errors","setErrors","valid","setValid","status","setStatus","showValidation","forEach","useSRPanelForOpenInvoiceErrors","useEffect","fieldsetsAreValid","consentCheckboxValid","newData","getActiveFieldsData","onChange","handleFieldset","state","prevData","prevValid","prevErrors","h","div","className","classNames","FormInstruction","companyDetails","CompanyDetails","label","personalDetails","PersonalDetails","requiredFields","personalDetailsRequiredFields","bankAccount","IbanInput","holderName","Address","allowedCountries","billingAddressSpecification","billingAddressRequiredFields","specifications","Field","classNameModifiers","name","useLabelElement","showErrorElement","Checkbox","get","checked","prevActiveFields","deliveryAddressSpecification","deliveryAddressRequiredFields","ConsentCheckbox","e","target","showPayButton","payButton"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../external/preact/dist/preact.js";import{useEffect as r,useRef as t,useCallback as o}from"../../../external/preact/hooks/dist/hooks.js";import s from"../../../utils/useForm/useForm.js";import"../SecuredFields/lib/CSF/utils/userAgent.js";import{useCoreContext as i}from"../../../core/Context/CoreProvider.js";import{phoneValidationRules as n,phoneFormatters as a}from"./validate.js";import l from"../FormFields/Fieldset/Fieldset.js";import m from"./PhoneInputFields.js";function u(u){const{i18n:p}=i(),d=u.requiredFields||[...u?.items?.length?["phonePrefix"]:[],"phoneNumber"],f=d.includes("phonePrefix")&&!!u?.items?.length,h=d.includes("phoneNumber"),c=s({...u,schema:d,defaultData:u.data,rules:n,formatters:a});r(()=>{c.setSchema(d)},[d.toString()]);const{data:g,valid:F,errors:b,isValid:j,triggerValidation:x}=c;r(()=>{u.onChange({data:g,valid:F,errors:b,isValid:j})},[g,F,b,j]);const C=t({showValidation:x});r(()=>{u.setComponentRef(C.current)},[u.setComponentRef]);const N=o(e=>{if(b[e]){const r="phoneNumber"===e?"phoneNumberErrorKey":"phonePrefixErrorKey",t=u[r]?u[r]:b[e].errorMessage;return"string"==typeof t?p.get(t):null}return null},[b]);return e(l,{classNameModifiers:["phone-input"]},e(m,{getError:N,showNumber:h,showPrefix:f,form:c,...u}))}u.defaultProps={phoneLabel:"telephoneNumber"};export{u as default};
1
+ import{createElement as e}from"../../../external/preact/dist/preact.js";import{useEffect as r,useRef as o,useCallback as t}from"../../../external/preact/hooks/dist/hooks.js";import s from"../../../utils/useForm/useForm.js";import"../SecuredFields/lib/CSF/utils/userAgent.js";import{useCoreContext as i}from"../../../core/Context/CoreProvider.js";import{phoneValidationRules as n,phoneFormatters as a}from"./validate.js";import l from"../FormFields/Fieldset/Fieldset.js";import m from"./PhoneInputFields.js";function u(u){const{i18n:d}=i(),p=u.requiredFields||[...u?.items?.length?["phonePrefix"]:[],"phoneNumber"],f=p.includes("phonePrefix")&&!!u?.items?.length,h=p.includes("phoneNumber"),c=s({...u,schema:p,defaultData:u.data,rules:n,formatters:a});r(()=>{c.setSchema(p)},[p.toString()]);const{data:g,valid:F,errors:b,isValid:j,triggerValidation:x}=c;r(()=>{u.onChange({data:g,valid:F,errors:b,isValid:j})},[g,F,b,j]);const C=o({showValidation:x});r(()=>{u.setComponentRef(C.current)},[u.setComponentRef]);const N=t(e=>{if(b[e]){const r="phoneNumber"===e?"phoneNumberErrorKey":"phonePrefixErrorKey",o=u[r]?u[r]:b[e].errorMessage;return d.get(o)??null}return null},[b]);return e(l,{classNameModifiers:["phone-input"]},e(m,{getError:N,showNumber:h,showPrefix:f,form:c,...u}))}u.defaultProps={phoneLabel:"telephoneNumber"};export{u as default};
2
2
  //# sourceMappingURL=PhoneInputForm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PhoneInputForm.js","sources":["../../../../../src/components/internal/PhoneInput/PhoneInputForm.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useEffect, useCallback, useRef } from 'preact/hooks';\nimport useForm from '../../../utils/useForm';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport './PhoneInput.scss';\nimport { phoneFormatters, phoneValidationRules } from './validate';\nimport { PhoneInputFormProps, PhoneInputSchema } from './types';\nimport Fieldset from '../FormFields/Fieldset';\nimport PhoneInputFields from './PhoneInputFields';\nimport { ComponentMethodsRef } from '../UIElement/types';\n\n/**\n *\n * @param PhoneInputFormProps\n * @constructor\n */\nfunction PhoneInputForm(props: Readonly<PhoneInputFormProps>) {\n const { i18n } = useCoreContext();\n\n const schema = props.requiredFields || [...(props?.items?.length ? ['phonePrefix'] : []), 'phoneNumber'];\n const showPrefix = schema.includes('phonePrefix') && !!props?.items?.length;\n const showNumber = schema.includes('phoneNumber');\n\n const form = useForm<PhoneInputSchema>({\n i18n,\n ...props,\n schema,\n defaultData: props.data,\n rules: phoneValidationRules,\n formatters: phoneFormatters\n });\n\n useEffect(() => {\n form.setSchema(schema);\n }, [schema.toString()]);\n\n const { data, valid, errors, isValid, triggerValidation } = form;\n\n useEffect(() => {\n props.onChange({ data, valid, errors, isValid });\n }, [data, valid, errors, isValid]);\n\n const componentRef = useRef<ComponentMethodsRef>({\n showValidation: triggerValidation\n });\n\n useEffect(() => {\n props.setComponentRef(componentRef.current);\n }, [props.setComponentRef]);\n\n // This is here for MBWay, prob should be moved up\n // MBWay has a weird way of loading its error messages\n // They come form the prop phoneNumberErrorKey: 'mobileNumber.invalid'\n // Strangely it's defined as invalidPhoneNumber in the validation rules\n const getPhoneFieldError = useCallback(\n (field: string) => {\n if (errors[field]) {\n const propsField = field === 'phoneNumber' ? 'phoneNumberErrorKey' : 'phonePrefixErrorKey';\n const key = props[propsField] ? props[propsField] : errors[field].errorMessage;\n return typeof key === 'string' ? i18n.get(key) : null;\n }\n return null;\n },\n [errors]\n );\n\n return (\n <Fieldset classNameModifiers={['phone-input']}>\n <PhoneInputFields getError={getPhoneFieldError} showNumber={showNumber} showPrefix={showPrefix} form={form} {...props} />\n </Fieldset>\n );\n}\n\nPhoneInputForm.defaultProps = {\n phoneLabel: 'telephoneNumber'\n};\n\nexport default PhoneInputForm;\n"],"names":["PhoneInputForm","props","i18n","useCoreContext","schema","requiredFields","items","length","showPrefix","includes","showNumber","form","useForm","defaultData","data","rules","phoneValidationRules","formatters","phoneFormatters","useEffect","setSchema","toString","valid","errors","isValid","triggerValidation","onChange","componentRef","useRef","showValidation","setComponentRef","current","getPhoneFieldError","useCallback","field","propsField","key","errorMessage","get","h","Fieldset","classNameModifiers","PhoneInputFields","getError","defaultProps","phoneLabel"],"mappings":"2fAgBA,SAASA,EAAeC,GACpB,MAAMC,KAAEA,GAASC,IAEXC,EAASH,EAAMI,gBAAkB,IAAKJ,GAAOK,OAAOC,OAAS,CAAC,eAAiB,GAAK,eACpFC,EAAaJ,EAAOK,SAAS,kBAAoBR,GAAOK,OAAOC,OAC/DG,EAAaN,EAAOK,SAAS,eAE7BE,EAAOC,EAA0B,IAEhCX,EACHG,SACAS,YAAaZ,EAAMa,KACnBC,MAAOC,EACPC,WAAYC,IAGhBC,EAAU,KACNR,EAAKS,UAAUhB,IAChB,CAACA,EAAOiB,aAEX,MAAMP,KAAEA,EAAIQ,MAAEA,EAAKC,OAAEA,EAAMC,QAAEA,EAAOC,kBAAEA,GAAsBd,EAE5DQ,EAAU,KACNlB,EAAMyB,SAAS,CAAEZ,OAAMQ,QAAOC,SAAQC,aACvC,CAACV,EAAMQ,EAAOC,EAAQC,IAEzB,MAAMG,EAAeC,EAA4B,CAC7CC,eAAgBJ,IAGpBN,EAAU,KACNlB,EAAM6B,gBAAgBH,EAAaI,UACpC,CAAC9B,EAAM6B,kBAMV,MAAME,EAAqBC,EACtBC,IACG,GAAIX,EAAOW,GAAQ,CACf,MAAMC,EAAuB,gBAAVD,EAA0B,sBAAwB,sBAC/DE,EAAMnC,EAAMkC,GAAclC,EAAMkC,GAAcZ,EAAOW,GAAOG,aAClE,MAAsB,iBAARD,EAAmBlC,EAAKoC,IAAIF,GAAO,IACrD,CACA,OAAO,MAEX,CAACb,IAGL,OACIgB,EAACC,EAAAA,CAASC,mBAAoB,CAAC,gBAC3BF,EAACG,EAAAA,CAAiBC,SAAUX,EAAoBtB,WAAYA,EAAYF,WAAYA,EAAYG,KAAMA,KAAUV,IAG5H,CAEAD,EAAe4C,aAAe,CAC1BC,WAAY"}
1
+ {"version":3,"file":"PhoneInputForm.js","sources":["../../../../../src/components/internal/PhoneInput/PhoneInputForm.tsx"],"sourcesContent":["import { h } from 'preact';\nimport { useEffect, useCallback, useRef } from 'preact/hooks';\nimport useForm from '../../../utils/useForm';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport './PhoneInput.scss';\nimport { phoneFormatters, phoneValidationRules } from './validate';\nimport { PhoneInputFormProps, PhoneInputSchema } from './types';\nimport Fieldset from '../FormFields/Fieldset';\nimport PhoneInputFields from './PhoneInputFields';\nimport { ComponentMethodsRef } from '../UIElement/types';\n\n/**\n *\n * @param PhoneInputFormProps\n * @constructor\n */\nfunction PhoneInputForm(props: Readonly<PhoneInputFormProps>) {\n const { i18n } = useCoreContext();\n\n const schema = props.requiredFields || [...(props?.items?.length ? ['phonePrefix'] : []), 'phoneNumber'];\n const showPrefix = schema.includes('phonePrefix') && !!props?.items?.length;\n const showNumber = schema.includes('phoneNumber');\n\n const form = useForm<PhoneInputSchema>({\n i18n,\n ...props,\n schema,\n defaultData: props.data,\n rules: phoneValidationRules,\n formatters: phoneFormatters\n });\n\n useEffect(() => {\n form.setSchema(schema);\n }, [schema.toString()]);\n\n const { data, valid, errors, isValid, triggerValidation } = form;\n\n useEffect(() => {\n props.onChange({ data, valid, errors, isValid });\n }, [data, valid, errors, isValid]);\n\n const componentRef = useRef<ComponentMethodsRef>({\n showValidation: triggerValidation\n });\n\n useEffect(() => {\n props.setComponentRef(componentRef.current);\n }, [props.setComponentRef]);\n\n // This is here for MBWay, prob should be moved up\n // MBWay has a weird way of loading its error messages\n // They come form the prop phoneNumberErrorKey: 'mobileNumber.invalid'\n // Strangely it's defined as invalidPhoneNumber in the validation rules\n const getPhoneFieldError = useCallback(\n (field: string) => {\n if (errors[field]) {\n const propsField = field === 'phoneNumber' ? 'phoneNumberErrorKey' : 'phonePrefixErrorKey';\n const key = props[propsField] ? props[propsField] : errors[field].errorMessage;\n return i18n.get(key) ?? null;\n }\n return null;\n },\n [errors]\n );\n\n return (\n <Fieldset classNameModifiers={['phone-input']}>\n <PhoneInputFields getError={getPhoneFieldError} showNumber={showNumber} showPrefix={showPrefix} form={form} {...props} />\n </Fieldset>\n );\n}\n\nPhoneInputForm.defaultProps = {\n phoneLabel: 'telephoneNumber'\n};\n\nexport default PhoneInputForm;\n"],"names":["PhoneInputForm","props","i18n","useCoreContext","schema","requiredFields","items","length","showPrefix","includes","showNumber","form","useForm","defaultData","data","rules","phoneValidationRules","formatters","phoneFormatters","useEffect","setSchema","toString","valid","errors","isValid","triggerValidation","onChange","componentRef","useRef","showValidation","setComponentRef","current","getPhoneFieldError","useCallback","field","propsField","key","errorMessage","get","h","Fieldset","classNameModifiers","PhoneInputFields","getError","defaultProps","phoneLabel"],"mappings":"2fAgBA,SAASA,EAAeC,GACpB,MAAMC,KAAEA,GAASC,IAEXC,EAASH,EAAMI,gBAAkB,IAAKJ,GAAOK,OAAOC,OAAS,CAAC,eAAiB,GAAK,eACpFC,EAAaJ,EAAOK,SAAS,kBAAoBR,GAAOK,OAAOC,OAC/DG,EAAaN,EAAOK,SAAS,eAE7BE,EAAOC,EAA0B,IAEhCX,EACHG,SACAS,YAAaZ,EAAMa,KACnBC,MAAOC,EACPC,WAAYC,IAGhBC,EAAU,KACNR,EAAKS,UAAUhB,IAChB,CAACA,EAAOiB,aAEX,MAAMP,KAAEA,EAAIQ,MAAEA,EAAKC,OAAEA,EAAMC,QAAEA,EAAOC,kBAAEA,GAAsBd,EAE5DQ,EAAU,KACNlB,EAAMyB,SAAS,CAAEZ,OAAMQ,QAAOC,SAAQC,aACvC,CAACV,EAAMQ,EAAOC,EAAQC,IAEzB,MAAMG,EAAeC,EAA4B,CAC7CC,eAAgBJ,IAGpBN,EAAU,KACNlB,EAAM6B,gBAAgBH,EAAaI,UACpC,CAAC9B,EAAM6B,kBAMV,MAAME,EAAqBC,EACtBC,IACG,GAAIX,EAAOW,GAAQ,CACf,MAAMC,EAAuB,gBAAVD,EAA0B,sBAAwB,sBAC/DE,EAAMnC,EAAMkC,GAAclC,EAAMkC,GAAcZ,EAAOW,GAAOG,aAClE,OAAOnC,EAAKoC,IAAIF,IAAQ,IAC5B,CACA,OAAO,MAEX,CAACb,IAGL,OACIgB,EAACC,EAAAA,CAASC,mBAAoB,CAAC,gBAC3BF,EAACG,EAAAA,CAAiBC,SAAUX,EAAoBtB,WAAYA,EAAYF,WAAYA,EAAYG,KAAMA,KAAUV,IAG5H,CAEAD,EAAe4C,aAAe,CAC1BC,WAAY"}
@@ -1,2 +1,2 @@
1
- import{createElement as e,Fragment as t}from"../../../external/preact/dist/preact.js";import{useCoreContext as o}from"../../../core/Context/CoreProvider.js";import{useState as a,useRef as r,useEffect as n}from"../../../external/preact/hooks/dist/hooks.js";import{useAmount as s}from"../../../core/Context/AmountProvider.js";function l({label:l=null,icon:u=null,payButton:i,onSubmit:c,name:m,showPayButton:f,setComponentRef:p,...d}){const{i18n:h}=o(),[x,C]=a("ready"),{amount:j}=s(),v=r({setStatus:C});n(()=>{p(v.current)},[p]);if(f)return e(t,null,i({...d,status:x,icon:u,classNameModifiers:["standalone"],label:l||(j&&{}.hasOwnProperty.call(j,"value")&&0===j.value?`${h.get("preauthorizeWith")} ${m}`:`${h.get("continueTo")} ${m}`),onClick:c}))}export{l as default};
1
+ import{createElement as t,Fragment as e}from"../../../external/preact/dist/preact.js";import{useCoreContext as o}from"../../../core/Context/CoreProvider.js";import{useState as a}from"../../../external/preact/hooks/dist/hooks.js";import{useAmount as r}from"../../../core/Context/AmountProvider.js";function n({label:n=null,icon:s=null,payButton:i,onSubmit:l,name:u,showPayButton:m,...c}){const{i18n:p}=o(),[d,f]=a("ready"),{amount:h}=r();this.setStatus=t=>{f(t)};if(m)return t(e,null,i({...c,status:d,icon:s,classNameModifiers:["standalone"],label:n||(h&&{}.hasOwnProperty.call(h,"value")&&0===h.value?`${p.get("preauthorizeWith")} ${u}`:`${p.get("continueTo")} ${u}`),onClick:l}))}export{n as default};
2
2
  //# sourceMappingURL=RedirectButton.js.map