mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 13:44:42 +08:00
Add memoizing and improve the code quality of the card change button
This commit is contained in:
parent
4b2da479f3
commit
c2831c2ab0
1 changed files with 58 additions and 0 deletions
|
@ -0,0 +1,58 @@
|
||||||
|
import { createElement, useEffect, createRoot } from '@wordpress/element';
|
||||||
|
|
||||||
|
const CardChangeButton = ( { onChangeButtonClick } ) =>
|
||||||
|
createElement(
|
||||||
|
'button',
|
||||||
|
{
|
||||||
|
className: 'wc-block-checkout-axo-block-card__edit',
|
||||||
|
'aria-label': 'Change billing details',
|
||||||
|
type: 'button',
|
||||||
|
onClick: onChangeButtonClick,
|
||||||
|
},
|
||||||
|
'Change'
|
||||||
|
);
|
||||||
|
|
||||||
|
const CardChangeButtonManager = ( { onChangeButtonClick } ) => {
|
||||||
|
useEffect( () => {
|
||||||
|
const radioLabelElement = document.getElementById(
|
||||||
|
'ppcp-axo-block-radio-label'
|
||||||
|
);
|
||||||
|
|
||||||
|
if ( radioLabelElement ) {
|
||||||
|
if (
|
||||||
|
! radioLabelElement.querySelector(
|
||||||
|
'.wc-block-checkout-axo-block-card__edit'
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
const buttonContainer = document.createElement( 'div' );
|
||||||
|
radioLabelElement.appendChild( buttonContainer );
|
||||||
|
|
||||||
|
const root = createRoot( buttonContainer );
|
||||||
|
root.render(
|
||||||
|
createElement( CardChangeButton, { onChangeButtonClick } )
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
const button = document.querySelector(
|
||||||
|
'.wc-block-checkout-axo-block-card__edit'
|
||||||
|
);
|
||||||
|
if ( button && button.parentNode ) {
|
||||||
|
button.parentNode.remove();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}, [ onChangeButtonClick ] );
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const injectCardChangeButton = ( onChangeButtonClick ) => {
|
||||||
|
const container = document.createElement( 'div' );
|
||||||
|
document.body.appendChild( container );
|
||||||
|
createRoot( container ).render(
|
||||||
|
createElement( CardChangeButtonManager, { onChangeButtonClick } )
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default CardChangeButtonManager;
|
Loading…
Add table
Add a link
Reference in a new issue