2024-09-06 11:33:01 +02:00
|
|
|
import { createElement, useEffect, createRoot } from '@wordpress/element';
|
2024-09-10 12:03:50 +02:00
|
|
|
import { useSelect } from '@wordpress/data';
|
2024-09-05 21:17:36 +02:00
|
|
|
import { FastlaneWatermark } from '../components/FastlaneWatermark';
|
2024-09-10 12:03:50 +02:00
|
|
|
import { STORE_NAME } from '../stores/axoStore';
|
|
|
|
|
|
|
|
let watermarkReference = {
|
|
|
|
container: null,
|
|
|
|
root: null,
|
|
|
|
};
|
|
|
|
|
2024-09-11 00:39:09 +02:00
|
|
|
const WatermarkManager = ( { fastlaneSdk, isLoaded } ) => {
|
2024-09-10 12:03:50 +02:00
|
|
|
const isGuest = useSelect( ( select ) =>
|
|
|
|
select( STORE_NAME ).getIsGuest()
|
|
|
|
);
|
|
|
|
const isAxoActive = useSelect( ( select ) =>
|
|
|
|
select( STORE_NAME ).getIsAxoActive()
|
|
|
|
);
|
2024-09-11 00:39:09 +02:00
|
|
|
const isAxoScriptLoaded = useSelect( ( select ) =>
|
|
|
|
select( STORE_NAME ).isAxoScriptLoaded()
|
|
|
|
);
|
2024-09-05 21:17:36 +02:00
|
|
|
|
2024-09-06 11:33:01 +02:00
|
|
|
useEffect( () => {
|
2024-09-11 00:39:09 +02:00
|
|
|
const createWatermark = () => {
|
|
|
|
const textInputContainer = document.querySelector(
|
|
|
|
'.wp-block-woocommerce-checkout-contact-information-block .wc-block-components-text-input'
|
2024-09-10 18:46:27 +02:00
|
|
|
);
|
2024-09-06 11:33:01 +02:00
|
|
|
|
2024-09-11 00:39:09 +02:00
|
|
|
if ( textInputContainer && ! watermarkReference.container ) {
|
|
|
|
const emailInput = textInputContainer.querySelector(
|
|
|
|
'input[type="email"]'
|
|
|
|
);
|
|
|
|
|
|
|
|
if ( emailInput ) {
|
2024-09-10 18:46:27 +02:00
|
|
|
watermarkReference.container =
|
|
|
|
document.createElement( 'div' );
|
|
|
|
watermarkReference.container.setAttribute(
|
|
|
|
'class',
|
|
|
|
'wc-block-checkout-axo-block-watermark-container'
|
2024-09-10 12:03:50 +02:00
|
|
|
);
|
2024-09-10 18:46:27 +02:00
|
|
|
|
2024-09-10 12:03:50 +02:00
|
|
|
emailInput.parentNode.insertBefore(
|
|
|
|
watermarkReference.container,
|
|
|
|
emailInput.nextSibling
|
|
|
|
);
|
2024-09-06 11:33:01 +02:00
|
|
|
|
2024-09-10 18:46:27 +02:00
|
|
|
watermarkReference.root = createRoot(
|
|
|
|
watermarkReference.container
|
|
|
|
);
|
|
|
|
}
|
2024-09-11 00:39:09 +02:00
|
|
|
}
|
2024-09-06 11:33:01 +02:00
|
|
|
|
2024-09-11 00:39:09 +02:00
|
|
|
if ( watermarkReference.root ) {
|
|
|
|
if ( ! isAxoActive && ! isAxoScriptLoaded ) {
|
|
|
|
watermarkReference.root.render(
|
|
|
|
createElement( 'span', {
|
|
|
|
className: 'wc-block-components-spinner',
|
|
|
|
'aria-hidden': 'true',
|
|
|
|
} )
|
|
|
|
);
|
|
|
|
} else if ( isAxoActive ) {
|
2024-09-10 18:46:27 +02:00
|
|
|
watermarkReference.root.render(
|
|
|
|
createElement( FastlaneWatermark, {
|
|
|
|
fastlaneSdk,
|
|
|
|
name: 'fastlane-watermark-email',
|
|
|
|
includeAdditionalInfo: isGuest,
|
|
|
|
} )
|
|
|
|
);
|
2024-09-11 00:39:09 +02:00
|
|
|
} else {
|
2024-09-10 18:46:27 +02:00
|
|
|
watermarkReference.root.render( null );
|
|
|
|
}
|
2024-09-10 12:03:50 +02:00
|
|
|
}
|
2024-09-11 00:39:09 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
const removeWatermark = () => {
|
|
|
|
if ( watermarkReference.root ) {
|
|
|
|
watermarkReference.root.unmount();
|
|
|
|
}
|
|
|
|
if ( watermarkReference.container ) {
|
|
|
|
if ( watermarkReference.container.parentNode ) {
|
|
|
|
watermarkReference.container.parentNode.removeChild(
|
|
|
|
watermarkReference.container
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
const detachedContainer = document.querySelector(
|
|
|
|
'.wc-block-checkout-axo-block-watermark-container'
|
|
|
|
);
|
|
|
|
if ( detachedContainer ) {
|
|
|
|
detachedContainer.remove();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
watermarkReference = { container: null, root: null };
|
|
|
|
};
|
|
|
|
|
|
|
|
if ( isAxoActive || ( ! isAxoActive && ! isAxoScriptLoaded ) ) {
|
|
|
|
createWatermark();
|
2024-09-10 12:03:50 +02:00
|
|
|
} else {
|
2024-09-11 00:39:09 +02:00
|
|
|
removeWatermark();
|
2024-09-05 21:17:36 +02:00
|
|
|
}
|
2024-09-11 00:39:09 +02:00
|
|
|
|
|
|
|
return removeWatermark;
|
|
|
|
}, [ fastlaneSdk, isGuest, isAxoActive, isLoaded, isAxoScriptLoaded ] );
|
2024-09-05 21:17:36 +02:00
|
|
|
|
2024-09-06 11:33:01 +02:00
|
|
|
return null;
|
|
|
|
};
|
2024-09-05 21:17:36 +02:00
|
|
|
|
2024-09-10 12:03:50 +02:00
|
|
|
export const setupWatermark = ( fastlaneSdk ) => {
|
2024-09-06 11:33:01 +02:00
|
|
|
const container = document.createElement( 'div' );
|
|
|
|
document.body.appendChild( container );
|
2024-09-11 00:39:09 +02:00
|
|
|
const root = createRoot( container );
|
|
|
|
root.render( createElement( WatermarkManager, { fastlaneSdk } ) );
|
|
|
|
|
|
|
|
return () => {
|
|
|
|
root.unmount();
|
|
|
|
if ( container && container.parentNode ) {
|
|
|
|
container.parentNode.removeChild( container );
|
|
|
|
}
|
|
|
|
};
|
2024-09-05 21:17:36 +02:00
|
|
|
};
|
|
|
|
|
2024-09-06 11:33:01 +02:00
|
|
|
export const removeWatermark = () => {
|
2024-09-10 12:03:50 +02:00
|
|
|
if ( watermarkReference.root ) {
|
|
|
|
watermarkReference.root.unmount();
|
|
|
|
}
|
2024-09-11 00:39:09 +02:00
|
|
|
if ( watermarkReference.container ) {
|
|
|
|
if ( watermarkReference.container.parentNode ) {
|
|
|
|
watermarkReference.container.parentNode.removeChild(
|
|
|
|
watermarkReference.container
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
const detachedContainer = document.querySelector(
|
|
|
|
'.wc-block-checkout-axo-block-watermark-container'
|
|
|
|
);
|
|
|
|
if ( detachedContainer ) {
|
|
|
|
detachedContainer.remove();
|
|
|
|
}
|
|
|
|
}
|
2024-09-05 21:17:36 +02:00
|
|
|
}
|
2024-09-10 12:03:50 +02:00
|
|
|
watermarkReference = { container: null, root: null };
|
2024-09-05 21:17:36 +02:00
|
|
|
};
|
2024-09-06 11:33:01 +02:00
|
|
|
|
|
|
|
export default WatermarkManager;
|