mirror of
https://github.com/woocommerce/woocommerce-paypal-payments.git
synced 2025-09-06 10:55:00 +08:00
742 lines
No EOL
25 KiB
JavaScript
742 lines
No EOL
25 KiB
JavaScript
/******/ (function(modules) { // webpackBootstrap
|
|
/******/ // The module cache
|
|
/******/ var installedModules = {};
|
|
/******/
|
|
/******/ // The require function
|
|
/******/ function __webpack_require__(moduleId) {
|
|
/******/
|
|
/******/ // Check if module is in cache
|
|
/******/ if(installedModules[moduleId]) {
|
|
/******/ return installedModules[moduleId].exports;
|
|
/******/ }
|
|
/******/ // Create a new module (and put it into the cache)
|
|
/******/ var module = installedModules[moduleId] = {
|
|
/******/ i: moduleId,
|
|
/******/ l: false,
|
|
/******/ exports: {}
|
|
/******/ };
|
|
/******/
|
|
/******/ // Execute the module function
|
|
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
|
|
/******/
|
|
/******/ // Flag the module as loaded
|
|
/******/ module.l = true;
|
|
/******/
|
|
/******/ // Return the exports of the module
|
|
/******/ return module.exports;
|
|
/******/ }
|
|
/******/
|
|
/******/
|
|
/******/ // expose the modules object (__webpack_modules__)
|
|
/******/ __webpack_require__.m = modules;
|
|
/******/
|
|
/******/ // expose the module cache
|
|
/******/ __webpack_require__.c = installedModules;
|
|
/******/
|
|
/******/ // define getter function for harmony exports
|
|
/******/ __webpack_require__.d = function(exports, name, getter) {
|
|
/******/ if(!__webpack_require__.o(exports, name)) {
|
|
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
|
|
/******/ }
|
|
/******/ };
|
|
/******/
|
|
/******/ // define __esModule on exports
|
|
/******/ __webpack_require__.r = function(exports) {
|
|
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
|
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
/******/ }
|
|
/******/ Object.defineProperty(exports, '__esModule', { value: true });
|
|
/******/ };
|
|
/******/
|
|
/******/ // create a fake namespace object
|
|
/******/ // mode & 1: value is a module id, require it
|
|
/******/ // mode & 2: merge all properties of value into the ns
|
|
/******/ // mode & 4: return value when already ns object
|
|
/******/ // mode & 8|1: behave like require
|
|
/******/ __webpack_require__.t = function(value, mode) {
|
|
/******/ if(mode & 1) value = __webpack_require__(value);
|
|
/******/ if(mode & 8) return value;
|
|
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
|
|
/******/ var ns = Object.create(null);
|
|
/******/ __webpack_require__.r(ns);
|
|
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
|
|
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
|
|
/******/ return ns;
|
|
/******/ };
|
|
/******/
|
|
/******/ // getDefaultExport function for compatibility with non-harmony modules
|
|
/******/ __webpack_require__.n = function(module) {
|
|
/******/ var getter = module && module.__esModule ?
|
|
/******/ function getDefault() { return module['default']; } :
|
|
/******/ function getModuleExports() { return module; };
|
|
/******/ __webpack_require__.d(getter, 'a', getter);
|
|
/******/ return getter;
|
|
/******/ };
|
|
/******/
|
|
/******/ // Object.prototype.hasOwnProperty.call
|
|
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
|
|
/******/
|
|
/******/ // __webpack_public_path__
|
|
/******/ __webpack_require__.p = "";
|
|
/******/
|
|
/******/
|
|
/******/ // Load entry module and return exports
|
|
/******/ return __webpack_require__(__webpack_require__.s = "./resources/js/button.js");
|
|
/******/ })
|
|
/************************************************************************/
|
|
/******/ ({
|
|
|
|
/***/ "./resources/js/button.js":
|
|
/*!********************************!*\
|
|
!*** ./resources/js/button.js ***!
|
|
\********************************/
|
|
/*! no exports provided */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _modules_ErrorHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modules/ErrorHandler */ "./resources/js/modules/ErrorHandler.js");
|
|
/* harmony import */ var _modules_CartConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/CartConfig */ "./resources/js/modules/CartConfig.js");
|
|
/* harmony import */ var _modules_MiniCartBootstap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/MiniCartBootstap */ "./resources/js/modules/MiniCartBootstap.js");
|
|
/* harmony import */ var _modules_SingleProductBootstap__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/SingleProductBootstap */ "./resources/js/modules/SingleProductBootstap.js");
|
|
/* harmony import */ var _modules_CartBootstap__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/CartBootstap */ "./resources/js/modules/CartBootstap.js");
|
|
/* harmony import */ var _modules_CheckoutBootstap__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/CheckoutBootstap */ "./resources/js/modules/CheckoutBootstap.js");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const bootstrap = () => {
|
|
const context = PayPalCommerceGateway.context;
|
|
const errorHandler = new _modules_ErrorHandler__WEBPACK_IMPORTED_MODULE_0__["default"]();
|
|
const defaultConfig = new _modules_CartConfig__WEBPACK_IMPORTED_MODULE_1__["default"](PayPalCommerceGateway, errorHandler);
|
|
|
|
if (context === 'mini-cart') {
|
|
const miniCartBootstap = new _modules_MiniCartBootstap__WEBPACK_IMPORTED_MODULE_2__["default"](defaultConfig);
|
|
|
|
miniCartBootstap.init();
|
|
}
|
|
|
|
if (context === 'product') {
|
|
const singleProductBootstap = new _modules_SingleProductBootstap__WEBPACK_IMPORTED_MODULE_3__["default"]();
|
|
const miniCartBootstap = new _modules_MiniCartBootstap__WEBPACK_IMPORTED_MODULE_2__["default"](defaultConfig);
|
|
|
|
singleProductBootstap.init();
|
|
miniCartBootstap.init();
|
|
}
|
|
|
|
if (context === 'cart') {
|
|
const cartBootstrap = new _modules_CartBootstap__WEBPACK_IMPORTED_MODULE_4__["default"](defaultConfig);
|
|
|
|
cartBootstrap.init();
|
|
}
|
|
|
|
if (context === 'checkout') {
|
|
const checkoutBootstap = new _modules_CheckoutBootstap__WEBPACK_IMPORTED_MODULE_5__["default"](defaultConfig);
|
|
|
|
checkoutBootstap.init();
|
|
}
|
|
};
|
|
document.addEventListener('DOMContentLoaded', () => {
|
|
if (!typeof PayPalCommerceGateway) {
|
|
console.error('PayPal button could not be configured.');
|
|
return;
|
|
}
|
|
|
|
const script = document.createElement('script');
|
|
|
|
script.setAttribute('src', PayPalCommerceGateway.button.url);
|
|
script.addEventListener('load', event => {
|
|
bootstrap();
|
|
});
|
|
|
|
document.body.append(script);
|
|
});
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/ButtonsToggleListener.js":
|
|
/*!*******************************************************!*\
|
|
!*** ./resources/js/modules/ButtonsToggleListener.js ***!
|
|
\*******************************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/**
|
|
* When you can't add something to the cart, the PayPal buttons should not show.
|
|
* Therefore we listen for changes on the add to cart button and show/hide the buttons accordingly.
|
|
*/
|
|
|
|
class ButtonsToggleListener {
|
|
constructor(element, showCallback, hideCallback) {
|
|
this.element = element;
|
|
this.showCallback = showCallback;
|
|
this.hideCallback = hideCallback;
|
|
this.observer = null;
|
|
}
|
|
|
|
init() {
|
|
const config = { attributes: true };
|
|
const callback = () => {
|
|
if (this.element.classList.contains('disabled')) {
|
|
this.hideCallback();
|
|
return;
|
|
}
|
|
this.showCallback();
|
|
};
|
|
this.observer = new MutationObserver(callback);
|
|
this.observer.observe(this.element, config);
|
|
}
|
|
|
|
disconnect() {
|
|
this.observer.disconnect();
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (ButtonsToggleListener);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/CartBootstap.js":
|
|
/*!**********************************************!*\
|
|
!*** ./resources/js/modules/CartBootstap.js ***!
|
|
\**********************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _Renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Renderer */ "./resources/js/modules/Renderer.js");
|
|
|
|
|
|
class CartBootstrap {
|
|
constructor(configurator) {
|
|
this.configurator = configurator;
|
|
}
|
|
|
|
init() {
|
|
const buttonWrapper = PayPalCommerceGateway.button.wrapper;
|
|
|
|
if (!document.querySelector(buttonWrapper)) {
|
|
return;
|
|
}
|
|
|
|
const renderer = new _Renderer__WEBPACK_IMPORTED_MODULE_0__["default"](buttonWrapper);
|
|
|
|
jQuery(document.body).on('updated_cart_totals updated_checkout', () => {
|
|
renderer.render(this.configurator.configuration());
|
|
});
|
|
|
|
renderer.render(this.configurator.configuration());
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (CartBootstrap);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/CartConfig.js":
|
|
/*!********************************************!*\
|
|
!*** ./resources/js/modules/CartConfig.js ***!
|
|
\********************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _onApprove__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./onApprove */ "./resources/js/modules/onApprove.js");
|
|
|
|
|
|
class CartConfig {
|
|
|
|
constructor(config, errorHandler) {
|
|
this.config = config;
|
|
this.errorHandler = errorHandler;
|
|
}
|
|
|
|
configuration() {
|
|
|
|
const createOrder = (data, actions) => {
|
|
return fetch(this.config.ajax.create_order.endpoint, {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
nonce: this.config.ajax.create_order.nonce,
|
|
purchase_units: []
|
|
})
|
|
}).then(function (res) {
|
|
return res.json();
|
|
}).then(function (data) {
|
|
if (!data.success) {
|
|
//Todo: Error handling
|
|
return;
|
|
}
|
|
return data.data.id;
|
|
});
|
|
};
|
|
return {
|
|
createOrder,
|
|
onApprove: Object(_onApprove__WEBPACK_IMPORTED_MODULE_0__["default"])(this),
|
|
onError: error => {
|
|
this.errorHandler.message(error);
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (CartConfig);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/CheckoutBootstap.js":
|
|
/*!**************************************************!*\
|
|
!*** ./resources/js/modules/CheckoutBootstap.js ***!
|
|
\**************************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _Renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Renderer */ "./resources/js/modules/Renderer.js");
|
|
|
|
|
|
class CheckoutBootstap {
|
|
constructor(configurator) {
|
|
this.configurator = configurator;
|
|
}
|
|
|
|
init() {
|
|
const buttonWrapper = PayPalCommerceGateway.button.wrapper;
|
|
const cancelWrapper = PayPalCommerceGateway.button.cancel_wrapper;
|
|
|
|
if (!document.querySelector(buttonWrapper)) {
|
|
return;
|
|
}
|
|
|
|
if (document.querySelector(cancelWrapper)) {
|
|
return;
|
|
}
|
|
|
|
const renderer = new _Renderer__WEBPACK_IMPORTED_MODULE_0__["default"](buttonWrapper);
|
|
|
|
jQuery(document.body).on('updated_checkout', () => {
|
|
renderer.render(this.configurator.configuration());
|
|
|
|
jQuery(document.body).trigger('payment_method_selected');
|
|
});
|
|
|
|
jQuery(document.body).on('payment_method_selected', () => {
|
|
// TODO: replace this dirty check, possible create a separate
|
|
const currentPaymentMethod = jQuery('input[name="payment_method"]:checked').val();
|
|
|
|
if (currentPaymentMethod !== 'ppcp-gateway') {
|
|
jQuery(buttonWrapper).hide();
|
|
jQuery('#place_order').show();
|
|
} else {
|
|
jQuery(buttonWrapper).show();
|
|
jQuery('#place_order').hide();
|
|
}
|
|
});
|
|
|
|
renderer.render(this.configurator.configuration());
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (CheckoutBootstap);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/ErrorHandler.js":
|
|
/*!**********************************************!*\
|
|
!*** ./resources/js/modules/ErrorHandler.js ***!
|
|
\**********************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
class ErrorHandler {
|
|
|
|
constructor() {
|
|
this.wrapper = document.querySelector('.woocommerce-notices-wrapper');
|
|
}
|
|
|
|
message(text) {
|
|
this.wrapper.classList.add('woocommerce-error');
|
|
this.wrapper.innerText = this.sanitize(text);
|
|
}
|
|
|
|
sanitize(text) {
|
|
const textarea = document.createElement('textarea');
|
|
textarea.innerHTML = text;
|
|
return textarea.value;
|
|
}
|
|
|
|
clear() {
|
|
if (!this.wrapper.classList.contains('woocommerce-error')) {
|
|
return;
|
|
}
|
|
this.wrapper.classList.remove('woocommerce-error');
|
|
this.wrapper.innerText = '';
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (ErrorHandler);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/MiniCartBootstap.js":
|
|
/*!**************************************************!*\
|
|
!*** ./resources/js/modules/MiniCartBootstap.js ***!
|
|
\**************************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _Renderer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Renderer */ "./resources/js/modules/Renderer.js");
|
|
|
|
|
|
class MiniCartBootstap {
|
|
constructor(configurator) {
|
|
this.configurator = configurator;
|
|
}
|
|
|
|
init() {
|
|
const miniCartWrapper = PayPalCommerceGateway.button.mini_cart_wrapper;
|
|
|
|
if (!document.querySelector(miniCartWrapper)) {
|
|
return;
|
|
}
|
|
|
|
const renderer = new _Renderer__WEBPACK_IMPORTED_MODULE_0__["default"](miniCartWrapper);
|
|
|
|
jQuery(document.body).on('wc_fragments_loaded wc_fragments_refreshed', () => {
|
|
renderer.render(this.configurator.configuration());
|
|
});
|
|
|
|
renderer.render(this.configurator.configuration());
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (MiniCartBootstap);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/Product.js":
|
|
/*!*****************************************!*\
|
|
!*** ./resources/js/modules/Product.js ***!
|
|
\*****************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
class Product {
|
|
|
|
constructor(id, quantity, variations) {
|
|
this.id = id;
|
|
this.quantity = quantity;
|
|
this.variations = variations;
|
|
}
|
|
|
|
data() {
|
|
return {
|
|
id: this.id,
|
|
quantity: this.quantity,
|
|
variations: this.variations
|
|
};
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (Product);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/Renderer.js":
|
|
/*!******************************************!*\
|
|
!*** ./resources/js/modules/Renderer.js ***!
|
|
\******************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
class Renderer {
|
|
|
|
constructor(wrapper) {
|
|
this.wrapper = wrapper;
|
|
}
|
|
|
|
render(buttonConfig) {
|
|
|
|
paypal.Buttons(buttonConfig).render(this.wrapper);
|
|
}
|
|
|
|
hideButtons() {
|
|
document.querySelector(this.wrapper).style.display = 'none';
|
|
}
|
|
|
|
showButtons() {
|
|
document.querySelector(this.wrapper).style.display = 'block';
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (Renderer);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/SingleProductBootstap.js":
|
|
/*!*******************************************************!*\
|
|
!*** ./resources/js/modules/SingleProductBootstap.js ***!
|
|
\*******************************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _ErrorHandler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ErrorHandler */ "./resources/js/modules/ErrorHandler.js");
|
|
/* harmony import */ var _Renderer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Renderer */ "./resources/js/modules/Renderer.js");
|
|
/* harmony import */ var _UpdateCart__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./UpdateCart */ "./resources/js/modules/UpdateCart.js");
|
|
/* harmony import */ var _SingleProductConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./SingleProductConfig */ "./resources/js/modules/SingleProductConfig.js");
|
|
|
|
|
|
|
|
|
|
|
|
class SingleProductBootstap {
|
|
init() {
|
|
const buttonWrapper = PayPalCommerceGateway.button.wrapper;
|
|
|
|
if (!document.querySelector(buttonWrapper)) {
|
|
return;
|
|
}
|
|
|
|
if (!document.querySelector('form.cart')) {
|
|
return;
|
|
}
|
|
|
|
const renderer = new _Renderer__WEBPACK_IMPORTED_MODULE_1__["default"](buttonWrapper);
|
|
const errorHandler = new _ErrorHandler__WEBPACK_IMPORTED_MODULE_0__["default"]();
|
|
const updateCart = new _UpdateCart__WEBPACK_IMPORTED_MODULE_2__["default"](PayPalCommerceGateway.ajax.change_cart.endpoint, PayPalCommerceGateway.ajax.change_cart.nonce);
|
|
const configurator = new _SingleProductConfig__WEBPACK_IMPORTED_MODULE_3__["default"](PayPalCommerceGateway, updateCart, renderer.showButtons.bind(renderer), renderer.hideButtons.bind(renderer), document.querySelector('form.cart'), errorHandler);
|
|
|
|
renderer.render(configurator.configuration());
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (SingleProductBootstap);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/SingleProductConfig.js":
|
|
/*!*****************************************************!*\
|
|
!*** ./resources/js/modules/SingleProductConfig.js ***!
|
|
\*****************************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _ButtonsToggleListener__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ButtonsToggleListener */ "./resources/js/modules/ButtonsToggleListener.js");
|
|
/* harmony import */ var _Product__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Product */ "./resources/js/modules/Product.js");
|
|
/* harmony import */ var _onApprove__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./onApprove */ "./resources/js/modules/onApprove.js");
|
|
|
|
|
|
|
|
class SingleProductConfig {
|
|
|
|
constructor(config, updateCart, showButtonCallback, hideButtonCallback, formElement, errorHandler) {
|
|
this.config = config;
|
|
this.updateCart = updateCart;
|
|
this.showButtonCallback = showButtonCallback;
|
|
this.hideButtonCallback = hideButtonCallback;
|
|
this.formElement = formElement;
|
|
this.errorHandler = errorHandler;
|
|
}
|
|
|
|
configuration() {
|
|
|
|
if (this.hasVariations()) {
|
|
const observer = new _ButtonsToggleListener__WEBPACK_IMPORTED_MODULE_0__["default"](this.formElement.querySelector('.single_add_to_cart_button'), this.showButtonCallback, this.hideButtonCallback);
|
|
observer.init();
|
|
}
|
|
|
|
return {
|
|
createOrder: this.createOrder(),
|
|
onApprove: Object(_onApprove__WEBPACK_IMPORTED_MODULE_2__["default"])(this),
|
|
onError: error => {
|
|
this.errorHandler.message(error);
|
|
}
|
|
};
|
|
}
|
|
|
|
createOrder() {
|
|
var getProducts = null;
|
|
if (!this.isGroupedProduct()) {
|
|
getProducts = () => {
|
|
const id = document.querySelector('[name="add-to-cart"]').value;
|
|
const qty = document.querySelector('[name="quantity"]').value;
|
|
const variations = this.variations();
|
|
return [new _Product__WEBPACK_IMPORTED_MODULE_1__["default"](id, qty, variations)];
|
|
};
|
|
} else {
|
|
getProducts = () => {
|
|
const products = [];
|
|
this.formElement.querySelectorAll('input[type="number"]').forEach(element => {
|
|
if (!element.value) {
|
|
return;
|
|
}
|
|
const elementName = element.getAttribute('name').match(/quantity\[([\d]*)\]/);
|
|
if (elementName.length !== 2) {
|
|
return;
|
|
}
|
|
const id = parseInt(elementName[1]);
|
|
const quantity = parseInt(element.value);
|
|
products.push(new _Product__WEBPACK_IMPORTED_MODULE_1__["default"](id, quantity, null));
|
|
});
|
|
return products;
|
|
};
|
|
}
|
|
const createOrder = (data, actions) => {
|
|
this.errorHandler.clear();
|
|
|
|
const onResolve = purchase_units => {
|
|
return fetch(this.config.ajax.create_order.endpoint, {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
nonce: this.config.ajax.create_order.nonce,
|
|
purchase_units
|
|
})
|
|
}).then(function (res) {
|
|
return res.json();
|
|
}).then(function (data) {
|
|
if (!data.success) {
|
|
//Todo: Error handling
|
|
return;
|
|
}
|
|
return data.data.id;
|
|
});
|
|
};
|
|
|
|
const promise = this.updateCart.update(onResolve, getProducts());
|
|
return promise;
|
|
};
|
|
return createOrder;
|
|
}
|
|
|
|
variations() {
|
|
|
|
if (!this.hasVariations()) {
|
|
return null;
|
|
}
|
|
const attributes = [...this.formElement.querySelectorAll("[name^='attribute_']")].map(element => {
|
|
return {
|
|
value: element.value,
|
|
name: element.name
|
|
};
|
|
});
|
|
return attributes;
|
|
}
|
|
|
|
hasVariations() {
|
|
return this.formElement.classList.contains('variations_form');
|
|
}
|
|
|
|
isGroupedProduct() {
|
|
return this.formElement.classList.contains('grouped_form');
|
|
}
|
|
}
|
|
/* harmony default export */ __webpack_exports__["default"] = (SingleProductConfig);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/UpdateCart.js":
|
|
/*!********************************************!*\
|
|
!*** ./resources/js/modules/UpdateCart.js ***!
|
|
\********************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
/* harmony import */ var _Product__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Product */ "./resources/js/modules/Product.js");
|
|
|
|
class UpdateCart {
|
|
|
|
constructor(endpoint, nonce) {
|
|
this.endpoint = endpoint;
|
|
this.nonce = nonce;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param onResolve
|
|
* @param {Product[]} products
|
|
* @returns {Promise<unknown>}
|
|
*/
|
|
update(onResolve, products) {
|
|
return new Promise((resolve, reject) => {
|
|
fetch(this.endpoint, {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
nonce: this.nonce,
|
|
products
|
|
})
|
|
}).then(result => {
|
|
return result.json();
|
|
}).then(result => {
|
|
if (!result.success) {
|
|
reject(result.data);
|
|
return;
|
|
}
|
|
|
|
const resolved = onResolve(result.data);
|
|
resolve(resolved);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (UpdateCart);
|
|
|
|
/***/ }),
|
|
|
|
/***/ "./resources/js/modules/onApprove.js":
|
|
/*!*******************************************!*\
|
|
!*** ./resources/js/modules/onApprove.js ***!
|
|
\*******************************************/
|
|
/*! exports provided: default */
|
|
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
|
|
"use strict";
|
|
__webpack_require__.r(__webpack_exports__);
|
|
const onApprove = context => {
|
|
return (data, actions) => {
|
|
return fetch(context.config.ajax.approve_order.endpoint, {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
nonce: context.config.ajax.approve_order.nonce,
|
|
order_id: data.orderID
|
|
})
|
|
}).then(res => {
|
|
return res.json();
|
|
}).then(data => {
|
|
if (!data.success) {
|
|
//Todo: Error handling
|
|
return;
|
|
}
|
|
location.href = context.config.redirect;
|
|
});
|
|
};
|
|
};
|
|
|
|
/* harmony default export */ __webpack_exports__["default"] = (onApprove);
|
|
|
|
/***/ })
|
|
|
|
/******/ });
|
|
//# sourceMappingURL=button.js.map
|