Pass the Renderer as a dependency

This commit is contained in:
Mészáros Róbert 2020-04-09 12:23:44 +03:00
parent 986cec7fef
commit e3041ed5e6
6 changed files with 54 additions and 49 deletions

View file

@ -4,9 +4,11 @@ import MiniCartBootstap from './modules/MiniCartBootstap';
import SingleProductBootstap from './modules/SingleProductBootstap'; import SingleProductBootstap from './modules/SingleProductBootstap';
import CartBootstrap from './modules/CartBootstap'; import CartBootstrap from './modules/CartBootstap';
import CheckoutBootstap from './modules/CheckoutBootstap'; import CheckoutBootstap from './modules/CheckoutBootstap';
import Renderer from './modules/Renderer';
const bootstrap = () => { const bootstrap = () => {
const context = PayPalCommerceGateway.context; const context = PayPalCommerceGateway.context;
const renderer = new Renderer;
const errorHandler = new ErrorHandler(); const errorHandler = new ErrorHandler();
const defaultConfig = new CartConfig( const defaultConfig = new CartConfig(
PayPalCommerceGateway, PayPalCommerceGateway,
@ -14,27 +16,27 @@ const bootstrap = () => {
); );
if (context === 'mini-cart') { if (context === 'mini-cart') {
const miniCartBootstap = new MiniCartBootstap(defaultConfig); const miniCartBootstap = new MiniCartBootstap(renderer, defaultConfig);
miniCartBootstap.init(); miniCartBootstap.init();
} }
if (context === 'product') { if (context === 'product') {
const singleProductBootstap = new SingleProductBootstap(); const singleProductBootstap = new SingleProductBootstap(renderer);
const miniCartBootstap = new MiniCartBootstap(defaultConfig); const miniCartBootstap = new MiniCartBootstap(renderer, defaultConfig);
singleProductBootstap.init(); singleProductBootstap.init();
miniCartBootstap.init(); miniCartBootstap.init();
} }
if (context === 'cart') { if (context === 'cart') {
const cartBootstrap = new CartBootstrap(defaultConfig); const cartBootstrap = new CartBootstrap(renderer, defaultConfig);
cartBootstrap.init(); cartBootstrap.init();
} }
if (context === 'checkout') { if (context === 'checkout') {
const checkoutBootstap = new CheckoutBootstap(defaultConfig); const checkoutBootstap = new CheckoutBootstap(renderer, defaultConfig);
checkoutBootstap.init(); checkoutBootstap.init();
} }

View file

@ -1,7 +1,6 @@
import Renderer from './Renderer';
class CartBootstrap { class CartBootstrap {
constructor(configurator) { constructor(renderer, configurator) {
this.renderer = renderer;
this.configurator = configurator; this.configurator = configurator;
} }
@ -10,13 +9,14 @@ class CartBootstrap {
return; return;
} }
const renderer = new Renderer(PayPalCommerceGateway.button.wrapper);
jQuery(document.body).on('updated_cart_totals updated_checkout', () => { jQuery(document.body).on('updated_cart_totals updated_checkout', () => {
renderer.render(this.configurator.configuration()); this.renderer.render(this.configurator.configuration());
}); });
renderer.render(this.configurator.configuration()); this.renderer.render(
PayPalCommerceGateway.button.wrapper,
this.configurator.configuration(),
);
} }
shouldRender() { shouldRender() {

View file

@ -1,7 +1,6 @@
import Renderer from './Renderer';
class CheckoutBootstap { class CheckoutBootstap {
constructor(configurator) { constructor(renderer, configurator) {
this.renderer = renderer;
this.configurator = configurator; this.configurator = configurator;
} }
@ -10,23 +9,25 @@ class CheckoutBootstap {
return; return;
} }
const renderer = new Renderer(PayPalCommerceGateway.button.wrapper);
const toggleButtons = () => { const toggleButtons = () => {
const currentPaymentMethod = jQuery( const currentPaymentMethod = jQuery(
'input[name="payment_method"]:checked').val(); 'input[name="payment_method"]:checked').val();
if (currentPaymentMethod !== 'ppcp-gateway') { if (currentPaymentMethod !== 'ppcp-gateway') {
renderer.hideButtons(); this.renderer.hideButtons(PayPalCommerceGateway.button.wrapper);
jQuery('#place_order').show(); jQuery('#place_order').show();
} }
else { else {
renderer.showButtons(); this.renderer.showButtons(PayPalCommerceGateway.button.wrapper);
jQuery('#place_order').hide(); jQuery('#place_order').hide();
} }
}; };
jQuery(document.body).on('updated_checkout', () => { jQuery(document.body).on('updated_checkout', () => {
renderer.render(this.configurator.configuration()); this.renderer.render(
PayPalCommerceGateway.button.wrapper,
this.configurator.configuration(),
);
toggleButtons(); toggleButtons();
}); });
@ -34,7 +35,10 @@ class CheckoutBootstap {
toggleButtons(); toggleButtons();
}); });
renderer.render(this.configurator.configuration()); this.renderer.render(
PayPalCommerceGateway.button.wrapper,
this.configurator.configuration(),
);
} }
shouldRender() { shouldRender() {

View file

@ -1,7 +1,6 @@
import Renderer from './Renderer';
class MiniCartBootstap { class MiniCartBootstap {
constructor(configurator) { constructor(renderer, configurator) {
this.renderer = renderer;
this.configurator = configurator; this.configurator = configurator;
} }
@ -10,18 +9,19 @@ class MiniCartBootstap {
return; return;
} }
const renderer = new Renderer(PayPalCommerceGateway.button.mini_cart_wrapper);
jQuery(document.body). jQuery(document.body).
on('wc_fragments_loaded wc_fragments_refreshed', () => { on('wc_fragments_loaded wc_fragments_refreshed', () => {
renderer.render(this.configurator.configuration()); renderer.render(this.configurator.configuration());
}); });
renderer.render(this.configurator.configuration()); this.renderer.render(
PayPalCommerceGateway.button.mini_cart_wrapper,
this.configurator.configuration(),
);
} }
shouldRender() { shouldRender() {
return document.querySelector(PayPalCommerceGateway.button.mini_cart_wrapper) return document.querySelector(PayPalCommerceGateway.button.mini_cart_wrapper);
} }
} }

View file

@ -1,26 +1,16 @@
class Renderer { class Renderer {
render(wrapper, buttonConfig) {
constructor(wrapper)
{
this.wrapper = wrapper;
}
render(buttonConfig)
{
paypal.Buttons( paypal.Buttons(
buttonConfig buttonConfig,
).render(this.wrapper); ).render(wrapper);
} }
hideButtons() hideButtons(element) {
{ document.querySelector(element).style.display = 'none';
document.querySelector(this.wrapper).style.display = 'none';
} }
showButtons() showButtons(element) {
{ document.querySelector(element).style.display = 'block';
document.querySelector(this.wrapper).style.display = 'block';
} }
} }

View file

@ -1,15 +1,17 @@
import ErrorHandler from './ErrorHandler'; import ErrorHandler from './ErrorHandler';
import Renderer from './Renderer';
import UpdateCart from './UpdateCart'; import UpdateCart from './UpdateCart';
import SingleProductConfig from './SingleProductConfig'; import SingleProductConfig from './SingleProductConfig';
class SingleProductBootstap { class SingleProductBootstap {
constructor(renderer) {
this.renderer = renderer;
}
init() { init() {
if (!this.shouldRender()) { if (!this.shouldRender()) {
return; return;
} }
const renderer = new Renderer(PayPalCommerceGateway.button.wrapper);
const errorHandler = new ErrorHandler(); const errorHandler = new ErrorHandler();
const updateCart = new UpdateCart( const updateCart = new UpdateCart(
PayPalCommerceGateway.ajax.change_cart.endpoint, PayPalCommerceGateway.ajax.change_cart.endpoint,
@ -18,13 +20,20 @@ class SingleProductBootstap {
const configurator = new SingleProductConfig( const configurator = new SingleProductConfig(
PayPalCommerceGateway, PayPalCommerceGateway,
updateCart, updateCart,
renderer.showButtons.bind(renderer), () => {
renderer.hideButtons.bind(renderer), this.renderer.showButtons(PayPalCommerceGateway.button.wrapper);
},
() => {
this.renderer.hideButtons(PayPalCommerceGateway.button.wrapper);
},
document.querySelector('form.cart'), document.querySelector('form.cart'),
errorHandler, errorHandler,
); );
renderer.render(configurator.configuration()); this.renderer.render(
PayPalCommerceGateway.button.wrapper,
configurator.configuration(),
);
} }
shouldRender() { shouldRender() {