mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-07 19:54:15 +08:00
Refactor the Change buttons and the Watermark
This commit is contained in:
parent
c2831c2ab0
commit
522b27aea0
7 changed files with 207 additions and 147 deletions
|
@ -1,62 +1,96 @@
|
|||
import ReactDOM from 'react-dom/client';
|
||||
import { createElement, useEffect, createRoot } from '@wordpress/element';
|
||||
import { FastlaneWatermark } from '../components/FastlaneWatermark';
|
||||
|
||||
export const setupWatermark = ( fastlaneSdk, shouldIncludeAdditionalInfo ) => {
|
||||
const emailInput = document.getElementById( 'email' );
|
||||
let watermarkRoot = null;
|
||||
let watermarkContainer = null;
|
||||
|
||||
if ( emailInput ) {
|
||||
const emailLabel =
|
||||
emailInput.parentNode.querySelector( 'label[for="email"]' );
|
||||
watermarkContainer = document.createElement( 'div' );
|
||||
watermarkContainer.setAttribute(
|
||||
'class',
|
||||
'ppcp-axo-block-watermark-container'
|
||||
);
|
||||
|
||||
if ( emailLabel ) {
|
||||
emailLabel.parentNode.insertBefore(
|
||||
watermarkContainer,
|
||||
emailLabel.nextSibling
|
||||
);
|
||||
} else {
|
||||
emailInput.parentNode.appendChild( watermarkContainer );
|
||||
}
|
||||
|
||||
const watermarkElement = document.createElement( 'div' );
|
||||
watermarkContainer.appendChild( watermarkElement );
|
||||
|
||||
watermarkRoot = ReactDOM.createRoot( watermarkElement );
|
||||
watermarkRoot.render(
|
||||
<FastlaneWatermark
|
||||
fastlaneSdk={ fastlaneSdk }
|
||||
name="fastlane-watermark-email"
|
||||
includeAdditionalInfo={ shouldIncludeAdditionalInfo }
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
return { watermarkRoot, watermarkContainer, emailInput };
|
||||
};
|
||||
|
||||
export const cleanupWatermark = ( {
|
||||
watermarkRoot,
|
||||
watermarkContainer,
|
||||
emailInput,
|
||||
const WatermarkManager = ( {
|
||||
fastlaneSdk,
|
||||
shouldIncludeAdditionalInfo,
|
||||
onEmailSubmit,
|
||||
} ) => {
|
||||
if ( watermarkRoot && watermarkContainer ) {
|
||||
watermarkRoot.unmount();
|
||||
watermarkContainer.parentNode.removeChild( watermarkContainer );
|
||||
console.log( 'Fastlane watermark removed' );
|
||||
}
|
||||
if ( emailInput ) {
|
||||
emailInput.removeEventListener( 'keyup', async ( event ) => {
|
||||
const email = event.target.value;
|
||||
if ( email ) {
|
||||
await onEmailSubmit( email );
|
||||
useEffect( () => {
|
||||
const emailInput = document.getElementById( 'email' );
|
||||
let watermarkRoot = null;
|
||||
let watermarkContainer = null;
|
||||
|
||||
if ( emailInput ) {
|
||||
const emailLabel =
|
||||
emailInput.parentNode.querySelector( 'label[for="email"]' );
|
||||
watermarkContainer = document.createElement( 'div' );
|
||||
watermarkContainer.setAttribute(
|
||||
'class',
|
||||
'ppcp-axo-block-watermark-container'
|
||||
);
|
||||
|
||||
if ( emailLabel ) {
|
||||
emailLabel.parentNode.insertBefore(
|
||||
watermarkContainer,
|
||||
emailLabel.nextSibling
|
||||
);
|
||||
} else {
|
||||
emailInput.parentNode.appendChild( watermarkContainer );
|
||||
}
|
||||
} );
|
||||
|
||||
watermarkRoot = createRoot( watermarkContainer );
|
||||
watermarkRoot.render(
|
||||
createElement( FastlaneWatermark, {
|
||||
fastlaneSdk,
|
||||
name: 'fastlane-watermark-email',
|
||||
includeAdditionalInfo: shouldIncludeAdditionalInfo,
|
||||
} )
|
||||
);
|
||||
|
||||
const handleEmailInput = async ( event ) => {
|
||||
const email = event.target.value;
|
||||
if ( email ) {
|
||||
await onEmailSubmit( email );
|
||||
}
|
||||
};
|
||||
|
||||
emailInput.addEventListener( 'keyup', handleEmailInput );
|
||||
|
||||
// Cleanup function
|
||||
return () => {
|
||||
if ( watermarkRoot ) {
|
||||
watermarkRoot.unmount();
|
||||
}
|
||||
if ( watermarkContainer && watermarkContainer.parentNode ) {
|
||||
watermarkContainer.parentNode.removeChild(
|
||||
watermarkContainer
|
||||
);
|
||||
}
|
||||
if ( emailInput ) {
|
||||
emailInput.removeEventListener( 'keyup', handleEmailInput );
|
||||
}
|
||||
console.log( 'Fastlane watermark removed' );
|
||||
};
|
||||
}
|
||||
}, [ fastlaneSdk, shouldIncludeAdditionalInfo, onEmailSubmit ] );
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
export const setupWatermark = (
|
||||
fastlaneSdk,
|
||||
shouldIncludeAdditionalInfo,
|
||||
onEmailSubmit
|
||||
) => {
|
||||
const container = document.createElement( 'div' );
|
||||
document.body.appendChild( container );
|
||||
createRoot( container ).render(
|
||||
createElement( WatermarkManager, {
|
||||
fastlaneSdk,
|
||||
shouldIncludeAdditionalInfo,
|
||||
onEmailSubmit,
|
||||
} )
|
||||
);
|
||||
};
|
||||
|
||||
export const removeWatermark = () => {
|
||||
const watermarkContainer = document.querySelector(
|
||||
'.ppcp-axo-block-watermark-container'
|
||||
);
|
||||
if ( watermarkContainer && watermarkContainer.parentNode ) {
|
||||
watermarkContainer.parentNode.removeChild( watermarkContainer );
|
||||
}
|
||||
};
|
||||
|
||||
export default WatermarkManager;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue