Add ButtonOptions support for the Google Pay button

This commit is contained in:
Daniel Dudzic 2024-11-07 01:00:53 +01:00
parent 7832f853ff
commit b117ff9b7c
No known key found for this signature in database
GPG key ID: 31B40D33E3465483
9 changed files with 305 additions and 93 deletions

View file

@ -170,6 +170,11 @@ export default class PaymentButton {
*/
#contextHandler;
/**
* Button attributes.
*/
#buttonAttributes;
/**
* Whether the current browser/website support the payment method.
*
@ -195,11 +200,12 @@ export default class PaymentButton {
/**
* Factory method to create a new PaymentButton while limiting a single instance per context.
*
* @param {string} context - Button context name.
* @param {unknown} externalHandler - Handler object.
* @param {Object} buttonConfig - Payment button specific configuration.
* @param {Object} ppcpConfig - Plugin wide configuration object.
* @param {unknown} contextHandler - Handler object.
* @param {string} context - Button context name.
* @param {unknown} externalHandler - Handler object.
* @param {Object} buttonConfig - Payment button specific configuration.
* @param {Object} ppcpConfig - Plugin wide configuration object.
* @param {unknown} contextHandler - Handler object.
* @param {Object} buttonAttributes - Button attributes.
* @return {PaymentButton} The button instance.
*/
static createButton(
@ -207,7 +213,8 @@ export default class PaymentButton {
externalHandler,
buttonConfig,
ppcpConfig,
contextHandler
contextHandler,
buttonAttributes
) {
const buttonInstances = getInstances();
const instanceKey = `${ this.methodId }.${ context }`;
@ -218,7 +225,8 @@ export default class PaymentButton {
externalHandler,
buttonConfig,
ppcpConfig,
contextHandler
contextHandler,
buttonAttributes
);
buttonInstances.set( instanceKey, button );
@ -262,18 +270,20 @@ export default class PaymentButton {
* to avoid multiple button instances handling the same context.
*
* @private
* @param {string} context - Button context name.
* @param {Object} externalHandler - Handler object.
* @param {Object} buttonConfig - Payment button specific configuration.
* @param {Object} ppcpConfig - Plugin wide configuration object.
* @param {Object} contextHandler - Handler object.
* @param {string} context - Button context name.
* @param {Object} externalHandler - Handler object.
* @param {Object} buttonConfig - Payment button specific configuration.
* @param {Object} ppcpConfig - Plugin wide configuration object.
* @param {Object} contextHandler - Handler object.
* @param {Object} buttonAttributes - Button attributes.
*/
constructor(
context,
externalHandler = null,
buttonConfig = {},
ppcpConfig = {},
contextHandler = null
contextHandler = null,
buttonAttributes = {}
) {
if ( this.methodId === PaymentButton.methodId ) {
throw new Error( 'Cannot initialize the PaymentButton base class' );
@ -291,6 +301,7 @@ export default class PaymentButton {
this.#ppcpConfig = ppcpConfig;
this.#externalHandler = externalHandler;
this.#contextHandler = contextHandler;
this.#buttonAttributes = buttonAttributes;
this.#logger = new ConsoleLogger( methodName, context );
@ -763,15 +774,20 @@ export default class PaymentButton {
const styleSelector = `style[data-hide-gateway="${ this.methodId }"]`;
const wrapperSelector = `#${ this.wrappers.Default }`;
const paymentMethodLi = document.querySelector(`.wc_payment_method.payment_method_${ this.methodId }`);
const paymentMethodLi = document.querySelector(
`.wc_payment_method.payment_method_${ this.methodId }`
);
document
.querySelectorAll( styleSelector )
.forEach( ( el ) => el.remove() );
if (paymentMethodLi.style.display === 'none' || paymentMethodLi.style.display === '') {
paymentMethodLi.style.display = 'block';
}
if (
paymentMethodLi.style.display === 'none' ||
paymentMethodLi.style.display === ''
) {
paymentMethodLi.style.display = 'block';
}
document
.querySelectorAll( wrapperSelector )
@ -843,7 +859,7 @@ export default class PaymentButton {
this.removeButton();
}
this.log( 'addButton', button );
this.log( 'insertButton', button );
this.#button = button;
wrapper.appendChild( this.#button );