@adyen/adyen-web 6.19.0 → 6.21.0

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 (177) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/adyen.css +10 -11
  3. package/dist/cjs/adyen.css.map +1 -1
  4. package/dist/cjs/index.cjs +2 -2
  5. package/dist/cjs/index.cjs.map +1 -1
  6. package/dist/cjs/index.d.cts +43 -65
  7. package/dist/es/adyen.css +10 -11
  8. package/dist/es/adyen.css.map +1 -1
  9. package/dist/es/components/Ach/Ach.js +1 -1
  10. package/dist/es/components/Ach/Ach.js.map +1 -1
  11. package/dist/es/components/Ach/components/AchComponent.js +1 -1
  12. package/dist/es/components/Ach/components/AchComponent.js.map +1 -1
  13. package/dist/es/components/Ach/components/useSRPanelForACHErrors.js.map +1 -1
  14. package/dist/es/components/Card/Card.js +1 -1
  15. package/dist/es/components/Card/Card.js.map +1 -1
  16. package/dist/es/components/Card/components/CardInput/components/CardFieldsWrapper.js +1 -1
  17. package/dist/es/components/Card/components/CardInput/components/CardFieldsWrapper.js.map +1 -1
  18. package/dist/es/components/Card/components/CardInput/components/Installments/Installments.js +1 -1
  19. package/dist/es/components/Card/components/CardInput/components/Installments/Installments.js.map +1 -1
  20. package/dist/es/components/Card/components/CardInput/handlers.js.map +1 -1
  21. package/dist/es/components/Card/components/CardInput/useSRPanelForCardInputErrors.js.map +1 -1
  22. package/dist/es/components/Card/components/CardInput/utils.js +1 -1
  23. package/dist/es/components/Card/components/CardInput/utils.js.map +1 -1
  24. package/dist/es/components/Dropin/Dropin.js +1 -1
  25. package/dist/es/components/Dropin/Dropin.js.map +1 -1
  26. package/dist/es/components/Giftcard/components/useSRPanelForGiftcardErrors.js.map +1 -1
  27. package/dist/es/components/PayByBankPix/PayByBankPix.js +1 -1
  28. package/dist/es/components/PayByBankPix/PayByBankPix.js.map +1 -1
  29. package/dist/es/components/PayByBankPix/components/Enrollment/Enrollment.js +1 -1
  30. package/dist/es/components/PayByBankPix/components/Enrollment/Enrollment.js.map +1 -1
  31. package/dist/es/components/PayByBankPix/components/Enrollment/components/IssuerListIntroduction.js +1 -1
  32. package/dist/es/components/PayByBankPix/components/Enrollment/components/IssuerListIntroduction.js.map +1 -1
  33. package/dist/es/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js +1 -1
  34. package/dist/es/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js.map +1 -1
  35. package/dist/es/components/PayByBankPix/components/StoredPayment/StoredPayment.js +1 -1
  36. package/dist/es/components/PayByBankPix/components/StoredPayment/StoredPayment.js.map +1 -1
  37. package/dist/es/components/PayPal/utils/get-paypal-styles.js.map +1 -1
  38. package/dist/es/components/PayPalFastlane/FastlaneSDK.js.map +1 -1
  39. package/dist/es/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  40. package/dist/es/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js.map +1 -1
  41. package/dist/es/components/UPI/UPI.js +1 -1
  42. package/dist/es/components/UPI/UPI.js.map +1 -1
  43. package/dist/es/components/UPI/components/UPIComponent/UPIComponent.js +1 -1
  44. package/dist/es/components/UPI/components/UPIComponent/UPIComponent.js.map +1 -1
  45. package/dist/es/components/UPI/components/UPIIntentAppList/UPIIntentAppItem/UPIIntentAppItem.js +1 -1
  46. package/dist/es/components/UPI/components/UPIIntentAppList/UPIIntentAppItem/UPIIntentAppItem.js.map +1 -1
  47. package/dist/es/components/UPI/components/UPIIntentAppList/UPIIntentAppList.js +1 -1
  48. package/dist/es/components/UPI/components/UPIIntentAppList/UPIIntentAppList.js.map +1 -1
  49. package/dist/es/components/UPI/constants.js +2 -0
  50. package/dist/es/components/UPI/constants.js.map +1 -0
  51. package/dist/es/components/internal/Address/Address.js.map +1 -1
  52. package/dist/es/components/internal/Alert/Alert.js +1 -1
  53. package/dist/es/components/internal/Alert/Alert.js.map +1 -1
  54. package/dist/es/components/internal/ClickToPay/models/ShopperCard.js +1 -1
  55. package/dist/es/components/internal/ClickToPay/models/ShopperCard.js.map +1 -1
  56. package/dist/es/components/internal/IbanInput/IbanInput.js.map +1 -1
  57. package/dist/es/components/internal/IssuerList/IssuerList.js +1 -1
  58. package/dist/es/components/internal/IssuerList/IssuerList.js.map +1 -1
  59. package/dist/es/components/internal/OpenInvoice/useSRPanelForOpenInvoiceErrors.js.map +1 -1
  60. package/dist/es/components/internal/PayButton/PayButton.js +1 -1
  61. package/dist/es/components/internal/PayButton/PayButton.js.map +1 -1
  62. package/dist/es/components/internal/PayButton/components/SecondaryButtonLabel.js.map +1 -1
  63. package/dist/es/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  64. package/dist/es/components/internal/SecuredFields/binLookup/createCardVariantSwitcher.js +1 -1
  65. package/dist/es/components/internal/SecuredFields/binLookup/createCardVariantSwitcher.js.map +1 -1
  66. package/dist/es/components/internal/SecuredFields/binLookup/extensions.js +1 -1
  67. package/dist/es/components/internal/SecuredFields/binLookup/extensions.js.map +1 -1
  68. package/dist/es/components/internal/SecuredFields/binLookup/triggerBinLookUp.js.map +1 -1
  69. package/dist/es/components/internal/SecuredFields/lib/CSF/extensions/handleIOSTouchEvents.js.map +1 -1
  70. package/dist/es/components/internal/SegmentedControl/SegmentedControl.js.map +1 -1
  71. package/dist/es/components/internal/UIElement/UIElement.js +1 -1
  72. package/dist/es/components/internal/UIElement/UIElement.js.map +1 -1
  73. package/dist/es/components/internal/UIElement/utils.js.map +1 -1
  74. package/dist/es/core/Analytics/utils.js.map +1 -1
  75. package/dist/es/core/Errors/SRPanel.js.map +1 -1
  76. package/dist/es/core/Errors/utils.js.map +1 -1
  77. package/dist/es/core/Services/analytics/collect-id.js +1 -1
  78. package/dist/es/core/core.js +1 -1
  79. package/dist/es/core/core.registry.js.map +1 -1
  80. package/dist/es/core/utils.js.map +1 -1
  81. package/dist/es/external/preact/compat/dist/compat.js.map +1 -1
  82. package/dist/es/external/preact/dist/preact.js.map +1 -1
  83. package/dist/es/index.d.ts +43 -65
  84. package/dist/es/language/utils.js.map +1 -1
  85. package/dist/es/utils/clipboard.js.map +1 -1
  86. package/dist/es/utils/setFocus.js.map +1 -1
  87. package/dist/es/utils/useForm/reducer.js.map +1 -1
  88. package/dist/es-legacy/adyen.css +10 -11
  89. package/dist/es-legacy/adyen.css.map +1 -1
  90. package/dist/es-legacy/components/Ach/Ach.js +1 -1
  91. package/dist/es-legacy/components/Ach/Ach.js.map +1 -1
  92. package/dist/es-legacy/components/Ach/components/AchComponent.js +1 -1
  93. package/dist/es-legacy/components/Ach/components/AchComponent.js.map +1 -1
  94. package/dist/es-legacy/components/Ach/components/useSRPanelForACHErrors.js.map +1 -1
  95. package/dist/es-legacy/components/Card/Card.js +1 -1
  96. package/dist/es-legacy/components/Card/Card.js.map +1 -1
  97. package/dist/es-legacy/components/Card/components/CardInput/components/CardFieldsWrapper.js +1 -1
  98. package/dist/es-legacy/components/Card/components/CardInput/components/CardFieldsWrapper.js.map +1 -1
  99. package/dist/es-legacy/components/Card/components/CardInput/components/Installments/Installments.js +1 -1
  100. package/dist/es-legacy/components/Card/components/CardInput/components/Installments/Installments.js.map +1 -1
  101. package/dist/es-legacy/components/Card/components/CardInput/handlers.js.map +1 -1
  102. package/dist/es-legacy/components/Card/components/CardInput/useSRPanelForCardInputErrors.js.map +1 -1
  103. package/dist/es-legacy/components/Card/components/CardInput/utils.js +1 -1
  104. package/dist/es-legacy/components/Card/components/CardInput/utils.js.map +1 -1
  105. package/dist/es-legacy/components/Dropin/Dropin.js +1 -1
  106. package/dist/es-legacy/components/Dropin/Dropin.js.map +1 -1
  107. package/dist/es-legacy/components/Giftcard/components/useSRPanelForGiftcardErrors.js.map +1 -1
  108. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js +1 -1
  109. package/dist/es-legacy/components/PayByBankPix/PayByBankPix.js.map +1 -1
  110. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/Enrollment.js +1 -1
  111. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/Enrollment.js.map +1 -1
  112. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/components/IssuerListIntroduction.js +1 -1
  113. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/components/IssuerListIntroduction.js.map +1 -1
  114. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js +1 -1
  115. package/dist/es-legacy/components/PayByBankPix/components/Enrollment/useIssuerWithLogo.js.map +1 -1
  116. package/dist/es-legacy/components/PayByBankPix/components/StoredPayment/StoredPayment.js +1 -1
  117. package/dist/es-legacy/components/PayByBankPix/components/StoredPayment/StoredPayment.js.map +1 -1
  118. package/dist/es-legacy/components/PayPal/utils/get-paypal-styles.js.map +1 -1
  119. package/dist/es-legacy/components/PayPalFastlane/FastlaneSDK.js.map +1 -1
  120. package/dist/es-legacy/components/ThreeDS2/components/Challenge/PrepareChallenge3DS2.js.map +1 -1
  121. package/dist/es-legacy/components/ThreeDS2/components/DeviceFingerprint/PrepareFingerprint3DS2.js.map +1 -1
  122. package/dist/es-legacy/components/UPI/UPI.js +1 -1
  123. package/dist/es-legacy/components/UPI/UPI.js.map +1 -1
  124. package/dist/es-legacy/components/UPI/components/UPIComponent/UPIComponent.js +1 -1
  125. package/dist/es-legacy/components/UPI/components/UPIComponent/UPIComponent.js.map +1 -1
  126. package/dist/es-legacy/components/UPI/components/UPIIntentAppList/UPIIntentAppItem/UPIIntentAppItem.js +1 -1
  127. package/dist/es-legacy/components/UPI/components/UPIIntentAppList/UPIIntentAppItem/UPIIntentAppItem.js.map +1 -1
  128. package/dist/es-legacy/components/UPI/components/UPIIntentAppList/UPIIntentAppList.js +1 -1
  129. package/dist/es-legacy/components/UPI/components/UPIIntentAppList/UPIIntentAppList.js.map +1 -1
  130. package/dist/es-legacy/components/UPI/constants.js +2 -0
  131. package/dist/es-legacy/components/UPI/constants.js.map +1 -0
  132. package/dist/es-legacy/components/internal/Address/Address.js.map +1 -1
  133. package/dist/es-legacy/components/internal/Alert/Alert.js +1 -1
  134. package/dist/es-legacy/components/internal/Alert/Alert.js.map +1 -1
  135. package/dist/es-legacy/components/internal/ClickToPay/models/ShopperCard.js +1 -1
  136. package/dist/es-legacy/components/internal/ClickToPay/models/ShopperCard.js.map +1 -1
  137. package/dist/es-legacy/components/internal/IbanInput/IbanInput.js.map +1 -1
  138. package/dist/es-legacy/components/internal/IssuerList/IssuerList.js +1 -1
  139. package/dist/es-legacy/components/internal/IssuerList/IssuerList.js.map +1 -1
  140. package/dist/es-legacy/components/internal/OpenInvoice/useSRPanelForOpenInvoiceErrors.js.map +1 -1
  141. package/dist/es-legacy/components/internal/PayButton/PayButton.js +1 -1
  142. package/dist/es-legacy/components/internal/PayButton/PayButton.js.map +1 -1
  143. package/dist/es-legacy/components/internal/PayButton/components/SecondaryButtonLabel.js.map +1 -1
  144. package/dist/es-legacy/components/internal/SecuredFields/SFP/SecuredFieldsProvider.js.map +1 -1
  145. package/dist/es-legacy/components/internal/SecuredFields/binLookup/createCardVariantSwitcher.js +1 -1
  146. package/dist/es-legacy/components/internal/SecuredFields/binLookup/createCardVariantSwitcher.js.map +1 -1
  147. package/dist/es-legacy/components/internal/SecuredFields/binLookup/extensions.js +1 -1
  148. package/dist/es-legacy/components/internal/SecuredFields/binLookup/extensions.js.map +1 -1
  149. package/dist/es-legacy/components/internal/SecuredFields/binLookup/triggerBinLookUp.js.map +1 -1
  150. package/dist/es-legacy/components/internal/SecuredFields/lib/CSF/extensions/handleIOSTouchEvents.js.map +1 -1
  151. package/dist/es-legacy/components/internal/SegmentedControl/SegmentedControl.js.map +1 -1
  152. package/dist/es-legacy/components/internal/UIElement/UIElement.js +1 -1
  153. package/dist/es-legacy/components/internal/UIElement/UIElement.js.map +1 -1
  154. package/dist/es-legacy/components/internal/UIElement/utils.js.map +1 -1
  155. package/dist/es-legacy/core/Analytics/utils.js.map +1 -1
  156. package/dist/es-legacy/core/Errors/SRPanel.js.map +1 -1
  157. package/dist/es-legacy/core/Errors/utils.js.map +1 -1
  158. package/dist/es-legacy/core/Services/analytics/collect-id.js +1 -1
  159. package/dist/es-legacy/core/core.js +1 -1
  160. package/dist/es-legacy/core/core.registry.js.map +1 -1
  161. package/dist/es-legacy/core/utils.js.map +1 -1
  162. package/dist/es-legacy/external/preact/compat/dist/compat.js.map +1 -1
  163. package/dist/es-legacy/external/preact/dist/preact.js.map +1 -1
  164. package/dist/es-legacy/language/utils.js.map +1 -1
  165. package/dist/es-legacy/utils/clipboard.js.map +1 -1
  166. package/dist/es-legacy/utils/setFocus.js.map +1 -1
  167. package/dist/es-legacy/utils/useForm/reducer.js.map +1 -1
  168. package/package.json +159 -159
  169. package/styles/adyen.css +10 -11
  170. package/dist/es/components/UPI/components/UPIComponent/constants.js +0 -2
  171. package/dist/es/components/UPI/components/UPIComponent/constants.js.map +0 -1
  172. package/dist/es/components/UPI/components/UPIComponent/useUpiSegmentedControlOptions.js +0 -2
  173. package/dist/es/components/UPI/components/UPIComponent/useUpiSegmentedControlOptions.js.map +0 -1
  174. package/dist/es-legacy/components/UPI/components/UPIComponent/constants.js +0 -2
  175. package/dist/es-legacy/components/UPI/components/UPIComponent/constants.js.map +0 -1
  176. package/dist/es-legacy/components/UPI/components/UPIComponent/useUpiSegmentedControlOptions.js +0 -2
  177. package/dist/es-legacy/components/UPI/components/UPIComponent/useUpiSegmentedControlOptions.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import o from"./components/UPIComponent/UPIComponent.js";import{CoreProvider as r}from"../../core/Context/CoreProvider.js";import n from"../internal/Await/Await.js";import i from"../internal/QRLoader/QRLoader.js";import p from"../../core/Errors/SRPanelProvider.js";import{TxVariants as s}from"../tx-variants.js";import a from"../../utils/isMobile.js";function d(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function l(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{},r=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(o).filter(function(t){return Object.getOwnPropertyDescriptor(o,t).enumerable}))),r.forEach(function(e){d(t,e,o[e])})}return t}function u(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e.push.apply(e,o)}return e}(Object(e)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(e,o))}),t}class c extends e{formatProps(t){var e,o;if(!a())return u(l({},super.formatProps(t)),{defaultMode:null!==(o=null==t?void 0:t.defaultMode)&&void 0!==o?o:"qrCode",apps:[]});const r=(null===(e=t.apps)||void 0===e?void 0:e.length)>0,n=r?"intent":"vpa",i=[n,"qrCode"],p={id:"vpa",name:t.i18n.get("upi.collect.dropdown.label"),type:s.upi_collect},d=r?[...t.apps.map(t=>u(l({},t),{type:s.upi_intent})),p]:[];return u(l({},super.formatProps(t)),{defaultMode:i.includes(null==t?void 0:t.defaultMode)?t.defaultMode:n,apps:d})}get isValid(){return this.state.isValid}formatData(){const{virtualPaymentAddress:t,app:e}=this.state.data||{};return{paymentMethod:l({},this.paymentType&&{type:this.paymentType},this.paymentType===s.upi_collect&&t&&{virtualPaymentAddress:t},this.paymentType===s.upi_intent&&(null==e?void 0:e.id)&&{appId:e.id})}}get paymentType(){var t,e;return"qrCode"===this.selectedMode?s.upi_qr:"vpa"===this.selectedMode?s.upi_collect:null===(e=this.state.data)||void 0===e||null===(t=e.app)||void 0===t?void 0:t.type}renderContent(e,r,p){switch(e){case"qrCode":return t(i,u(l({ref:t=>{this.componentRef=t}},this.props),{qrCodeData:this.props.qrCodeData?encodeURIComponent(this.props.qrCodeData):null,type:s.upi_qr,brandLogo:this.props.brandLogo||this.icon,onComplete:this.onComplete,introduction:this.props.i18n.get("upi.qrCodeWaitingMessage"),countdownTime:5,onActionHandled:this.onActionHandled}));case"await":return t(n,{ref:t=>{this.componentRef=t},url:r,type:p,showCountdownTimer:!0,shouldRedirectAutomatically:!0,countdownTime:5,clientKey:this.props.clientKey,paymentData:this.props.paymentData,onActionHandled:this.onActionHandled,onError:this.props.onError,messageText:this.props.i18n.get("upi.vpaWaitingMessage"),awaitText:this.props.i18n.get("await.waitForConfirmation"),onComplete:this.onComplete,brandLogo:this.icon});default:return t(o,{ref:t=>{this.componentRef=t},payButton:this.payButton,onChange:this.setState,onUpdateMode:this.onUpdateMode,apps:this.props.apps,defaultMode:this.props.defaultMode,showPayButton:this.props.showPayButton})}}render(){const{type:e,url:o,paymentMethodType:n}=this.props;return t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(p,{srPanel:this.props.modules.srPanel},this.renderContent(e,o,n)))}constructor(t,e){super(t,e),d(this,"selectedMode",void 0),d(this,"onUpdateMode",t=>{this.selectedMode=t}),this.selectedMode=this.props.defaultMode}}d(c,"type",s.upi),d(c,"txVariants",[s.upi,s.upi_qr,s.upi_collect,s.upi_intent]);export{c as default};
1
+ import{createElement as t}from"../../external/preact/dist/preact.js";import{UIElement as e}from"../internal/UIElement/UIElement.js";import o from"./components/UPIComponent/UPIComponent.js";import{CoreProvider as r}from"../../core/Context/CoreProvider.js";import n from"../internal/Await/Await.js";import s from"../internal/QRLoader/QRLoader.js";import i from"../../core/Errors/SRPanelProvider.js";import{TxVariants as p}from"../tx-variants.js";import a from"../../utils/isMobile.js";import{getQrOption as d,getVpaOption as l,getIntentOption as u}from"./constants.js";function c(t,e,o){return e in t?Object.defineProperty(t,e,{value:o,enumerable:!0,configurable:!0,writable:!0}):t[e]=o,t}function m(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{},r=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(o).filter(function(t){return Object.getOwnPropertyDescriptor(o,t).enumerable}))),r.forEach(function(e){c(t,e,o[e])})}return t}function h(t,e){return e=null!=e?e:{},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):function(t){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e.push.apply(e,o)}return e}(Object(e)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(e,o))}),t}class f extends e{formatProps(t){if(!a())return h(m({},super.formatProps(t)),{defaultMode:["qrCode","vpa"].includes(null==t?void 0:t.defaultMode)?t.defaultMode:"qrCode",apps:[],segmentedControlOptions:[d(t.i18n),l(t.i18n)]});const{i18n:e,apps:o=[]}=t;if(o.length>0){const r=["intent","vpa"].includes(t.defaultMode)?t.defaultMode:"intent";return h(m({},super.formatProps(t)),{defaultMode:r,apps:o,segmentedControlOptions:[u(e),l(e)]})}return h(m({},super.formatProps(t)),{defaultMode:"vpa",apps:[],segmentedControlOptions:[]})}get isValid(){return this.state.isValid}formatData(){const{virtualPaymentAddress:t,app:e}=this.state.data||{};return{paymentMethod:m({type:this.paymentType},this.paymentType===p.upi_collect&&t&&{virtualPaymentAddress:t},this.paymentType===p.upi_intent&&(null==e?void 0:e.id)&&{appId:e.id})}}get paymentType(){return"qrCode"===this.selectedMode?p.upi_qr:"vpa"===this.selectedMode?p.upi_collect:p.upi_intent}renderContent(e,r,i){switch(e){case"qrCode":return t(s,h(m({ref:t=>{this.componentRef=t}},this.props),{qrCodeData:this.props.qrCodeData?encodeURIComponent(this.props.qrCodeData):null,type:p.upi_qr,brandLogo:this.props.brandLogo||this.icon,onComplete:this.onComplete,introduction:this.props.i18n.get("upi.qrCodeWaitingMessage"),countdownTime:5,onActionHandled:this.onActionHandled}));case"await":return t(n,{ref:t=>{this.componentRef=t},url:r,type:i,showCountdownTimer:!0,shouldRedirectAutomatically:!0,showAmount:!0,countdownTime:5,clientKey:this.props.clientKey,paymentData:this.props.paymentData,onActionHandled:this.onActionHandled,onError:this.props.onError,messageText:this.props.i18n.get("upi.vpaWaitingMessage"),awaitText:this.props.i18n.get("await.waitForConfirmation"),onComplete:this.onComplete,brandLogo:this.icon,amount:this.props.amount});default:return t(o,{ref:t=>{this.componentRef=t},payButton:this.payButton,onChange:this.setState,onUpdateMode:this.onUpdateMode,apps:this.props.apps,segmentedControlOptions:this.props.segmentedControlOptions,defaultMode:this.props.defaultMode,showPayButton:this.props.showPayButton})}}render(){const{type:e,url:o,paymentMethodType:n}=this.props;return t(r,{i18n:this.props.i18n,loadingContext:this.props.loadingContext,resources:this.resources},t(i,{srPanel:this.props.modules.srPanel},this.renderContent(e,o,n)))}constructor(t,e){super(t,e),c(this,"selectedMode",void 0),c(this,"onUpdateMode",t=>{this.selectedMode=t}),this.selectedMode=this.props.defaultMode}}c(f,"type",p.upi),c(f,"txVariants",[p.upi,p.upi_qr,p.upi_collect,p.upi_intent]);export{f as default};
2
2
  //# sourceMappingURL=UPI.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UPI.js","sources":["../../../../src/components/UPI/UPI.tsx"],"sourcesContent":["import { h, RefObject } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport UPIComponent from './components/UPIComponent';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport Await from '../internal/Await';\nimport QRLoader from '../internal/QRLoader';\nimport { App, UPIConfiguration, UpiMode, UpiPaymentData, UpiType } from './types';\nimport SRPanelProvider from '../../core/Errors/SRPanelProvider';\nimport { TxVariants } from '../tx-variants';\nimport isMobile from '../../utils/isMobile';\nimport type { ICore } from '../../core/types';\n\n/**\n * For mobile:\n * We should show upi_collect or upi_intent depending on if `apps` are returned in /paymentMethods response\n * The upi_qr should always be on the second tab\n *\n * For non-mobile:\n * We should never show the upi_intent (ignore `apps` in /paymentMethods response)\n * The upi_qr should be on the first tab and the upi_collect should be on second tab\n */\n\nclass UPI extends UIElement<UPIConfiguration> {\n public static type = TxVariants.upi;\n public static txVariants = [TxVariants.upi, TxVariants.upi_qr, TxVariants.upi_collect, TxVariants.upi_intent];\n\n private selectedMode: UpiMode;\n\n constructor(checkout: ICore, props: UPIConfiguration) {\n super(checkout, props);\n this.selectedMode = this.props.defaultMode;\n }\n\n formatProps(props: UPIConfiguration) {\n if (!isMobile()) {\n return {\n ...super.formatProps(props),\n defaultMode: props?.defaultMode ?? 'qrCode',\n // For large screen, ignore the apps\n apps: []\n };\n }\n\n const hasIntentApps = props.apps?.length > 0;\n const fallbackDefaultMode = hasIntentApps ? 'intent' : 'vpa';\n const allowedModes = [fallbackDefaultMode, 'qrCode'];\n const upiCollectApp: App = {\n id: 'vpa',\n name: props.i18n.get('upi.collect.dropdown.label'),\n type: TxVariants.upi_collect as UpiType\n };\n const apps = hasIntentApps ? [...props.apps.map(app => ({ ...app, type: TxVariants.upi_intent as UpiType })), upiCollectApp] : [];\n return {\n ...super.formatProps(props),\n defaultMode: allowedModes.includes(props?.defaultMode) ? props.defaultMode : fallbackDefaultMode,\n apps\n };\n }\n\n public get isValid(): boolean {\n return this.state.isValid;\n }\n\n public formatData(): UpiPaymentData {\n const { virtualPaymentAddress, app } = this.state.data || {};\n\n return {\n paymentMethod: {\n ...(this.paymentType && { type: this.paymentType }),\n ...(this.paymentType === TxVariants.upi_collect && virtualPaymentAddress && { virtualPaymentAddress }),\n ...(this.paymentType === TxVariants.upi_intent && app?.id && { appId: app.id })\n }\n };\n }\n\n get paymentType(): UpiType {\n if (this.selectedMode === 'qrCode') {\n return TxVariants.upi_qr;\n }\n if (this.selectedMode === 'vpa') {\n return TxVariants.upi_collect;\n }\n return this.state.data?.app?.type;\n }\n\n private onUpdateMode = (mode: UpiMode): void => {\n this.selectedMode = mode;\n };\n\n private renderContent(type: string, url: string, paymentMethodType: string): h.JSX.Element {\n switch (type) {\n case 'qrCode':\n return (\n <QRLoader\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n qrCodeData={this.props.qrCodeData ? encodeURIComponent(this.props.qrCodeData) : null}\n type={TxVariants.upi_qr}\n brandLogo={this.props.brandLogo || this.icon}\n onComplete={this.onComplete}\n introduction={this.props.i18n.get('upi.qrCodeWaitingMessage')}\n countdownTime={5}\n onActionHandled={this.onActionHandled}\n />\n );\n case 'await':\n return (\n <Await\n ref={ref => {\n this.componentRef = ref;\n }}\n url={url}\n type={paymentMethodType}\n showCountdownTimer\n shouldRedirectAutomatically\n countdownTime={5}\n clientKey={this.props.clientKey}\n paymentData={this.props.paymentData}\n onActionHandled={this.onActionHandled}\n onError={this.props.onError}\n messageText={this.props.i18n.get('upi.vpaWaitingMessage')}\n awaitText={this.props.i18n.get('await.waitForConfirmation')}\n onComplete={this.onComplete}\n brandLogo={this.icon}\n />\n );\n default:\n return (\n <UPIComponent\n ref={(ref: RefObject<typeof UPIComponent>) => {\n this.componentRef = ref;\n }}\n payButton={this.payButton}\n onChange={this.setState}\n onUpdateMode={this.onUpdateMode}\n apps={this.props.apps}\n defaultMode={this.props.defaultMode}\n showPayButton={this.props.showPayButton}\n />\n );\n }\n }\n\n public render(): h.JSX.Element {\n const { type, url, paymentMethodType } = this.props;\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <SRPanelProvider srPanel={this.props.modules.srPanel}>{this.renderContent(type, url, paymentMethodType)}</SRPanelProvider>\n </CoreProvider>\n );\n }\n}\n\nexport default UPI;\n"],"names":["UPI","UIElement","formatProps","props","isMobile","_object_spread_props","_object_spread","super","defaultMode","apps","hasIntentApps","length","fallbackDefaultMode","allowedModes","upiCollectApp","id","name","i18n","get","type","TxVariants","upi_collect","map","app","upi_intent","includes","isValid","this","state","formatData","virtualPaymentAddress","data","paymentMethod","paymentType","appId","_this_state_data_app","_this_state_data","selectedMode","upi_qr","renderContent","url","paymentMethodType","h","QRLoader","ref","componentRef","qrCodeData","encodeURIComponent","brandLogo","icon","onComplete","introduction","countdownTime","onActionHandled","Await","showCountdownTimer","shouldRedirectAutomatically","clientKey","paymentData","onError","messageText","awaitText","UPIComponent","payButton","onChange","setState","onUpdateMode","showPayButton","render","CoreProvider","loadingContext","resources","SRPanelProvider","srPanel","modules","constructor","checkout","_define_property","mode","upi","txVariants"],"mappings":"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"}
1
+ {"version":3,"file":"UPI.js","sources":["../../../../src/components/UPI/UPI.tsx"],"sourcesContent":["import { h, RefObject } from 'preact';\nimport UIElement from '../internal/UIElement/UIElement';\nimport UPIComponent from './components/UPIComponent';\nimport { CoreProvider } from '../../core/Context/CoreProvider';\nimport Await from '../internal/Await';\nimport QRLoader from '../internal/QRLoader';\nimport { UPIConfiguration, UpiMode, UpiPaymentData, UpiType } from './types';\nimport SRPanelProvider from '../../core/Errors/SRPanelProvider';\nimport { TxVariants } from '../tx-variants';\nimport isMobile from '../../utils/isMobile';\nimport type { ICore } from '../../core/types';\nimport { getIntentOption, getQrOption, getVpaOption } from './constants';\n\n/**\n * For mobile:\n * We should show upi_collect and upi_intent depending on if `apps` are returned in /paymentMethods response.\n * If there is no apps, hide segmented controls.\n * The upi_collect should always be on the second tab.\n * Never show QR code.\n *\n * For non-mobile:\n * We should never show the upi_intent (ignore `apps` in /paymentMethods response)\n * The upi_qr should be on the first tab and the upi_collect should be on second tab\n */\n\nclass UPI extends UIElement<UPIConfiguration> {\n public static type = TxVariants.upi;\n public static txVariants = [TxVariants.upi, TxVariants.upi_qr, TxVariants.upi_collect, TxVariants.upi_intent];\n\n private selectedMode: UpiMode;\n\n constructor(checkout: ICore, props: UPIConfiguration) {\n super(checkout, props);\n this.selectedMode = this.props.defaultMode;\n }\n\n formatProps(props: UPIConfiguration): UPIConfiguration {\n if (!isMobile()) {\n return {\n ...super.formatProps(props),\n defaultMode: ['qrCode', 'vpa'].includes(props?.defaultMode) ? props.defaultMode : 'qrCode',\n apps: [], // For desktop, ignore the apps\n segmentedControlOptions: [getQrOption(props.i18n), getVpaOption(props.i18n)]\n };\n }\n\n const { i18n, apps = [] } = props;\n const hasIntentApps = apps.length > 0;\n if (hasIntentApps) {\n // Mobile with UPI apps\n const allowedModes: UpiMode[] = ['intent', 'vpa'];\n const defaultMode = allowedModes.includes(props.defaultMode) ? props.defaultMode : 'intent';\n return {\n ...super.formatProps(props),\n defaultMode,\n apps,\n segmentedControlOptions: [getIntentOption(i18n), getVpaOption(i18n)]\n };\n }\n\n // Mobile, but no UPI apps\n return {\n ...super.formatProps(props),\n defaultMode: 'vpa', // Only VPA is possible\n apps: [],\n segmentedControlOptions: []\n };\n }\n\n public get isValid(): boolean {\n return this.state.isValid;\n }\n\n public formatData(): UpiPaymentData {\n const { virtualPaymentAddress, app } = this.state.data || {};\n\n return {\n paymentMethod: {\n type: this.paymentType,\n ...(this.paymentType === TxVariants.upi_collect && virtualPaymentAddress && { virtualPaymentAddress }),\n ...(this.paymentType === TxVariants.upi_intent && app?.id && { appId: app.id })\n }\n };\n }\n\n get paymentType(): UpiType {\n if (this.selectedMode === 'qrCode') {\n return TxVariants.upi_qr;\n }\n if (this.selectedMode === 'vpa') {\n return TxVariants.upi_collect;\n }\n return TxVariants.upi_intent;\n }\n\n private onUpdateMode = (mode: UpiMode): void => {\n this.selectedMode = mode;\n };\n\n private renderContent(type: string, url: string, paymentMethodType: string): h.JSX.Element {\n switch (type) {\n case 'qrCode':\n return (\n <QRLoader\n ref={ref => {\n this.componentRef = ref;\n }}\n {...this.props}\n qrCodeData={this.props.qrCodeData ? encodeURIComponent(this.props.qrCodeData) : null}\n type={TxVariants.upi_qr}\n brandLogo={this.props.brandLogo || this.icon}\n onComplete={this.onComplete}\n introduction={this.props.i18n.get('upi.qrCodeWaitingMessage')}\n countdownTime={5}\n onActionHandled={this.onActionHandled}\n />\n );\n case 'await':\n return (\n <Await\n ref={ref => {\n this.componentRef = ref;\n }}\n url={url}\n type={paymentMethodType}\n showCountdownTimer\n shouldRedirectAutomatically\n showAmount\n countdownTime={5}\n clientKey={this.props.clientKey}\n paymentData={this.props.paymentData}\n onActionHandled={this.onActionHandled}\n onError={this.props.onError}\n messageText={this.props.i18n.get('upi.vpaWaitingMessage')}\n awaitText={this.props.i18n.get('await.waitForConfirmation')}\n onComplete={this.onComplete}\n brandLogo={this.icon}\n amount={this.props.amount}\n />\n );\n default:\n return (\n <UPIComponent\n ref={(ref: RefObject<typeof UPIComponent>) => {\n this.componentRef = ref;\n }}\n payButton={this.payButton}\n onChange={this.setState}\n onUpdateMode={this.onUpdateMode}\n apps={this.props.apps}\n segmentedControlOptions={this.props.segmentedControlOptions}\n defaultMode={this.props.defaultMode}\n showPayButton={this.props.showPayButton}\n />\n );\n }\n }\n\n public render(): h.JSX.Element {\n const { type, url, paymentMethodType } = this.props;\n return (\n <CoreProvider i18n={this.props.i18n} loadingContext={this.props.loadingContext} resources={this.resources}>\n <SRPanelProvider srPanel={this.props.modules.srPanel}>{this.renderContent(type, url, paymentMethodType)}</SRPanelProvider>\n </CoreProvider>\n );\n }\n}\n\nexport default UPI;\n"],"names":["UPI","UIElement","formatProps","props","isMobile","_object_spread_props","_object_spread","super","defaultMode","includes","apps","segmentedControlOptions","getQrOption","i18n","getVpaOption","length","getIntentOption","isValid","this","state","formatData","virtualPaymentAddress","app","data","paymentMethod","type","paymentType","TxVariants","upi_collect","upi_intent","id","appId","selectedMode","upi_qr","renderContent","url","paymentMethodType","h","QRLoader","ref","componentRef","qrCodeData","encodeURIComponent","brandLogo","icon","onComplete","introduction","get","countdownTime","onActionHandled","Await","showCountdownTimer","shouldRedirectAutomatically","showAmount","clientKey","paymentData","onError","messageText","awaitText","amount","UPIComponent","payButton","onChange","setState","onUpdateMode","showPayButton","render","CoreProvider","loadingContext","resources","SRPanelProvider","srPanel","modules","constructor","checkout","_define_property","mode","upi","txVariants"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createElement as e,Fragment as t}from"../../../../external/preact/dist/preact.js";import{useState as a,useCallback as n,useEffect as o}from"../../../../external/preact/hooks/dist/hooks.js";import r from"../VpaInput/VpaInput.js";import l from"../../../../core/Context/useImage.js";import i from"./useUpiSegmentedControlOptions.js";import{A11Y as s}from"./constants.js";import d from"../../../internal/SegmentedControl/SegmentedControl.js";import u from"../../../internal/ContentSeparator/ContentSeparator.js";import p from"../UPIIntentAppList/UPIIntentAppList.js";import{useCoreContext as c}from"../../../../core/Context/CoreProvider.js";function m(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function g(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{},n=Object.keys(a);"function"==typeof Object.getOwnPropertySymbols&&(n=n.concat(Object.getOwnPropertySymbols(a).filter(function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),n.forEach(function(t){m(e,t,a[t])})}return e}function b({defaultMode:m,onChange:b,onUpdateMode:f,payButton:y,showPayButton:I,apps:v=[]}){const{i18n:C}=c(),h=l(),[j,P]=a("ready"),[S,A]=a("qrCode"===m),[V,N]=a(m),[O,k]=a(""),[w,x]=a(null),[q,B]=a(null),[E,T]=a(null),[U,M]=a(null),Q=i(v,V);this.setStatus=e=>{P(e)},this.showValidation=()=>{null==w||w.validateInput()};const R=n(e=>{x(e)},[]),F=n(e=>{N(e),f(e)},[f]),H=n(e=>{(null==e?void 0:e.id)!==(null==q?void 0:q.id)&&(B(e),A(!0))},[q]),L=n(({data:{virtualPaymentAddress:e},errors:t,valid:a,isValid:n})=>{k(e),M(t),T(a),A(n)},[]);return o(()=>{b("qrCode"!==V?{data:g({},O&&{virtualPaymentAddress:O},q&&{app:q}),errors:U,valid:E,isValid:S}:{data:{},valid:{},errors:{},isValid:!0})},[O,q,U,E,S,V]),e(t,null,e("p",{className:"adyen-checkout_upi-mode-selection-text"},C.get("upi.modeSelection")),e(d,{onChange:F,selectedValue:V,disabled:"loading"===j,classNameModifiers:["upi-margin-bottom"],options:Q}),e(u,{label:C.get("upi.completePayment")}),"intent"===V&&e("div",{id:s.AreaId.INTENT,"aria-labelledby":s.ButtonId.INTENT,className:"adyen-checkout-upi-area-intent",role:"region"},e(p,{disabled:"loading"===j,apps:v,selectedAppId:null==q?void 0:q.id,onAppSelect:H,onVpaInputChange:L,onSetInputHandlers:R}),I&&y({label:C.get("continue"),status:j,disabled:null==q})),"vpa"===V&&e("div",{id:s.AreaId.VPA,"aria-labelledby":s.ButtonId.VPA,className:"adyen-checkout-upi-area-vpa",role:"region"},e(r,{disabled:"loading"===j,onChange:b,onSetInputHandlers:R}),I&&y({label:C.get("continue"),status:j})),"qrCode"===V&&e("div",{id:s.AreaId.QR,"aria-labelledby":s.ButtonId.QR,className:"adyen-checkout-upi-area-qr-code",role:"region"},I&&y({label:C.get("generateQRCode"),icon:h({imageFolder:"components/"})("qr"),status:j})))}export{b as default};
1
+ import{createElement as e,Fragment as t}from"../../../../external/preact/dist/preact.js";import{useState as n,useCallback as o,useEffect as a}from"../../../../external/preact/hooks/dist/hooks.js";import r from"../VpaInput/VpaInput.js";import i from"../../../../core/Context/useImage.js";import{A11Y as l}from"../../constants.js";import s from"../../../internal/SegmentedControl/SegmentedControl.js";import d from"../UPIIntentAppList/UPIIntentAppList.js";import{useCoreContext as c}from"../../../../core/Context/CoreProvider.js";import u from"../../../internal/Alert/Alert.js";function p(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function m(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},o=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(o=o.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),o.forEach(function(t){p(e,t,n[t])})}return e}function g({defaultMode:p,onChange:g,onUpdateMode:b=()=>{},payButton:f,showPayButton:y,apps:h=[],segmentedControlOptions:I=[]}){const{i18n:C}=c(),j=i(),[v,A]=n("ready"),[N,k]=n(p),[P,S]=n(null),[O,V]=n(null),[q,w]=n("qrCode"===p);this.setStatus=e=>{A(e)},this.showValidation=()=>{null==P||P.validateInput(),"intent"===N&&T()};const x=o(e=>{S(e)},[]),B=o(e=>{k(e),b(e)},[b]),E=o(e=>{(null==e?void 0:e.id)!==(null==O?void 0:O.id)&&(V(e),w(!0),A("ready"))},[O]),T=o(()=>{O?(A("ready"),w(!0)):(A("error"),w(!1))},[O]);return a(()=>{g("qrCode"!==N?{data:m({},O&&{app:O}),isValid:q}:{data:{},valid:{},errors:{},isValid:!0})},[O,q,N,g]),e(t,null,I.length>0&&e("p",{className:"adyen-checkout_upi-mode-selection-text"},C.get("upi.modeSelection")),e(s,{onChange:B,selectedValue:N,disabled:"loading"===v,classNameModifiers:["upi-margin-bottom"],options:I}),"intent"===N&&e("div",{id:l.AreaId.INTENT,"aria-labelledby":l.ButtonId.INTENT,className:"adyen-checkout-upi-area-intent",role:"region"},e("span",{className:"adyen-checkout-upi-instruction-label"},C.get("upi.intent.instruction")),"error"===v&&e(u,{icon:"cross"},C.get("upi.error.noAppSelected")),e(d,{disabled:"loading"===v,apps:h,selectedAppId:null==O?void 0:O.id,onAppSelect:E}),y&&f({label:C.get("continue"),status:v})),"vpa"===N&&e("div",{id:l.AreaId.VPA,"aria-labelledby":l.ButtonId.VPA,className:"adyen-checkout-upi-area-vpa",role:"region"},e("span",{className:"adyen-checkout-upi-instruction-label"},C.get("upi.collect.instruction")),e(r,{disabled:"loading"===v,onChange:g,onSetInputHandlers:x}),y&&f({label:C.get("continue"),status:v})),"qrCode"===N&&e("div",{id:l.AreaId.QR,"aria-labelledby":l.ButtonId.QR,className:"adyen-checkout-upi-area-qr-code",role:"region"},e("span",{className:"adyen-checkout-upi-instruction-label"},C.get("upi.qrCode.instruction")),y&&f({label:C.get("generateQRCode"),icon:j({imageFolder:"components/"})("qr"),status:v})))}export{g as default};
2
2
  //# sourceMappingURL=UPIComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UPIComponent.js","sources":["../../../../../../src/components/UPI/components/UPIComponent/UPIComponent.tsx"],"sourcesContent":["import { Fragment, h, RefObject } from 'preact';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\nimport { PayButtonFunctionProps, UIElementStatus } from '../../../types';\nimport VpaInput, { VpaInputHandlers } from '../VpaInput/VpaInput';\nimport { App, UpiMode } from '../../types';\nimport useImage from '../../../../core/Context/useImage';\nimport useUpiSegmentedControlOptions from './useUpiSegmentedControlOptions';\nimport { A11Y } from './constants';\nimport './UPIComponent.scss';\nimport SegmentedControl from '../../../internal/SegmentedControl';\nimport ContentSeparator from '../../../internal/ContentSeparator';\nimport UPIIntentAppList from '../UPIIntentAppList';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\n\ntype UpiData = { app?: App; virtualPaymentAddress?: string };\n\ntype OnChangeProps = { data: UpiData; valid; errors; isValid: boolean };\n\ninterface UPIComponentProps {\n defaultMode: UpiMode;\n showPayButton: boolean;\n apps?: Array<App>;\n\n ref?(ref: RefObject<typeof UPIComponent>): void;\n\n payButton?(props: PayButtonFunctionProps): h.JSX.Element;\n\n onChange({ data, valid, errors, isValid }: OnChangeProps): void;\n\n onUpdateMode?(mode: UpiMode): void;\n}\n\nexport default function UPIComponent({ defaultMode, onChange, onUpdateMode, payButton, showPayButton, apps = [] }: UPIComponentProps): h.JSX.Element {\n const { i18n } = useCoreContext();\n const getImage = useImage();\n const [status, setStatus] = useState<UIElementStatus>('ready');\n const [isValid, setIsValid] = useState<boolean>(defaultMode === 'qrCode');\n const [mode, setMode] = useState<UpiMode>(defaultMode);\n const [vpa, setVpa] = useState<string>('');\n const [vpaInputHandlers, setVpaInputHandlers] = useState<VpaInputHandlers>(null);\n const [selectedApp, setSelectedApp] = useState<App>(null);\n const [valid, setValid] = useState(null);\n const [errors, setErrors] = useState(null);\n const segmentedControlOptions = useUpiSegmentedControlOptions(apps, mode);\n\n this.setStatus = (status: UIElementStatus) => {\n setStatus(status);\n };\n\n this.showValidation = () => {\n vpaInputHandlers?.validateInput();\n };\n\n const onSetVpaInputHandlers = useCallback((handlers: VpaInputHandlers) => {\n setVpaInputHandlers(handlers);\n }, []);\n\n const onChangeUpiMode = useCallback(\n (newMode: UpiMode) => {\n setMode(newMode);\n onUpdateMode(newMode);\n },\n [onUpdateMode]\n );\n\n const handleAppSelect = useCallback(\n (app: App) => {\n if (app?.id === selectedApp?.id) return;\n\n setSelectedApp(app);\n setIsValid(true);\n },\n [selectedApp]\n );\n\n const handleVpaInputChange = useCallback(({ data: { virtualPaymentAddress }, errors, valid, isValid }: OnChangeProps) => {\n setVpa(virtualPaymentAddress);\n setErrors(errors);\n setValid(valid);\n setIsValid(isValid);\n }, []);\n\n useEffect(() => {\n if (mode !== 'qrCode') {\n onChange({\n data: { ...(vpa && { virtualPaymentAddress: vpa }), ...(selectedApp && { app: selectedApp }) },\n errors,\n valid,\n isValid\n });\n } else {\n /**\n * When selecting QR code mode, we need to clear the state data and trigger the 'onChange'.\n */\n onChange({ data: {}, valid: {}, errors: {}, isValid: true });\n }\n }, [vpa, selectedApp, errors, valid, isValid, mode]);\n\n return (\n <Fragment>\n <p className=\"adyen-checkout_upi-mode-selection-text\">{i18n.get('upi.modeSelection')}</p>\n <SegmentedControl\n onChange={onChangeUpiMode}\n selectedValue={mode}\n disabled={status === 'loading'}\n classNameModifiers={['upi-margin-bottom']}\n options={segmentedControlOptions}\n />\n <ContentSeparator label={i18n.get('upi.completePayment')} />\n {mode === 'intent' && (\n <div id={A11Y.AreaId.INTENT} aria-labelledby={A11Y.ButtonId.INTENT} className=\"adyen-checkout-upi-area-intent\" role=\"region\">\n <UPIIntentAppList\n disabled={status === 'loading'}\n apps={apps}\n selectedAppId={selectedApp?.id}\n onAppSelect={handleAppSelect}\n onVpaInputChange={handleVpaInputChange}\n onSetInputHandlers={onSetVpaInputHandlers}\n />\n\n {showPayButton &&\n payButton({\n label: i18n.get('continue'),\n status,\n disabled: selectedApp == null\n })}\n </div>\n )}\n {mode === 'vpa' && (\n <div id={A11Y.AreaId.VPA} aria-labelledby={A11Y.ButtonId.VPA} className=\"adyen-checkout-upi-area-vpa\" role=\"region\">\n <VpaInput disabled={status === 'loading'} onChange={onChange} onSetInputHandlers={onSetVpaInputHandlers} />\n\n {showPayButton &&\n payButton({\n label: i18n.get('continue'),\n status\n })}\n </div>\n )}\n {mode === 'qrCode' && (\n <div id={A11Y.AreaId.QR} aria-labelledby={A11Y.ButtonId.QR} className=\"adyen-checkout-upi-area-qr-code\" role=\"region\">\n {showPayButton &&\n payButton({\n label: i18n.get('generateQRCode'),\n icon: getImage({ imageFolder: 'components/' })('qr'),\n status\n })}\n </div>\n )}\n </Fragment>\n );\n}\n"],"names":["UPIComponent","defaultMode","onChange","onUpdateMode","payButton","showPayButton","apps","i18n","useCoreContext","getImage","useImage","status","setStatus","useState","isValid","setIsValid","mode","setMode","vpa","setVpa","vpaInputHandlers","setVpaInputHandlers","selectedApp","setSelectedApp","valid","setValid","errors","setErrors","segmentedControlOptions","useUpiSegmentedControlOptions","this","showValidation","validateInput","onSetVpaInputHandlers","useCallback","handlers","onChangeUpiMode","newMode","handleAppSelect","app","id","handleVpaInputChange","data","virtualPaymentAddress","useEffect","_object_spread","h","Fragment","p","className","get","SegmentedControl","selectedValue","disabled","classNameModifiers","options","ContentSeparator","label","div","A11Y","AreaId","INTENT","aria-labelledby","ButtonId","role","UPIIntentAppList","selectedAppId","onAppSelect","onVpaInputChange","onSetInputHandlers","VPA","VpaInput","QR","icon","imageFolder"],"mappings":"gkCAgCe,SAASA,GAAaC,YAAEA,EAAWC,SAAEA,EAAQC,aAAEA,EAAYC,UAAEA,EAASC,cAAEA,EAAaC,KAAEA,EAAO,KACzG,MAAMC,KAAEA,GAASC,IACXC,EAAWC,KACVC,EAAQC,GAAaC,EAA0B,UAC/CC,EAASC,GAAcF,EAAkC,WAAhBZ,IACzCe,EAAMC,GAAWJ,EAAkBZ,IACnCiB,EAAKC,GAAUN,EAAiB,KAChCO,EAAkBC,GAAuBR,EAA2B,OACpES,EAAaC,GAAkBV,EAAc,OAC7CW,EAAOC,GAAYZ,EAAS,OAC5Ba,EAAQC,GAAad,EAAS,MAC/Be,EAA0BC,EAA8BvB,EAAMU,GAEpEc,KAAKlB,UAAaD,IACdC,EAAUD,IAGdmB,KAAKC,eAAiB,KAClBX,SAAAA,EAAkBY,iBAGtB,MAAMC,EAAwBC,EAAaC,IACvCd,EAAoBc,IACrB,IAEGC,EAAkBF,EACnBG,IACGpB,EAAQoB,GACRlC,EAAakC,IAEjB,CAAClC,IAGCmC,EAAkBJ,EACnBK,KACOA,aAAAA,EAAAA,EAAKC,OAAOlB,aAAAA,EAAAA,EAAakB,MAE7BjB,EAAegB,GACfxB,GAAW,KAEf,CAACO,IAGCmB,EAAuBP,EAAY,EAAGQ,MAAQC,yBAAyBjB,SAAQF,QAAOV,cACxFK,EAAOwB,GACPhB,EAAUD,GACVD,EAASD,GACTT,EAAWD,IACZ,IAkBH,OAhBA8B,EAAU,KAEF1C,EADS,WAATc,EACS,CACL0B,KAAMG,KAAM3B,GAAO,CAAEyB,sBAAuBzB,GAAYI,GAAe,CAAEiB,IAAKjB,IAC9EI,SACAF,QACAV,WAMK,CAAE4B,KAAM,CAAA,EAAIlB,MAAO,CAAA,EAAIE,OAAQ,CAAA,EAAIZ,SAAS,KAE1D,CAACI,EAAKI,EAAaI,EAAQF,EAAOV,EAASE,IAG1C8B,EAACC,OACGD,EAACE,IAAAA,CAAEC,UAAU,0CAA0C1C,EAAK2C,IAAI,sBAChEJ,EAACK,EAAAA,CACGjD,SAAUkC,EACVgB,cAAepC,EACfqC,SAAqB,YAAX1C,EACV2C,mBAAoB,CAAC,qBACrBC,QAAS3B,IAEbkB,EAACU,EAAAA,CAAiBC,MAAOlD,EAAK2C,IAAI,yBACxB,WAATlC,GACG8B,EAACY,MAAAA,CAAIlB,GAAImB,EAAKC,OAAOC,OAAQC,kBAAiBH,EAAKI,SAASF,OAAQZ,UAAU,iCAAiCe,KAAK,UAChHlB,EAACmB,EAAAA,CACGZ,SAAqB,YAAX1C,EACVL,KAAMA,EACN4D,cAAe5C,aAAAA,EAAAA,EAAakB,GAC5B2B,YAAa7B,EACb8B,iBAAkB3B,EAClB4B,mBAAoBpC,IAGvB5B,GACGD,EAAU,CACNqD,MAAOlD,EAAK2C,IAAI,YAChBvC,SACA0C,SAAyB,MAAf/B,KAIhB,QAATN,GACG8B,EAACY,MAAAA,CAAIlB,GAAImB,EAAKC,OAAOU,IAAKR,kBAAiBH,EAAKI,SAASO,IAAKrB,UAAU,8BAA8Be,KAAK,UACvGlB,EAACyB,EAAAA,CAASlB,SAAqB,YAAX1C,EAAsBT,SAAUA,EAAUmE,mBAAoBpC,IAEjF5B,GACGD,EAAU,CACNqD,MAAOlD,EAAK2C,IAAI,YAChBvC,YAIN,WAATK,GACG8B,EAACY,MAAAA,CAAIlB,GAAImB,EAAKC,OAAOY,GAAIV,kBAAiBH,EAAKI,SAASS,GAAIvB,UAAU,kCAAkCe,KAAK,UACxG3D,GACGD,EAAU,CACNqD,MAAOlD,EAAK2C,IAAI,kBAChBuB,KAAMhE,EAAS,CAAEiE,YAAa,eAAxBjE,CAAyC,MAC/CE,YAM5B"}
1
+ {"version":3,"file":"UPIComponent.js","sources":["../../../../../../src/components/UPI/components/UPIComponent/UPIComponent.tsx"],"sourcesContent":["import { Fragment, h, RefObject } from 'preact';\nimport { useCallback, useEffect, useState } from 'preact/hooks';\nimport { PayButtonFunctionProps, UIElementStatus } from '../../../types';\nimport VpaInput, { VpaInputHandlers } from '../VpaInput/VpaInput';\nimport { App, UpiMode } from '../../types';\nimport useImage from '../../../../core/Context/useImage';\nimport { A11Y } from '../../constants';\nimport './UPIComponent.scss';\nimport SegmentedControl from '../../../internal/SegmentedControl';\nimport UPIIntentAppList from '../UPIIntentAppList';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\nimport Alert from '../../../internal/Alert';\nimport { SegmentedControlOption } from '../../../internal/SegmentedControl/SegmentedControl';\n\ntype UpiData = { app?: App; virtualPaymentAddress?: string };\n\ntype OnChangeProps = { data: UpiData; valid?: { [key: string]: boolean }; errors?: { [key: string]: any }; isValid: boolean };\n\ninterface UPIComponentProps {\n defaultMode: UpiMode;\n showPayButton: boolean;\n apps?: Array<App>;\n segmentedControlOptions?: Array<SegmentedControlOption<UpiMode>>;\n\n ref?(ref: RefObject<typeof UPIComponent>): void;\n\n payButton?(props: PayButtonFunctionProps): h.JSX.Element;\n\n onChange({ data, valid, errors, isValid }: OnChangeProps): void;\n\n onUpdateMode?(mode: UpiMode): void;\n}\n\nexport default function UPIComponent({\n defaultMode,\n onChange,\n onUpdateMode = () => {},\n payButton,\n showPayButton,\n apps = [],\n segmentedControlOptions = []\n}: Readonly<UPIComponentProps>): h.JSX.Element {\n const { i18n } = useCoreContext();\n const getImage = useImage();\n const [status, setStatus] = useState<UIElementStatus>('ready');\n const [mode, setMode] = useState<UpiMode>(defaultMode);\n const [vpaInputHandlers, setVpaInputHandlers] = useState<VpaInputHandlers>(null);\n const [selectedApp, setSelectedApp] = useState<App>(null);\n const [isValid, setIsValid] = useState<boolean>(defaultMode === 'qrCode');\n\n this.setStatus = (status: UIElementStatus) => {\n setStatus(status);\n };\n\n this.showValidation = () => {\n vpaInputHandlers?.validateInput();\n if (mode === 'intent') {\n validateIntentApp();\n }\n };\n\n const onSetVpaInputHandlers = useCallback((handlers: VpaInputHandlers) => {\n setVpaInputHandlers(handlers);\n }, []);\n\n const onChangeUpiMode = useCallback(\n (newMode: UpiMode) => {\n setMode(newMode);\n onUpdateMode(newMode);\n },\n [onUpdateMode]\n );\n\n const handleAppSelect = useCallback(\n (app: App) => {\n if (app?.id === selectedApp?.id) return;\n\n setSelectedApp(app);\n setIsValid(true);\n setStatus('ready');\n },\n [selectedApp]\n );\n\n const validateIntentApp = useCallback(() => {\n if (!selectedApp) {\n setStatus('error');\n setIsValid(false);\n } else {\n setStatus('ready');\n setIsValid(true);\n }\n }, [selectedApp]);\n\n useEffect(() => {\n if (mode !== 'qrCode') {\n onChange({\n data: { ...(selectedApp && { app: selectedApp }) },\n isValid\n });\n } else {\n /**\n * When selecting QR code mode, we need to clear the state data and trigger the 'onChange'.\n */\n onChange({ data: {}, valid: {}, errors: {}, isValid: true });\n }\n }, [selectedApp, isValid, mode, onChange]);\n\n return (\n <Fragment>\n {segmentedControlOptions.length > 0 && <p className=\"adyen-checkout_upi-mode-selection-text\">{i18n.get('upi.modeSelection')}</p>}\n <SegmentedControl\n onChange={onChangeUpiMode}\n selectedValue={mode}\n disabled={status === 'loading'}\n classNameModifiers={['upi-margin-bottom']}\n options={segmentedControlOptions}\n />\n\n {mode === 'intent' && (\n <div id={A11Y.AreaId.INTENT} aria-labelledby={A11Y.ButtonId.INTENT} className=\"adyen-checkout-upi-area-intent\" role=\"region\">\n <span className=\"adyen-checkout-upi-instruction-label\">{i18n.get('upi.intent.instruction')}</span>\n {status === 'error' && <Alert icon={'cross'}>{i18n.get('upi.error.noAppSelected')}</Alert>}\n <UPIIntentAppList disabled={status === 'loading'} apps={apps} selectedAppId={selectedApp?.id} onAppSelect={handleAppSelect} />\n\n {showPayButton &&\n payButton({\n label: i18n.get('continue'),\n status\n })}\n </div>\n )}\n {mode === 'vpa' && (\n <div id={A11Y.AreaId.VPA} aria-labelledby={A11Y.ButtonId.VPA} className=\"adyen-checkout-upi-area-vpa\" role=\"region\">\n <span className=\"adyen-checkout-upi-instruction-label\">{i18n.get('upi.collect.instruction')}</span>\n <VpaInput disabled={status === 'loading'} onChange={onChange} onSetInputHandlers={onSetVpaInputHandlers} />\n\n {showPayButton &&\n payButton({\n label: i18n.get('continue'),\n status\n })}\n </div>\n )}\n {mode === 'qrCode' && (\n <div id={A11Y.AreaId.QR} aria-labelledby={A11Y.ButtonId.QR} className=\"adyen-checkout-upi-area-qr-code\" role=\"region\">\n <span className=\"adyen-checkout-upi-instruction-label\">{i18n.get('upi.qrCode.instruction')}</span>\n {showPayButton &&\n payButton({\n label: i18n.get('generateQRCode'),\n icon: getImage({ imageFolder: 'components/' })('qr'),\n status\n })}\n </div>\n )}\n </Fragment>\n );\n}\n"],"names":["UPIComponent","defaultMode","onChange","onUpdateMode","payButton","showPayButton","apps","segmentedControlOptions","i18n","useCoreContext","getImage","useImage","status","setStatus","useState","mode","setMode","vpaInputHandlers","setVpaInputHandlers","selectedApp","setSelectedApp","isValid","setIsValid","this","showValidation","validateInput","validateIntentApp","onSetVpaInputHandlers","useCallback","handlers","onChangeUpiMode","newMode","handleAppSelect","app","id","useEffect","data","_object_spread","valid","errors","h","Fragment","length","p","className","get","SegmentedControl","selectedValue","disabled","classNameModifiers","options","div","A11Y","AreaId","INTENT","aria-labelledby","ButtonId","role","span","Alert","icon","UPIIntentAppList","selectedAppId","onAppSelect","label","VPA","VpaInput","onSetInputHandlers","QR","imageFolder"],"mappings":"4/BAiCe,SAASA,GAAaC,YACjCA,EAAWC,SACXA,EAAQC,aACRA,EAAe,OAAQC,UACvBA,EAASC,cACTA,EAAaC,KACbA,EAAO,GAAEC,wBACTA,EAA0B,KAE1B,MAAMC,KAAEA,GAASC,IACXC,EAAWC,KACVC,EAAQC,GAAaC,EAA0B,UAC/CC,EAAMC,GAAWF,EAAkBb,IACnCgB,EAAkBC,GAAuBJ,EAA2B,OACpEK,EAAaC,GAAkBN,EAAc,OAC7CO,EAASC,GAAcR,EAAkC,WAAhBb,GAEhDsB,KAAKV,UAAaD,IACdC,EAAUD,IAGdW,KAAKC,eAAiB,KAClBP,SAAAA,EAAkBQ,gBACL,WAATV,GACAW,KAIR,MAAMC,EAAwBC,EAAaC,IACvCX,EAAoBW,IACrB,IAEGC,EAAkBF,EACnBG,IACGf,EAAQe,GACR5B,EAAa4B,IAEjB,CAAC5B,IAGC6B,EAAkBJ,EACnBK,KACOA,aAAAA,EAAAA,EAAKC,OAAOf,aAAAA,EAAAA,EAAae,MAE7Bd,EAAea,GACfX,GAAW,GACXT,EAAU,WAEd,CAACM,IAGCO,EAAoBE,EAAY,KAC7BT,GAIDN,EAAU,SACVS,GAAW,KAJXT,EAAU,SACVS,GAAW,KAKhB,CAACH,IAgBJ,OAdAgB,EAAU,KAEFjC,EADS,WAATa,EACS,CACLqB,KAAMC,KAAMlB,GAAe,CAAEc,IAAKd,IAClCE,WAMK,CAAEe,KAAM,CAAA,EAAIE,MAAO,CAAA,EAAIC,OAAQ,CAAA,EAAIlB,SAAS,KAE1D,CAACF,EAAaE,EAASN,EAAMb,IAG5BsC,EAACC,EAAAA,KACIlC,EAAwBmC,OAAS,GAAKF,EAACG,IAAAA,CAAEC,UAAU,0CAA0CpC,EAAKqC,IAAI,sBACvGL,EAACM,EAAAA,CACG5C,SAAU4B,EACViB,cAAehC,EACfiC,SAAqB,YAAXpC,EACVqC,mBAAoB,CAAC,qBACrBC,QAAS3C,IAGH,WAATQ,GACGyB,EAACW,MAAAA,CAAIjB,GAAIkB,EAAKC,OAAOC,OAAQC,kBAAiBH,EAAKI,SAASF,OAAQV,UAAU,iCAAiCa,KAAK,UAChHjB,EAACkB,OAAAA,CAAKd,UAAU,wCAAwCpC,EAAKqC,IAAI,2BACrD,UAAXjC,GAAsB4B,EAACmB,EAAAA,CAAMC,KAAM,SAAUpD,EAAKqC,IAAI,4BACvDL,EAACqB,EAAAA,CAAiBb,SAAqB,YAAXpC,EAAsBN,KAAMA,EAAMwD,cAAe3C,aAAAA,EAAAA,EAAae,GAAI6B,YAAa/B,IAE1G3B,GACGD,EAAU,CACN4D,MAAOxD,EAAKqC,IAAI,YAChBjC,YAIN,QAATG,GACGyB,EAACW,MAAAA,CAAIjB,GAAIkB,EAAKC,OAAOY,IAAKV,kBAAiBH,EAAKI,SAASS,IAAKrB,UAAU,8BAA8Ba,KAAK,UACvGjB,EAACkB,OAAAA,CAAKd,UAAU,wCAAwCpC,EAAKqC,IAAI,4BACjEL,EAAC0B,EAAAA,CAASlB,SAAqB,YAAXpC,EAAsBV,SAAUA,EAAUiE,mBAAoBxC,IAEjFtB,GACGD,EAAU,CACN4D,MAAOxD,EAAKqC,IAAI,YAChBjC,YAIN,WAATG,GACGyB,EAACW,MAAAA,CAAIjB,GAAIkB,EAAKC,OAAOe,GAAIb,kBAAiBH,EAAKI,SAASY,GAAIxB,UAAU,kCAAkCa,KAAK,UACzGjB,EAACkB,OAAAA,CAAKd,UAAU,wCAAwCpC,EAAKqC,IAAI,2BAChExC,GACGD,EAAU,CACN4D,MAAOxD,EAAKqC,IAAI,kBAChBe,KAAMlD,EAAS,CAAE2D,YAAa,eAAxB3D,CAAyC,MAC/CE,YAM5B"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../../../external/preact/dist/preact.js";import t from"../../../../../_virtual/index.js";import a from"../../../../Dropin/components/PaymentMethod/PaymentMethodIcon.js";import i from"../../../../internal/ExpandButton/ExpandButton.js";const p=({app:p,imgSrc:n,isSelected:c,onSelect:o=()=>{},children:d})=>{const m=`adyen-checkout-upi-app-item-button-${p.id}`,s=`adyen-checkout-upi-app-${p.id}`;return e("li",{className:t({"adyen-checkout-upi-app-item":!0,"adyen-checkout-upi-app-item--selected":c}),onClick:()=>(e=>{o(e)})(p)},e("div",{className:"adyen-checkout-upi-app-item-header"},e(i,{classNameModifiers:["upi-app-item"],buttonId:m,isSelected:c,expandContentId:s},e(a,{src:n,altDescription:p.name,type:p.id}),e("label",{className:"adyen-checkout-upi-app-item__label",htmlFor:m},p.name))),c&&d&&e("div",{className:"adyen-checkout-upi-app-item-details",id:s},d))};export{p as default};
1
+ import{createElement as e}from"../../../../../external/preact/dist/preact.js";import t from"../../../../../_virtual/index.js";import a from"../../../../Dropin/components/PaymentMethod/PaymentMethodIcon.js";import p from"../../../../internal/ExpandButton/ExpandButton.js";const c=({app:c,imgSrc:n,isSelected:i,onSelect:o=()=>{}})=>{const m=`adyen-checkout-upi-app-item-button-${c.id}`,s=`adyen-checkout-upi-app-${c.id}`;return e("li",{className:t({"adyen-checkout-upi-app-item":!0,"adyen-checkout-upi-app-item--selected":i}),onClick:()=>(e=>{o(e)})(c)},e("div",{className:"adyen-checkout-upi-app-item-header"},e(p,{classNameModifiers:["upi-app-item"],buttonId:m,isSelected:i,expandContentId:s},e(a,{src:n,altDescription:c.name,type:c.id}),e("label",{className:"adyen-checkout-upi-app-item__label",htmlFor:m},c.name))),i&&e("span",{className:"adyen-checkout-checkmark"}))};export{c as default};
2
2
  //# sourceMappingURL=UPIIntentAppItem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UPIIntentAppItem.js","sources":["../../../../../../../src/components/UPI/components/UPIIntentAppList/UPIIntentAppItem/UPIIntentAppItem.tsx"],"sourcesContent":["import { ComponentChildren, h } from 'preact';\nimport cx from 'classnames';\nimport { App } from '../../../types';\nimport PaymentMethodIcon from '../../../../Dropin/components/PaymentMethod/PaymentMethodIcon';\nimport ExpandButton from '../../../../internal/ExpandButton';\nimport './UPIIntentAppItem.scss';\n\ninterface UPIIntentAppItemProps {\n app: App;\n imgSrc: string;\n isSelected: boolean;\n onSelect?: Function;\n children?: ComponentChildren;\n}\n\nconst UPIIntentAppItem = ({ app, imgSrc, isSelected, onSelect = () => {}, children }: UPIIntentAppItemProps): h.JSX.Element => {\n const buttonId = `adyen-checkout-upi-app-item-button-${app.id}`;\n const containerId = `adyen-checkout-upi-app-${app.id}`;\n const handleAppSelected = (app: App) => {\n onSelect(app);\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-noninteractive-element-interactions\n <li\n className={cx({\n 'adyen-checkout-upi-app-item': true,\n 'adyen-checkout-upi-app-item--selected': isSelected\n })}\n onClick={() => handleAppSelected(app)}\n >\n <div className=\"adyen-checkout-upi-app-item-header\">\n <ExpandButton classNameModifiers={['upi-app-item']} buttonId={buttonId} isSelected={isSelected} expandContentId={containerId}>\n <PaymentMethodIcon src={imgSrc} altDescription={app.name} type={app.id}></PaymentMethodIcon>\n <label className=\"adyen-checkout-upi-app-item__label\" htmlFor={buttonId}>\n {app.name}\n </label>\n </ExpandButton>\n </div>\n {isSelected && children && (\n <div className=\"adyen-checkout-upi-app-item-details\" id={containerId}>\n {children}\n </div>\n )}\n </li>\n );\n};\n\nexport default UPIIntentAppItem;\n"],"names":["UPIIntentAppItem","app","imgSrc","isSelected","onSelect","children","buttonId","id","containerId","h","li","className","cx","onClick","handleAppSelected","div","ExpandButton","classNameModifiers","expandContentId","PaymentMethodIcon","src","altDescription","name","type","label","htmlFor"],"mappings":"+QAeA,MAAMA,EAAmB,EAAGC,MAAKC,SAAQC,aAAYC,WAAW,OAAUC,eACtE,MAAMC,EAAW,sCAAsCL,EAAIM,KACrDC,EAAc,0BAA0BP,EAAIM,KAKlD,OAEIE,EAACC,KAAAA,CACGC,UAAWC,EAAG,CACV,+BAA+B,EAC/B,wCAAyCT,IAE7CU,QAAS,IAXS,CAACZ,IACvBG,EAASH,IAUUa,CAAkBb,IAEjCQ,EAACM,MAAAA,CAAIJ,UAAU,sCACXF,EAACO,EAAAA,CAAaC,mBAAoB,CAAC,gBAAiBX,SAAUA,EAAUH,WAAYA,EAAYe,gBAAiBV,GAC7GC,EAACU,EAAAA,CAAkBC,IAAKlB,EAAQmB,eAAgBpB,EAAIqB,KAAMC,KAAMtB,EAAIM,KACpEE,EAACe,QAAAA,CAAMb,UAAU,qCAAqCc,QAASnB,GAC1DL,EAAIqB,QAIhBnB,GAAcE,GACXI,EAACM,MAAAA,CAAIJ,UAAU,sCAAsCJ,GAAIC,GACpDH"}
1
+ {"version":3,"file":"UPIIntentAppItem.js","sources":["../../../../../../../src/components/UPI/components/UPIIntentAppList/UPIIntentAppItem/UPIIntentAppItem.tsx"],"sourcesContent":["import { h } from 'preact';\nimport cx from 'classnames';\nimport { App } from '../../../types';\nimport PaymentMethodIcon from '../../../../Dropin/components/PaymentMethod/PaymentMethodIcon';\nimport ExpandButton from '../../../../internal/ExpandButton';\nimport './UPIIntentAppItem.scss';\n\ninterface UPIIntentAppItemProps {\n app: App;\n imgSrc: string;\n isSelected: boolean;\n onSelect?: Function;\n}\n\nconst UPIIntentAppItem = ({ app, imgSrc, isSelected, onSelect = () => {} }: UPIIntentAppItemProps): h.JSX.Element => {\n const buttonId = `adyen-checkout-upi-app-item-button-${app.id}`;\n const containerId = `adyen-checkout-upi-app-${app.id}`;\n const handleAppSelected = (app: App) => {\n onSelect(app);\n };\n\n return (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-noninteractive-element-interactions\n <li\n className={cx({\n 'adyen-checkout-upi-app-item': true,\n 'adyen-checkout-upi-app-item--selected': isSelected\n })}\n onClick={() => handleAppSelected(app)}\n >\n <div className=\"adyen-checkout-upi-app-item-header\">\n <ExpandButton classNameModifiers={['upi-app-item']} buttonId={buttonId} isSelected={isSelected} expandContentId={containerId}>\n <PaymentMethodIcon src={imgSrc} altDescription={app.name} type={app.id}></PaymentMethodIcon>\n <label className=\"adyen-checkout-upi-app-item__label\" htmlFor={buttonId}>\n {app.name}\n </label>\n </ExpandButton>\n </div>\n {isSelected && <span className=\"adyen-checkout-checkmark\" />}\n </li>\n );\n};\n\nexport default UPIIntentAppItem;\n"],"names":["UPIIntentAppItem","app","imgSrc","isSelected","onSelect","buttonId","id","containerId","h","li","className","cx","onClick","handleAppSelected","div","ExpandButton","classNameModifiers","expandContentId","PaymentMethodIcon","src","altDescription","name","type","label","htmlFor","span"],"mappings":"+QAcA,MAAMA,EAAmB,EAAGC,MAAKC,SAAQC,aAAYC,WAAW,WAC5D,MAAMC,EAAW,sCAAsCJ,EAAIK,KACrDC,EAAc,0BAA0BN,EAAIK,KAKlD,OAEIE,EAACC,KAAAA,CACGC,UAAWC,EAAG,CACV,+BAA+B,EAC/B,wCAAyCR,IAE7CS,QAAS,IAXS,CAACX,IACvBG,EAASH,IAUUY,CAAkBZ,IAEjCO,EAACM,MAAAA,CAAIJ,UAAU,sCACXF,EAACO,EAAAA,CAAaC,mBAAoB,CAAC,gBAAiBX,SAAUA,EAAUF,WAAYA,EAAYc,gBAAiBV,GAC7GC,EAACU,EAAAA,CAAkBC,IAAKjB,EAAQkB,eAAgBnB,EAAIoB,KAAMC,KAAMrB,EAAIK,KACpEE,EAACe,QAAAA,CAAMb,UAAU,qCAAqCc,QAASnB,GAC1DJ,EAAIoB,QAIhBlB,GAAcK,EAACiB,OAAAA,CAAKf,UAAU"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../../external/preact/dist/preact.js";import t from"../../../../_virtual/index.js";import p from"./UPIIntentAppItem/UPIIntentAppItem.js";import a from"../VpaInput/VpaInput.js";import o from"../../../../core/Context/useImage.js";import{useCoreContext as r}from"../../../../core/Context/CoreProvider.js";const n=({apps:n,selectedAppId:i,disabled:s,onAppSelect:d=()=>{},onVpaInputChange:l=()=>{},onSetInputHandlers:m=()=>{}})=>{const{i18n:u}=r(),c=o();return e("ul",{className:t({"adyen-checkout-upi-app-list":!0,"adyen-checkout-upi-app-list--loading":s}),role:"radiogroup","aria-label":u.get("paymentMethodsList.aria.label"),required:!0},n.map(t=>{const o=`adyen-checkout-upi-app-item-${t.id}}`,r=i===t.id,n="vpa"===t.id,u=n?"upi":`upi/${t.id}`,I=c()(u.toLowerCase());return e(p,{key:o,app:t,imgSrc:I,isSelected:r,onSelect:d},n&&e(a,{disabled:s,onChange:l,onSetInputHandlers:m}))}))};export{n as default};
1
+ import{createElement as e}from"../../../../external/preact/dist/preact.js";import t from"../../../../_virtual/index.js";import r from"./UPIIntentAppItem/UPIIntentAppItem.js";import p from"../../../../core/Context/useImage.js";import{useCoreContext as o}from"../../../../core/Context/CoreProvider.js";const a=({apps:a,selectedAppId:i,disabled:s,onAppSelect:n=()=>{}})=>{const{i18n:c}=o(),d=p();return e("ul",{className:t({"adyen-checkout-upi-app-list":!0,"adyen-checkout-upi-app-list--loading":s}),role:"radiogroup","aria-label":c.get("paymentMethodsList.aria.label"),required:!0},a.map(t=>{const p=`adyen-checkout-upi-app-item-${t.id}`,o=i===t.id,a=`upi/${t.id}`,s=d()(a.toLowerCase());return e(r,{key:p,app:t,imgSrc:s,isSelected:o,onSelect:n})}))};export{a as default};
2
2
  //# sourceMappingURL=UPIIntentAppList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UPIIntentAppList.js","sources":["../../../../../../src/components/UPI/components/UPIIntentAppList/UPIIntentAppList.tsx"],"sourcesContent":["import { h } from 'preact';\nimport classNames from 'classnames';\nimport { App } from '../../types';\nimport UPIIntentAppItem from './UPIIntentAppItem';\nimport VpaInput from '../VpaInput';\nimport { OnChangeProps, VpaInputHandlers } from '../VpaInput/VpaInput';\nimport useImage from '../../../../core/Context/useImage';\nimport './UPIIntentAppList.scss';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\n\ninterface UPIIntentAppListProps {\n apps: Array<App>;\n selectedAppId?: string;\n disabled?: boolean;\n onAppSelect?: Function;\n onVpaInputChange?({ data, valid, errors, isValid }: OnChangeProps): void;\n onSetInputHandlers?(handlers: VpaInputHandlers): void;\n}\n\nconst UPIIntentAppList = ({\n apps,\n selectedAppId,\n disabled,\n onAppSelect = () => {},\n onVpaInputChange = () => {},\n onSetInputHandlers = () => {}\n}: UPIIntentAppListProps): h.JSX.Element => {\n const { i18n } = useCoreContext();\n const getImage = useImage();\n\n return (\n /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */\n <ul\n className={classNames({\n 'adyen-checkout-upi-app-list': true,\n 'adyen-checkout-upi-app-list--loading': disabled\n })}\n role=\"radiogroup\"\n aria-label={i18n.get('paymentMethodsList.aria.label')}\n required\n >\n {apps.map(app => {\n const key = `adyen-checkout-upi-app-item-${app.id}}`;\n const isSelected = selectedAppId === app.id;\n\n const showUpiCollectInput = app.id === 'vpa';\n const imgName = showUpiCollectInput ? 'upi' : `upi/${app.id}`;\n const imgSrc = getImage()(imgName.toLowerCase());\n\n return (\n <UPIIntentAppItem key={key} app={app} imgSrc={imgSrc} isSelected={isSelected} onSelect={onAppSelect}>\n {showUpiCollectInput && <VpaInput disabled={disabled} onChange={onVpaInputChange} onSetInputHandlers={onSetInputHandlers} />}\n </UPIIntentAppItem>\n );\n })}\n </ul>\n );\n};\n\nexport default UPIIntentAppList;\n"],"names":["UPIIntentAppList","apps","selectedAppId","disabled","onAppSelect","onVpaInputChange","onSetInputHandlers","i18n","useCoreContext","getImage","useImage","h","ul","className","classNames","role","aria-label","get","required","map","app","key","id","isSelected","showUpiCollectInput","imgName","imgSrc","toLowerCase","UPIIntentAppItem","onSelect","VpaInput","onChange"],"mappings":"mVAmBA,MAAMA,EAAmB,EACrBC,OACAC,gBACAC,WACAC,cAAc,OACdC,mBAAmB,OACnBC,qBAAqB,WAErB,MAAMC,KAAEA,GAASC,IACXC,EAAWC,IAEjB,OAEIC,EAACC,KAAAA,CACGC,UAAWC,EAAW,CAClB,+BAA+B,EAC/B,uCAAwCX,IAE5CY,KAAK,aACLC,aAAYT,EAAKU,IAAI,iCACrBC,UAAAA,GAECjB,EAAKkB,IAAIC,IACN,MAAMC,EAAM,+BAA+BD,EAAIE,MACzCC,EAAarB,IAAkBkB,EAAIE,GAEnCE,EAAiC,QAAXJ,EAAIE,GAC1BG,EAAUD,EAAsB,MAAQ,OAAOJ,EAAIE,KACnDI,EAASjB,IAAWgB,EAAQE,eAElC,OACIhB,EAACiB,EAAAA,CAAiBP,IAAKA,EAAKD,IAAKA,EAAKM,OAAQA,EAAQH,WAAYA,EAAYM,SAAUzB,GACnFoB,GAAuBb,EAACmB,EAAAA,CAAS3B,SAAUA,EAAU4B,SAAU1B,EAAkBC,mBAAoBA"}
1
+ {"version":3,"file":"UPIIntentAppList.js","sources":["../../../../../../src/components/UPI/components/UPIIntentAppList/UPIIntentAppList.tsx"],"sourcesContent":["import { h } from 'preact';\nimport classNames from 'classnames';\nimport { App } from '../../types';\nimport UPIIntentAppItem from './UPIIntentAppItem';\nimport useImage from '../../../../core/Context/useImage';\nimport './UPIIntentAppList.scss';\nimport { useCoreContext } from '../../../../core/Context/CoreProvider';\n\ninterface UPIIntentAppListProps {\n apps: Array<App>;\n selectedAppId?: string;\n disabled?: boolean;\n onAppSelect?: (app: App) => void;\n}\n\nconst UPIIntentAppList = ({ apps, selectedAppId, disabled, onAppSelect = () => {} }: UPIIntentAppListProps): h.JSX.Element => {\n const { i18n } = useCoreContext();\n const getImage = useImage();\n\n return (\n /* eslint-disable jsx-a11y/no-noninteractive-element-to-interactive-role */\n <ul\n className={classNames({\n 'adyen-checkout-upi-app-list': true,\n 'adyen-checkout-upi-app-list--loading': disabled\n })}\n role=\"radiogroup\"\n aria-label={i18n.get('paymentMethodsList.aria.label')}\n required\n >\n {apps.map(app => {\n const key = `adyen-checkout-upi-app-item-${app.id}`;\n const isSelected = selectedAppId === app.id;\n const imgName = `upi/${app.id}`;\n const imgSrc = getImage()(imgName.toLowerCase());\n return <UPIIntentAppItem key={key} app={app} imgSrc={imgSrc} isSelected={isSelected} onSelect={onAppSelect} />;\n })}\n </ul>\n );\n};\n\nexport default UPIIntentAppList;\n"],"names":["UPIIntentAppList","apps","selectedAppId","disabled","onAppSelect","i18n","useCoreContext","getImage","useImage","h","ul","className","classNames","role","aria-label","get","required","map","app","key","id","isSelected","imgName","imgSrc","toLowerCase","UPIIntentAppItem","onSelect"],"mappings":"4SAeA,MAAMA,EAAmB,EAAGC,OAAMC,gBAAeC,WAAUC,cAAc,WACrE,MAAMC,KAAEA,GAASC,IACXC,EAAWC,IAEjB,OAEIC,EAACC,KAAAA,CACGC,UAAWC,EAAW,CAClB,+BAA+B,EAC/B,uCAAwCT,IAE5CU,KAAK,aACLC,aAAYT,EAAKU,IAAI,iCACrBC,UAAAA,GAECf,EAAKgB,IAAIC,IACN,MAAMC,EAAM,+BAA+BD,EAAIE,KACzCC,EAAanB,IAAkBgB,EAAIE,GACnCE,EAAU,OAAOJ,EAAIE,KACrBG,EAAShB,IAAWe,EAAQE,eAClC,OAAOf,EAACgB,EAAAA,CAAiBN,IAAKA,EAAKD,IAAKA,EAAKK,OAAQA,EAAQF,WAAYA,EAAYK,SAAUtB"}
@@ -0,0 +1,2 @@
1
+ const e={ButtonId:{VPA:"upi-button-vpa",QR:"upi-button-qrCode",INTENT:"upi-button-intent"},AreaId:{VPA:"upi-area-vpa",QR:"upi-area-qrCode",INTENT:"upi-area-intent"}},t=t=>({label:t.get("upi.mode.payByAnyUpi"),value:"intent",id:e.ButtonId.INTENT,controls:e.AreaId.INTENT}),o=t=>({label:t.get("upi.mode.enterUpiId"),value:"vpa",id:e.ButtonId.VPA,controls:e.AreaId.VPA}),a=t=>({label:t.get("upi.mode.qrCode"),value:"qrCode",id:e.ButtonId.QR,controls:e.AreaId.QR});export{e as A11Y,t as getIntentOption,a as getQrOption,o as getVpaOption};
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/components/UPI/constants.ts"],"sourcesContent":["import { SegmentedControlOption } from '../internal/SegmentedControl/SegmentedControl';\nimport { UpiMode } from './types';\nimport Language from '../../language';\n\nexport const A11Y = {\n ButtonId: {\n VPA: 'upi-button-vpa',\n QR: 'upi-button-qrCode',\n INTENT: 'upi-button-intent'\n },\n AreaId: {\n VPA: 'upi-area-vpa',\n QR: 'upi-area-qrCode',\n INTENT: 'upi-area-intent'\n }\n};\n\nexport const getIntentOption = (i18n: Language): SegmentedControlOption<UpiMode> => ({\n label: i18n.get('upi.mode.payByAnyUpi'),\n value: 'intent',\n id: A11Y.ButtonId.INTENT,\n controls: A11Y.AreaId.INTENT\n});\n\nexport const getVpaOption = (i18n: Language): SegmentedControlOption<UpiMode> => ({\n label: i18n.get('upi.mode.enterUpiId'),\n value: 'vpa',\n id: A11Y.ButtonId.VPA,\n controls: A11Y.AreaId.VPA\n});\n\nexport const getQrOption = (i18n: Language): SegmentedControlOption<UpiMode> => ({\n label: i18n.get('upi.mode.qrCode'),\n value: 'qrCode',\n id: A11Y.ButtonId.QR,\n controls: A11Y.AreaId.QR\n});\n"],"names":["A11Y","ButtonId","VPA","QR","INTENT","AreaId","getIntentOption","i18n","label","get","value","id","controls","getVpaOption","getQrOption"],"mappings":"MAIaA,EAAO,CAChBC,SAAU,CACNC,IAAK,iBACLC,GAAI,oBACJC,OAAQ,qBAEZC,OAAQ,CACJH,IAAK,eACLC,GAAI,kBACJC,OAAQ,oBAIHE,EAAmBC,IAAAA,CAC5BC,MAAOD,EAAKE,IAAI,wBAChBC,MAAO,SACPC,GAAIX,EAAKC,SAASG,OAClBQ,SAAUZ,EAAKK,OAAOD,SAGbS,EAAgBN,IAAAA,CACzBC,MAAOD,EAAKE,IAAI,uBAChBC,MAAO,MACPC,GAAIX,EAAKC,SAASC,IAClBU,SAAUZ,EAAKK,OAAOH,MAGbY,EAAeP,IAAAA,CACxBC,MAAOD,EAAKE,IAAI,mBAChBC,MAAO,SACPC,GAAIX,EAAKC,SAASE,GAClBS,SAAUZ,EAAKK,OAAOF"}
@@ -1 +1 @@
1
- {"version":3,"file":"Address.js","sources":["../../../../../src/components/internal/Address/Address.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport Fieldset from '../FormFields/Fieldset';\nimport ReadOnlyAddress from './components/ReadOnlyAddress';\nimport { getAddressValidationRules } from './validate';\nimport { addressFormatters, countrySpecificFormatters } from './validate.formats';\nimport { AddressProps } from './types';\nimport { AddressData } from '../../../types/global-types';\nimport FieldContainer from './components/FieldContainer';\nimport useForm from '../../../utils/useForm';\nimport Specifications from './Specifications';\nimport { ADDRESS_SCHEMA, FALLBACK_VALUE } from './constants';\nimport { getMaxLengthByFieldAndCountry } from '../../../utils/validator-utils';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport AddressSearch from './components/AddressSearch';\nimport { ComponentMethodsRef } from '../UIElement/types';\n\nexport default function Address(props: AddressProps) {\n const { i18n } = useCoreContext();\n\n const { label = '', requiredFields, visibility, iOSFocusedField = null, showContextualElement } = props;\n\n /** An object by which to expose 'public' members to the parent UIElement */\n const addressRef = useRef<ComponentMethodsRef>({});\n // Just call once\n if (!Object.keys(addressRef.current).length) {\n props.setComponentRef?.(addressRef.current);\n }\n\n const specifications = useMemo(() => new Specifications(props.specifications), [props.specifications]);\n\n const requiredFieldsSchema = specifications.getAddressSchemaForCountryFlat(props.countryCode).filter(field => requiredFields.includes(field));\n\n const [hasSelectedAddress, setHasSelectedAddress] = useState(false);\n\n const [useManualAddress, setUseManualAddress] = useState(false);\n\n const [searchErrorMessage, setSearchErrorMessage] = useState('');\n\n const showAddressSearch = !!props.onAddressLookup;\n\n const [ignoreCountryChange, setIgnoreCountryChange] = useState(false);\n\n const showAddressFields = props.onAddressLookup ? hasSelectedAddress || useManualAddress : true;\n\n const { data, errors, valid, isValid, handleChangeFor, triggerValidation, setData, mergeData } = useForm<AddressData>({\n schema: requiredFieldsSchema,\n defaultData: props.data,\n // Ensure any passed validation rules are merged with the default ones\n rules: { ...getAddressValidationRules(specifications), ...props.validationRules },\n formatters: addressFormatters\n });\n\n const setSearchData = useCallback(\n (selectedAddress: AddressData) => {\n const propsKeysToProcess = ADDRESS_SCHEMA;\n const newStateData = propsKeysToProcess.reduce((acc: AddressData, propKey) => {\n // Make sure the data provided by the merchant is always strings\n const providedValue = selectedAddress[propKey];\n if (providedValue !== null && providedValue !== undefined) {\n // Cast everything to string\n acc[propKey] = String(providedValue);\n }\n return acc;\n }, {});\n mergeData(newStateData);\n setIgnoreCountryChange(true);\n triggerValidation();\n setHasSelectedAddress(true);\n },\n [setHasSelectedAddress, triggerValidation, setData]\n );\n\n const onManualAddress = useCallback(() => {\n setUseManualAddress(true);\n }, []);\n\n // Expose method expected by (parent) Address.tsx\n addressRef.current.showValidation = () => {\n triggerValidation();\n if (showAddressSearch && !showAddressFields && !isValid) {\n setSearchErrorMessage(i18n.get('address.errors.incomplete'));\n } else {\n setSearchErrorMessage('');\n }\n };\n\n /**\n * For iOS: iOSFocusedField is the name of the element calling for other elements to be disabled\n * - so if it is set (meaning we are in iOS *and* an input has been focussed) only enable the field that corresponds to this element\n */\n const enabledFields: string[] = requiredFieldsSchema.filter(item => {\n return !iOSFocusedField ? true : item === iOSFocusedField;\n });\n\n /**\n * Effect that:\n * - Resets validation for all fields by triggering handleChangeFor(fieldName, 'input')\n * - Applies validation on postalCode field in case it has any value\n */\n useEffect((): void => {\n // if the country was set via setSearchData we don't want to trigger this\n if (ignoreCountryChange) {\n setIgnoreCountryChange(false);\n return;\n }\n\n const stateOrProvince = specifications.countryHasDataset(data.country) ? '' : FALLBACK_VALUE;\n const newData = { ...data, stateOrProvince };\n\n requiredFields.forEach(fieldName => {\n handleChangeFor(fieldName, 'input')(newData[fieldName] ?? '');\n });\n\n if (newData.postalCode) {\n handleChangeFor('postalCode', 'blur')(data.postalCode);\n }\n }, [data.country]);\n\n /**\n * Set the value of 'stateOrProvince' during the initial render if\n * property is provided during the creation of the payment method\n */\n useEffect((): void => {\n const stateFieldIsRequired = requiredFields.includes('stateOrProvince');\n const countryHasStatesDataset = data.country && specifications.countryHasDataset(data.country);\n const addressShouldHaveState = stateFieldIsRequired && countryHasStatesDataset;\n const stateOrProvince = data.stateOrProvince || (addressShouldHaveState ? '' : FALLBACK_VALUE);\n\n handleChangeFor('stateOrProvince', 'input')(stateOrProvince);\n }, []);\n\n useEffect((): void => {\n const optionalFields = specifications.getOptionalFieldsForCountry(data.country);\n const processedData = ADDRESS_SCHEMA.reduce((acc, cur) => {\n const isOptional = optionalFields.includes(cur);\n const isRequired = requiredFields.includes(cur);\n const newValue = data[cur];\n const initialValue = props.data[cur];\n // recover default data values which are not requiredFields, or prefill with 'N/A'\n const fallbackValue = !isRequired && !newValue && !!initialValue ? initialValue : FALLBACK_VALUE;\n const value = (isOptional && !newValue) || !isRequired ? fallbackValue : newValue;\n if (value?.length) acc[cur] = value;\n return acc;\n }, {});\n\n props.onChange({ data: processedData, valid, errors, isValid });\n }, [data, valid, errors, isValid]);\n\n if (visibility === 'hidden') return null;\n if (visibility === 'readOnly') return <ReadOnlyAddress data={data} label={label} />;\n\n const getComponent = (fieldName: string, { classNameModifiers = [] }) => {\n if (!requiredFields.includes(fieldName)) return null;\n\n return (\n <FieldContainer\n key={fieldName}\n allowedCountries={props.allowedCountries}\n classNameModifiers={[...classNameModifiers, fieldName]}\n data={data}\n errors={errors}\n valid={valid}\n fieldName={fieldName}\n onInput={handleChangeFor(fieldName, 'input')}\n onBlur={handleChangeFor(fieldName, 'blur')}\n onDropdownChange={handleChangeFor(fieldName, 'blur')}\n specifications={specifications}\n maxLength={getMaxLengthByFieldAndCountry(countrySpecificFormatters, fieldName, data.country, true)}\n trimOnBlur={true}\n disabled={!enabledFields.includes(fieldName)}\n onFieldFocusAnalytics={props.onFieldFocusAnalytics}\n onFieldBlurAnalytics={props.onFieldBlurAnalytics}\n />\n );\n };\n\n const getWrapper = group => (\n <div className=\"adyen-checkout__field-group\">\n {group.map(([field, size]) => getComponent(field, { classNameModifiers: [`col-${size}`] }))}\n </div>\n );\n\n const addressSchema = specifications.getAddressSchemaForCountry(data.country);\n\n return (\n <Fragment>\n <Fieldset classNameModifiers={[label || 'address']} label={label}>\n {showAddressSearch && (\n <AddressSearch\n onAddressLookup={props.onAddressLookup}\n onAddressSelected={props.onAddressSelected}\n onSelect={setSearchData}\n onManualAddress={onManualAddress}\n externalErrorMessage={searchErrorMessage}\n hideManualButton={showAddressFields}\n showContextualElement={showContextualElement}\n contextualText={i18n.get('address.search.contextualText')}\n addressSearchDebounceMs={props.addressSearchDebounceMs}\n />\n )}\n {showAddressFields && (\n <Fragment>{addressSchema.map(field => (field instanceof Array ? getWrapper(field) : getComponent(field, {})))}</Fragment>\n )}\n </Fieldset>\n </Fragment>\n );\n}\n\nAddress.defaultProps = {\n countryCode: null,\n validationRules: null,\n data: {},\n onChange: () => {},\n visibility: 'editable',\n requiredFields: ADDRESS_SCHEMA,\n specifications: {},\n onFieldFocusAnalytics: () => {},\n onFieldBlurAnalytics: () => {}\n};\n"],"names":["Address","props","i18n","useCoreContext","label","requiredFields","visibility","iOSFocusedField","showContextualElement","addressRef","useRef","Object","keys","current","length","setComponentRef","specifications","useMemo","Specifications","requiredFieldsSchema","getAddressSchemaForCountryFlat","countryCode","filter","field","includes","hasSelectedAddress","setHasSelectedAddress","useState","useManualAddress","setUseManualAddress","searchErrorMessage","setSearchErrorMessage","showAddressSearch","onAddressLookup","ignoreCountryChange","setIgnoreCountryChange","showAddressFields","data","errors","valid","isValid","handleChangeFor","triggerValidation","setData","mergeData","useForm","schema","defaultData","rules","_object_spread","getAddressValidationRules","validationRules","formatters","addressFormatters","setSearchData","useCallback","selectedAddress","newStateData","ADDRESS_SCHEMA","reduce","acc","propKey","providedValue","String","onManualAddress","showValidation","get","enabledFields","item","useEffect","stateOrProvince","countryHasDataset","country","FALLBACK_VALUE","newData","_object_spread_props","forEach","fieldName","postalCode","stateFieldIsRequired","countryHasStatesDataset","addressShouldHaveState","optionalFields","getOptionalFieldsForCountry","processedData","cur","isOptional","isRequired","newValue","initialValue","value","onChange","h","ReadOnlyAddress","getComponent","classNameModifiers","FieldContainer","key","allowedCountries","onInput","onBlur","onDropdownChange","maxLength","getMaxLengthByFieldAndCountry","countrySpecificFormatters","trimOnBlur","disabled","onFieldFocusAnalytics","onFieldBlurAnalytics","addressSchema","getAddressSchemaForCountry","Fragment","Fieldset","AddressSearch","onAddressSelected","onSelect","externalErrorMessage","hideManualButton","contextualText","addressSearchDebounceMs","map","Array","div","className","size","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"Address.js","sources":["../../../../../src/components/internal/Address/Address.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'preact/hooks';\nimport Fieldset from '../FormFields/Fieldset';\nimport ReadOnlyAddress from './components/ReadOnlyAddress';\nimport { getAddressValidationRules } from './validate';\nimport { addressFormatters, countrySpecificFormatters } from './validate.formats';\nimport { AddressProps } from './types';\nimport { AddressData } from '../../../types/global-types';\nimport FieldContainer from './components/FieldContainer';\nimport useForm from '../../../utils/useForm';\nimport Specifications from './Specifications';\nimport { ADDRESS_SCHEMA, FALLBACK_VALUE } from './constants';\nimport { getMaxLengthByFieldAndCountry } from '../../../utils/validator-utils';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport AddressSearch from './components/AddressSearch';\nimport { ComponentMethodsRef } from '../UIElement/types';\n\nexport default function Address(props: AddressProps) {\n const { i18n } = useCoreContext();\n\n const { label = '', requiredFields, visibility, iOSFocusedField = null, showContextualElement } = props;\n\n /** An object by which to expose 'public' members to the parent UIElement */\n const addressRef = useRef<ComponentMethodsRef>({});\n // Just call once\n if (!Object.keys(addressRef.current).length) {\n props.setComponentRef?.(addressRef.current);\n }\n\n const specifications = useMemo(() => new Specifications(props.specifications), [props.specifications]);\n\n const requiredFieldsSchema = specifications.getAddressSchemaForCountryFlat(props.countryCode).filter(field => requiredFields.includes(field));\n\n const [hasSelectedAddress, setHasSelectedAddress] = useState(false);\n\n const [useManualAddress, setUseManualAddress] = useState(false);\n\n const [searchErrorMessage, setSearchErrorMessage] = useState('');\n\n const showAddressSearch = !!props.onAddressLookup;\n\n const [ignoreCountryChange, setIgnoreCountryChange] = useState(false);\n\n const showAddressFields = props.onAddressLookup ? hasSelectedAddress || useManualAddress : true;\n\n const { data, errors, valid, isValid, handleChangeFor, triggerValidation, setData, mergeData } = useForm<AddressData>({\n schema: requiredFieldsSchema,\n defaultData: props.data,\n // Ensure any passed validation rules are merged with the default ones\n rules: { ...getAddressValidationRules(specifications), ...props.validationRules },\n formatters: addressFormatters\n });\n\n const setSearchData = useCallback(\n (selectedAddress: AddressData) => {\n const propsKeysToProcess = ADDRESS_SCHEMA;\n const newStateData = propsKeysToProcess.reduce((acc: AddressData, propKey) => {\n // Make sure the data provided by the merchant is always strings\n const providedValue = selectedAddress[propKey];\n if (providedValue !== null && providedValue !== undefined) {\n // Cast everything to string\n acc[propKey] = String(providedValue);\n }\n return acc;\n }, {});\n mergeData(newStateData);\n setIgnoreCountryChange(true);\n triggerValidation();\n setHasSelectedAddress(true);\n },\n [setHasSelectedAddress, triggerValidation, setData]\n );\n\n const onManualAddress = useCallback(() => {\n setUseManualAddress(true);\n }, []);\n\n // Expose method expected by (parent) Address.tsx\n addressRef.current.showValidation = () => {\n triggerValidation();\n if (showAddressSearch && !showAddressFields && !isValid) {\n setSearchErrorMessage(i18n.get('address.errors.incomplete'));\n } else {\n setSearchErrorMessage('');\n }\n };\n\n /**\n * For iOS: iOSFocusedField is the name of the element calling for other elements to be disabled\n * - so if it is set (meaning we are in iOS *and* an input has been focussed) only enable the field that corresponds to this element\n */\n const enabledFields: string[] = requiredFieldsSchema.filter(item => {\n return !iOSFocusedField ? true : item === iOSFocusedField;\n });\n\n /**\n * Effect that:\n * - Resets validation for all fields by triggering handleChangeFor(fieldName, 'input')\n * - Applies validation on postalCode field in case it has any value\n */\n useEffect((): void => {\n // if the country was set via setSearchData we don't want to trigger this\n if (ignoreCountryChange) {\n setIgnoreCountryChange(false);\n return;\n }\n\n const stateOrProvince = specifications.countryHasDataset(data.country) ? '' : FALLBACK_VALUE;\n const newData = { ...data, stateOrProvince };\n\n requiredFields.forEach(fieldName => {\n handleChangeFor(fieldName, 'input')(newData[fieldName] ?? '');\n });\n\n if (newData.postalCode) {\n handleChangeFor('postalCode', 'blur')(data.postalCode);\n }\n }, [data.country]);\n\n /**\n * Set the value of 'stateOrProvince' during the initial render if\n * property is provided during the creation of the payment method\n */\n useEffect((): void => {\n const stateFieldIsRequired = requiredFields.includes('stateOrProvince');\n const countryHasStatesDataset = data.country && specifications.countryHasDataset(data.country);\n const addressShouldHaveState = stateFieldIsRequired && countryHasStatesDataset;\n const stateOrProvince = data.stateOrProvince || (addressShouldHaveState ? '' : FALLBACK_VALUE);\n\n handleChangeFor('stateOrProvince', 'input')(stateOrProvince);\n }, []);\n\n useEffect((): void => {\n const optionalFields = specifications.getOptionalFieldsForCountry(data.country);\n const processedData = ADDRESS_SCHEMA.reduce((acc, cur) => {\n const isOptional = optionalFields.includes(cur);\n const isRequired = requiredFields.includes(cur);\n const newValue = data[cur];\n const initialValue = props.data[cur];\n // recover default data values which are not requiredFields, or prefill with 'N/A'\n const fallbackValue = !isRequired && !newValue && !!initialValue ? initialValue : FALLBACK_VALUE;\n const value = (isOptional && !newValue) || !isRequired ? fallbackValue : newValue;\n if (value?.length) acc[cur] = value;\n return acc;\n }, {});\n\n props.onChange({ data: processedData, valid, errors, isValid });\n }, [data, valid, errors, isValid]);\n\n if (visibility === 'hidden') return null;\n if (visibility === 'readOnly') return <ReadOnlyAddress data={data} label={label} />;\n\n const getComponent = (fieldName: string, { classNameModifiers = [] }) => {\n if (!requiredFields.includes(fieldName)) return null;\n\n return (\n <FieldContainer\n key={fieldName}\n allowedCountries={props.allowedCountries}\n classNameModifiers={[...classNameModifiers, fieldName]}\n data={data}\n errors={errors}\n valid={valid}\n fieldName={fieldName}\n onInput={handleChangeFor(fieldName, 'input')}\n onBlur={handleChangeFor(fieldName, 'blur')}\n onDropdownChange={handleChangeFor(fieldName, 'blur')}\n specifications={specifications}\n maxLength={getMaxLengthByFieldAndCountry(countrySpecificFormatters, fieldName, data.country, true)}\n trimOnBlur={true}\n disabled={!enabledFields.includes(fieldName)}\n onFieldFocusAnalytics={props.onFieldFocusAnalytics}\n onFieldBlurAnalytics={props.onFieldBlurAnalytics}\n />\n );\n };\n\n const getWrapper = group => (\n <div className=\"adyen-checkout__field-group\">\n {group.map(([field, size]) => getComponent(field, { classNameModifiers: [`col-${size}`] }))}\n </div>\n );\n\n const addressSchema = specifications.getAddressSchemaForCountry(data.country);\n\n return (\n <Fragment>\n <Fieldset classNameModifiers={[label || 'address']} label={label}>\n {showAddressSearch && (\n <AddressSearch\n onAddressLookup={props.onAddressLookup}\n onAddressSelected={props.onAddressSelected}\n onSelect={setSearchData}\n onManualAddress={onManualAddress}\n externalErrorMessage={searchErrorMessage}\n hideManualButton={showAddressFields}\n showContextualElement={showContextualElement}\n contextualText={i18n.get('address.search.contextualText')}\n addressSearchDebounceMs={props.addressSearchDebounceMs}\n />\n )}\n {showAddressFields && (\n <Fragment>{addressSchema.map(field => (field instanceof Array ? getWrapper(field) : getComponent(field, {})))}</Fragment>\n )}\n </Fieldset>\n </Fragment>\n );\n}\n\nAddress.defaultProps = {\n countryCode: null,\n validationRules: null,\n data: {},\n onChange: () => {},\n visibility: 'editable',\n requiredFields: ADDRESS_SCHEMA,\n specifications: {},\n onFieldFocusAnalytics: () => {},\n onFieldBlurAnalytics: () => {}\n};\n"],"names":["Address","props","i18n","useCoreContext","label","requiredFields","visibility","iOSFocusedField","showContextualElement","addressRef","useRef","Object","keys","current","length","setComponentRef","specifications","useMemo","Specifications","requiredFieldsSchema","getAddressSchemaForCountryFlat","countryCode","filter","field","includes","hasSelectedAddress","setHasSelectedAddress","useState","useManualAddress","setUseManualAddress","searchErrorMessage","setSearchErrorMessage","showAddressSearch","onAddressLookup","ignoreCountryChange","setIgnoreCountryChange","showAddressFields","data","errors","valid","isValid","handleChangeFor","triggerValidation","setData","mergeData","useForm","schema","defaultData","rules","_object_spread","getAddressValidationRules","validationRules","formatters","addressFormatters","setSearchData","useCallback","selectedAddress","newStateData","ADDRESS_SCHEMA","reduce","acc","propKey","providedValue","String","onManualAddress","showValidation","get","enabledFields","item","useEffect","stateOrProvince","countryHasDataset","country","FALLBACK_VALUE","newData","_object_spread_props","forEach","fieldName","postalCode","stateFieldIsRequired","countryHasStatesDataset","addressShouldHaveState","optionalFields","getOptionalFieldsForCountry","processedData","cur","isOptional","isRequired","newValue","initialValue","value","onChange","h","ReadOnlyAddress","getComponent","classNameModifiers","FieldContainer","key","allowedCountries","onInput","onBlur","onDropdownChange","maxLength","getMaxLengthByFieldAndCountry","countrySpecificFormatters","trimOnBlur","disabled","onFieldFocusAnalytics","onFieldBlurAnalytics","addressSchema","getAddressSchemaForCountry","Fragment","Fieldset","AddressSearch","onAddressSelected","onSelect","externalErrorMessage","hideManualButton","contextualText","addressSearchDebounceMs","map","Array","div","className","size","defaultProps"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{createElement as e}from"../../../external/preact/dist/preact.js";import a from"../../../_virtual/index.js";import t from"../Icon/Icon.js";function r({children:r,classNames:s=[],type:c="error",icon:o}){return e("div",{className:a("adyen-checkout__alert-message",`adyen-checkout__alert-message--${c}`,s)},o&&e(t,{className:"adyen-checkout__alert-message__icon",type:o}),r)}export{r as default};
1
+ import{createElement as e}from"../../../external/preact/dist/preact.js";import r from"../../../_virtual/index.js";import a from"../Icon/Icon.js";function t({children:t,classNames:s=[],type:c="error",icon:o}){return e("div",{role:"error"===c||"warning"===c?"alert":"status",className:r("adyen-checkout__alert-message",`adyen-checkout__alert-message--${c}`,s)},o&&e(a,{className:"adyen-checkout__alert-message__icon",type:o}),t)}export{t as default};
2
2
  //# sourceMappingURL=Alert.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Alert.js","sources":["../../../../../src/components/internal/Alert/Alert.tsx"],"sourcesContent":["import { ComponentChildren, h } from 'preact';\nimport cx from 'classnames';\nimport './Alert.scss';\nimport Icon from '../Icon';\n\nconst ALERT_TYPES = ['error', 'warning', 'success'];\n\ninterface AlertProps {\n children: ComponentChildren;\n classNames?: string[];\n icon?: string;\n type?: (typeof ALERT_TYPES)[number];\n}\n\nexport default function Alert({ children, classNames = [], type = 'error', icon }: AlertProps) {\n return (\n <div className={cx('adyen-checkout__alert-message', `adyen-checkout__alert-message--${type}`, classNames)}>\n {icon && <Icon className={'adyen-checkout__alert-message__icon'} type={icon} />}\n {children}\n </div>\n );\n}\n"],"names":["Alert","children","classNames","type","icon","h","div","className","cx","Icon"],"mappings":"iJAce,SAASA,GAAMC,SAAEA,aAAUC,EAAa,GAAEC,KAAEA,EAAO,QAAOC,KAAEA,IACvE,OACIC,EAACC,MAAAA,CAAIC,UAAWC,EAAG,gCAAiC,kCAAkCL,IAAQD,IACzFE,GAAQC,EAACI,EAAAA,CAAKF,UAAW,sCAAuCJ,KAAMC,IACtEH,EAGb"}
1
+ {"version":3,"file":"Alert.js","sources":["../../../../../src/components/internal/Alert/Alert.tsx"],"sourcesContent":["import { ComponentChildren, h } from 'preact';\nimport cx from 'classnames';\nimport './Alert.scss';\nimport Icon from '../Icon';\n\nconst ALERT_TYPES = ['error', 'warning', 'info', 'success'];\n\ninterface AlertProps {\n children: ComponentChildren;\n classNames?: string[];\n icon?: string;\n type?: (typeof ALERT_TYPES)[number];\n}\n\nexport default function Alert({ children, classNames = [], type = 'error', icon }: AlertProps) {\n const role = type === 'error' || type === 'warning' ? 'alert' : 'status';\n\n return (\n <div role={role} className={cx('adyen-checkout__alert-message', `adyen-checkout__alert-message--${type}`, classNames)}>\n {icon && <Icon className={'adyen-checkout__alert-message__icon'} type={icon} />}\n {children}\n </div>\n );\n}\n"],"names":["Alert","children","classNames","type","icon","h","div","role","className","cx","Icon"],"mappings":"iJAce,SAASA,GAAMC,SAAEA,aAAUC,EAAa,GAAEC,KAAEA,EAAO,QAAOC,KAAEA,IAGvE,OACIC,EAACC,MAAAA,CAAIC,KAHa,UAATJ,GAA6B,YAATA,EAAqB,QAAU,SAG3CK,UAAWC,EAAG,gCAAiC,kCAAkCN,IAAQD,IACrGE,GAAQC,EAACK,EAAAA,CAAKF,UAAW,sCAAuCL,KAAMC,IACtEH,EAGb"}
@@ -1,2 +1,2 @@
1
- import{SchemeNames as t}from"../services/sdks/utils.js";function i(t,i,a){return i in t?Object.defineProperty(t,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[i]=a,t}class a{get title(){return"visa"===this.scheme?t[this.scheme]:this.descriptorName||t[this.scheme]}get isDcfPopupEmbedded(){return"mc"===this.scheme}confirmCardIsExpired(){if("ACTIVE"!==this.status)return!0;if(!this.panExpirationYear&&!this.panExpirationMonth)return!1;const[t,i]=[(new Date).getMonth()+1,(new Date).getFullYear()];return!(Number(this.panExpirationYear)>i)&&!(Number(this.panExpirationYear)===i&&Number(this.panExpirationMonth)>=t)}constructor(t,a,r){i(this,"dateOfCardLastUsed",void 0),i(this,"dateOfCardCreated",void 0),i(this,"panLastFour",void 0),i(this,"srcDigitalCardId",void 0),i(this,"scheme",void 0),i(this,"artUri",void 0),i(this,"srcCorrelationId",void 0),i(this,"tokenId",void 0),i(this,"isExpired",void 0),i(this,"panExpirationMonth",void 0),i(this,"panExpirationYear",void 0),i(this,"descriptorName",void 0),i(this,"status",null),this.dateOfCardLastUsed=t.dateOfCardLastUsed,this.dateOfCardCreated=t.dateOfCardCreated,this.panLastFour=t.panLastFour,this.srcDigitalCardId=t.srcDigitalCardId,this.descriptorName=t.digitalCardData.descriptorName,this.tokenId=t.tokenId,this.scheme=a,this.artUri=t.digitalCardData.artUri,this.srcCorrelationId=r,this.panExpirationMonth=t.panExpirationMonth,this.panExpirationYear=t.panExpirationYear,this.status=t.digitalCardData.status,this.isExpired=this.confirmCardIsExpired()}}export{a as default};
1
+ import{SchemeNames as t}from"../services/sdks/utils.js";function i(t,i,a){return i in t?Object.defineProperty(t,i,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[i]=a,t}class a{get title(){return"visa"===this.scheme?t[this.scheme]:this.descriptorName||t[this.scheme]}get isDcfPopupEmbedded(){return"mc"===this.scheme}confirmCardIsExpired(){if(!["ACTIVE","PENDING"].includes(this.status))return!0;if(!this.panExpirationYear&&!this.panExpirationMonth)return!1;const[t,i]=[(new Date).getMonth()+1,(new Date).getFullYear()];return!(Number(this.panExpirationYear)>i)&&!(Number(this.panExpirationYear)===i&&Number(this.panExpirationMonth)>=t)}constructor(t,a,r){i(this,"dateOfCardLastUsed",void 0),i(this,"dateOfCardCreated",void 0),i(this,"panLastFour",void 0),i(this,"srcDigitalCardId",void 0),i(this,"scheme",void 0),i(this,"artUri",void 0),i(this,"srcCorrelationId",void 0),i(this,"tokenId",void 0),i(this,"isExpired",void 0),i(this,"panExpirationMonth",void 0),i(this,"panExpirationYear",void 0),i(this,"descriptorName",void 0),i(this,"status",null),this.dateOfCardLastUsed=t.dateOfCardLastUsed,this.dateOfCardCreated=t.dateOfCardCreated,this.panLastFour=t.panLastFour,this.srcDigitalCardId=t.srcDigitalCardId,this.descriptorName=t.digitalCardData.descriptorName,this.tokenId=t.tokenId,this.scheme=a,this.artUri=t.digitalCardData.artUri,this.srcCorrelationId=r,this.panExpirationMonth=t.panExpirationMonth,this.panExpirationYear=t.panExpirationYear,this.status=t.digitalCardData.status,this.isExpired=this.confirmCardIsExpired()}}export{a as default};
2
2
  //# sourceMappingURL=ShopperCard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ShopperCard.js","sources":["../../../../../../src/components/internal/ClickToPay/models/ShopperCard.ts"],"sourcesContent":["import { DigitalCardStatus, SrcCard } from '../services/sdks/types';\nimport { SchemeNames } from '../services/sdks/utils';\nimport { ClickToPayScheme } from '../types';\n\nclass ShopperCard {\n public dateOfCardLastUsed?: string;\n public dateOfCardCreated: string;\n public panLastFour: string;\n public srcDigitalCardId: string;\n public scheme: ClickToPayScheme;\n public artUri: string;\n public srcCorrelationId: string;\n public tokenId?: string;\n public isExpired: boolean;\n\n private readonly panExpirationMonth: string;\n private readonly panExpirationYear: string;\n private readonly descriptorName?: string;\n private readonly status?: DigitalCardStatus = null;\n\n constructor(maskedCard: SrcCard, scheme: ClickToPayScheme, srcCorrelationId: string) {\n this.dateOfCardLastUsed = maskedCard.dateOfCardLastUsed;\n this.dateOfCardCreated = maskedCard.dateOfCardCreated;\n this.panLastFour = maskedCard.panLastFour;\n this.srcDigitalCardId = maskedCard.srcDigitalCardId;\n this.descriptorName = maskedCard.digitalCardData.descriptorName;\n this.tokenId = maskedCard.tokenId;\n this.scheme = scheme;\n this.artUri = maskedCard.digitalCardData.artUri;\n this.srcCorrelationId = srcCorrelationId;\n this.panExpirationMonth = maskedCard.panExpirationMonth;\n this.panExpirationYear = maskedCard.panExpirationYear;\n this.status = maskedCard.digitalCardData.status;\n\n this.isExpired = this.confirmCardIsExpired();\n }\n\n get title() {\n return this.scheme === 'visa' ? SchemeNames[this.scheme] : this.descriptorName || SchemeNames[this.scheme];\n }\n\n get isDcfPopupEmbedded(): boolean {\n return this.scheme === 'mc';\n }\n\n private confirmCardIsExpired(): boolean {\n if (this.status !== 'ACTIVE') return true;\n if (!this.panExpirationYear && !this.panExpirationMonth) return false;\n\n const [currentMonth, currentYear] = [new Date().getMonth() + 1, new Date().getFullYear()];\n if (Number(this.panExpirationYear) > currentYear) return false;\n if (Number(this.panExpirationYear) === currentYear && Number(this.panExpirationMonth) >= currentMonth) return false;\n\n return true;\n }\n}\n\nexport default ShopperCard;\n"],"names":["ShopperCard","title","this","scheme","SchemeNames","descriptorName","isDcfPopupEmbedded","confirmCardIsExpired","status","panExpirationYear","panExpirationMonth","currentMonth","currentYear","Date","getMonth","getFullYear","Number","constructor","maskedCard","srcCorrelationId","_define_property","dateOfCardLastUsed","dateOfCardCreated","panLastFour","srcDigitalCardId","artUri","tokenId","isExpired","digitalCardData"],"mappings":"gLAIA,MAAMA,EAiCF,SAAIC,GACA,MAAuB,SAAhBC,KAAKC,OAAoBC,EAAYF,KAAKC,QAAUD,KAAKG,gBAAkBD,EAAYF,KAAKC,OACvG,CAEA,sBAAIG,GACA,MAAuB,OAAhBJ,KAAKC,MAChB,CAEQI,oBAAAA,GACJ,GAAoB,WAAhBL,KAAKM,OAAqB,OAAO,EACrC,IAAKN,KAAKO,oBAAsBP,KAAKQ,mBAAoB,OAAO,EAEhE,MAAOC,EAAcC,GAAe,EAAC,IAAIC,MAAOC,WAAa,GAAG,IAAID,MAAOE,eAC3E,QAAIC,OAAOd,KAAKO,mBAAqBG,MACjCI,OAAOd,KAAKO,qBAAuBG,GAAeI,OAAOd,KAAKQ,qBAAuBC,EAG7F,CAlCA,WAAAM,CAAYC,EAAqBf,EAA0BgB,GAf3DC,EAAAlB,KAAOmB,0BAAP,GACAD,EAAAlB,KAAOoB,yBAAP,GACAF,EAAAlB,KAAOqB,mBAAP,GACAH,EAAAlB,KAAOsB,wBAAP,GACAJ,EAAAlB,KAAOC,cAAP,GACAiB,EAAAlB,KAAOuB,cAAP,GACAL,EAAAlB,KAAOiB,wBAAP,GACAC,EAAAlB,KAAOwB,eAAP,GACAN,EAAAlB,KAAOyB,iBAAP,GAEAP,EAAAlB,KAAiBQ,0BAAjB,GACAU,EAAAlB,KAAiBO,yBAAjB,GACAW,EAAAlB,KAAiBG,sBAAjB,GACAe,EAAAlB,KAAiBM,SAA6B,MAG1CN,KAAKmB,mBAAqBH,EAAWG,mBACrCnB,KAAKoB,kBAAoBJ,EAAWI,kBACpCpB,KAAKqB,YAAcL,EAAWK,YAC9BrB,KAAKsB,iBAAmBN,EAAWM,iBACnCtB,KAAKG,eAAiBa,EAAWU,gBAAgBvB,eACjDH,KAAKwB,QAAUR,EAAWQ,QAC1BxB,KAAKC,OAASA,EACdD,KAAKuB,OAASP,EAAWU,gBAAgBH,OACzCvB,KAAKiB,iBAAmBA,EACxBjB,KAAKQ,mBAAqBQ,EAAWR,mBACrCR,KAAKO,kBAAoBS,EAAWT,kBACpCP,KAAKM,OAASU,EAAWU,gBAAgBpB,OAEzCN,KAAKyB,UAAYzB,KAAKK,sBAC1B"}
1
+ {"version":3,"file":"ShopperCard.js","sources":["../../../../../../src/components/internal/ClickToPay/models/ShopperCard.ts"],"sourcesContent":["import { DigitalCardStatus, SrcCard } from '../services/sdks/types';\nimport { SchemeNames } from '../services/sdks/utils';\nimport { ClickToPayScheme } from '../types';\n\nclass ShopperCard {\n public dateOfCardLastUsed?: string;\n public dateOfCardCreated: string;\n public panLastFour: string;\n public srcDigitalCardId: string;\n public scheme: ClickToPayScheme;\n public artUri: string;\n public srcCorrelationId: string;\n public tokenId?: string;\n public isExpired: boolean;\n\n private readonly panExpirationMonth: string;\n private readonly panExpirationYear: string;\n private readonly descriptorName?: string;\n private readonly status?: DigitalCardStatus = null;\n\n constructor(maskedCard: SrcCard, scheme: ClickToPayScheme, srcCorrelationId: string) {\n this.dateOfCardLastUsed = maskedCard.dateOfCardLastUsed;\n this.dateOfCardCreated = maskedCard.dateOfCardCreated;\n this.panLastFour = maskedCard.panLastFour;\n this.srcDigitalCardId = maskedCard.srcDigitalCardId;\n this.descriptorName = maskedCard.digitalCardData.descriptorName;\n this.tokenId = maskedCard.tokenId;\n this.scheme = scheme;\n this.artUri = maskedCard.digitalCardData.artUri;\n this.srcCorrelationId = srcCorrelationId;\n this.panExpirationMonth = maskedCard.panExpirationMonth;\n this.panExpirationYear = maskedCard.panExpirationYear;\n this.status = maskedCard.digitalCardData.status;\n\n this.isExpired = this.confirmCardIsExpired();\n }\n\n get title() {\n return this.scheme === 'visa' ? SchemeNames[this.scheme] : this.descriptorName || SchemeNames[this.scheme];\n }\n\n get isDcfPopupEmbedded(): boolean {\n return this.scheme === 'mc';\n }\n\n private confirmCardIsExpired(): boolean {\n if (!['ACTIVE', 'PENDING'].includes(this.status)) return true;\n\n if (!this.panExpirationYear && !this.panExpirationMonth) return false;\n\n const [currentMonth, currentYear] = [new Date().getMonth() + 1, new Date().getFullYear()];\n if (Number(this.panExpirationYear) > currentYear) return false;\n if (Number(this.panExpirationYear) === currentYear && Number(this.panExpirationMonth) >= currentMonth) return false;\n\n return true;\n }\n}\n\nexport default ShopperCard;\n"],"names":["ShopperCard","title","this","scheme","SchemeNames","descriptorName","isDcfPopupEmbedded","confirmCardIsExpired","includes","status","panExpirationYear","panExpirationMonth","currentMonth","currentYear","Date","getMonth","getFullYear","Number","constructor","maskedCard","srcCorrelationId","_define_property","dateOfCardLastUsed","dateOfCardCreated","panLastFour","srcDigitalCardId","artUri","tokenId","isExpired","digitalCardData"],"mappings":"gLAIA,MAAMA,EAiCF,SAAIC,GACA,MAAuB,SAAhBC,KAAKC,OAAoBC,EAAYF,KAAKC,QAAUD,KAAKG,gBAAkBD,EAAYF,KAAKC,OACvG,CAEA,sBAAIG,GACA,MAAuB,OAAhBJ,KAAKC,MAChB,CAEQI,oBAAAA,GACJ,IAAK,CAAC,SAAU,WAAWC,SAASN,KAAKO,QAAS,OAAO,EAEzD,IAAKP,KAAKQ,oBAAsBR,KAAKS,mBAAoB,OAAO,EAEhE,MAAOC,EAAcC,GAAe,EAAC,IAAIC,MAAOC,WAAa,GAAG,IAAID,MAAOE,eAC3E,QAAIC,OAAOf,KAAKQ,mBAAqBG,MACjCI,OAAOf,KAAKQ,qBAAuBG,GAAeI,OAAOf,KAAKS,qBAAuBC,EAG7F,CAnCA,WAAAM,CAAYC,EAAqBhB,EAA0BiB,GAf3DC,EAAAnB,KAAOoB,0BAAP,GACAD,EAAAnB,KAAOqB,yBAAP,GACAF,EAAAnB,KAAOsB,mBAAP,GACAH,EAAAnB,KAAOuB,wBAAP,GACAJ,EAAAnB,KAAOC,cAAP,GACAkB,EAAAnB,KAAOwB,cAAP,GACAL,EAAAnB,KAAOkB,wBAAP,GACAC,EAAAnB,KAAOyB,eAAP,GACAN,EAAAnB,KAAO0B,iBAAP,GAEAP,EAAAnB,KAAiBS,0BAAjB,GACAU,EAAAnB,KAAiBQ,yBAAjB,GACAW,EAAAnB,KAAiBG,sBAAjB,GACAgB,EAAAnB,KAAiBO,SAA6B,MAG1CP,KAAKoB,mBAAqBH,EAAWG,mBACrCpB,KAAKqB,kBAAoBJ,EAAWI,kBACpCrB,KAAKsB,YAAcL,EAAWK,YAC9BtB,KAAKuB,iBAAmBN,EAAWM,iBACnCvB,KAAKG,eAAiBc,EAAWU,gBAAgBxB,eACjDH,KAAKyB,QAAUR,EAAWQ,QAC1BzB,KAAKC,OAASA,EACdD,KAAKwB,OAASP,EAAWU,gBAAgBH,OACzCxB,KAAKkB,iBAAmBA,EACxBlB,KAAKS,mBAAqBQ,EAAWR,mBACrCT,KAAKQ,kBAAoBS,EAAWT,kBACpCR,KAAKO,OAASU,EAAWU,gBAAgBpB,OAEzCP,KAAK0B,UAAY1B,KAAKK,sBAC1B"}
@@ -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';\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<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 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 />\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 />\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","iban","handleIbanBlur","setRef","ref","ibanNumber","handleIbanInput","autocorrect","spellcheck","showPayButton","payButton","constructor","super","_define_property","setData","key","cb","prevState","_object_spread_props","_object_spread","setValid","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<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 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 />\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 />\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","iban","handleIbanBlur","setRef","ref","ibanNumber","handleIbanInput","autocorrect","spellcheck","showPayButton","payButton","constructor","super","_define_property","setData","key","cb","prevState","_object_spread_props","_object_spread","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{createElement as e,Fragment as t}from"../../../external/preact/dist/preact.js";import{useState as s,useCallback as r,useRef as o,useEffect as n}from"../../../external/preact/hooks/dist/hooks.js";import i from"../../../utils/useForm/useForm.js";import a from"../FormFields/Field/Field.js";import l from"./IssuerButtonGroup/IssuerButtonGroup.js";import u from"../ContentSeparator/ContentSeparator.js";import{useCoreContext as c}from"../../../core/Context/CoreProvider.js";import m from"../../../core/Errors/useSRPanelContext.js";import{ERROR_ACTION_FOCUS_FIELD as d}from"../../../core/Errors/constants.js";import{setFocusOnField as g}from"../../../utils/setFocus.js";import f from"../DisclaimerMessage/DisclaimerMessage.js";import h from"../FormFields/Select/Select.js";import{ANALYTICS_LIST as p,ANALYTICS_FEATURED_ISSUER as y,ANALYTICS_SELECTED_STR as b,ANALYTICS_DISPLAYED_STR as j,ANALYTICS_SEARCH_DEBOUNCE_TIME as v,ANALYTICS_LIST_SEARCH as x,ANALYTICS_INPUT_STR as C}from"../../../core/Analytics/constants.js";import{debounce as O}from"../../../utils/debounce.js";import{AnalyticsInfoEvent as S}from"../../../core/Analytics/AnalyticsInfoEvent.js";function F(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function w(e,t){if(null==e)return{};var s,r,o=function(e,t){if(null==e)return{};var s,r,o={},n=Object.keys(e);for(r=0;r<n.length;r++)s=n[r],t.indexOf(s)>=0||(o[s]=e[s]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)s=n[r],t.indexOf(s)>=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(o[s]=e[s])}return o}const I=({issuer:e,items:t},s)=>{var r;const o=null===(r=t.find(t=>t.id===e))||void 0===r?void 0:r.name;return e&&o?`${s.get("continueTo")} ${o}`:s.get("continue")},_=["issuer"],A={issuer:{validate:e=>!!e&&e.length>0,errorMessage:"issuerList.selectField.contextualText",modes:["blur"]}};function E(E){var{items:P,placeholder:k,issuer:M,highlightedIds:T=[],showContextualElement:V,contextualText:B}=E,D=w(E,["items","placeholder","issuer","highlightedIds","showContextualElement","contextualText"]);const{i18n:N}=c(),{handleChangeFor:R,triggerValidation:L,data:G,valid:$,errors:K,isValid:q}=i({schema:_,defaultData:{issuer:M},rules:A}),[z,H]=s("ready"),[J,Q]=s(1),{setSRMessagesFromObjects:U,shouldMoveFocusSR:W}=m(),X=null==U?void 0:U({});this.setStatus=e=>{H(e)};const Y=r(e=>t=>{const s=1===e?p:y,r=P.find(e=>e.id===t.target.value),o=new S({type:b,target:s,issuer:r.name});D.onSubmitAnalytics(o),Q(e),R("issuer")(t)},[R]),Z=r(e=>{if(e){const e=new S({type:j,target:p});D.onSubmitAnalytics(e)}},[]),ee=o(O(D.onSubmitAnalytics,v)),te=r(()=>{ee.current({type:C,target:x})},[]);n(()=>{D.onChange({data:G,valid:$,errors:K,isValid:q});const e=null==X?void 0:X({errors:K,isValidating:!0});(null==e?void 0:e.action)===d&&W&&g(".adyen-checkout__issuer-list","issuer-list")},[G,$,K,q]),this.showValidation=()=>{L()};const{highlightedItems:se}=P.reduce((e,t)=>(T.includes(t.id)&&e.highlightedItems.push(function(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},r=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(s).filter(function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable}))),r.forEach(function(t){F(e,t,s[t])})}return e}({},t)),e),{highlightedItems:[]});return e("div",{className:"adyen-checkout__issuer-list"},!!se.length&&e(t,null,e(l,{selectedIssuerId:0===J?G.issuer:null,items:se,onChange:Y(0)}),e(u,null)),e(a,{label:N.get("issuerList.selectField.label"),errorMessage:(re=K.issuer,re&&re.errorMessage?N.get(re.errorMessage):!!re),classNameModifiers:["issuer-list"],name:"issuer",showContextualElement:V,contextualText:B},e(h,{items:P,selectedValue:1===J?G.issuer:null,placeholder:k,name:"issuer",className:"adyen-checkout__issuer-list__dropdown",onChange:Y(1),onListToggle:Z,onInput:te})),D.termsAndConditions&&e("div",{className:"adyen-checkout__issuer-list__termsAndConditions"},e(f,{message:N.get(D.termsAndConditions.translationKey),urls:D.termsAndConditions.urls})),D.showPayButton&&D.payButton({status:z,label:I({issuer:G.issuer,items:[...P,...se]},N)}));var re}E.defaultProps={onChange:()=>{}};export{E as default};
1
+ import{createElement as e,Fragment as t}from"../../../external/preact/dist/preact.js";import{useState as s,useCallback as r,useRef as o,useEffect as n}from"../../../external/preact/hooks/dist/hooks.js";import i from"../../../utils/useForm/useForm.js";import l from"../FormFields/Field/Field.js";import a from"./IssuerButtonGroup/IssuerButtonGroup.js";import u from"../ContentSeparator/ContentSeparator.js";import{useCoreContext as c}from"../../../core/Context/CoreProvider.js";import m from"../../../core/Errors/useSRPanelContext.js";import{ERROR_ACTION_FOCUS_FIELD as d}from"../../../core/Errors/constants.js";import{setFocusOnField as g}from"../../../utils/setFocus.js";import f from"../DisclaimerMessage/DisclaimerMessage.js";import h from"../FormFields/Select/Select.js";import{ANALYTICS_LIST as p,ANALYTICS_FEATURED_ISSUER as y,ANALYTICS_SELECTED_STR as b,ANALYTICS_DISPLAYED_STR as j,ANALYTICS_SEARCH_DEBOUNCE_TIME as v,ANALYTICS_LIST_SEARCH as x,ANALYTICS_INPUT_STR as C}from"../../../core/Analytics/constants.js";import{debounce as F}from"../../../utils/debounce.js";import{AnalyticsInfoEvent as O}from"../../../core/Analytics/AnalyticsInfoEvent.js";function S(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function w(e,t){if(null==e)return{};var s,r,o=function(e,t){if(null==e)return{};var s,r,o={},n=Object.keys(e);for(r=0;r<n.length;r++)s=n[r],t.indexOf(s)>=0||(o[s]=e[s]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r<n.length;r++)s=n[r],t.indexOf(s)>=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(o[s]=e[s])}return o}const I=({issuer:e,items:t},s)=>{var r;const o=null===(r=t.find(t=>t.id===e))||void 0===r?void 0:r.name;return e&&o?`${s.get("continueTo")} ${o}`:s.get("continue")},_=["issuer"],A={issuer:{validate:e=>!!e&&e.length>0,errorMessage:"issuerList.selectField.contextualText",modes:["blur"]}};function E(E){var{items:P,placeholder:k,issuer:M,highlightedIds:T=[],showContextualElement:V,contextualText:L,selectFieldLabel:B}=E,D=w(E,["items","placeholder","issuer","highlightedIds","showContextualElement","contextualText","selectFieldLabel"]);const{i18n:N}=c(),{handleChangeFor:R,triggerValidation:G,data:$,valid:K,errors:q,isValid:z}=i({schema:_,defaultData:{issuer:M},rules:A}),[H,J]=s("ready"),[Q,U]=s(1),{setSRMessagesFromObjects:W,shouldMoveFocusSR:X}=m(),Y=null==W?void 0:W({});this.setStatus=e=>{J(e)};const Z=r(e=>t=>{const s=1===e?p:y,r=P.find(e=>e.id===t.target.value),o=new O({type:b,target:s,issuer:r.name});D.onSubmitAnalytics(o),U(e),R("issuer")(t)},[R]),ee=r(e=>{if(e){const e=new O({type:j,target:p});D.onSubmitAnalytics(e)}},[]),te=o(F(D.onSubmitAnalytics,v)),se=r(()=>{te.current({type:C,target:x})},[]);n(()=>{D.onChange({data:$,valid:K,errors:q,isValid:z});const e=null==Y?void 0:Y({errors:q,isValidating:!0});(null==e?void 0:e.action)===d&&X&&g(".adyen-checkout__issuer-list","issuer-list")},[$,K,q,z]),this.showValidation=()=>{G()};const{highlightedItems:re}=P.reduce((e,t)=>(T.includes(t.id)&&e.highlightedItems.push(function(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{},r=Object.keys(s);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(s).filter(function(e){return Object.getOwnPropertyDescriptor(s,e).enumerable}))),r.forEach(function(t){S(e,t,s[t])})}return e}({},t)),e),{highlightedItems:[]});return e("div",{className:"adyen-checkout__issuer-list"},!!re.length&&e(t,null,e(a,{selectedIssuerId:0===Q?$.issuer:null,items:re,onChange:Z(0)}),e(u,null)),e(l,{label:null!=B?B:N.get("issuerList.selectField.label"),errorMessage:(oe=q.issuer,oe&&oe.errorMessage?N.get(oe.errorMessage):!!oe),classNameModifiers:["issuer-list"],name:"issuer",showContextualElement:V,contextualText:L},e(h,{items:P,selectedValue:1===Q?$.issuer:null,placeholder:k,name:"issuer",className:"adyen-checkout__issuer-list__dropdown",onChange:Z(1),onListToggle:ee,onInput:se})),D.termsAndConditions&&e("div",{className:"adyen-checkout__issuer-list__termsAndConditions"},e(f,{message:N.get(D.termsAndConditions.translationKey),urls:D.termsAndConditions.urls})),D.showPayButton&&D.payButton({status:H,label:I({issuer:$.issuer,items:[...P,...re]},N)}));var oe}E.defaultProps={onChange:()=>{}};export{E as default};
2
2
  //# sourceMappingURL=IssuerList.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"IssuerList.js","sources":["../../../../../src/components/internal/IssuerList/IssuerList.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport { useState, useEffect, useCallback, useRef } from 'preact/hooks';\nimport useForm from '../../../utils/useForm';\nimport Field from '../FormFields/Field';\nimport IssuerButtonGroup from './IssuerButtonGroup';\nimport ContentSeparator from '../ContentSeparator';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport { ValidatorRules } from '../../../utils/Validator/types';\nimport { IssuerListProps } from './types';\nimport './IssuerList.scss';\nimport useSRPanelContext from '../../../core/Errors/useSRPanelContext';\nimport { SetSRMessagesReturnFn } from '../../../core/Errors/SRPanelProvider';\nimport { SetSRMessagesReturnObject } from '../../../core/Errors/types';\nimport { ERROR_ACTION_FOCUS_FIELD } from '../../../core/Errors/constants';\nimport { setFocusOnField } from '../../../utils/setFocus';\nimport DisclaimerMessage from '../DisclaimerMessage';\nimport Select from '../FormFields/Select';\nimport { SelectTargetObject } from '../FormFields/Select/types';\nimport {\n ANALYTICS_DISPLAYED_STR,\n ANALYTICS_FEATURED_ISSUER,\n ANALYTICS_INPUT_STR,\n ANALYTICS_LIST,\n ANALYTICS_LIST_SEARCH,\n ANALYTICS_SEARCH_DEBOUNCE_TIME,\n ANALYTICS_SELECTED_STR\n} from '../../../core/Analytics/constants';\nimport { debounce } from '../../../utils/debounce';\nimport { AnalyticsInfoEvent } from '../../../core/Analytics/AnalyticsInfoEvent';\n\nconst payButtonLabel = ({ issuer, items }, i18n): string => {\n const issuerName = items.find(i => i.id === issuer)?.name;\n if (!issuer || !issuerName) return i18n.get('continue');\n return `${i18n.get('continueTo')} ${issuerName}`;\n};\n\nconst schema = ['issuer'];\nconst validationRules: ValidatorRules = {\n issuer: {\n validate: issuer => !!issuer && issuer.length > 0,\n errorMessage: 'issuerList.selectField.contextualText',\n modes: ['blur']\n }\n};\n\nenum IssuerListInputTypes {\n ButtonGroup,\n Dropdown\n}\n\nfunction IssuerList({ items, placeholder, issuer, highlightedIds = [], showContextualElement, contextualText, ...props }: IssuerListProps) {\n const { i18n } = useCoreContext();\n const { handleChangeFor, triggerValidation, data, valid, errors, isValid } = useForm({\n schema,\n defaultData: { issuer },\n rules: validationRules\n });\n const [status, setStatus] = useState('ready');\n const [inputType, setInputType] = useState<IssuerListInputTypes>(IssuerListInputTypes.Dropdown);\n\n const { setSRMessagesFromObjects, shouldMoveFocusSR } = useSRPanelContext();\n const setSRMessages: SetSRMessagesReturnFn = setSRMessagesFromObjects?.({});\n\n const getErrorMessage = error => (error && error.errorMessage ? i18n.get(error.errorMessage) : !!error);\n\n this.setStatus = newStatus => {\n setStatus(newStatus);\n };\n\n const handleInputChange = useCallback(\n (type: IssuerListInputTypes) => (event: h.JSX.TargetedKeyboardEvent<HTMLInputElement>) => {\n const target = type === IssuerListInputTypes.Dropdown ? ANALYTICS_LIST : ANALYTICS_FEATURED_ISSUER;\n const issuerObj = items.find(issuer => issuer.id === (event.target as SelectTargetObject).value);\n\n const analyticsEvent = new AnalyticsInfoEvent({\n type: ANALYTICS_SELECTED_STR,\n target,\n issuer: issuerObj.name\n });\n props.onSubmitAnalytics(analyticsEvent);\n\n setInputType(type);\n handleChangeFor('issuer')(event);\n },\n [handleChangeFor]\n );\n\n const handleListToggle = useCallback((isOpen: boolean) => {\n if (isOpen) {\n const event = new AnalyticsInfoEvent({\n type: ANALYTICS_DISPLAYED_STR,\n target: ANALYTICS_LIST\n });\n props.onSubmitAnalytics(event);\n }\n }, []);\n\n const debounceSearchAnalytics = useRef(debounce(props.onSubmitAnalytics, ANALYTICS_SEARCH_DEBOUNCE_TIME));\n\n const handleSearch = useCallback(() => {\n debounceSearchAnalytics.current({ type: ANALYTICS_INPUT_STR, target: ANALYTICS_LIST_SEARCH });\n }, []);\n\n useEffect(() => {\n props.onChange({ data, valid, errors, isValid });\n\n const srPanelResp: SetSRMessagesReturnObject = setSRMessages?.({ errors, isValidating: true });\n if (srPanelResp?.action === ERROR_ACTION_FOCUS_FIELD) {\n // Focus field in error, if required\n if (shouldMoveFocusSR) setFocusOnField('.adyen-checkout__issuer-list', 'issuer-list');\n }\n }, [data, valid, errors, isValid]);\n\n this.showValidation = () => {\n triggerValidation();\n };\n\n const { highlightedItems } = items.reduce(\n (memo, item) => {\n if (highlightedIds.includes(item.id)) memo.highlightedItems.push({ ...item });\n return memo;\n },\n { highlightedItems: [] }\n );\n\n return (\n <div className=\"adyen-checkout__issuer-list\">\n {!!highlightedItems.length && (\n <Fragment>\n <IssuerButtonGroup\n selectedIssuerId={inputType === IssuerListInputTypes.ButtonGroup ? data['issuer'] : null}\n items={highlightedItems}\n onChange={handleInputChange(IssuerListInputTypes.ButtonGroup)}\n />\n <ContentSeparator />\n </Fragment>\n )}\n\n <Field\n label={i18n.get('issuerList.selectField.label')}\n errorMessage={getErrorMessage(errors.issuer)}\n classNameModifiers={['issuer-list']}\n name={'issuer'}\n showContextualElement={showContextualElement}\n contextualText={contextualText}\n >\n <Select\n items={items}\n selectedValue={inputType === IssuerListInputTypes.Dropdown ? data['issuer'] : null}\n placeholder={placeholder}\n name={'issuer'}\n className={'adyen-checkout__issuer-list__dropdown'}\n onChange={handleInputChange(IssuerListInputTypes.Dropdown)}\n onListToggle={handleListToggle}\n onInput={handleSearch}\n />\n </Field>\n\n {props.termsAndConditions && (\n <div className=\"adyen-checkout__issuer-list__termsAndConditions\">\n <DisclaimerMessage message={i18n.get(props.termsAndConditions.translationKey)} urls={props.termsAndConditions.urls} />\n </div>\n )}\n\n {props.showPayButton &&\n props.payButton({\n status,\n label: payButtonLabel({ issuer: data['issuer'], items: [...items, ...highlightedItems] }, i18n)\n })}\n </div>\n );\n}\n\nIssuerList.defaultProps = {\n onChange: () => {}\n};\n\nexport default IssuerList;\n"],"names":["payButtonLabel","issuer","items","i18n","issuerName","find","i","id","name","get","schema","validationRules","validate","length","errorMessage","modes","IssuerList","_param","placeholder","highlightedIds","showContextualElement","contextualText","props","useCoreContext","handleChangeFor","triggerValidation","data","valid","errors","isValid","useForm","defaultData","rules","status","setStatus","useState","inputType","setInputType","setSRMessagesFromObjects","shouldMoveFocusSR","useSRPanelContext","setSRMessages","this","newStatus","handleInputChange","useCallback","type","event","target","ANALYTICS_LIST","ANALYTICS_FEATURED_ISSUER","issuerObj","value","analyticsEvent","AnalyticsInfoEvent","ANALYTICS_SELECTED_STR","onSubmitAnalytics","handleListToggle","isOpen","ANALYTICS_DISPLAYED_STR","debounceSearchAnalytics","useRef","debounce","ANALYTICS_SEARCH_DEBOUNCE_TIME","handleSearch","current","ANALYTICS_INPUT_STR","ANALYTICS_LIST_SEARCH","useEffect","onChange","srPanelResp","isValidating","action","ERROR_ACTION_FOCUS_FIELD","setFocusOnField","showValidation","highlightedItems","reduce","memo","item","includes","push","_object_spread","h","div","className","Fragment","IssuerButtonGroup","selectedIssuerId","ContentSeparator","Field","label","error","classNameModifiers","Select","selectedValue","onListToggle","onInput","termsAndConditions","DisclaimerMessage","message","translationKey","urls","showPayButton","payButton","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"IssuerList.js","sources":["../../../../../src/components/internal/IssuerList/IssuerList.tsx"],"sourcesContent":["import { Fragment, h } from 'preact';\nimport { useState, useEffect, useCallback, useRef } from 'preact/hooks';\nimport useForm from '../../../utils/useForm';\nimport Field from '../FormFields/Field';\nimport IssuerButtonGroup from './IssuerButtonGroup';\nimport ContentSeparator from '../ContentSeparator';\nimport { useCoreContext } from '../../../core/Context/CoreProvider';\nimport { ValidatorRules } from '../../../utils/Validator/types';\nimport { IssuerListProps } from './types';\nimport './IssuerList.scss';\nimport useSRPanelContext from '../../../core/Errors/useSRPanelContext';\nimport { SetSRMessagesReturnFn } from '../../../core/Errors/SRPanelProvider';\nimport { SetSRMessagesReturnObject } from '../../../core/Errors/types';\nimport { ERROR_ACTION_FOCUS_FIELD } from '../../../core/Errors/constants';\nimport { setFocusOnField } from '../../../utils/setFocus';\nimport DisclaimerMessage from '../DisclaimerMessage';\nimport Select from '../FormFields/Select';\nimport { SelectTargetObject } from '../FormFields/Select/types';\nimport {\n ANALYTICS_DISPLAYED_STR,\n ANALYTICS_FEATURED_ISSUER,\n ANALYTICS_INPUT_STR,\n ANALYTICS_LIST,\n ANALYTICS_LIST_SEARCH,\n ANALYTICS_SEARCH_DEBOUNCE_TIME,\n ANALYTICS_SELECTED_STR\n} from '../../../core/Analytics/constants';\nimport { debounce } from '../../../utils/debounce';\nimport { AnalyticsInfoEvent } from '../../../core/Analytics/AnalyticsInfoEvent';\n\nconst payButtonLabel = ({ issuer, items }, i18n): string => {\n const issuerName = items.find(i => i.id === issuer)?.name;\n if (!issuer || !issuerName) return i18n.get('continue');\n return `${i18n.get('continueTo')} ${issuerName}`;\n};\n\nconst schema = ['issuer'];\nconst validationRules: ValidatorRules = {\n issuer: {\n validate: issuer => !!issuer && issuer.length > 0,\n errorMessage: 'issuerList.selectField.contextualText',\n modes: ['blur']\n }\n};\n\nenum IssuerListInputTypes {\n ButtonGroup,\n Dropdown\n}\n\nfunction IssuerList({\n items,\n placeholder,\n issuer,\n highlightedIds = [],\n showContextualElement,\n contextualText,\n selectFieldLabel,\n ...props\n}: IssuerListProps) {\n const { i18n } = useCoreContext();\n const { handleChangeFor, triggerValidation, data, valid, errors, isValid } = useForm({\n schema,\n defaultData: { issuer },\n rules: validationRules\n });\n const [status, setStatus] = useState('ready');\n const [inputType, setInputType] = useState<IssuerListInputTypes>(IssuerListInputTypes.Dropdown);\n\n const { setSRMessagesFromObjects, shouldMoveFocusSR } = useSRPanelContext();\n const setSRMessages: SetSRMessagesReturnFn = setSRMessagesFromObjects?.({});\n\n const getErrorMessage = error => (error && error.errorMessage ? i18n.get(error.errorMessage) : !!error);\n\n this.setStatus = newStatus => {\n setStatus(newStatus);\n };\n\n const handleInputChange = useCallback(\n (type: IssuerListInputTypes) => (event: h.JSX.TargetedKeyboardEvent<HTMLInputElement>) => {\n const target = type === IssuerListInputTypes.Dropdown ? ANALYTICS_LIST : ANALYTICS_FEATURED_ISSUER;\n const issuerObj = items.find(issuer => issuer.id === (event.target as SelectTargetObject).value);\n\n const analyticsEvent = new AnalyticsInfoEvent({\n type: ANALYTICS_SELECTED_STR,\n target,\n issuer: issuerObj.name\n });\n props.onSubmitAnalytics(analyticsEvent);\n\n setInputType(type);\n handleChangeFor('issuer')(event);\n },\n [handleChangeFor]\n );\n\n const handleListToggle = useCallback((isOpen: boolean) => {\n if (isOpen) {\n const event = new AnalyticsInfoEvent({\n type: ANALYTICS_DISPLAYED_STR,\n target: ANALYTICS_LIST\n });\n props.onSubmitAnalytics(event);\n }\n }, []);\n\n const debounceSearchAnalytics = useRef(debounce(props.onSubmitAnalytics, ANALYTICS_SEARCH_DEBOUNCE_TIME));\n\n const handleSearch = useCallback(() => {\n debounceSearchAnalytics.current({ type: ANALYTICS_INPUT_STR, target: ANALYTICS_LIST_SEARCH });\n }, []);\n\n useEffect(() => {\n props.onChange({ data, valid, errors, isValid });\n\n const srPanelResp: SetSRMessagesReturnObject = setSRMessages?.({ errors, isValidating: true });\n if (srPanelResp?.action === ERROR_ACTION_FOCUS_FIELD) {\n // Focus field in error, if required\n if (shouldMoveFocusSR) setFocusOnField('.adyen-checkout__issuer-list', 'issuer-list');\n }\n }, [data, valid, errors, isValid]);\n\n this.showValidation = () => {\n triggerValidation();\n };\n\n const { highlightedItems } = items.reduce(\n (memo, item) => {\n if (highlightedIds.includes(item.id)) memo.highlightedItems.push({ ...item });\n return memo;\n },\n { highlightedItems: [] }\n );\n\n return (\n <div className=\"adyen-checkout__issuer-list\">\n {!!highlightedItems.length && (\n <Fragment>\n <IssuerButtonGroup\n selectedIssuerId={inputType === IssuerListInputTypes.ButtonGroup ? data['issuer'] : null}\n items={highlightedItems}\n onChange={handleInputChange(IssuerListInputTypes.ButtonGroup)}\n />\n <ContentSeparator />\n </Fragment>\n )}\n\n <Field\n label={selectFieldLabel ?? i18n.get('issuerList.selectField.label')}\n errorMessage={getErrorMessage(errors.issuer)}\n classNameModifiers={['issuer-list']}\n name={'issuer'}\n showContextualElement={showContextualElement}\n contextualText={contextualText}\n >\n <Select\n items={items}\n selectedValue={inputType === IssuerListInputTypes.Dropdown ? data['issuer'] : null}\n placeholder={placeholder}\n name={'issuer'}\n className={'adyen-checkout__issuer-list__dropdown'}\n onChange={handleInputChange(IssuerListInputTypes.Dropdown)}\n onListToggle={handleListToggle}\n onInput={handleSearch}\n />\n </Field>\n\n {props.termsAndConditions && (\n <div className=\"adyen-checkout__issuer-list__termsAndConditions\">\n <DisclaimerMessage message={i18n.get(props.termsAndConditions.translationKey)} urls={props.termsAndConditions.urls} />\n </div>\n )}\n\n {props.showPayButton &&\n props.payButton({\n status,\n label: payButtonLabel({ issuer: data['issuer'], items: [...items, ...highlightedItems] }, i18n)\n })}\n </div>\n );\n}\n\nIssuerList.defaultProps = {\n onChange: () => {}\n};\n\nexport default IssuerList;\n"],"names":["payButtonLabel","issuer","items","i18n","issuerName","find","i","id","name","get","schema","validationRules","validate","length","errorMessage","modes","IssuerList","_param","placeholder","highlightedIds","showContextualElement","contextualText","selectFieldLabel","props","useCoreContext","handleChangeFor","triggerValidation","data","valid","errors","isValid","useForm","defaultData","rules","status","setStatus","useState","inputType","setInputType","setSRMessagesFromObjects","shouldMoveFocusSR","useSRPanelContext","setSRMessages","this","newStatus","handleInputChange","useCallback","type","event","target","ANALYTICS_LIST","ANALYTICS_FEATURED_ISSUER","issuerObj","value","analyticsEvent","AnalyticsInfoEvent","ANALYTICS_SELECTED_STR","onSubmitAnalytics","handleListToggle","isOpen","ANALYTICS_DISPLAYED_STR","debounceSearchAnalytics","useRef","debounce","ANALYTICS_SEARCH_DEBOUNCE_TIME","handleSearch","current","ANALYTICS_INPUT_STR","ANALYTICS_LIST_SEARCH","useEffect","onChange","srPanelResp","isValidating","action","ERROR_ACTION_FOCUS_FIELD","setFocusOnField","showValidation","highlightedItems","reduce","memo","item","includes","push","_object_spread","h","div","className","Fragment","IssuerButtonGroup","selectedIssuerId","ContentSeparator","Field","label","error","classNameModifiers","Select","selectedValue","onListToggle","onInput","termsAndConditions","DisclaimerMessage","message","translationKey","urls","showPayButton","payButton","defaultProps"],"mappings":"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"}