diff --git a/src/Components/DynamicFields.res b/src/Components/DynamicFields.res index d600d63e8..1921a88eb 100644 --- a/src/Components/DynamicFields.res +++ b/src/Components/DynamicFields.res @@ -157,12 +157,16 @@ let make = ( let cityRef = React.useRef(Nullable.null) let bankAccountNumberRef = React.useRef(Nullable.null) let sourceBankAccountIdRef = React.useRef(Nullable.null) + let branchCodeRef = React.useRef(Nullable.null) + let bankIdentifierRef = React.useRef(Nullable.null) let postalRef = React.useRef(Nullable.null) let (selectedBank, setSelectedBank) = Recoil.useRecoilState(userBank) let (country, setCountry) = Recoil.useRecoilState(userCountry) let (bankAccountNumber, setBankAccountNumber) = Recoil.useRecoilState(userBankAccountNumber) let (sourceBankAccountId, setSourceBankAccountId) = Recoil.useRecoilState(sourceBankAccountId) + let (branchCode, setBranchCode) = Recoil.useRecoilState(userBranchCode) + let (bankIdentifier, setBankIdentifier) = Recoil.useRecoilState(userBankIdentifier) let countryList = CountryStateDataRefs.countryDataRef.contents let stateNames = getStateNames({ value: country, @@ -474,6 +478,7 @@ let make = ( | PixKey => | PixCPF => | PixCNPJ => + | PixAccountNumber => | BankAccountNumber | IBAN => + | BranchCode => + { + let value = ReactEvent.Form.target(ev)["value"] + setBranchCode(_ => { + isValid: Some(value !== ""), + value, + errorString: value !== "" ? "" : localeString.branchCodeEmptyText, + }) + }} + onBlur={ev => { + let value = ReactEvent.Focus.target(ev)["value"] + setBranchCode(prev => { + ...prev, + isValid: Some(value !== ""), + }) + }} + type_="text" + name="branchCode" + maxLength=20 + inputRef=branchCodeRef + placeholder=localeString.branchCodePlaceholder + /> + | BankIdentifier => + { + let value = ReactEvent.Form.target(ev)["value"] + setBankIdentifier(_ => { + isValid: Some(value !== ""), + value, + errorString: value !== "" ? "" : localeString.bankIdentifierEmptyText, + }) + }} + onBlur={ev => { + let value = ReactEvent.Focus.target(ev)["value"] + setBankIdentifier(prev => { + ...prev, + isValid: Some(value !== ""), + }) + }} + type_="text" + name="bankIdentifier" + maxLength=20 + inputRef=bankIdentifierRef + placeholder=localeString.bankIdentifierPlaceholder + /> | DocumentNumber | Email | InfoElement @@ -809,6 +866,7 @@ let make = ( | PixKey | PixCPF | PixCNPJ + | PixAccountNumber | DocumentType(_) | DocumentNumber | CardNumber @@ -837,6 +895,8 @@ let make = ( | BankAccountNumber | IBAN | SourceBankAccountId + | BranchCode + | BankIdentifier | None => React.null }} diff --git a/src/Components/Loader.res b/src/Components/Loader.res index 4186c62ab..7a488c77a 100644 --- a/src/Components/Loader.res +++ b/src/Components/Loader.res @@ -1,6 +1,42 @@ +type loaderPaymentMethod = + | PixAutomaticoPush + | Other + +type loaderTextConfig = { + title: string, + subtitle: string, +} + +let parsePaymentMethod = methodString => { + switch methodString { + | "pix_automatico_push" => PixAutomaticoPush + | _ => Other + } +} + +let getLoaderTextConfig = ( + paymentMethod: loaderPaymentMethod, + ~localeString: LocaleStringTypes.localeStrings, +) => { + switch paymentMethod { + | PixAutomaticoPush => { + title: localeString.loaderPaymentConfirmBankingAppTitle, + subtitle: localeString.loaderPaymentConfirmBankingAppSubtitle, + } + | Other => { + title: localeString.loaderPaymentProcessingTitle, + subtitle: localeString.loaderPaymentProcessingSubtitle, + } + } +} + @react.component -let make = (~branding="auto", ~showText=true) => { +let make = (~branding="auto", ~showText=true, ~paymentMethod="") => { let arr = ["hyperswitch-triangle", "hyperswitch-square", "hyperswitch-circle"] + let {localeString} = Recoil.useRecoilValueFromAtom(RecoilAtoms.configAtom) + + let parsedPaymentMethod = parsePaymentMethod(paymentMethod) + let textConfig = getLoaderTextConfig(parsedPaymentMethod, ~localeString)
@@ -33,12 +69,10 @@ let make = (~branding="auto", ~showText=true) => {
- {React.string("We are processing your payment...")} + {React.string(textConfig.title)}
- {React.string( - "You have been redirected to new tab to complete your payments. Status will be updated automatically", - )} + {React.string(textConfig.subtitle)}
diff --git a/src/Components/PaymentLoader.res b/src/Components/PaymentLoader.res index 481bcc189..30a794442 100644 --- a/src/Components/PaymentLoader.res +++ b/src/Components/PaymentLoader.res @@ -2,6 +2,8 @@ let make = () => { open Utils let (branding, setBranding) = React.useState(_ => "auto") + let (paymentMethod, setPaymentMethod) = React.useState(_ => "") + let setConfig = Recoil.useSetRecoilState(RecoilAtoms.configAtom) React.useEffect0(() => { messageParentWindow([("iframeMountedCallback", true->JSON.Encode.bool)]) @@ -9,9 +11,21 @@ let make = () => { let json = ev.data->safeParse let dict = json->getDictFromJson if dict->Utils.getBool("fullScreenIframeMounted", false) { - if dict->getDictFromDict("options")->getOptionString("branding")->Option.isSome { - setBranding(_ => dict->getDictFromDict("options")->getString("branding", "auto")) + let optionsDict = dict->getDictFromDict("options") + if optionsDict->getOptionString("branding")->Option.isSome { + setBranding(_ => optionsDict->getString("branding", "auto")) } + let locale = optionsDict->getString("locale", "auto") + CardTheme.getLocaleObject(locale) + ->Promise.thenResolve(localeString => { + setConfig(prev => {...prev, localeString}) + }) + ->Promise.catch(_ => Promise.resolve()) + ->ignore + let metadata = dict->getJsonObjectFromDict("metadata") + let metaDataDict = metadata->JSON.Decode.object->Option.getOr(Dict.make()) + let paymentMethodStr = metaDataDict->getString("paymentMethod", "") + setPaymentMethod(_ => paymentMethodStr) } } Window.addEventListener("message", handle) @@ -25,7 +39,7 @@ let make = () => {
- +
} diff --git a/src/Components/PixPaymentInput.res b/src/Components/PixPaymentInput.res index 17512eee9..57e2925e4 100644 --- a/src/Components/PixPaymentInput.res +++ b/src/Components/PixPaymentInput.res @@ -7,7 +7,10 @@ let make = (~fieldType="") => { let (pixCNPJ, setPixCNPJ) = Recoil.useRecoilState(userPixCNPJ) let (pixCPF, setPixCPF) = Recoil.useRecoilState(userPixCPF) let (pixKey, setPixKey) = Recoil.useRecoilState(userPixKey) + let (pixAccountNumber, setPixAccountNumber) = Recoil.useRecoilState(userPixAccountNumber) let (sourceBankAccountId, setSourceBankAccountId) = Recoil.useRecoilState(sourceBankAccountId) + let (branchCode, setBranchCode) = Recoil.useRecoilState(userBranchCode) + let (bankIdentifier, setBankIdentifier) = Recoil.useRecoilState(userBankIdentifier) let inputRef = React.useRef(Nullable.null) let validatePixKey = (val): RecoilAtomTypes.field => @@ -72,6 +75,14 @@ let make = (~fieldType="") => { Some(14), validatePixCNPJ, ) + | "pixAccountNumber" => ( + localeString.pixAccountNumberLabel, + setPixAccountNumber, + pixAccountNumber, + localeString.pixAccountNumberPlaceholder, + None, + validatePixKey, + ) | _ => ( "", _ => (), @@ -123,14 +134,40 @@ let make = (~fieldType="") => { errorString: localeString.pixCPFEmptyText, }) } + if pixAccountNumber.value == "" { + setPixAccountNumber(prev => { + ...prev, + errorString: localeString.pixAccountNumberEmptyText, + }) + } if sourceBankAccountId.value == "" { setSourceBankAccountId(prev => { ...prev, errorString: localeString.sourceBankAccountIdEmptyText, }) } + if branchCode.value == "" { + setBranchCode(prev => { + ...prev, + errorString: localeString.branchCodeEmptyText, + }) + } + if bankIdentifier.value == "" { + setBankIdentifier(prev => { + ...prev, + errorString: localeString.bankIdentifierEmptyText, + }) + } } - }, [pixCNPJ.value, pixKey.value, pixCPF.value]) + }, ( + pixCNPJ.value, + pixKey.value, + pixCPF.value, + pixAccountNumber.value, + sourceBankAccountId.value, + branchCode.value, + bankIdentifier.value, + )) useSubmitPaymentData(submitCallback) diff --git a/src/LocaleStrings/ArabicLocale.res b/src/LocaleStrings/ArabicLocale.res index 4098b9015..51c645862 100644 --- a/src/LocaleStrings/ArabicLocale.res +++ b/src/LocaleStrings/ArabicLocale.res @@ -163,7 +163,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `مفتاح Pix لا يمكن أن يكون فارغًا`, pixKeyPlaceholder: `أدخل مفتاح Pix`, pixKeyLabel: `مفتاح Pix`, + pixAccountNumberEmptyText: "لا يمكن أن يكون رقم حساب Pix فارغًا", + pixAccountNumberLabel: "رقم حساب Pix", + pixAccountNumberPlaceholder: "أدخل رقم حساب Pix", sourceBankAccountIdEmptyText: `لا يمكن أن يكون معرف الحساب المصرفي المصدر فارغاً`, + branchCodeEmptyText: `لا يمكن أن يكون رمز الفرع فارغاً`, + bankIdentifierEmptyText: `لا يمكن أن يكون معرف البنك فارغاً`, invalidCardHolderNameError: `اسم حامل البطاقة لا يمكن أن يحتوي على أرقام`, invalidNickNameError: `لا يمكن أن يحتوي الاسم المستعار على أكثر من رقمين`, expiry: `انتهاء الصلاحية`, @@ -230,6 +235,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `الخدمات المصرفية المفتوحة`, payment_methods_evoucher: `قسيمة إلكترونية`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix تلقائي QR`, + payment_methods_pix_automatico_push: `Pix تلقائي Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `باي بال`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -257,6 +264,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "مع فوائد", installmentTotal: "المجموع", installmentSelectPlanError: "يرجى اختيار خطة تقسيط", + loaderPaymentProcessingTitle: "جارٍ معالجة دفعتك...", + loaderPaymentProcessingSubtitle: "تمت إعادة توجيهك إلى علامة تبويب جديدة لإتمام الدفع. سيتم تحديث الحالة تلقائيًا", + loaderPaymentConfirmBankingAppTitle: "يرجى تأكيد الدفع في تطبيق البنك الخاص بك", + loaderPaymentConfirmBankingAppSubtitle: "افتح تطبيق البنك الخاص بك وقم بتفويض طلب الدفع. سيتم تحديث الحالة تلقائيًا بعد التأكيد.", + branchCodeLabel: "رمز الفرع", + bankIdentifierLabel: "معرف البنك", + branchCodePlaceholder: "أدخل رمز الفرع", + bankIdentifierPlaceholder: "أدخل معرف البنك", installmentSelectPlanPlaceholder: "اختر خطة التقسيط", showMore: "عرض المزيد", showLess: "عرض أقل", diff --git a/src/LocaleStrings/CatalanLocale.res b/src/LocaleStrings/CatalanLocale.res index e530923c9..b0151866a 100644 --- a/src/LocaleStrings/CatalanLocale.res +++ b/src/LocaleStrings/CatalanLocale.res @@ -162,7 +162,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `La clau Pix no pot estar buida`, pixKeyPlaceholder: `Introdueix la clau Pix`, pixKeyLabel: `Clau Pix`, + pixAccountNumberEmptyText: `El número de compte Pix no pot estar buit`, + pixAccountNumberLabel: "Nombre de compte Pix", + pixAccountNumberPlaceholder: `Introduïu el nombre de compte Pix`, sourceBankAccountIdEmptyText: `L'identificador del compte bancari d'origen no pot estar buit`, + branchCodeEmptyText: `El codi de sucursal no pot estar buit`, + bankIdentifierEmptyText: `L'identificador bancari no pot estar buit`, invalidCardHolderNameError: `El nom del titular de la targeta no pot contenir dígits`, invalidNickNameError: `El sobrenom no pot contenir més de 2 dígits`, expiry: `caducitat`, @@ -229,6 +234,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Bancaire ouvert`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automàtic QR`, + payment_methods_pix_automatico_push: `Pix Automàtic Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -256,6 +263,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "amb interessos", installmentTotal: "Total", installmentSelectPlanError: "Si us plau, seleccioneu un pla de terminis", + loaderPaymentProcessingTitle: "Estem processant el vostre pagament...", + loaderPaymentProcessingSubtitle: `Heu estat redirigit a una nova pestanya per completar el pagament. L'estat s'actualitzarà automàticament`, + loaderPaymentConfirmBankingAppTitle: `Si us plau, confirmeu el pagament a la vostra aplicació bancària`, + loaderPaymentConfirmBankingAppSubtitle: `Obriu la vostra aplicació bancària i autoritzeu la sol·licitud de pagament. L'estat s'actualitzarà automàticament un cop confirmat.`, + branchCodeLabel: "Codi de sucursal", + bankIdentifierLabel: "Identificador bancari", + branchCodePlaceholder: `Introduïu el codi de sucursal`, + bankIdentifierPlaceholder: `Introduïu l'identificador bancari`, installmentSelectPlanPlaceholder: "Seleccioneu un pla de terminis", showMore: "Mostra més", showLess: "Mostra menys", diff --git a/src/LocaleStrings/ChineseLocale.res b/src/LocaleStrings/ChineseLocale.res index afabf5caa..53c4499fd 100644 --- a/src/LocaleStrings/ChineseLocale.res +++ b/src/LocaleStrings/ChineseLocale.res @@ -160,7 +160,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pix 密钥不能为空`, pixKeyPlaceholder: `输入 Pix 密钥`, pixKeyLabel: `Pix 密钥`, + pixAccountNumberEmptyText: "Pix账户号码不能为空", + pixAccountNumberLabel: "Pix账户号码", + pixAccountNumberPlaceholder: "输入Pix账户号码", sourceBankAccountIdEmptyText: `源银行账户ID不能为空`, + branchCodeEmptyText: `支行代码不能为空`, + bankIdentifierEmptyText: `银行标识符不能为空`, invalidCardHolderNameError: `持卡人姓名不能包含数字`, invalidNickNameError: `昵称不能包含超过2个数字`, expiry: `到期`, @@ -227,6 +232,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `开放银行`, payment_methods_evoucher: `电子代金券`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix 自动 QR`, + payment_methods_pix_automatico_push: `Pix 自动推送`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `银联`, @@ -254,6 +261,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "有利息", installmentTotal: "合计", installmentSelectPlanError: "请选择分期计划", + loaderPaymentProcessingTitle: "我们正在处理您的付款...", + loaderPaymentProcessingSubtitle: "您已被重定向到新标签页以完成付款。状态将自动更新", + loaderPaymentConfirmBankingAppTitle: "请在您的银行应用中确认付款", + loaderPaymentConfirmBankingAppSubtitle: "打开您的银行应用程序并授权付款请求。确认后状态将自动更新。", + branchCodeLabel: "支行代码", + bankIdentifierLabel: "银行识别码", + branchCodePlaceholder: "输入分行代码", + bankIdentifierPlaceholder: "输入银行识别码", installmentSelectPlanPlaceholder: "选择分期计划", showMore: "显示更多", showLess: "收起", diff --git a/src/LocaleStrings/DeutschLocale.res b/src/LocaleStrings/DeutschLocale.res index 44a1ceec0..a6ca77b08 100644 --- a/src/LocaleStrings/DeutschLocale.res +++ b/src/LocaleStrings/DeutschLocale.res @@ -161,7 +161,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pix-Schlüssel darf nicht leer sein`, pixKeyPlaceholder: `Geben Sie den Pix-Schlüssel ein`, pixKeyLabel: `Pix-Schlüssel`, + pixAccountNumberEmptyText: `Pix-Kontonummer darf nicht leer sein`, + pixAccountNumberLabel: "Pix-Kontonummer", + pixAccountNumberPlaceholder: "Pix-Kontonummer eingeben", sourceBankAccountIdEmptyText: `Quell-Bankkonten-ID darf nicht leer sein`, + branchCodeEmptyText: `Bankleitzahl darf nicht leer sein`, + bankIdentifierEmptyText: `Bankkennung darf nicht leer sein`, invalidCardHolderNameError: `Der Name des Karteninhabers darf keine Ziffern enthalten`, invalidNickNameError: `Der Spitzname darf nicht mehr als 2 Ziffern enthalten`, expiry: `ablauf`, @@ -228,6 +233,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatisch QR`, + payment_methods_pix_automatico_push: `Pix Automatisch Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -255,6 +262,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "mit Zinsen", installmentTotal: "Gesamt", installmentSelectPlanError: "Bitte wählen Sie einen Ratenplan", + loaderPaymentProcessingTitle: "Ihre Zahlung wird verarbeitet...", + loaderPaymentProcessingSubtitle: "Sie wurden auf eine neue Registerkarte weitergeleitet, um Ihre Zahlung abzuschließen. Der Status wird automatisch aktualisiert", + loaderPaymentConfirmBankingAppTitle: "Bitte bestätigen Sie die Zahlung in Ihrer Banking-App", + loaderPaymentConfirmBankingAppSubtitle: `Öffnen Sie Ihre Banking-Anwendung und autorisieren Sie die Zahlungsanforderung. Der Status wird automatisch aktualisiert, sobald die Bestätigung erfolgt ist.`, + branchCodeLabel: "Bankleitzahl", + bankIdentifierLabel: "Bankkennung", + branchCodePlaceholder: "Bankleitzahl eingeben", + bankIdentifierPlaceholder: "Bankkennung eingeben", installmentSelectPlanPlaceholder: "Ratenplan auswählen", showMore: "Mehr anzeigen", showLess: "Weniger anzeigen", diff --git a/src/LocaleStrings/DutchLocale.res b/src/LocaleStrings/DutchLocale.res index 0a83d36ea..fade43de1 100644 --- a/src/LocaleStrings/DutchLocale.res +++ b/src/LocaleStrings/DutchLocale.res @@ -160,7 +160,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pix-sleutel mag niet leeg zijn`, pixKeyPlaceholder: `Voer Pix-sleutel in`, pixKeyLabel: `Pix-sleutel`, + pixAccountNumberEmptyText: "Pix-rekeningnummer mag niet leeg zijn", + pixAccountNumberLabel: "Pix-rekeningnummer", + pixAccountNumberPlaceholder: "Voer het Pix-rekeningnummer in", sourceBankAccountIdEmptyText: `Bron bankrekeningnummer mag niet leeg zijn`, + branchCodeEmptyText: `Bankfiliaalkode mag niet leeg zijn`, + bankIdentifierEmptyText: `Bankidentificatie mag niet leeg zijn`, invalidCardHolderNameError: `De naam van de kaarthouder mag geen cijfers bevatten`, invalidNickNameError: `De bijnaam mag niet meer dan 2 cijfers bevatten`, expiry: `vervaldatum`, @@ -227,6 +232,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatisch QR`, + payment_methods_pix_automatico_push: `Pix Automatisch Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -254,6 +261,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "met rente", installmentTotal: "Totaal", installmentSelectPlanError: "Selecteer een aflossingsplan", + loaderPaymentProcessingTitle: "We verwerken uw betaling...", + loaderPaymentProcessingSubtitle: "U bent doorgestuurd naar een nieuw tabblad om uw betaling te voltooien. De status wordt automatisch bijgewerkt", + loaderPaymentConfirmBankingAppTitle: "Bevestig de betaling in uw bankieren-app", + loaderPaymentConfirmBankingAppSubtitle: "Open uw bankieren-applicatie en autoriseer het betalingsverzoek. De status wordt automatisch bijgewerkt zodra dit is bevestigd.", + branchCodeLabel: "Filiaalcode", + bankIdentifierLabel: "Bankidentificatie", + branchCodePlaceholder: "Voer de filiaalcode in", + bankIdentifierPlaceholder: "Voer de bankidentificatie in", installmentSelectPlanPlaceholder: "Selecteer een aflossingsplan", showMore: "Meer tonen", showLess: "Minder tonen", diff --git a/src/LocaleStrings/EnglishGBLocale.res b/src/LocaleStrings/EnglishGBLocale.res index b42e85e0f..c5fa3d3e8 100644 --- a/src/LocaleStrings/EnglishGBLocale.res +++ b/src/LocaleStrings/EnglishGBLocale.res @@ -160,7 +160,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pix key cannot be empty`, pixKeyPlaceholder: `Enter Pix key`, pixKeyLabel: `Pix key`, + pixAccountNumberEmptyText: `Pix Account Number cannot be empty`, + pixAccountNumberLabel: "Pix Account Number", + pixAccountNumberPlaceholder: "Enter Pix account number", sourceBankAccountIdEmptyText: `Source Bank Account ID cannot be empty`, + branchCodeEmptyText: `Branch Code cannot be empty`, + bankIdentifierEmptyText: `Bank Identifier cannot be empty`, invalidCardHolderNameError: `Cardholder's name cannot contain digits`, invalidNickNameError: `Nickname cannot have more than 2 digits`, expiry: `expiry`, @@ -227,6 +232,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatic QR`, + payment_methods_pix_automatico_push: `Pix Automatic Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -254,6 +261,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "with interest", installmentTotal: "Total", installmentSelectPlanError: "Please select an instalment plan", + loaderPaymentProcessingTitle: "We are processing your payment...", + loaderPaymentProcessingSubtitle: "You have been redirected to new tab to complete your payments. Status will be updated automatically", + loaderPaymentConfirmBankingAppTitle: "Please confirm the payment in your banking app", + loaderPaymentConfirmBankingAppSubtitle: "Open your banking application and authorise the payment request. The status will be updated automatically once confirmed.", + branchCodeLabel: "Branch Code", + bankIdentifierLabel: "Bank Identifier", + branchCodePlaceholder: "Enter branch code", + bankIdentifierPlaceholder: "Enter bank identifier", installmentSelectPlanPlaceholder: "Select instalment plan", showMore: "Show more", showLess: "Show less", diff --git a/src/LocaleStrings/EnglishLocale.res b/src/LocaleStrings/EnglishLocale.res index 49f98931a..c0f9545b1 100644 --- a/src/LocaleStrings/EnglishLocale.res +++ b/src/LocaleStrings/EnglishLocale.res @@ -160,7 +160,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pix key cannot be empty`, pixKeyPlaceholder: `Enter Pix key`, pixKeyLabel: `Pix key`, + pixAccountNumberEmptyText: `Pix Account Number cannot be empty`, + pixAccountNumberLabel: "Pix Account Number", + pixAccountNumberPlaceholder: "Enter Pix account number", sourceBankAccountIdEmptyText: `Source Bank Account ID cannot be empty`, + branchCodeEmptyText: `Branch Code cannot be empty`, + bankIdentifierEmptyText: `Bank Identifier cannot be empty`, invalidCardHolderNameError: `Card Holder's name cannot have digits`, invalidNickNameError: `Nickname cannot have more than 2 digits`, expiry: `expiry`, @@ -227,6 +232,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatic QR`, + payment_methods_pix_automatico_push: `Pix Automatic Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -254,6 +261,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "with interest", installmentTotal: "Total", installmentSelectPlanError: "Please select an installment plan", + loaderPaymentProcessingTitle: "We are processing your payment...", + loaderPaymentProcessingSubtitle: "You have been redirected to new tab to complete your payments. Status will be updated automatically", + loaderPaymentConfirmBankingAppTitle: "Please confirm the payment in your banking app", + loaderPaymentConfirmBankingAppSubtitle: "Open your banking application and authorize the payment request. The status will be updated automatically once confirmed.", + branchCodeLabel: "Branch Code", + bankIdentifierLabel: "Bank Identifier", + branchCodePlaceholder: "Enter branch code", + bankIdentifierPlaceholder: "Enter bank identifier", installmentSelectPlanPlaceholder: "Select installment plan", showMore: "Show more", showLess: "Show less", diff --git a/src/LocaleStrings/FrenchBelgiumLocale.res b/src/LocaleStrings/FrenchBelgiumLocale.res index e198f791a..fcdd622fc 100644 --- a/src/LocaleStrings/FrenchBelgiumLocale.res +++ b/src/LocaleStrings/FrenchBelgiumLocale.res @@ -162,7 +162,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `La clé Pix ne peut pas être vide`, pixKeyPlaceholder: `Entrez la clé Pix`, pixKeyLabel: `Clé Pix`, + pixAccountNumberEmptyText: `Le numéro de compte Pix ne peut pas être vide`, + pixAccountNumberLabel: `Numéro de compte Pix`, + pixAccountNumberPlaceholder: `Entrez le numéro de compte Pix`, sourceBankAccountIdEmptyText: `L'identifiant du compte bancaire source ne peut pas être vide`, + branchCodeEmptyText: `Le code de la succursale ne peut pas être vide`, + bankIdentifierEmptyText: `L'identifiant bancaire ne peut pas être vide`, invalidCardHolderNameError: `Le nom du titulaire de la carte ne peut pas contenir de chiffres`, invalidNickNameError: `Le surnom ne peut pas contenir plus de 2 chiffres`, expiry: `expiration`, @@ -229,6 +234,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatique QR`, + payment_methods_pix_automatico_push: `Pix Automatique Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -256,6 +263,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "avec intérêts", installmentTotal: "Total", installmentSelectPlanError: "Veuillez sélectionner un plan de paiement", + loaderPaymentProcessingTitle: "Nous traitons votre paiement...", + loaderPaymentProcessingSubtitle: `Vous avez été redirigé vers un nouvel onglet pour finaliser votre paiement. Le statut sera mis à jour automatiquement`, + loaderPaymentConfirmBankingAppTitle: "Veuillez confirmer le paiement dans votre application bancaire", + loaderPaymentConfirmBankingAppSubtitle: `Ouvrez votre application bancaire et autorisez la demande de paiement. Le statut sera mis à jour automatiquement une fois la confirmation effectuée.`, + branchCodeLabel: "Code agence", + bankIdentifierLabel: "Identifiant bancaire", + branchCodePlaceholder: "Entrez le code de la succursale", + bankIdentifierPlaceholder: `Entrez l'identifiant bancaire`, installmentSelectPlanPlaceholder: "Sélectionner un plan de paiement", showMore: "Afficher plus", showLess: "Afficher moins", diff --git a/src/LocaleStrings/FrenchLocale.res b/src/LocaleStrings/FrenchLocale.res index 805dca3bd..78533c824 100644 --- a/src/LocaleStrings/FrenchLocale.res +++ b/src/LocaleStrings/FrenchLocale.res @@ -162,7 +162,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `La clé Pix ne peut pas être vide`, pixKeyPlaceholder: `Entrez la clé Pix`, pixKeyLabel: `Clé Pix`, + pixAccountNumberEmptyText: `Le numéro de compte Pix ne peut pas être vide`, + pixAccountNumberLabel: `Numéro de compte Pix`, + pixAccountNumberPlaceholder: `Entrez le numéro de compte Pix`, sourceBankAccountIdEmptyText: `L'identifiant du compte bancaire source ne peut pas être vide`, + branchCodeEmptyText: `Le code de la succursale ne peut pas être vide`, + bankIdentifierEmptyText: `L'identifiant bancaire ne peut pas être vide`, invalidCardHolderNameError: `Le nom du titulaire de la carte ne peut pas contenir de chiffres`, invalidNickNameError: `Le surnom ne peut pas contenir plus de 2 chiffres`, expiry: `expiration`, @@ -229,6 +234,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatique QR`, + payment_methods_pix_automatico_push: `Pix Automatique Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -256,6 +263,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "avec intérêts", installmentTotal: "Total", installmentSelectPlanError: "Veuillez sélectionner un plan de paiement", + loaderPaymentProcessingTitle: "Nous traitons votre paiement...", + loaderPaymentProcessingSubtitle: `Vous avez été redirigé vers un nouvel onglet pour finaliser votre paiement. Le statut sera mis à jour automatiquement`, + loaderPaymentConfirmBankingAppTitle: "Veuillez confirmer le paiement dans votre application bancaire", + loaderPaymentConfirmBankingAppSubtitle: `Ouvrez votre application bancaire et autorisez la demande de paiement. Le statut sera mis à jour automatiquement une fois la confirmation effectuée.`, + branchCodeLabel: "Code agence", + bankIdentifierLabel: "Identifiant bancaire", + branchCodePlaceholder: "Entrez le code de la succursale", + bankIdentifierPlaceholder: `Entrez l'identifiant bancaire`, installmentSelectPlanPlaceholder: "Sélectionner un plan de paiement", showMore: "Afficher plus", showLess: "Afficher moins", diff --git a/src/LocaleStrings/HebrewLocale.res b/src/LocaleStrings/HebrewLocale.res index df7bde257..4249dada8 100644 --- a/src/LocaleStrings/HebrewLocale.res +++ b/src/LocaleStrings/HebrewLocale.res @@ -161,7 +161,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `מפתח Pix לא יכול להיות ריק`, pixKeyPlaceholder: `הכנס מפתח Pix`, pixKeyLabel: `מפתח Pix`, + pixAccountNumberEmptyText: "מספר חשבון Pix לא יכול להיות ריק", + pixAccountNumberLabel: "מספר חשבון Pix", + pixAccountNumberPlaceholder: "הזן מספר חשבון Pix", sourceBankAccountIdEmptyText: `מזהה חשבון בנק מקור לא יכול להיות ריק`, + branchCodeEmptyText: `קוד סניף לא יכול להיות ריק`, + bankIdentifierEmptyText: `מזהה בנק לא יכול להיות ריק`, invalidCardHolderNameError: `שם בעל הכרטיס לא יכול לכלול ספרות`, invalidNickNameError: `הכינוי לא יכול לכלול יותר משתי ספרות`, expiry: `תְפוּגָה`, @@ -228,6 +233,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `בנקאות פתוחה`, payment_methods_evoucher: `שובר אלקטרוני`, payment_methods_pix_transfer: `פיקס`, + payment_methods_pix_automatico_qr: `פיקס אוטומטי QR`, + payment_methods_pix_automatico_push: `פיקס אוטומטי Push`, payment_methods_boleto: `בולטו`, payment_methods_paypal: `פייפאל`, payment_methods_local_bank_transfer_transfer: `יוניון פיי`, @@ -255,6 +262,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "עם ריבית", installmentTotal: "סה\"כ", installmentSelectPlanError: "אנא בחר תוכנית תשלומים", + loaderPaymentProcessingTitle: "אנחנו מעבדים את התשלום שלך...", + loaderPaymentProcessingSubtitle: "הופנית לכרטיסייה חדשה להשלמת התשלום. הסטטוס יתעדכן אוטומטית", + loaderPaymentConfirmBankingAppTitle: "אנא אשר את התשלום באפליקציית הבנק שלך", + loaderPaymentConfirmBankingAppSubtitle: "פתח את אפליקציית הבנק שלך ואשר את בקשת התשלום. הסטטוס יתעדכן אוטומטית לאחר האישור.", + branchCodeLabel: "קוד סניף", + bankIdentifierLabel: "מזהה בנק", + branchCodePlaceholder: "הזן קוד סניף", + bankIdentifierPlaceholder: "הזן מזהה בנק", installmentSelectPlanPlaceholder: "בחר תוכנית תשלומים", showMore: "הצג עוד", showLess: "הצג פחות", diff --git a/src/LocaleStrings/ItalianLocale.res b/src/LocaleStrings/ItalianLocale.res index 8afad0365..4d71d6644 100644 --- a/src/LocaleStrings/ItalianLocale.res +++ b/src/LocaleStrings/ItalianLocale.res @@ -162,7 +162,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `La chiave Pix non può essere vuota`, pixKeyPlaceholder: `Inserisci la chiave Pix`, pixKeyLabel: `Chiave Pix`, + pixAccountNumberEmptyText: `Il numero di conto Pix non può essere vuoto`, + pixAccountNumberLabel: "Numero di conto Pix", + pixAccountNumberPlaceholder: "Inserisci il numero di conto Pix", sourceBankAccountIdEmptyText: `L'ID del conto bancario di origine non può essere vuoto`, + branchCodeEmptyText: `Il codice di filiale non può essere vuoto`, + bankIdentifierEmptyText: `L'identificatore bancario non può essere vuoto`, invalidCardHolderNameError: `Il nome del titolare della carta non può contenere cifre`, invalidNickNameError: `Il soprannome non può contenere più di 2 cifre`, expiry: `scadenza`, @@ -229,6 +234,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatico QR`, + payment_methods_pix_automatico_push: `Pix Automatico Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -256,6 +263,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "con interessi", installmentTotal: "Totale", installmentSelectPlanError: "Seleziona un piano a rate", + loaderPaymentProcessingTitle: "Stiamo elaborando il tuo pagamento...", + loaderPaymentProcessingSubtitle: "Sei stato reindirizzato a una nuova scheda per completare il pagamento. Lo stato verrà aggiornato automaticamente", + loaderPaymentConfirmBankingAppTitle: "Conferma il pagamento nella tua app bancaria", + loaderPaymentConfirmBankingAppSubtitle: `Apri la tua applicazione bancaria e autorizza la richiesta di pagamento. Lo stato verrà aggiornato automaticamente una volta confermato.`, + branchCodeLabel: "Codice filiale", + bankIdentifierLabel: "Identificativo bancario", + branchCodePlaceholder: "Inserisci il codice filiale", + bankIdentifierPlaceholder: `Inserisci l'identificativo bancario`, installmentSelectPlanPlaceholder: "Seleziona un piano a rate", showMore: "Mostra di più", showLess: "Mostra meno", diff --git a/src/LocaleStrings/JapaneseLocale.res b/src/LocaleStrings/JapaneseLocale.res index 642889bc0..7f042560d 100644 --- a/src/LocaleStrings/JapaneseLocale.res +++ b/src/LocaleStrings/JapaneseLocale.res @@ -161,7 +161,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pixキーは空にできません`, pixKeyPlaceholder: `Pixキーを入力`, pixKeyLabel: `Pixキー`, + pixAccountNumberEmptyText: "Pixアカウント番号を入力してください", + pixAccountNumberLabel: "Pixアカウント番号", + pixAccountNumberPlaceholder: "Pixアカウント番号を入力", sourceBankAccountIdEmptyText: `送金元銀行口座IDを入力してください`, + branchCodeEmptyText: `支店コードを入力してください`, + bankIdentifierEmptyText: `銀行識別子を入力してください`, invalidCardHolderNameError: `カード所有者の名前に数字を含めることはできません`, invalidNickNameError: `ニックネームには2つ以上の数字を含めることはできません`, expiry: `有効期限`, @@ -228,6 +233,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `オープンバンキング`, payment_methods_evoucher: `電子バウチャー`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix 自動 QR`, + payment_methods_pix_automatico_push: `Pix 自動プッシュ`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -255,6 +262,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "利息あり", installmentTotal: "合計", installmentSelectPlanError: "分割払いプランを選択してください", + loaderPaymentProcessingTitle: "お支払いを処理しています...", + loaderPaymentProcessingSubtitle: "お支払いを完了するために新しいタブにリダイレクトされました。ステータスは自動的に更新されます", + loaderPaymentConfirmBankingAppTitle: "銀行アプリでお支払いを確認してください", + loaderPaymentConfirmBankingAppSubtitle: "銀行アプリケーションを開き、支払いリクエストを承認してください。確認後、ステータスは自動的に更新されます。", + branchCodeLabel: "支店コード", + bankIdentifierLabel: "銀行識別コード", + branchCodePlaceholder: "支店コードを入力", + bankIdentifierPlaceholder: "銀行識別コードを入力", installmentSelectPlanPlaceholder: "分割払いプランを選択", showMore: "もっと見る", showLess: "表示を減らす", diff --git a/src/LocaleStrings/LocaleStringTypes.res b/src/LocaleStrings/LocaleStringTypes.res index 2422d9f3b..57ab3796c 100644 --- a/src/LocaleStrings/LocaleStringTypes.res +++ b/src/LocaleStrings/LocaleStringTypes.res @@ -149,7 +149,12 @@ type localeStrings = { pixKeyEmptyText: string, pixKeyLabel: string, pixKeyPlaceholder: string, + pixAccountNumberEmptyText: string, + pixAccountNumberLabel: string, + pixAccountNumberPlaceholder: string, sourceBankAccountIdEmptyText: string, + branchCodeEmptyText: string, + bankIdentifierEmptyText: string, invalidCardHolderNameError: string, invalidNickNameError: string, expiry: string, @@ -216,6 +221,8 @@ type localeStrings = { payment_methods_open_banking_pis: string, payment_methods_evoucher: string, payment_methods_pix_transfer: string, + payment_methods_pix_automatico_qr: string, + payment_methods_pix_automatico_push: string, payment_methods_boleto: string, payment_methods_paypal: string, payment_methods_local_bank_transfer_transfer: string, @@ -242,6 +249,14 @@ type localeStrings = { installmentWithInterest: string, installmentTotal: string, installmentSelectPlanError: string, + loaderPaymentProcessingTitle: string, + loaderPaymentProcessingSubtitle: string, + loaderPaymentConfirmBankingAppTitle: string, + loaderPaymentConfirmBankingAppSubtitle: string, + branchCodeLabel: string, + bankIdentifierLabel: string, + branchCodePlaceholder: string, + bankIdentifierPlaceholder: string, installmentSelectPlanPlaceholder: string, showMore: string, showLess: string, diff --git a/src/LocaleStrings/PolishLocale.res b/src/LocaleStrings/PolishLocale.res index 7843a19e3..cf2b4c1e9 100644 --- a/src/LocaleStrings/PolishLocale.res +++ b/src/LocaleStrings/PolishLocale.res @@ -161,7 +161,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Klucz Pix nie może być pusty`, pixKeyPlaceholder: `Wprowadź klucz Pix`, pixKeyLabel: `Klucz Pix`, + pixAccountNumberEmptyText: `Numer konta Pix nie może być pusty`, + pixAccountNumberLabel: "Numer konta Pix", + pixAccountNumberPlaceholder: `Wprowadź numer konta Pix`, sourceBankAccountIdEmptyText: `Identyfikator źródłowego konta bankowego nie może być pusty`, + branchCodeEmptyText: `Kod oddziału nie może być pusty`, + bankIdentifierEmptyText: `Identyfikator banku nie może być pusty`, invalidCardHolderNameError: `Imię posiadacza karty nie może zawierać cyfr`, invalidNickNameError: `Pseudonim nie może zawierać więcej niż 2 cyfry`, expiry: `wygaśnięcie`, @@ -228,6 +233,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatyczny QR`, + payment_methods_pix_automatico_push: `Pix Automatyczny Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -255,6 +262,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "z odsetkami", installmentTotal: "Razem", installmentSelectPlanError: "Proszę wybrać plan rat", + loaderPaymentProcessingTitle: "Przetwarzamy Twoją płatność...", + loaderPaymentProcessingSubtitle: `Zostałeś przekierowany na nową kartę, aby dokończyć płatność. Status zostanie automatycznie zaktualizowany`, + loaderPaymentConfirmBankingAppTitle: `Potwierdź płatność w swojej aplikacji bankowej`, + loaderPaymentConfirmBankingAppSubtitle: `Otwórz swoją aplikację bankową i autoryzuj żądanie płatności. Status zostanie automatycznie zaktualizowany po potwierdzeniu.`, + branchCodeLabel: `Kod oddziału`, + bankIdentifierLabel: "Identyfikator banku", + branchCodePlaceholder: `Wprowadź kod oddziału`, + bankIdentifierPlaceholder: `Wprowadź identyfikator banku`, installmentSelectPlanPlaceholder: "Wybierz plan rat", showMore: "Pokaż więcej", showLess: "Pokaż mniej", diff --git a/src/LocaleStrings/PortugueseLocale.res b/src/LocaleStrings/PortugueseLocale.res index 19e5a8dd9..c805b1857 100644 --- a/src/LocaleStrings/PortugueseLocale.res +++ b/src/LocaleStrings/PortugueseLocale.res @@ -161,7 +161,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `A chave Pix não pode estar vazia`, pixKeyPlaceholder: `Digite a chave Pix`, pixKeyLabel: `Chave Pix`, + pixAccountNumberEmptyText: `O número da conta Pix não pode estar vazio`, + pixAccountNumberLabel: `Número da conta Pix`, + pixAccountNumberPlaceholder: `Insira o número da conta Pix`, sourceBankAccountIdEmptyText: `O ID da conta bancária de origem não pode estar vazio`, + branchCodeEmptyText: `O código de agência não pode estar vazio`, + bankIdentifierEmptyText: `O identificador bancário não pode estar vazio`, invalidCardHolderNameError: `O nome do titular do cartão não pode conter dígitos`, invalidNickNameError: `O apelido não pode conter mais de 2 dígitos`, expiry: `termo`, @@ -228,6 +233,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automático QR`, + payment_methods_pix_automatico_push: `Pix Automático Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -255,6 +262,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "com juros", installmentTotal: "Total", installmentSelectPlanError: "Por favor, selecione um plano de parcelamento", + loaderPaymentProcessingTitle: "Estamos processando seu pagamento...", + loaderPaymentProcessingSubtitle: `Você foi redirecionado para uma nova aba para concluir seu pagamento. O status será atualizado automaticamente`, + loaderPaymentConfirmBankingAppTitle: "Por favor, confirme o pagamento no seu aplicativo bancário", + loaderPaymentConfirmBankingAppSubtitle: `Abra seu aplicativo bancário e autorize a solicitação de pagamento. O status será atualizado automaticamente após a confirmação.`, + branchCodeLabel: `Código da agência`, + bankIdentifierLabel: `Identificador bancário`, + branchCodePlaceholder: `Insira o código da agência`, + bankIdentifierPlaceholder: `Insira o identificador bancário`, installmentSelectPlanPlaceholder: "Selecione um plano de parcelamento", showMore: "Mostrar mais", showLess: "Mostrar menos", diff --git a/src/LocaleStrings/RussianLocale.res b/src/LocaleStrings/RussianLocale.res index 483557b0f..235371be2 100644 --- a/src/LocaleStrings/RussianLocale.res +++ b/src/LocaleStrings/RussianLocale.res @@ -169,7 +169,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Ключ Pix не может быть пустым`, pixKeyPlaceholder: `Введите ключ Pix`, pixKeyLabel: `Ключ Pix`, + pixAccountNumberEmptyText: "Номер счета Pix не может быть пустым", + pixAccountNumberLabel: "Номер счета Pix", + pixAccountNumberPlaceholder: "Введите номер счета Pix", sourceBankAccountIdEmptyText: `Идентификатор исходного банковского счета не может быть пустым`, + branchCodeEmptyText: `Код отделения не может быть пустым`, + bankIdentifierEmptyText: `Идентификатор банка не может быть пустым`, invalidCardHolderNameError: `Имя владельца карты не может содержать цифры`, invalidNickNameError: `Псевдоним не может содержать более 2 цифр`, expiry: `истечение срока действия`, @@ -236,6 +241,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Автоматический QR`, + payment_methods_pix_automatico_push: `Pix Автоматический Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -263,6 +270,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "с процентами", installmentTotal: "Итого", installmentSelectPlanError: "Пожалуйста, выберите план рассрочки", + loaderPaymentProcessingTitle: "Мы обрабатываем ваш платёж...", + loaderPaymentProcessingSubtitle: "Вы были перенаправлены на новую вкладку для завершения платежа. Статус обновится автоматически", + loaderPaymentConfirmBankingAppTitle: "Пожалуйста, подтвердите платёж в вашем банковском приложении", + loaderPaymentConfirmBankingAppSubtitle: "Откройте ваше банковское приложение и подтвердите запрос на оплату. Статус обновится автоматически после подтверждения.", + branchCodeLabel: "Код отделения", + bankIdentifierLabel: "Идентификатор банка", + branchCodePlaceholder: "Введите код отделения", + bankIdentifierPlaceholder: "Введите идентификатор банка", installmentSelectPlanPlaceholder: "Выберите план рассрочки", showMore: "Показать ещё", showLess: "Показать меньше", diff --git a/src/LocaleStrings/SpanishLocale.res b/src/LocaleStrings/SpanishLocale.res index e53164efd..29f9bec48 100644 --- a/src/LocaleStrings/SpanishLocale.res +++ b/src/LocaleStrings/SpanishLocale.res @@ -161,7 +161,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `La clave Pix no puede estar vacía`, pixKeyPlaceholder: `Introduce la clave Pix`, pixKeyLabel: `Clave Pix`, + pixAccountNumberEmptyText: `El número de cuenta Pix no puede estar vacío`, + pixAccountNumberLabel: `Número de cuenta Pix`, + pixAccountNumberPlaceholder: `Ingrese el número de cuenta Pix`, sourceBankAccountIdEmptyText: `El ID de la cuenta bancaria de origen no puede estar vacío`, + branchCodeEmptyText: `El código de sucursal no puede estar vacío`, + bankIdentifierEmptyText: `El identificador bancario no puede estar vacío`, invalidCardHolderNameError: `El nombre del titular de la tarjeta no puede contener dígitos`, invalidNickNameError: `El apodo no puede contener más de 2 dígitos`, expiry: `expiración`, @@ -228,6 +233,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Banca abierta`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automático QR`, + payment_methods_pix_automatico_push: `Pix Automático Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -255,6 +262,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "con intereses", installmentTotal: "Total", installmentSelectPlanError: "Por favor seleccione un plan de cuotas", + loaderPaymentProcessingTitle: "Estamos procesando su pago...", + loaderPaymentProcessingSubtitle: `Ha sido redirigido a una nueva pestaña para completar su pago. El estado se actualizará automáticamente`, + loaderPaymentConfirmBankingAppTitle: "Por favor confirme el pago en su aplicación bancaria", + loaderPaymentConfirmBankingAppSubtitle: `Abra su aplicación bancaria y autorice la solicitud de pago. El estado se actualizará automáticamente una vez confirmado.`, + branchCodeLabel: `Código de sucursal`, + bankIdentifierLabel: "Identificador bancario", + branchCodePlaceholder: `Ingrese el código de sucursal`, + bankIdentifierPlaceholder: "Ingrese el identificador bancario", installmentSelectPlanPlaceholder: "Seleccione un plan de cuotas", showMore: "Mostrar más", showLess: "Mostrar menos", diff --git a/src/LocaleStrings/SwedishLocale.res b/src/LocaleStrings/SwedishLocale.res index bba9dad94..75f27ed3d 100644 --- a/src/LocaleStrings/SwedishLocale.res +++ b/src/LocaleStrings/SwedishLocale.res @@ -160,7 +160,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pix-nyckel kan inte vara tom`, pixKeyPlaceholder: `Ange Pix-nyckel`, pixKeyLabel: `Pix-nyckel`, + pixAccountNumberEmptyText: `Pix-kontonummer får inte vara tomt`, + pixAccountNumberLabel: "Pix-kontonummer", + pixAccountNumberPlaceholder: "Ange Pix-kontonummer", sourceBankAccountIdEmptyText: `Käll bankkonto-ID kan inte vara tomt`, + branchCodeEmptyText: `Bankfilialskod kan inte vara tom`, + bankIdentifierEmptyText: `Bankidentifierare kan inte vara tom`, invalidCardHolderNameError: `Kortinnehavarens namn får inte innehålla siffror`, invalidNickNameError: `Smeknamnet får inte innehålla mer än 2 siffror`, expiry: `upphörande`, @@ -227,6 +232,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `Open Banking`, payment_methods_evoucher: `E-Voucher`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix Automatisk QR`, + payment_methods_pix_automatico_push: `Pix Automatisk Push`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `Union Pay`, @@ -254,6 +261,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "med ränta", installmentTotal: "Totalt", installmentSelectPlanError: "Välj ett avbetalningsplan", + loaderPaymentProcessingTitle: "Vi behandlar din betalning...", + loaderPaymentProcessingSubtitle: `Du har omdirigerats till en ny flik för att slutföra din betalning. Statusen uppdateras automatiskt`, + loaderPaymentConfirmBankingAppTitle: `Bekräfta betalningen i din bankapp`, + loaderPaymentConfirmBankingAppSubtitle: `Öppna din bankapplikation och godkänn betalningsförfrågan. Statusen uppdateras automatiskt när den har bekräftats.`, + branchCodeLabel: "Kontorskod", + bankIdentifierLabel: "Bankidentifierare", + branchCodePlaceholder: "Ange filialkod", + bankIdentifierPlaceholder: "Ange bankidentifierare", installmentSelectPlanPlaceholder: "Välj ett avbetalningsplan", showMore: "Visa mer", showLess: "Visa mindre", diff --git a/src/LocaleStrings/TraditionalChineseLocale.res b/src/LocaleStrings/TraditionalChineseLocale.res index 0b346d6b3..e39a67781 100644 --- a/src/LocaleStrings/TraditionalChineseLocale.res +++ b/src/LocaleStrings/TraditionalChineseLocale.res @@ -160,7 +160,12 @@ let localeStrings: LocaleStringTypes.localeStrings = { pixKeyEmptyText: `Pix 金鑰不能為空`, pixKeyPlaceholder: `輸入 Pix 金鑰`, pixKeyLabel: `Pix 金鑰`, + pixAccountNumberEmptyText: "Pix帳戶號碼不能為空", + pixAccountNumberLabel: "Pix帳戶號碼", + pixAccountNumberPlaceholder: "輸入Pix帳戶號碼", sourceBankAccountIdEmptyText: `來源銀行帳戶ID不能為空`, + branchCodeEmptyText: `分行代碼不能為空`, + bankIdentifierEmptyText: `銀行識別碼不能為空`, invalidCardHolderNameError: `持卡人姓名不能包含數字`, invalidNickNameError: `暱稱不能包含超過兩個數字`, expiry: `到期`, @@ -227,6 +232,8 @@ let localeStrings: LocaleStringTypes.localeStrings = { payment_methods_open_banking_pis: `開放銀行`, payment_methods_evoucher: `電子禮券`, payment_methods_pix_transfer: `Pix`, + payment_methods_pix_automatico_qr: `Pix 自動 QR`, + payment_methods_pix_automatico_push: `Pix 自動推送`, payment_methods_boleto: `Boleto`, payment_methods_paypal: `Paypal`, payment_methods_local_bank_transfer_transfer: `銀聯`, @@ -254,6 +261,14 @@ let localeStrings: LocaleStringTypes.localeStrings = { installmentWithInterest: "有利息", installmentTotal: "合計", installmentSelectPlanError: "請選擇分期計劃", + loaderPaymentProcessingTitle: "我們正在處理您的付款...", + loaderPaymentProcessingSubtitle: "您已被重新導向到新分頁以完成付款。狀態將自動更新", + loaderPaymentConfirmBankingAppTitle: "請在您的銀行應用程式中確認付款", + loaderPaymentConfirmBankingAppSubtitle: "開啟您的銀行應用程式並授權付款請求。確認後狀態將自動更新。", + branchCodeLabel: "分行代碼", + bankIdentifierLabel: "銀行識別碼", + branchCodePlaceholder: "輸入分行代碼", + bankIdentifierPlaceholder: "輸入銀行識別碼", installmentSelectPlanPlaceholder: "選擇分期計劃", showMore: "顯示更多", showLess: "收起", diff --git a/src/Payments/PaymentMethodsRecord.res b/src/Payments/PaymentMethodsRecord.res index cf5510f13..0bb7f5e01 100644 --- a/src/Payments/PaymentMethodsRecord.res +++ b/src/Payments/PaymentMethodsRecord.res @@ -68,6 +68,9 @@ type paymentMethodsFields = | BankAccountNumber | IBAN | SourceBankAccountId + | BranchCode + | BankIdentifier + | PixAccountNumber | GiftCardNumber | GiftCardPin @@ -593,6 +596,13 @@ let getPaymentMethodsFields = (~localeString: LocaleStringTypes.localeStrings) = fields: [InfoElement], miniIcon: Some(icon("cash_voucher", ~size=19)), }, + { + paymentMethodName: "pix_automatico_push_transfer", + fields: [InfoElement], + icon: Some(icon("pix", ~size=26, ~width=40)), + displayName: localeString.payment_methods_pix_automatico_push, + miniIcon: None, + }, { paymentMethodName: "pix_transfer", fields: [InfoElement], @@ -600,6 +610,13 @@ let getPaymentMethodsFields = (~localeString: LocaleStringTypes.localeStrings) = displayName: localeString.payment_methods_pix_transfer, miniIcon: None, }, + { + paymentMethodName: "pix_automatico_qr_transfer", + fields: [InfoElement], + icon: Some(icon("pix", ~size=26, ~width=40)), + displayName: localeString.payment_methods_pix_automatico_qr, + miniIcon: None, + }, { paymentMethodName: "boleto", icon: Some(icon("boleto", ~size=21, ~width=25)), @@ -726,9 +743,12 @@ let getPaymentMethodsFieldTypeFromString = (str, isBancontact) => { | ("user_cpf", _) => PixCPF | ("user_cnpj", _) => PixCNPJ | ("user_pix_key", _) => PixKey + | ("user_pix_account_number", _) => PixAccountNumber | ("user_bank_account_number", _) => BankAccountNumber | ("user_iban", _) => BankAccountNumber | ("user_source_bank_account_id", _) => SourceBankAccountId + | ("user_branch_code", _) => BranchCode + | ("user_bank_identifier", _) => BankIdentifier | ("user_social_security_number", _) => DocumentNumber | _ => None } diff --git a/src/Types/HyperLoggerTypes.res b/src/Types/HyperLoggerTypes.res index 18020f94a..2e0d79a17 100644 --- a/src/Types/HyperLoggerTypes.res +++ b/src/Types/HyperLoggerTypes.res @@ -61,6 +61,7 @@ type eventName = | REDIRECTING_USER | DISPLAY_BANK_TRANSFER_INFO_PAGE | DISPLAY_QR_CODE_INFO_PAGE + | DISPLAY_WAIT_SCREEN | DISPLAY_VOUCHER | DISPLAY_THREE_DS_SDK | THREE_DS_METHOD diff --git a/src/Types/PaymentConfirmTypes.res b/src/Types/PaymentConfirmTypes.res index 0fa37776c..b1bbea77c 100644 --- a/src/Types/PaymentConfirmTypes.res +++ b/src/Types/PaymentConfirmTypes.res @@ -33,6 +33,11 @@ type voucherDetails = { reference: string, } +type pollConfig = { + delay_in_secs: int, + frequency: int, +} + type nextAction = { redirectToUrl: string, popupUrl: string, @@ -49,6 +54,7 @@ type nextAction = { display_text: option, border_color: option, iframe_data: option, + poll_config: option, } type intent = { nextAction: nextAction, @@ -66,6 +72,11 @@ let defaultRedirectTourl = { returnUrl: "", url: "", } +let defaultPollConfig = { + delay_in_secs: 2, + frequency: 0, +} + let defaultNextAction = { redirectToUrl: "", popupUrl: "", @@ -82,6 +93,7 @@ let defaultNextAction = { display_text: None, border_color: None, iframe_data: None, + poll_config: None, } let defaultIntent = { nextAction: defaultNextAction, @@ -139,6 +151,13 @@ let getVoucherDetails = json => { } } +let getPollConfig = json => { + { + delay_in_secs: json->getInt("delay_in_secs", 2), + frequency: json->getInt("frequency", 0), + } +} + let getNextAction = (dict, str) => { dict ->Dict.get(str) @@ -166,12 +185,9 @@ let getNextAction = (dict, str) => { ->Dict.get("three_ds_data") ->Option.getOr(Dict.make()->JSON.Encode.object), ), - display_to_timestamp: Some( - json - ->Dict.get("display_to_timestamp") - ->Option.flatMap(JSON.Decode.float) - ->Option.getOr(0.0), - ), + display_to_timestamp: json + ->Dict.get("display_to_timestamp") + ->Option.flatMap(JSON.Decode.float), voucher_details: { json ->Dict.get("voucher_details") @@ -182,6 +198,12 @@ let getNextAction = (dict, str) => { display_text: json->getOptionString("display_text"), border_color: json->getOptionString("border_color"), iframe_data: Some(json->Utils.getJsonObjectFromDict("iframe_data")), + poll_config: { + json + ->Dict.get("poll_config") + ->Option.flatMap(JSON.Decode.object) + ->Option.map(json => json->getPollConfig) + }, } }) ->Option.getOr(defaultNextAction) diff --git a/src/Utilities/DynamicFieldsUtils.res b/src/Utilities/DynamicFieldsUtils.res index ab309e69e..92289b4fe 100644 --- a/src/Utilities/DynamicFieldsUtils.res +++ b/src/Utilities/DynamicFieldsUtils.res @@ -13,6 +13,8 @@ let dynamicFieldsEnabledPaymentMethods = [ "ideal", "sofort", "pix_transfer", + "pix_automatico_push_transfer", + "pix_automatico_qr_transfer", "giropay", "local_bank_transfer_transfer", "afterpay_clearpay", @@ -200,6 +202,7 @@ let useRequiredFieldsEmptyAndValid = ( let pixCNPJ = Recoil.useRecoilValueFromAtom(userPixCNPJ) let pixCPF = Recoil.useRecoilValueFromAtom(userPixCPF) let pixKey = Recoil.useRecoilValueFromAtom(userPixKey) + let pixAccountNumber = Recoil.useRecoilValueFromAtom(userPixAccountNumber) let fullName = Recoil.useRecoilValueFromAtom(userFullName) let billingName = Recoil.useRecoilValueFromAtom(userBillingName) let line1 = Recoil.useRecoilValueFromAtom(userAddressline1) @@ -224,6 +227,8 @@ let useRequiredFieldsEmptyAndValid = ( let dateOfBirth = Recoil.useRecoilValueFromAtom(dateOfBirth) let bankAccountNumber = Recoil.useRecoilValueFromAtom(userBankAccountNumber) let sourceBankAccountId = Recoil.useRecoilValueFromAtom(sourceBankAccountId) + let branchCode = Recoil.useRecoilValueFromAtom(userBranchCode) + let bankIdentifier = Recoil.useRecoilValueFromAtom(userBankIdentifier) let giftCardNumber = Recoil.useRecoilValueFromAtom(userGiftCardNumber) let giftCardPin = Recoil.useRecoilValueFromAtom(userGiftCardPin) @@ -272,12 +277,15 @@ let useRequiredFieldsEmptyAndValid = ( | PixCNPJ => pixCNPJ.isValid->Option.getOr(false) | PixCPF => pixCPF.isValid->Option.getOr(false) | PixKey => pixKey.isValid->Option.getOr(false) + | PixAccountNumber => pixAccountNumber.isValid->Option.getOr(false) | BankAccountNumber | IBAN => bankAccountNumber.value !== "" | GiftCardNumber => giftCardNumber.value !== "" | GiftCardPin => giftCardPin.value !== "" | SourceBankAccountId => sourceBankAccountId.value !== "" + | BranchCode => branchCode.value !== "" + | BankIdentifier => bankIdentifier.value !== "" | _ => true } }) @@ -309,6 +317,7 @@ let useRequiredFieldsEmptyAndValid = ( | PixCNPJ => pixCNPJ.value === "" | PixCPF => pixCPF.value === "" | PixKey => pixKey.value === "" + | PixAccountNumber => pixAccountNumber.value === "" | CryptoCurrencyNetworks => cryptoCurrencyNetworks === "" | Currency(currencyArr) => currency === "" && currencyArr->Array.length > 0 | DocumentType(optArr) => documentType === "" && optArr->Array.length > 0 @@ -334,6 +343,8 @@ let useRequiredFieldsEmptyAndValid = ( | GiftCardNumber => giftCardNumber.value === "" | GiftCardPin => giftCardPin.value === "" | SourceBankAccountId => sourceBankAccountId.value === "" + | BranchCode => branchCode.value === "" + | BankIdentifier => bankIdentifier.value === "" | _ => false } }) @@ -359,6 +370,7 @@ let useRequiredFieldsEmptyAndValid = ( pixCNPJ.value, pixKey.value, pixCPF.value, + pixAccountNumber.value, giftCardPin.value, giftCardNumber.value, isCardValid, @@ -369,6 +381,8 @@ let useRequiredFieldsEmptyAndValid = ( cvcNumber, bankAccountNumber, sourceBankAccountId.value, + branchCode.value, + bankIdentifier.value, cryptoCurrencyNetworks, documentType, documentNumber.value, @@ -403,6 +417,7 @@ let useSetInitialRequiredFields = ( let (pixCNPJ, setPixCNPJ) = Recoil.useRecoilState(userPixCNPJ) let (pixCPF, setPixCPF) = Recoil.useRecoilState(userPixCPF) let (pixKey, setPixKey) = Recoil.useRecoilState(userPixKey) + let (pixAccountNumber, setPixAccountNumber) = Recoil.useRecoilState(userPixAccountNumber) let (country, setCountry) = Recoil.useRecoilState(userCountry) let (selectedBank, setSelectedBank) = Recoil.useRecoilState(userBank) @@ -415,6 +430,8 @@ let useSetInitialRequiredFields = ( let (dateOfBirth, setDateOfBirth) = Recoil.useRecoilState(dateOfBirth) let (bankAccountNumber, setBankAccountNumber) = Recoil.useRecoilState(userBankAccountNumber) let (sourceBankAccountId, setSourceBankAccountId) = Recoil.useRecoilState(sourceBankAccountId) + let (branchCode, setBranchCode) = Recoil.useRecoilState(userBranchCode) + let (bankIdentifier, setBankIdentifier) = Recoil.useRecoilState(userBankIdentifier) let (giftCardNumber, setGiftCardNumber) = Recoil.useRecoilState(userGiftCardNumber) let (giftCardPin, setGiftCardPin) = Recoil.useRecoilState(userGiftCardPin) @@ -513,6 +530,7 @@ let useSetInitialRequiredFields = ( | PixKey => setFields(setPixKey, pixKey, requiredField, false) | PixCNPJ => setFields(setPixCNPJ, pixCNPJ, requiredField, false) | PixCPF => setFields(setPixCPF, pixCPF, requiredField, false) + | PixAccountNumber => setFields(setPixAccountNumber, pixAccountNumber, requiredField, false) | BillingName => setFields(setBillingName, billingName, requiredField, true) | Country | AddressCountry(_) => @@ -549,6 +567,8 @@ let useSetInitialRequiredFields = ( setFields(setBankAccountNumber, bankAccountNumber, requiredField, false) | SourceBankAccountId => setFields(setSourceBankAccountId, sourceBankAccountId, requiredField, false) + | BranchCode => setFields(setBranchCode, branchCode, requiredField, false) + | BankIdentifier => setFields(setBankIdentifier, bankIdentifier, requiredField, false) | DocumentType(_) => if value !== "" && documentType === "" { setDocumentType(_ => value) @@ -595,6 +615,7 @@ let useRequiredFieldsBody = ( let pixCNPJ = Recoil.useRecoilValueFromAtom(userPixCNPJ) let pixCPF = Recoil.useRecoilValueFromAtom(userPixCPF) let pixKey = Recoil.useRecoilValueFromAtom(userPixKey) + let pixAccountNumber = Recoil.useRecoilValueFromAtom(userPixAccountNumber) let fullName = Recoil.useRecoilValueFromAtom(userFullName) let billingName = Recoil.useRecoilValueFromAtom(userBillingName) let line1 = Recoil.useRecoilValueFromAtom(userAddressline1) @@ -614,6 +635,8 @@ let useRequiredFieldsBody = ( let dateOfBirth = Recoil.useRecoilValueFromAtom(dateOfBirth) let bankAccountNumber = Recoil.useRecoilValueFromAtom(userBankAccountNumber) let sourceBankAccountId = Recoil.useRecoilValueFromAtom(sourceBankAccountId) + let branchCode = Recoil.useRecoilValueFromAtom(userBranchCode) + let bankIdentifier = Recoil.useRecoilValueFromAtom(userBankIdentifier) let countryCode = Utils.getCountryCode(country).isoAlpha2 let stateCode = Utils.getStateCodeFromStateName(state.value, countryCode) let giftCardNumber = Recoil.useRecoilValueFromAtom(userGiftCardNumber) @@ -675,10 +698,13 @@ let useRequiredFieldsBody = ( | PixCNPJ => pixCNPJ.value | PixCPF => pixCPF.value | PixKey => pixKey.value + | PixAccountNumber => pixAccountNumber.value | IBAN | BankAccountNumber => bankAccountNumber.value | SourceBankAccountId => sourceBankAccountId.value + | BranchCode => branchCode.value + | BankIdentifier => bankIdentifier.value | StateAndCity | PhoneNumberAndCountryCode | CountryAndPincode(_) @@ -766,6 +792,7 @@ let useRequiredFieldsBody = ( pixCNPJ.value, pixCPF.value, pixKey.value, + pixAccountNumber.value, documentType, documentNumber.value, city.value, @@ -787,6 +814,8 @@ let useRequiredFieldsBody = ( dateOfBirth, bankAccountNumber, sourceBankAccountId, + branchCode, + bankIdentifier, )) } @@ -805,6 +834,7 @@ let isFieldTypeToRenderOutsideBilling = (fieldType: PaymentMethodsRecord.payment | PixKey | PixCPF | PixCNPJ + | PixAccountNumber | DateOfBirth | Currency(_) | DocumentType(_) @@ -813,6 +843,8 @@ let isFieldTypeToRenderOutsideBilling = (fieldType: PaymentMethodsRecord.payment | IBAN | SourceBankAccountId | BankAccountNumber + | BranchCode + | BankIdentifier | InfoElement => true | _ => false } diff --git a/src/Utilities/LoggerUtils.res b/src/Utilities/LoggerUtils.res index c4ad63663..33a3f52eb 100644 --- a/src/Utilities/LoggerUtils.res +++ b/src/Utilities/LoggerUtils.res @@ -305,6 +305,7 @@ let apiEventInitMapper = (eventName: HyperLoggerTypes.eventName): option< | REDIRECTING_USER | DISPLAY_BANK_TRANSFER_INFO_PAGE | DISPLAY_QR_CODE_INFO_PAGE + | DISPLAY_WAIT_SCREEN | DISPLAY_VOUCHER | DISPLAY_THREE_DS_SDK | THREE_DS_METHOD diff --git a/src/Utilities/PaymentHelpers.res b/src/Utilities/PaymentHelpers.res index 4806893c8..b2f4c4d65 100644 --- a/src/Utilities/PaymentHelpers.res +++ b/src/Utilities/PaymentHelpers.res @@ -183,42 +183,20 @@ let rec pollRetrievePaymentIntent = ( ~customPodUri, ~isForceSync=false, ~sdkAuthorization=None, + ~delayInMs=2000, + ~endTimestampNanos=None, ) => { open Promise - retrievePaymentIntent( - clientSecret, - ~headers, - ~publishableKey, - ~logger, - ~customPodUri, - ~isForceSync, - ~sdkAuthorization, - ) - ->then(json => { - let dict = json->getDictFromJson - let status = dict->getString("status", "") - if status === "succeeded" || status === "failed" { - resolve(json) - } else { - delay(2000) - ->then(_val => { - pollRetrievePaymentIntent( - clientSecret, - ~headers, - ~publishableKey, - ~logger, - ~customPodUri, - ~isForceSync, - ~sdkAuthorization, - ) - }) - ->catch(_ => Promise.resolve(JSON.Encode.null)) - } - }) - ->catch(e => { - Console.error2("Unable to retrieve payment due to following error", e) - pollRetrievePaymentIntent( + let isExpired = switch endTimestampNanos { + | Some(timestamp) => + let currentTime = Date.now() *. 1000000.0 // convert to nanoseconds + currentTime >= timestamp + | None => false + } + + if isExpired { + retrievePaymentIntent( clientSecret, ~headers, ~publishableKey, @@ -227,7 +205,57 @@ let rec pollRetrievePaymentIntent = ( ~isForceSync, ~sdkAuthorization, ) - }) + ->then(json => resolve(json)) + ->catch(_ => resolve(JSON.Encode.null)) + } else { + retrievePaymentIntent( + clientSecret, + ~headers, + ~publishableKey, + ~logger, + ~customPodUri, + ~isForceSync, + ~sdkAuthorization, + ) + ->then(json => { + let dict = json->getDictFromJson + let status = dict->getString("status", "") + + if status === "succeeded" || status === "failed" { + resolve(json) + } else { + delay(delayInMs) + ->then(_val => { + pollRetrievePaymentIntent( + clientSecret, + ~headers, + ~publishableKey, + ~logger, + ~customPodUri, + ~isForceSync, + ~sdkAuthorization, + ~delayInMs, + ~endTimestampNanos, + ) + }) + ->catch(_ => Promise.resolve(JSON.Encode.null)) + } + }) + ->catch(e => { + Console.error2("Unable to retrieve payment due to following error", e) + pollRetrievePaymentIntent( + clientSecret, + ~headers, + ~publishableKey, + ~logger, + ~customPodUri, + ~isForceSync, + ~sdkAuthorization, + ~delayInMs, + ~endTimestampNanos, + ) + }) + } } let retrieveStatus = async (~publishableKey, ~customPodUri, pollID, logger, ~sdkAuthorization) => { @@ -838,6 +866,57 @@ let rec intentCall = ( ("nextActionData", nextActionData), ]->getJsonFromArrayOfJson resolve(response) + } else if intent.nextAction.type_ === "wait_screen_information" { + let displayToTimestamp = switch intent.nextAction.display_to_timestamp { + | Some(timestamp) => Some(timestamp) + | None => + let fifteenMinsNanos = Date.now() *. 1000000.0 +. 15.0 *. 60.0 *. 1000000000.0 + Some(fifteenMinsNanos) + } + let pollConfig = + intent.nextAction.poll_config->Option.getOr(PaymentConfirmTypes.defaultPollConfig) + let headersDict = headers->Dict.fromArray + + handleLogging(~optLogger, ~value="", ~eventName=DISPLAY_WAIT_SCREEN, ~paymentMethod) + + if !isPaymentSession { + let metaData = + [("paymentMethod", paymentMethod->JSON.Encode.string)]->getJsonFromArrayOfJson + messageParentWindow([ + ("fullscreen", true->JSON.Encode.bool), + ("param", `paymentloader`->JSON.Encode.string), + ("iframeId", iframeId->JSON.Encode.string), + ("metadata", metaData), + ]) + + pollRetrievePaymentIntent( + clientSecret, + ~headers=headersDict, + ~publishableKey=confirmParam.publishableKey, + ~logger=optLogger->Option.getOr(LoggerUtils.defaultLoggerConfig), + ~customPodUri, + ~sdkAuthorization, + ~delayInMs=pollConfig.delay_in_secs * 1000, + ~endTimestampNanos=displayToTimestamp, + ) + ->Promise.then( + retrievedData => { + closePaymentLoaderIfAny() + postSubmitResponse(~jsonData=retrievedData, ~url=url.href) + Promise.resolve() + }, + ) + ->Promise.catch( + _ => { + closePaymentLoaderIfAny() + postSubmitResponse(~jsonData=data, ~url=url.href) + Promise.resolve() + }, + ) + ->ignore + } else { + resolve(data) + } } else { if !isPaymentSession { postFailedSubmitResponse( diff --git a/src/Utilities/RecoilAtoms.res b/src/Utilities/RecoilAtoms.res index cca5759bb..b19e85e49 100644 --- a/src/Utilities/RecoilAtoms.res +++ b/src/Utilities/RecoilAtoms.res @@ -74,12 +74,15 @@ let userVpaId = Recoil.atom("userVpaId", defaultFieldValues) let userPixKey = Recoil.atom("userPixKey", defaultFieldValues) let userPixCPF = Recoil.atom("userPixCPF", defaultFieldValues) let userPixCNPJ = Recoil.atom("userPixCNPJ", defaultFieldValues) +let userPixAccountNumber = Recoil.atom("userPixAccountNumber", defaultFieldValues) let userDocumentType = Recoil.atom("userDocumentType", "") let userDocumentNumber = Recoil.atom("userDocumentNumber", defaultFieldValues) let isCompleteCallbackUsed = Recoil.atom("isCompleteCallbackUsed", false) let isPaymentButtonHandlerProvidedAtom = Recoil.atom("isPaymentButtonHandlerProvidedAtom", false) let userBankAccountNumber = Recoil.atom("userBankAccountNumber", defaultFieldValues) let sourceBankAccountId = Recoil.atom("sourceBankAccountId", defaultFieldValues) +let userBranchCode = Recoil.atom("userBranchCode", defaultFieldValues) +let userBankIdentifier = Recoil.atom("userBankIdentifier", defaultFieldValues) type areOneClickWalletsRendered = { isGooglePay: bool, diff --git a/src/hyper-loader/Elements.res b/src/hyper-loader/Elements.res index 1403de678..0645e7a19 100644 --- a/src/hyper-loader/Elements.res +++ b/src/hyper-loader/Elements.res @@ -1419,6 +1419,7 @@ let make = ( setIframeRefForComponent, iframeRef, mountPostMessage, + ~locale=locale->Utils.getStringFromJson("auto"), ~redirectionFlags: RecoilAtomTypes.redirectionFlags, ~logger=Some(logger), ) diff --git a/src/hyper-loader/LoaderPaymentElement.res b/src/hyper-loader/LoaderPaymentElement.res index d1566d5bc..86541a615 100644 --- a/src/hyper-loader/LoaderPaymentElement.res +++ b/src/hyper-loader/LoaderPaymentElement.res @@ -14,12 +14,18 @@ let make = ( setIframeRef, iframeRef, mountPostMessage, + ~locale, ~isPaymentManagementElement=false, ~redirectionFlags: RecoilAtomTypes.redirectionFlags, ~logger: option, ) => { try { let logger = logger->Option.getOr(LoggerUtils.defaultLoggerConfig) + let updatedOptions = { + let dict = options->Utils.getDictFromJson->Dict.copy + dict->Dict.set("locale", locale->JSON.Encode.string) + dict->JSON.Encode.object + } let mountId = ref("") let setPaymentIframeRef = ref => { setIframeRef(ref) @@ -335,7 +341,7 @@ let make = ( [ ("fullScreenIframeMounted", true->JSON.Encode.bool), ("metadata", fullscreenMetadata.contents), - ("options", options), + ("options", updatedOptions), ]->Dict.fromArray, ) } @@ -344,7 +350,7 @@ let make = ( [ ("fullScreenIframeMounted", true->JSON.Encode.bool), ("metadata", fullscreenMetadata.contents), - ("options", options), + ("options", updatedOptions), ]->Dict.fromArray, ) let fullScreenEle = Window.querySelector(`#orca-fullscreen`) @@ -366,7 +372,7 @@ let make = ( mainElement->Window.iframePostMessage( [ ("fullScreenIframeMounted", false->JSON.Encode.bool), - ("options", options), + ("options", updatedOptions), ]->Dict.fromArray, ) } diff --git a/src/hyper-loader/PaymentMethodsManagementElements.res b/src/hyper-loader/PaymentMethodsManagementElements.res index 540617b7b..50de2c2ed 100644 --- a/src/hyper-loader/PaymentMethodsManagementElements.res +++ b/src/hyper-loader/PaymentMethodsManagementElements.res @@ -238,6 +238,7 @@ let make = ( setElementIframeRef, iframeRef, mountPostMessage, + ~locale=locale->Utils.getStringFromJson("auto"), ~isPaymentManagementElement=true, ~redirectionFlags=RecoilAtoms.defaultRedirectionFlags, ~logger=Some(logger), diff --git a/src/hyper-log-catcher/HyperLogger.res b/src/hyper-log-catcher/HyperLogger.res index 4c0cfa3c0..393d2d4a3 100644 --- a/src/hyper-log-catcher/HyperLogger.res +++ b/src/hyper-log-catcher/HyperLogger.res @@ -221,6 +221,7 @@ let make = (~sessionId=?, ~source: source, ~clientSecret=?, ~merchantId=?, ~meta REDIRECTING_USER, DISPLAY_BANK_TRANSFER_INFO_PAGE, DISPLAY_QR_CODE_INFO_PAGE, + DISPLAY_WAIT_SCREEN, DISPLAY_VOUCHER, LOADER_CHANGED, PAYMENT_METHODS_CALL,