mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-05 08:59:14 +08:00
Merge branch 'master' into pay-now
This commit is contained in:
commit
06728d616b
27 changed files with 1106 additions and 475 deletions
|
@ -8,10 +8,12 @@ import ErrorHandler from './modules/ErrorHandler';
|
|||
import CreditCardRenderer from "./modules/Renderer/CreditCardRenderer";
|
||||
import dataClientIdAttributeHandler from "./modules/DataClientIdAttributeHandler";
|
||||
import MessageRenderer from "./modules/Renderer/MessageRenderer";
|
||||
import Spinner from "./modules/Helper/Spinner";
|
||||
|
||||
const bootstrap = () => {
|
||||
const errorHandler = new ErrorHandler(PayPalCommerceGateway.labels.error.generic);
|
||||
const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler);
|
||||
const spinner = new Spinner();
|
||||
const creditCardRenderer = new CreditCardRenderer(PayPalCommerceGateway, errorHandler, spinner);
|
||||
const renderer = new Renderer(creditCardRenderer, PayPalCommerceGateway);
|
||||
const messageRenderer = new MessageRenderer(PayPalCommerceGateway.messages);
|
||||
const context = PayPalCommerceGateway.context;
|
||||
|
@ -47,7 +49,8 @@ const bootstrap = () => {
|
|||
const checkoutBootstap = new CheckoutBootstap(
|
||||
PayPalCommerceGateway,
|
||||
renderer,
|
||||
messageRenderer
|
||||
messageRenderer,
|
||||
spinner
|
||||
);
|
||||
|
||||
checkoutBootstap.init();
|
||||
|
|
|
@ -3,12 +3,14 @@ import {payerData} from "../Helper/PayerData";
|
|||
|
||||
class CheckoutActionHandler {
|
||||
|
||||
constructor(config, errorHandler) {
|
||||
constructor(config, errorHandler, spinner) {
|
||||
this.config = config;
|
||||
this.errorHandler = errorHandler;
|
||||
this.spinner = spinner;
|
||||
}
|
||||
|
||||
configuration() {
|
||||
const spinner = this.spinner;
|
||||
const createOrder = (data, actions) => {
|
||||
const payer = payerData();
|
||||
const bnCode = typeof this.config.bn_codes[this.config.context] !== 'undefined' ?
|
||||
|
@ -33,6 +35,7 @@ class CheckoutActionHandler {
|
|||
return res.json();
|
||||
}).then(function (data) {
|
||||
if (!data.success) {
|
||||
spinner.unblock();
|
||||
errorHandler.message(data.data.message, true);
|
||||
return;
|
||||
}
|
||||
|
@ -46,7 +49,7 @@ class CheckoutActionHandler {
|
|||
}
|
||||
return {
|
||||
createOrder,
|
||||
onApprove:onApprove(this, this.errorHandler),
|
||||
onApprove:onApprove(this, this.errorHandler, this.spinner),
|
||||
onError: (error) => {
|
||||
this.errorHandler.genericError();
|
||||
}
|
||||
|
|
|
@ -2,10 +2,11 @@ import ErrorHandler from '../ErrorHandler';
|
|||
import CheckoutActionHandler from '../ActionHandler/CheckoutActionHandler';
|
||||
|
||||
class CheckoutBootstap {
|
||||
constructor(gateway, renderer, messages) {
|
||||
constructor(gateway, renderer, messages, spinner) {
|
||||
this.gateway = gateway;
|
||||
this.renderer = renderer;
|
||||
this.messages = messages
|
||||
this.messages = messages;
|
||||
this.spinner = spinner;
|
||||
}
|
||||
|
||||
init() {
|
||||
|
@ -41,6 +42,7 @@ class CheckoutBootstap {
|
|||
const actionHandler = new CheckoutActionHandler(
|
||||
PayPalCommerceGateway,
|
||||
new ErrorHandler(this.gateway.labels.error.generic),
|
||||
this.spinner
|
||||
);
|
||||
|
||||
this.renderer.render(
|
||||
|
|
23
modules/ppcp-button/resources/js/modules/Helper/Spinner.js
Normal file
23
modules/ppcp-button/resources/js/modules/Helper/Spinner.js
Normal file
|
@ -0,0 +1,23 @@
|
|||
class Spinner {
|
||||
|
||||
constructor() {
|
||||
this.target = 'form.woocommerce-checkout';
|
||||
}
|
||||
block() {
|
||||
|
||||
jQuery( this.target ).block({
|
||||
message: null,
|
||||
overlayCSS: {
|
||||
background: '#fff',
|
||||
opacity: 0.6
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
unblock() {
|
||||
|
||||
jQuery( this.target ).unblock();
|
||||
}
|
||||
}
|
||||
|
||||
export default Spinner;
|
|
@ -1,5 +1,6 @@
|
|||
const onApprove = (context, errorHandler) => {
|
||||
const onApprove = (context, errorHandler, spinner) => {
|
||||
return (data, actions) => {
|
||||
spinner.block();
|
||||
return fetch(context.config.ajax.approve_order.endpoint, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
|
@ -9,9 +10,13 @@ const onApprove = (context, errorHandler) => {
|
|||
}).then((res)=>{
|
||||
return res.json();
|
||||
}).then((data)=>{
|
||||
spinner.unblock();
|
||||
if (!data.success) {
|
||||
errorHandler.genericError();
|
||||
console.error(data);
|
||||
if (data.data.code === 100) {
|
||||
errorHandler.message(data.data.message);
|
||||
} else {
|
||||
errorHandler.genericError();
|
||||
}
|
||||
if (typeof actions !== 'undefined' && typeof actions.restart !== 'undefined') {
|
||||
return actions.restart();
|
||||
}
|
||||
|
|
|
@ -2,9 +2,11 @@ import dccInputFactory from "../Helper/DccInputFactory";
|
|||
|
||||
class CreditCardRenderer {
|
||||
|
||||
constructor(defaultConfig, errorHandler) {
|
||||
constructor(defaultConfig, errorHandler, spinner) {
|
||||
this.defaultConfig = defaultConfig;
|
||||
this.errorHandler = errorHandler;
|
||||
this.spinner = spinner;
|
||||
this.cardValid = false;
|
||||
}
|
||||
|
||||
render(wrapper, contextConfig) {
|
||||
|
@ -90,6 +92,7 @@ class CreditCardRenderer {
|
|||
}
|
||||
}).then(hostedFields => {
|
||||
const submitEvent = (event) => {
|
||||
this.spinner.block();
|
||||
if (event) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
@ -99,7 +102,7 @@ class CreditCardRenderer {
|
|||
return state.fields[key].isValid;
|
||||
});
|
||||
|
||||
if (formValid) {
|
||||
if (formValid && this.cardValid) {
|
||||
|
||||
let vault = document.querySelector(wrapper + ' .ppcp-credit-card-vault') ?
|
||||
document.querySelector(wrapper + ' .ppcp-credit-card-vault').checked : false;
|
||||
|
@ -110,15 +113,26 @@ class CreditCardRenderer {
|
|||
vault
|
||||
}).then((payload) => {
|
||||
payload.orderID = payload.orderId;
|
||||
this.spinner.unblock();
|
||||
return contextConfig.onApprove(payload);
|
||||
});
|
||||
} else {
|
||||
this.errorHandler.message(this.defaultConfig.hosted_fields.labels.fields_not_valid);
|
||||
this.spinner.unblock();
|
||||
const message = ! this.cardValid ? this.defaultConfig.hosted_fields.labels.card_not_supported : this.defaultConfig.hosted_fields.labels.fields_not_valid;
|
||||
this.errorHandler.message(message);
|
||||
}
|
||||
}
|
||||
hostedFields.on('inputSubmitRequest', function () {
|
||||
submitEvent(null);
|
||||
});
|
||||
hostedFields.on('cardTypeChange', (event) => {
|
||||
if ( ! event.cards.length ) {
|
||||
this.cardValid = false;
|
||||
return;
|
||||
}
|
||||
const validCards = this.defaultConfig.hosted_fields.valid_cards;
|
||||
this.cardValid = validCards.indexOf(event.cards[0].type) !== -1;
|
||||
})
|
||||
document.querySelector(wrapper + ' button').addEventListener(
|
||||
'click',
|
||||
submitEvent
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue