A Magento 2 RequireJS “mixin” allows you to programmatically listen for the initial instantiation of any RequireJS module and manipulate that module before returning it.
alanstorm.com/the-curious-case-of-magento-2-mixins
Currently, Magento 2 uses requirejs-config.js mixins
be the Magento_CheckoutAgreements
module only:
1. Magento 2.1.0 RC2 - Magento 2.2.2
1.1. Magento/CheckoutAgreements/view/frontend/requirejs-config.js
1.2. Magento/CheckoutAgreements/view/frontend/web/js/model/place-order-mixin.js
define([
'jquery',
'mage/utils/wrapper',
'Magento_CheckoutAgreements/js/model/agreements-assigner'
], function ($, wrapper, agreementsAssigner) {
'use strict';
return function (placeOrderAction) {
/** Override default place order action and add agreement_ids to request */
return wrapper.wrap(placeOrderAction, function (originalAction, paymentData, messageContainer) {
agreementsAssigner(paymentData);
return originalAction(paymentData, messageContainer);
});
};
});
1.3. Magento/CheckoutAgreements/view/frontend/web/js/model/set-payment-information-mixin.js
define([
'jquery',
'mage/utils/wrapper',
'Magento_CheckoutAgreements/js/model/agreements-assigner'
], function ($, wrapper, agreementsAssigner) {
'use strict';
return function (placeOrderAction) {
/** Override place-order-mixin for set-payment-information action as they differs only by method signature */
return wrapper.wrap(placeOrderAction, function (originalAction, messageContainer, paymentData) {
agreementsAssigner(paymentData);
return originalAction(messageContainer, paymentData);
});
};
});
2. Before Magento 2.1.0 RC2
2.1. Magento/CheckoutAgreements/view/frontend/requirejs-config.js
2.2 app/code/Magento/CheckoutAgreements/view/frontend/web/js/model/place-order-mixin.js
define([
'jquery',
'mage/utils/wrapper'
], function ($, wrapper) {
'use strict';
var agreementsConfig = window.checkoutConfig.checkoutAgreements;
return function (placeOrderAction) {
/** Override default place order action and add agreement_ids to request */
return wrapper.wrap(placeOrderAction, function(originalAction, paymentData, redirectOnSuccess, messageContainer) {
if (!agreementsConfig.isEnabled) {
return originalAction(paymentData, redirectOnSuccess, messageContainer);
}
var agreementForm = $('.payment-method._active form[data-role=checkout-agreements]'),
agreementData = agreementForm.serializeArray(),
agreementIds = [];
agreementData.forEach(function(item) {
agreementIds.push(item.value);
This file has been truncated. show original