From 395102ef26e375dceae9b36471d429241ab18125 Mon Sep 17 00:00:00 2001 From: Alex P Date: Tue, 11 Jul 2023 16:52:46 +0300 Subject: [PATCH] Update Pay Later amount in checkout when cart total changes --- .../ContextBootstrap/CheckoutBootstap.js | 32 +++++++++++++++++-- .../js/modules/Renderer/MessageRenderer.js | 22 ------------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/modules/ppcp-button/resources/js/modules/ContextBootstrap/CheckoutBootstap.js b/modules/ppcp-button/resources/js/modules/ContextBootstrap/CheckoutBootstap.js index b426ac3ee..db1cba84f 100644 --- a/modules/ppcp-button/resources/js/modules/ContextBootstrap/CheckoutBootstap.js +++ b/modules/ppcp-button/resources/js/modules/ContextBootstrap/CheckoutBootstap.js @@ -15,6 +15,7 @@ class CheckoutBootstap { this.messages = messages; this.spinner = spinner; this.errorHandler = errorHandler; + this.lastAmount = this.gateway.messages.amount; this.standardOrderButtonSelector = ORDER_BUTTON_SELECTOR; @@ -36,6 +37,27 @@ class CheckoutBootstap { jQuery(document.body).on('updated_checkout', () => { this.render() this.handleButtonStatus(); + + if (this.shouldRenderMessages()) { // currently we need amount only for Pay Later + fetch( + this.gateway.ajax.cart_script_params.endpoint, + { + method: 'GET', + credentials: 'same-origin', + } + ) + .then(result => result.json()) + .then(result => { + if (! result.success) { + return; + } + + if (this.lastAmount !== result.data.amount) { + this.lastAmount = result.data.amount; + this.updateUi(); + } + }); + } }); jQuery(document.body).on('updated_checkout payment_method_selected', () => { @@ -117,8 +139,8 @@ class CheckoutBootstap { setVisible(wrapper, gatewayId === currentPaymentMethod); } - if (isPaypal && !isFreeTrial) { - this.messages.render(); + if (this.shouldRenderMessages()) { + this.messages.renderWithAmount(this.lastAmount); } if (isCard) { @@ -130,6 +152,12 @@ class CheckoutBootstap { } } + shouldRenderMessages() { + return getCurrentPaymentMethod() === PaymentMethods.PAYPAL + && !PayPalCommerceGateway.is_free_trial_cart + && this.messages.shouldRender(); + } + disableCreditCardFields() { jQuery('label[for="ppcp-credit-card-gateway-card-number"]').addClass('ppcp-credit-card-gateway-form-field-disabled') jQuery('#ppcp-credit-card-gateway-card-number').addClass('ppcp-credit-card-gateway-form-field-disabled') diff --git a/modules/ppcp-button/resources/js/modules/Renderer/MessageRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/MessageRenderer.js index 80c90c0ef..7b1577aad 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/MessageRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/MessageRenderer.js @@ -5,28 +5,6 @@ class MessageRenderer { this.optionsFingerprint = null; } - render() { - if (! this.shouldRender()) { - return; - } - - const options = { - amount: this.config.amount, - placement: this.config.placement, - style: this.config.style - }; - - if (this.optionsEqual(options)) { - return; - } - - paypal.Messages(options).render(this.config.wrapper); - - jQuery(document.body).on('updated_cart_totals', () => { - paypal.Messages(options).render(this.config.wrapper); - }); - } - renderWithAmount(amount) { if (! this.shouldRender()) { return;