2020-04-30 15:28:48 +03:00
|
|
|
import ErrorHandler from '../ErrorHandler';
|
|
|
|
import CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler';
|
2020-04-10 10:34:49 +03:00
|
|
|
|
2020-04-08 18:50:29 +03:00
|
|
|
class CheckoutBootstap {
|
2020-09-28 14:05:02 +03:00
|
|
|
constructor(gateway, renderer, messages, spinner) {
|
2020-04-09 12:56:05 +03:00
|
|
|
this.gateway = gateway;
|
2020-04-09 12:23:44 +03:00
|
|
|
this.renderer = renderer;
|
2020-09-28 14:05:02 +03:00
|
|
|
this.messages = messages;
|
|
|
|
this.spinner = spinner;
|
2021-11-10 12:56:53 +02:00
|
|
|
|
|
|
|
this.standardOrderButtonSelector = '#place_order';
|
2020-04-08 18:50:29 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
init() {
|
2020-04-09 18:45:49 +03:00
|
|
|
this.render();
|
2020-04-09 11:54:19 +03:00
|
|
|
|
2021-11-11 10:57:17 +02:00
|
|
|
// Unselect saved card.
|
|
|
|
// WC saves form values, so with our current UI it would be a bit weird
|
|
|
|
// if the user paid with saved, then after some time tries to pay again,
|
|
|
|
// but wants to enter a new card, and to do that they have to choose “Select payment” in the list.
|
|
|
|
jQuery('#saved-credit-card').val(jQuery('#saved-credit-card option:first').val());
|
|
|
|
|
2020-04-09 11:54:19 +03:00
|
|
|
jQuery(document.body).on('updated_checkout', () => {
|
2021-04-20 11:56:27 +02:00
|
|
|
this.render()
|
2020-04-09 11:54:19 +03:00
|
|
|
});
|
|
|
|
|
2020-04-10 10:34:49 +03:00
|
|
|
jQuery(document.body).
|
2021-04-20 11:56:27 +02:00
|
|
|
on('updated_checkout payment_method_selected', () => {
|
|
|
|
this.switchBetweenPayPalandOrderButton()
|
|
|
|
this.displayPlaceOrderButtonForSavedCreditCards()
|
|
|
|
|
|
|
|
})
|
|
|
|
|
2021-09-14 11:24:27 +02:00
|
|
|
jQuery(document).on('hosted_fields_loaded', () => {
|
2021-09-09 17:28:16 +02:00
|
|
|
jQuery('#saved-credit-card').on('change', () => {
|
|
|
|
this.displayPlaceOrderButtonForSavedCreditCards()
|
|
|
|
})
|
2021-09-14 11:24:27 +02:00
|
|
|
});
|
2021-04-20 11:56:27 +02:00
|
|
|
|
|
|
|
this.switchBetweenPayPalandOrderButton()
|
|
|
|
this.displayPlaceOrderButtonForSavedCreditCards()
|
2020-04-08 18:50:29 +03:00
|
|
|
}
|
2020-04-09 10:49:37 +03:00
|
|
|
|
|
|
|
shouldRender() {
|
2020-04-09 12:56:05 +03:00
|
|
|
if (document.querySelector(this.gateway.button.cancel_wrapper)) {
|
2020-04-09 10:49:37 +03:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2020-08-20 08:12:51 +03:00
|
|
|
return document.querySelector(this.gateway.button.wrapper) !== null || document.querySelector(this.gateway.hosted_fields.wrapper) !== null;
|
2020-04-09 10:49:37 +03:00
|
|
|
}
|
2020-04-09 18:45:49 +03:00
|
|
|
|
|
|
|
render() {
|
2020-08-20 08:12:51 +03:00
|
|
|
if (!this.shouldRender()) {
|
|
|
|
return;
|
|
|
|
}
|
2020-08-20 08:20:37 +03:00
|
|
|
if (document.querySelector(this.gateway.hosted_fields.wrapper + '>div')) {
|
|
|
|
document.querySelector(this.gateway.hosted_fields.wrapper + '>div').setAttribute('style', '');
|
|
|
|
}
|
2020-04-10 10:34:49 +03:00
|
|
|
const actionHandler = new CheckoutActionHandler(
|
|
|
|
PayPalCommerceGateway,
|
2020-07-28 08:05:18 +03:00
|
|
|
new ErrorHandler(this.gateway.labels.error.generic),
|
2020-09-28 14:05:02 +03:00
|
|
|
this.spinner
|
2020-04-10 10:34:49 +03:00
|
|
|
);
|
|
|
|
|
2020-04-09 18:45:49 +03:00
|
|
|
this.renderer.render(
|
|
|
|
this.gateway.button.wrapper,
|
2020-04-30 15:28:48 +03:00
|
|
|
this.gateway.hosted_fields.wrapper,
|
2020-04-10 10:34:49 +03:00
|
|
|
actionHandler.configuration(),
|
2020-04-09 18:45:49 +03:00
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
switchBetweenPayPalandOrderButton() {
|
2021-11-10 16:27:00 +02:00
|
|
|
const currentPaymentMethod = this.currentPaymentMethod();
|
2020-04-09 18:45:49 +03:00
|
|
|
|
2020-08-18 11:38:41 +03:00
|
|
|
if (currentPaymentMethod !== 'ppcp-gateway' && currentPaymentMethod !== 'ppcp-credit-card-gateway') {
|
2020-04-09 18:45:49 +03:00
|
|
|
this.renderer.hideButtons(this.gateway.button.wrapper);
|
2020-08-19 10:27:53 +03:00
|
|
|
this.renderer.hideButtons(this.gateway.messages.wrapper);
|
2020-04-30 15:28:48 +03:00
|
|
|
this.renderer.hideButtons(this.gateway.hosted_fields.wrapper);
|
2021-11-10 12:56:53 +02:00
|
|
|
jQuery(this.standardOrderButtonSelector).show();
|
2020-04-09 18:45:49 +03:00
|
|
|
}
|
|
|
|
else {
|
2021-11-10 12:56:53 +02:00
|
|
|
jQuery(this.standardOrderButtonSelector).hide();
|
2020-08-18 11:38:41 +03:00
|
|
|
if (currentPaymentMethod === 'ppcp-gateway') {
|
|
|
|
this.renderer.showButtons(this.gateway.button.wrapper);
|
2020-08-19 10:27:53 +03:00
|
|
|
this.renderer.showButtons(this.gateway.messages.wrapper);
|
2021-04-20 11:56:27 +02:00
|
|
|
this.messages.render()
|
|
|
|
this.renderer.hideButtons(this.gateway.hosted_fields.wrapper)
|
2020-08-18 11:38:41 +03:00
|
|
|
}
|
|
|
|
if (currentPaymentMethod === 'ppcp-credit-card-gateway') {
|
2021-04-20 11:56:27 +02:00
|
|
|
this.renderer.hideButtons(this.gateway.button.wrapper)
|
|
|
|
this.renderer.hideButtons(this.gateway.messages.wrapper)
|
|
|
|
this.renderer.showButtons(this.gateway.hosted_fields.wrapper)
|
2020-08-18 11:38:41 +03:00
|
|
|
}
|
2020-04-09 18:45:49 +03:00
|
|
|
}
|
|
|
|
}
|
2021-04-20 11:56:27 +02:00
|
|
|
|
|
|
|
displayPlaceOrderButtonForSavedCreditCards() {
|
2021-11-10 16:27:00 +02:00
|
|
|
const currentPaymentMethod = this.currentPaymentMethod();
|
2021-04-20 14:27:37 +02:00
|
|
|
if (currentPaymentMethod !== 'ppcp-credit-card-gateway') {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2021-11-10 17:10:07 +02:00
|
|
|
if (this.isSavedCardSelected()) {
|
2021-04-20 11:56:27 +02:00
|
|
|
this.renderer.hideButtons(this.gateway.button.wrapper)
|
|
|
|
this.renderer.hideButtons(this.gateway.messages.wrapper)
|
|
|
|
this.renderer.hideButtons(this.gateway.hosted_fields.wrapper)
|
2021-11-10 12:56:53 +02:00
|
|
|
jQuery(this.standardOrderButtonSelector).show()
|
2021-09-09 17:28:16 +02:00
|
|
|
this.disableCreditCardFields()
|
2021-04-20 11:56:27 +02:00
|
|
|
} else {
|
2021-11-10 12:56:53 +02:00
|
|
|
jQuery(this.standardOrderButtonSelector).hide()
|
2021-04-20 11:56:27 +02:00
|
|
|
this.renderer.hideButtons(this.gateway.button.wrapper)
|
|
|
|
this.renderer.hideButtons(this.gateway.messages.wrapper)
|
|
|
|
this.renderer.showButtons(this.gateway.hosted_fields.wrapper)
|
2021-09-09 17:28:16 +02:00
|
|
|
this.enableCreditCardFields()
|
2021-04-20 11:56:27 +02:00
|
|
|
}
|
|
|
|
}
|
2021-09-09 17:28:16 +02:00
|
|
|
|
|
|
|
disableCreditCardFields() {
|
2021-09-14 11:44:49 +02:00
|
|
|
jQuery('label[for="ppcp-credit-card-gateway-card-number"]').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-gateway-card-number').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('label[for="ppcp-credit-card-gateway-card-expiry"]').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-gateway-card-expiry').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('label[for="ppcp-credit-card-gateway-card-cvc"]').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-gateway-card-cvc').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('label[for="vault"]').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-vault').addClass('ppcp-credit-card-gateway-form-field-disabled')
|
2021-09-09 17:28:16 +02:00
|
|
|
jQuery('#ppcp-credit-card-vault').attr("disabled", true)
|
2021-09-16 12:29:30 +02:00
|
|
|
this.renderer.disableCreditCardFields()
|
2021-09-09 17:28:16 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
enableCreditCardFields() {
|
2021-09-14 11:44:49 +02:00
|
|
|
jQuery('label[for="ppcp-credit-card-gateway-card-number"]').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-gateway-card-number').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('label[for="ppcp-credit-card-gateway-card-expiry"]').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-gateway-card-expiry').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('label[for="ppcp-credit-card-gateway-card-cvc"]').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-gateway-card-cvc').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('label[for="vault"]').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
|
|
|
jQuery('#ppcp-credit-card-vault').removeClass('ppcp-credit-card-gateway-form-field-disabled')
|
2021-09-09 17:28:16 +02:00
|
|
|
jQuery('#ppcp-credit-card-vault').attr("disabled", false)
|
2021-09-16 12:29:30 +02:00
|
|
|
this.renderer.enableCreditCardFields()
|
2021-09-09 17:28:16 +02:00
|
|
|
}
|
2021-11-10 16:27:00 +02:00
|
|
|
|
|
|
|
currentPaymentMethod() {
|
|
|
|
return jQuery('input[name="payment_method"]:checked').val();
|
|
|
|
}
|
2021-11-10 17:10:07 +02:00
|
|
|
|
|
|
|
isSavedCardSelected() {
|
|
|
|
const savedCardList = jQuery('#saved-credit-card');
|
|
|
|
return savedCardList.length && savedCardList.val() !== '';
|
|
|
|
}
|
2020-04-08 18:50:29 +03:00
|
|
|
}
|
|
|
|
|
2021-04-20 11:56:27 +02:00
|
|
|
export default CheckoutBootstap
|