From c007d7909c2793b266eb733c565a7ec52b87af4b Mon Sep 17 00:00:00 2001
From: Philipp Stracker
Date: Fri, 16 Aug 2024 18:45:49 +0200
Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Option=20to=20only=20set=20missing?=
=?UTF-8?q?=20billing=20details?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../resources/js/modules/Helper/PayerData.js | 10 +++++++---
modules/ppcp-googlepay/resources/js/GooglepayButton.js | 2 +-
2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/modules/ppcp-button/resources/js/modules/Helper/PayerData.js b/modules/ppcp-button/resources/js/modules/Helper/PayerData.js
index da7eca4d6..1f97309c1 100644
--- a/modules/ppcp-button/resources/js/modules/Helper/PayerData.js
+++ b/modules/ppcp-button/resources/js/modules/Helper/PayerData.js
@@ -109,9 +109,13 @@ export const payerData = () => {
/**
* Updates the DOM with specific payer details.
*
- * @param {PayerDetails} newData - New payer details.
+ * @param {PayerDetails} newData - New payer details.
+ * @param {boolean} [overwriteExisting=false] - If set to true, all provided values will replace existing details. If false, or omitted, only undefined fields are updated.
*/
-export const setPayerData = ( newData ) => {
+export const setPayerData = ( newData, overwriteExisting = false ) => {
+ // TODO: Check if we can add some kind of "filter" to allow customization of the data.
+ // Or add JS flags like "onlyUpdateMissing".
+
const setValue = ( path, field, value ) => {
if ( null === value || undefined === value || ! field ) {
return;
@@ -121,7 +125,7 @@ export const setPayerData = ( newData ) => {
value = value.phone_number?.national_number;
}
- if ( field.value !== value ) {
+ if ( overwriteExisting || ! field.value ) {
field.value = value;
}
};
diff --git a/modules/ppcp-googlepay/resources/js/GooglepayButton.js b/modules/ppcp-googlepay/resources/js/GooglepayButton.js
index cfd5d4b07..d518c1850 100644
--- a/modules/ppcp-googlepay/resources/js/GooglepayButton.js
+++ b/modules/ppcp-googlepay/resources/js/GooglepayButton.js
@@ -634,8 +634,8 @@ class GooglepayButton extends PaymentButton {
const propagatePayerDataToForm = () => {
const raw = paymentData?.paymentMethodData?.info?.billingAddress;
-
const payer = {
+ email_address: paymentData?.email,
name: {
given_name: raw.name.split( ' ' )[ 0 ], // Assuming first name is the first part
surname: raw.name.split( ' ' ).slice( 1 ).join( ' ' ), // Assuming last name is the rest