Skip to content

Commit abd9516

Browse files
MAGETWO-93763: [2.3] Error occurs when entering a new shipping address on admin order paid with Braintree
1 parent 1cb9235 commit abd9516

File tree

2 files changed

+27
-5
lines changed

2 files changed

+27
-5
lines changed

app/code/Magento/Braintree/view/adminhtml/web/js/braintree.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ define([
2424
scriptLoaded: false,
2525
braintree: null,
2626
selectedCardType: null,
27+
checkout: null,
2728
imports: {
2829
onActiveChange: 'active'
2930
}
@@ -147,14 +148,21 @@ define([
147148

148149
this.disableEventListeners();
149150

151+
if (self.checkout) {
152+
self.checkout.teardown(function () {
153+
self.checkout = null;
154+
});
155+
}
156+
150157
self.braintree.setup(self.clientToken, 'custom', {
151158
id: self.selector,
152159
hostedFields: self.getHostedFields(),
153160

154161
/**
155162
* Triggered when sdk was loaded
156163
*/
157-
onReady: function () {
164+
onReady: function (checkout) {
165+
self.checkout = checkout;
158166
$('body').trigger('processStop');
159167
self.enableEventListeners();
160168
},

app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ define([
3939
this.isOnlyVirtualProduct = false;
4040
this.excludedPaymentMethods = [];
4141
this.summarizePrice = true;
42+
this.timerId = null;
4243
jQuery.async('#order-items', (function(){
4344
this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
4445
this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
@@ -189,14 +190,27 @@ define([
189190
bindAddressFields : function(container) {
190191
var fields = $(container).select('input', 'select', 'textarea');
191192
for(var i=0;i<fields.length;i++){
192-
Event.observe(fields[i], 'change', this.changeAddressField.bind(this));
193+
Event.observe(fields[i], 'change', this.triggerChangeEvent.bind(this));
193194
}
194195
},
195196

197+
/**
198+
* Calls changing address field handler after timeout to prevent multiple simultaneous calls.
199+
*
200+
* @param {Event} event
201+
*/
202+
triggerChangeEvent: function (event) {
203+
if (this.timerId) {
204+
window.clearTimeout(this.timerId);
205+
}
206+
207+
this.timerId = window.setTimeout(this.changeAddressField.bind(this), 500, event);
208+
},
209+
196210
/**
197211
* Triggers on each form's element changes.
198212
*
199-
* @param {Object} event
213+
* @param {Event} event
200214
*/
201215
changeAddressField: function (event) {
202216
var field = Event.element(event),
@@ -619,7 +633,7 @@ define([
619633
}
620634
else if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked)
621635
|| ((elms[i].type == 'file' || elms[i].type == 'text' || elms[i].type == 'textarea' || elms[i].type == 'hidden')
622-
&& Form.Element.getValue(elms[i]))
636+
&& Form.Element.getValue(elms[i]))
623637
) {
624638
if (this._isSummarizePrice(elms[i])) {
625639
productPrice += getPrice(elms[i]);
@@ -1131,7 +1145,7 @@ define([
11311145
*/
11321146
isPaymentValidationAvailable : function(){
11331147
return ((typeof this.paymentMethod) == 'undefined'
1134-
|| this.excludedPaymentMethods.indexOf(this.paymentMethod) == -1);
1148+
|| this.excludedPaymentMethods.indexOf(this.paymentMethod) == -1);
11351149
},
11361150

11371151
serializeData : function(container){

0 commit comments

Comments
 (0)