v1/web/modules/contrib/commerce_shipping/js/shipping_checkout.js

70 lines
2.3 KiB
JavaScript

/**
* DO NOT EDIT THIS FILE.
* See the following change record for more information,
* https://www.drupal.org/node/2815083
* @preserve
**/
(function (Drupal, drupalSettings, once) {
Drupal.shippingRecalculate = {
recalculateButtonSelector: '',
submitButtonSelector: '[id^=edit-actions-next]',
wrapper: '',
onChange: function onChange(element) {
var waitForAjaxComplete = function waitForAjaxComplete(element) {
setTimeout(function () {
if (element.disabled) {
waitForAjaxComplete(element);
return;
}
if (Drupal.shippingRecalculate.canRecalculateRates()) {
Drupal.shippingRecalculate.recalculateRates();
}
}, 100, element);
};
waitForAjaxComplete(element);
},
init: function init(context) {
var _this = this;
var requiredInputs = document.getElementById(this.wrapper).querySelectorAll('input[required], select[required], input[type=checkbox]');
if (requiredInputs.length) {
once('shipping-recalculate', requiredInputs, context).forEach(function (element) {
element.addEventListener('change', function (el) {
_this.onChange(el.target);
});
});
}
},
canRecalculateRates: function canRecalculateRates() {
var canRecalculate = true;
var requiredInputs = document.getElementById(this.wrapper).querySelectorAll('input[required], select[required]');
Array.prototype.forEach.call(requiredInputs, function (el) {
if (!el.value) {
canRecalculate = false;
return false;
}
});
return canRecalculate;
},
recalculateRates: function recalculateRates() {
var buttons = document.querySelectorAll(this.submitButtonSelector);
if (buttons.length) {
buttons[0].disabled = true;
}
document.getElementById(this.wrapper).querySelector(this.recalculateButtonSelector).dispatchEvent(new Event('mousedown'));
}
};
Drupal.behaviors.shippingRatesRecalculate = {
attach: function attach(context) {
Drupal.shippingRecalculate.wrapper = drupalSettings.commerceShipping.wrapper;
Drupal.shippingRecalculate.recalculateButtonSelector = drupalSettings.commerceShipping.recalculateButtonSelector;
Drupal.shippingRecalculate.init(context);
}
};
})(Drupal, drupalSettings, once);