diff --git a/desktop/src/main/java/bisq/desktop/components/paymentmethods/SepaForm.java b/desktop/src/main/java/bisq/desktop/components/paymentmethods/SepaForm.java index b4e74e47bfc..802b375e407 100644 --- a/desktop/src/main/java/bisq/desktop/components/paymentmethods/SepaForm.java +++ b/desktop/src/main/java/bisq/desktop/components/paymentmethods/SepaForm.java @@ -20,9 +20,9 @@ import bisq.desktop.components.InputTextField; import bisq.desktop.util.FormBuilder; import bisq.desktop.util.Layout; +import bisq.desktop.util.normalization.IBANNormalizer; import bisq.desktop.util.validation.BICValidator; import bisq.desktop.util.validation.IBANValidator; -import bisq.desktop.util.normalization.IBANNormalizer; import bisq.core.account.witness.AccountAgeWitnessService; import bisq.core.locale.Country; @@ -47,6 +47,7 @@ import javafx.collections.FXCollections; import java.util.List; +import java.util.Optional; import static bisq.desktop.util.FormBuilder.addCompactTopLabelTextField; import static bisq.desktop.util.FormBuilder.addCompactTopLabelTextFieldWithCopyIcon; @@ -96,6 +97,8 @@ public void addFormForAddAccount() { updateFromInputs(); }); + + ibanInputTextField = FormBuilder.addInputTextField(gridPane, ++gridRow, IBAN); ibanInputTextField.setTextFormatter(new TextFormatter<>(new IBANNormalizer())); ibanInputTextField.setValidator(ibanValidator); @@ -104,6 +107,7 @@ public void addFormForAddAccount() { updateFromInputs(); }); + InputTextField bicInputTextField = FormBuilder.addInputTextField(gridPane, ++gridRow, BIC); bicInputTextField.setValidator(bicValidator); bicInputTextField.textProperty().addListener((ov, oldValue, newValue) -> { @@ -112,6 +116,8 @@ public void addFormForAddAccount() { }); + + ComboBox countryComboBox = addCountrySelection(); setCountryComboBoxAction(countryComboBox, sepaAccount); @@ -128,6 +134,31 @@ public void addFormForAddAccount() { sepaAccount.setCountry(country); } + ibanInputTextField.textProperty().addListener((ov, oldValue, newValue) -> { + if (ibanInputTextField.validate()) { + List countries = CountryUtil.getAllSepaCountries(); + String ibanCountryCode = newValue.substring(0, 2).toUpperCase(); + Optional ibanCountry = countries.stream() + .filter(c -> c.code.equals(ibanCountryCode)).findFirst(); + if (ibanCountry.isPresent()) + countryComboBox.setValue(ibanCountry.get()); + } + }); + + countryComboBox.valueProperty().addListener((ov, oldValue, newValue) -> { + if (ibanInputTextField.validate()) { + String ibanCountryCode = ibanInputTextField.getText(0, 2); + String comboBoxCountryCode = countryComboBox.getValue().code; + if (!ibanCountryCode.equals(comboBoxCountryCode)) { + InputValidator.ValidationResult result = new InputValidator + .ValidationResult(false, "Country code must match country of bank"); + ibanInputTextField.validationResultProperty().setValue(result); + } + } + }); + + + updateFromInputs(); }