Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 31 additions & 1 deletion src/CollectWidget.res
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,21 @@ let make = (
getDefaultsAndValidity(payoutDynamicFields, supportedCardBrands)
})
->Option.map(((values, validity)) => {
setFormData(_ => values)
let last_name =
values
->Dict.get(BillingAddress(FullName(LastName))->getPaymentMethodDataFieldKey)
->Option.getOr("")
let first_name =
values
->Dict.get(BillingAddress(FullName(FirstName))->getPaymentMethodDataFieldKey)
->Option.getOr("")
let copy = values->Dict.copy
if last_name->String.length == 0 {
copy->Dict.set(BillingAddress(FullName(LastName))->getPaymentMethodDataFieldKey, first_name)
} else if first_name->String.length == 0 {
copy->Dict.set(BillingAddress(FullName(FirstName))->getPaymentMethodDataFieldKey, last_name)
}
setFormData(_ => copy)
setValidityDict(_ => validity)
})
->ignore
Expand Down Expand Up @@ -161,6 +175,22 @@ let make = (
}
setFormData(PayoutMethodData(CardBrand)->getPaymentMethodDataFieldKey, newCardBrand)
}
| BillingAddress(FullName(FirstName)) => {
let firstNameKey = BillingAddress(FullName(FirstName))->getPaymentMethodDataFieldKey
let lastNameKey = BillingAddress(FullName(LastName))->getPaymentMethodDataFieldKey
let nameSplits = value->String.trim->String.split(" ")
let firstName = nameSplits->Array.get(0)->Option.getOr("")
let lastName =
nameSplits
->Array.slice(~start=1, ~end=nameSplits->Array.length)
->Array.join(" ")
setFormData(firstNameKey, firstName)
if lastName->String.length > 0 {
setFormData(lastNameKey, lastName)
} else {
setFormData(lastNameKey, firstName)
}
}
| _ => ()
}
setFormData(key->getPaymentMethodDataFieldKey, updatedValue)
Expand Down
14 changes: 12 additions & 2 deletions src/FormViewJourney.res
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,12 @@ let make = (

/// SCREEN #3 - ADDRESS COLLECION (OPTIONAL)
| AddressForm(addressFields) => {
let incompleteAddressFieldsCount =
addressFields
->Array.filter(addressField =>
addressField.value == None && addressField.fieldType != FullName(LastName)
)
->Array.length
let onSaveHandler = () => {
let (fieldValidity, isAddressValid) = addressFields->Array.reduce((Dict.make(), true), (
(fieldValidity, isAddressValid),
Expand All @@ -269,10 +275,14 @@ let make = (
<>
{renderHeader(localeString.billingDetailsText, true)}
<div className=contentSubHeaderClasses>
{React.string(localeString.formSubheaderBillingDetailsText)}
{incompleteAddressFieldsCount == 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we skip billing address screen in case nothing has to be entered?

For journey view - skip the billing address screen
For tabs view - don't render the billing address section

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we can

? React.string(localeString.formNoFieldsToEnterText)
: React.string(localeString.formSubheaderBillingDetailsText)}
</div>
<div className="mt-2.5">
{addressFields->renderAddressForm->React.array}
{incompleteAddressFieldsCount == 0
? React.null
: addressFields->renderAddressForm->React.array}
{renderSaveButton(_ => onSaveHandler())}
</div>
</>
Expand Down
4 changes: 3 additions & 1 deletion src/FormViewTabs.res
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,9 @@ let make = (
{payoutDynamicFields.address
->Option.map(addressFields => {
let fieldsToCollect =
addressFields->Array.filter(addressField => addressField.value == None)
addressFields->Array.filter(addressField =>
addressField.value == None && addressField.fieldType != FullName(LastName)
)
if fieldsToCollect->Array.length > 0 {
let formFields = addressFields->renderAddressForm
<>
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/ArabicLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `إرسال`,
formSubmittingText: `جاري الإرسال`,
formSubheaderBillingDetailsText: `أدخل عنوان الفوترة الخاص بك`,
formNoFieldsToEnterText: `لا توجد حقول للإدخال، يرجى الانتقال إلى الخطوة التالية.`,
formSubheaderCardText: `تفاصيل بطاقتك`,
formSubheaderAccountText: pmLabel => ` ${pmLabel} الخاصة بك`,
formHeaderReviewText: `مراجعة`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/CatalanLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Enviar`,
formSubmittingText: `Enviant`,
formSubheaderBillingDetailsText: `Introdueix la teva adreça de facturació`,
formNoFieldsToEnterText: `No hi ha camps per introduir, si us plau continua al següent pas.`,
formSubheaderCardText: `Detalls de la teva targeta`,
formSubheaderAccountText: pmLabel => `El teu ${pmLabel}`,
formHeaderReviewText: `Revisar`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/ChineseLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `提交`,
formSubmittingText: `提交中`,
formSubheaderBillingDetailsText: `输入您的账单地址`,
formNoFieldsToEnterText: `没有要输入的字段,请继续下一步。`,
formSubheaderCardText: `您的卡信息`,
formSubheaderAccountText: pmLabel => `您的${pmLabel}`,
formHeaderReviewText: `审核`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/DeutschLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Absenden`,
formSubmittingText: `Wird gesendet`,
formSubheaderBillingDetailsText: `Geben Sie Ihre Rechnungsadresse ein`,
formNoFieldsToEnterText: `Keine Felder einzugeben. Bitte fahren Sie mit dem nächsten Schritt fort.`,
formSubheaderCardText: `Ihre Kartendetails`,
formSubheaderAccountText: pmLabel => `Ihr ${pmLabel}`,
formHeaderReviewText: `Überprüfen`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/DutchLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Indienen`,
formSubmittingText: `Indienen`,
formSubheaderBillingDetailsText: `Voer uw factuuradres in`,
formNoFieldsToEnterText: `Geen velden om in te voeren, ga alstublieft naar de volgende stap.`,
formSubheaderCardText: `Uw kaartgegevens`,
formSubheaderAccountText: pmLabel => `Uw ${pmLabel}`,
formHeaderReviewText: `Beoordelen`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/EnglishGBLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Submit`,
formSubmittingText: `Submitting`,
formSubheaderBillingDetailsText: `Enter your billing address`,
formNoFieldsToEnterText: `No fields to enter, please proceed to the next step.`,
formSubheaderCardText: `Your card details`,
formSubheaderAccountText: pmLabel => `Your ${pmLabel}`,
formHeaderReviewText: `Review`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/EnglishLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Submit`,
formSubmittingText: `Submitting`,
formSubheaderBillingDetailsText: `Enter your billing address`,
formNoFieldsToEnterText: `No fields to enter, please proceed to next step.`,
formSubheaderCardText: `Your card details`,
formSubheaderAccountText: pmLabel => `Your ${pmLabel}`,
formHeaderReviewText: `Review`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/FrenchBelgiumLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Soumettre`,
formSubmittingText: `En cours de soumission`,
formSubheaderBillingDetailsText: `Entrez votre adresse de facturation`,
formNoFieldsToEnterText: `Aucun champ à saisir, veuillez passer à l'étape suivante.`,
formSubheaderCardText: `Les détails de votre carte`,
formSubheaderAccountText: pmLabel => `Votre ${pmLabel}`,
formHeaderReviewText: `Réviser`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/FrenchLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Soumettre`,
formSubmittingText: `En cours de soumission`,
formSubheaderBillingDetailsText: `Entrez votre adresse de facturation`,
formNoFieldsToEnterText: `Aucun champ à saisir, veuillez passer à l'étape suivante.`,
formSubheaderCardText: `Les détails de votre carte`,
formSubheaderAccountText: pmLabel => `Votre ${pmLabel}`,
formHeaderReviewText: `Réviser`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/HebrewLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `שלח`,
formSubmittingText: `שולח`,
formSubheaderBillingDetailsText: `הזן את כתובת החיוב שלך`,
formNoFieldsToEnterText: `אין שדות להזנה, אנא המשך לשלב הבא.`,
formSubheaderCardText: `פרטי הכרטיס שלך`,
formSubheaderAccountText: pmLabel => `ה-${pmLabel} שלך`,
formHeaderReviewText: `סקירה`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/ItalianLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Invia`,
formSubmittingText: `Invio in corso`,
formSubheaderBillingDetailsText: `Inserisci il tuo indirizzo di fatturazione`,
formNoFieldsToEnterText: `Nessun campo da inserire, per favore procedi al passaggio successivo.`,
formSubheaderCardText: `Dettagli della tua carta`,
formSubheaderAccountText: pmLabel => `Il tuo ${pmLabel}`,
formHeaderReviewText: `Rivedi`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/JapaneseLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `提出`,
formSubmittingText: `提出中`,
formSubheaderBillingDetailsText: `請輸入您的帳單地址`,
formNoFieldsToEnterText: `入力するフィールドはありません。次のステップに進んでください。`,
formSubheaderCardText: `カードの詳細`,
formSubheaderAccountText: pmLabel => `あなたの${pmLabel}`,
formHeaderReviewText: `レビュー`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/LocaleStringTypes.res
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ type localeStrings = {
formSubmitText: string,
formSubmittingText: string,
formSubheaderBillingDetailsText: string,
formNoFieldsToEnterText: string,
formSubheaderCardText: string,
formSubheaderAccountText: string => string,
formHeaderReviewText: string,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/PolishLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Zatwierdź`,
formSubmittingText: `Zatwierdzanie`,
formSubheaderBillingDetailsText: `Wprowadź swój adres rozliczeniowy`,
formNoFieldsToEnterText: `Brak pól do wprowadzenia, przejdź proszę do następnego kroku.`,
formSubheaderCardText: `Dane twojej karty`,
formSubheaderAccountText: pmLabel => `Twoje ${pmLabel}`,
formHeaderReviewText: `Przegląd`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/PortugueseLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Enviar`,
formSubmittingText: `Enviando`,
formSubheaderBillingDetailsText: `Insira o seu endereço de faturamento`,
formNoFieldsToEnterText: `Nenhum campo para inserir, por favor prossiga para o próximo passo.`,
formSubheaderCardText: `Detalhes do seu cartão`,
formSubheaderAccountText: pmLabel => `O seu ${pmLabel}`,
formHeaderReviewText: `Revisar`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/RussianLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Отправить`,
formSubmittingText: `Отправка`,
formSubheaderBillingDetailsText: `Введите ваш адрес для выставления счета`,
formNoFieldsToEnterText: `Нет полей для ввода. Пожалуйста, переходите к следующему шагу.`,
formSubheaderCardText: `Данные вашей карты`,
formSubheaderAccountText: pmLabel => `Ваш ${pmLabel}`,
formHeaderReviewText: `Обзор`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/SpanishLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Enviar`,
formSubmittingText: `Enviando`,
formSubheaderBillingDetailsText: `Ingrese su dirección de facturación`,
formNoFieldsToEnterText: `No hay campos que introducir, por favor continúe al siguiente paso.`,
formSubheaderCardText: `Detalles de tu tarjeta`,
formSubheaderAccountText: pmLabel => `Tu ${pmLabel}`,
formHeaderReviewText: `Revisar`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/SwedishLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: `Skicka`,
formSubmittingText: `Skickar`,
formSubheaderBillingDetailsText: `Ange din faktureringsadress`,
formNoFieldsToEnterText: `Inga fält att fylla i, vänligen fortsätt till nästa steg.`,
formSubheaderCardText: `Dina kortdetaljer`,
formSubheaderAccountText: pmLabel => `Ditt ${pmLabel}`,
formHeaderReviewText: `Granska`,
Expand Down
1 change: 1 addition & 0 deletions src/LocaleStrings/TraditionalChineseLocale.res
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ let localeStrings: LocaleStringTypes.localeStrings = {
formSubmitText: "提交",
formSubmittingText: "提交中",
formSubheaderBillingDetailsText: "輸入您的帳單地址",
formNoFieldsToEnterText: "沒有欄位需要輸入,請繼續下一步。",
formSubheaderCardText: "您的卡片詳細信息",
formSubheaderAccountText: pmLabel => `您的 ${pmLabel}`,
formHeaderReviewText: "審核",
Expand Down
67 changes: 42 additions & 25 deletions src/Utilities/PaymentMethodCollectUtils.res
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,8 @@ let getPaymentMethodDataFieldKey = (key): string =>
| BillingAddress(b) =>
switch b {
| Email => "billing.address.email"
| FullName(_) => "billing.address.fullName"
| FullName(FirstName) => "billing.address.firstName"
| FullName(LastName) => "billing.address.lastName"
| CountryCode => "billing.address.countryCode"
| PhoneNumber => "billing.address.phoneNumber"
| PhoneCountryCode => "billing.address.phoneCountryCode"
Expand Down Expand Up @@ -425,6 +426,12 @@ let getPaymentMethodDataErrorString = (
| (PayoutMethodData(CardExpDate(_)), false) => localeString.inCompleteExpiryErrorText
| (PayoutMethodData(CardExpDate(_)), true) => localeString.pastExpiryErrorText
| (PayoutMethodData(ACHRoutingNumber), false) => localeString.formFieldInvalidRoutingNumber
| (PayoutMethodData(ACHAccountNumber), _) =>
if value->String.trim->String.length === 0 {
localeString.accountNumberText->localeString.nameEmptyText
} else {
localeString.accountNumberInvalidText
}
| (PayoutMethodData(BacsSortCode), _) =>
if value->String.trim->String.length === 0 {
localeString.sortCodeText->localeString.nameEmptyText
Expand Down Expand Up @@ -922,33 +929,43 @@ let processAddressFields = (
(dataArr, keys)
}
| FullName(LastName) => {
let key = BillingAddress(FullName(FirstName))
let lastNameKey = BillingAddress(FullName(LastName))
let info: dynamicFieldInfo = BillingAddress(dynamicFieldInfo)
let fieldKey = key->getPaymentMethodDataFieldKey
paymentMethodDataDict
->Dict.get(fieldKey)
->Option.map(value => {
let nameSplits = value->String.split(" ")
let lastName =
nameSplits
->Array.slice(~start=1, ~end=nameSplits->Array.length)
->Array.join(" ")
if lastName->String.length > 0 {
dataArr->Array.push((info, lastName))
// Use first name as last name ?
} else {
nameSplits
->Array.get(0)
->Option.map(
firstName => {
dataArr->Array.push((info, firstName))
},
)
let lastNameFieldKey = lastNameKey->getPaymentMethodDataFieldKey

// First try to get lastName from direct lastName field
let lastNameValue = paymentMethodDataDict->Dict.get(lastNameFieldKey)

switch lastNameValue {
| Some(lastName) if lastName->String.trim->String.length > 0 => {
dataArr->Array.push((info, lastName->String.trim))
keys->Array.push(lastNameFieldKey)
}
| _ => {
// Fallback: split firstName field if lastName is empty
let firstNameKey = BillingAddress(FullName(FirstName))
let firstNameFieldKey = firstNameKey->getPaymentMethodDataFieldKey
paymentMethodDataDict
->Dict.get(firstNameFieldKey)
->Option.map(value => {
let nameSplits = value->String.split(" ")
let lastName =
nameSplits
->Array.slice(~start=1, ~end=nameSplits->Array.length)
->Array.join(" ")
if lastName->String.length > 0 {
dataArr->Array.push((info, lastName))
} else {
nameSplits
->Array.get(0)
->Option.map(firstName => dataArr->Array.push((info, firstName)))
->ignore
}
})
->ignore
keys->Array.push(firstNameFieldKey)
}
})
->ignore
keys->Array.push(fieldKey)
}
(dataArr, keys)
}
| _ => {
Expand Down
Loading