Skip to content

Commit cca6a48

Browse files
author
Serhiy Shkolyarenko
committed
MAGETWO-50504: OnePageCheckoutTest fails on EE on selecting online shipping methods on checkout
added delayed binding of form fields
1 parent d429f2c commit cca6a48

File tree

2 files changed

+53
-24
lines changed

2 files changed

+53
-24
lines changed

app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,19 @@ define(
1111
'../model/address-converter',
1212
'../action/select-shipping-address',
1313
'./postcode-validator',
14-
'mage/translate'
14+
'mage/translate',
15+
'uiRegistry'
1516
],
16-
function ($, ko, shippingRatesValidationRules, addressConverter, selectShippingAddress, postcodeValidator, $t) {
17+
function (
18+
$,
19+
ko,
20+
shippingRatesValidationRules,
21+
addressConverter,
22+
selectShippingAddress,
23+
postcodeValidator,
24+
$t,
25+
uiRegistry
26+
) {
1727
'use strict';
1828

1929
var checkoutConfig = window.checkoutConfig,
@@ -45,26 +55,52 @@ define(
4555
});
4656
},
4757

58+
/**
59+
* Perform postponed binding for fieldset elements
60+
*
61+
* @param {String} formPath
62+
*/
63+
initFields: function (formPath) {
64+
var self = this,
65+
elements = shippingRatesValidationRules.getObservableFields();
66+
67+
$.each(elements, function (index, field) {
68+
uiRegistry.async(formPath + '.' + field)(self.doElementBinding.bind(self));
69+
});
70+
},
71+
72+
/**
73+
* Bind shipping rates request to form element
74+
*
75+
* @param {Object} element
76+
* @param {Boolean} force
77+
* @param {Number} delay
78+
*/
79+
doElementBinding: function (element, force, delay) {
80+
var observableFields = shippingRatesValidationRules.getObservableFields();
81+
82+
if (element && (observableFields.indexOf(element.index) !== -1 || force)) {
83+
if (element.index !== 'postcode') {
84+
this.bindHandler(element, delay);
85+
}
86+
}
87+
88+
if (element.index === 'postcode') {
89+
this.bindHandler(element, delay);
90+
postcodeElement = element;
91+
}
92+
},
93+
4894
/**
4995
* @param {*} elements
5096
* @param {Boolean} force
5197
* @param {Number} delay
5298
*/
5399
bindChangeHandlers: function (elements, force, delay) {
54-
var self = this,
55-
observableFields = shippingRatesValidationRules.getObservableFields();
100+
var self = this;
56101

57102
$.each(elements, function (index, elem) {
58-
if (elem && (observableFields.indexOf(elem.index) !== -1 || force)) {
59-
if (elem.index !== 'postcode') {
60-
self.bindHandler(elem, delay);
61-
}
62-
}
63-
64-
if (elem.index === 'postcode') {
65-
self.bindHandler(elem, delay);
66-
postcodeElement = elem;
67-
}
103+
self.doElementBinding(elem, force, delay);
68104
});
69105
},
70106

app/code/Magento/Checkout/view/frontend/web/js/view/shipping.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,11 @@ define(
7575
*/
7676
initialize: function () {
7777
var self = this,
78-
hasNewAddress;
78+
hasNewAddress,
79+
fieldsetName = 'checkout.steps.shipping-step.shippingAddress.shipping-address-fieldset';
7980

8081
this._super();
82+
shippingRatesValidator.initFields(fieldsetName);
8183

8284
if (!quote.isVirtual()) {
8385
stepNavigator.registerStep(
@@ -130,15 +132,6 @@ define(
130132
//load data from server for shipping step
131133
},
132134

133-
/**
134-
* @param {Object} element
135-
*/
136-
initElement: function (element) {
137-
if (element.index === 'shipping-address-fieldset') {
138-
shippingRatesValidator.bindChangeHandlers(element.elems(), false);
139-
}
140-
},
141-
142135
/**
143136
* @return {*}
144137
*/

0 commit comments

Comments
 (0)