diff --git a/modules.local/ppcp-button/resources/js/button.js b/modules.local/ppcp-button/resources/js/button.js index 3c388425a..7f387e402 100644 --- a/modules.local/ppcp-button/resources/js/button.js +++ b/modules.local/ppcp-button/resources/js/button.js @@ -3,10 +3,12 @@ import SingleProductBootstap from './modules/ContextBootstrap/SingleProductBoots import CartBootstrap from './modules/ContextBootstrap/CartBootstap'; import CheckoutBootstap from './modules/ContextBootstrap/CheckoutBootstap'; import Renderer from './modules/Renderer/Renderer'; +import ErrorHandler from './modules/ErrorHandler'; import CreditCardRenderer from "./modules/Renderer/CreditCardRenderer"; const bootstrap = () => { - const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway); + const errorHandler = new ErrorHandler(); + const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler); const renderer = new Renderer(creditCardRenderer, PayPalCommerceGateway); const context = PayPalCommerceGateway.context; diff --git a/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index dcedd2f0e..b6ce754a1 100644 --- a/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules.local/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -1,7 +1,8 @@ class CreditCardRenderer { - constructor(defaultConfig) { + constructor(defaultConfig, errorHandler) { this.defaultConfig = defaultConfig; + this.errorHandler = errorHandler; } render(wrapper, contextConfig) { @@ -43,12 +44,23 @@ class CreditCardRenderer { 'submit', event => { event.preventDefault(); - hostedFields.submit({ - contingencies: ['3D_SECURE'] - }).then((payload) => { - payload.orderID = payload.orderId; - return contextConfig.onApprove(payload); + this.errorHandler.clear(); + const state = hostedFields.getState(); + const formValid = Object.keys(state.fields).every(function (key) { + return state.fields[key].isValid; }); + + if (formValid) { + + hostedFields.submit({ + contingencies: ['3D_SECURE'] + }).then((payload) => { + payload.orderID = payload.orderId; + return contextConfig.onApprove(payload); + }); + } else { + this.errorHandler.message(this.defaultConfig.hosted_fields.labels.fields_not_valid); + } } ); }); diff --git a/modules.local/ppcp-button/src/Assets/SmartButton.php b/modules.local/ppcp-button/src/Assets/SmartButton.php index a5c94a933..0a55842bd 100644 --- a/modules.local/ppcp-button/src/Assets/SmartButton.php +++ b/modules.local/ppcp-button/src/Assets/SmartButton.php @@ -272,6 +272,10 @@ class SmartButton implements SmartButtonInterface 'credit_card_number' => __('Credit Card Number', 'woocommerce-paypal-commerce-gateway'), 'cvv' => __('CVV', 'woocommerce-paypal-commerce-gateway'), 'mm_yyyy' => __('MM/YYYY', 'woocommerce-paypal-commerce-gateway'), + 'fields_not_valid' => __( + 'Unfortunatly, your credit card details are not valid.', + 'woocommerce-paypal-commerce-gateway' + ), ], ], ];