@@ -15,31 +15,46 @@ define(
15
15
] ,
16
16
function ( $ , ko , shippingRatesValidationRules , addressConverter , selectShippingAddress , postcodeValidator , $t ) {
17
17
'use strict' ;
18
- var checkoutConfig = window . checkoutConfig ;
19
- var validators = [ ] ;
20
- var observedElements = [ ] ;
21
- var postcodeElement = null ;
18
+
19
+ var checkoutConfig = window . checkoutConfig ,
20
+ validators = [ ] ,
21
+ observedElements = [ ] ,
22
+ postcodeElement = null ;
22
23
23
24
return {
24
25
validateAddressTimeout : 0 ,
25
26
validateDelay : 2000 ,
26
27
27
- registerValidator : function ( carrier , validator ) {
28
+ /**
29
+ * @param {String } carrier
30
+ * @param {Object } validator
31
+ */
32
+ registerValidator : function ( carrier , validator ) {
28
33
if ( checkoutConfig . activeCarriers . indexOf ( carrier ) != - 1 ) {
29
34
validators . push ( validator ) ;
30
35
}
31
36
} ,
32
37
33
- validateAddressData : function ( address ) {
38
+ /**
39
+ * @param {Object } address
40
+ * @return {Boolean }
41
+ */
42
+ validateAddressData : function ( address ) {
34
43
return validators . some ( function ( validator ) {
35
44
return validator . validate ( address ) ;
36
45
} ) ;
37
46
} ,
38
47
39
- bindChangeHandlers : function ( elements , force , delay ) {
40
- var self = this ;
41
- var observableFields = shippingRatesValidationRules . getObservableFields ( ) ;
42
- $ . each ( elements , function ( index , elem ) {
48
+ /**
49
+ * @param {* } elements
50
+ * @param {Boolean } force
51
+ * @param {Number } delay
52
+ */
53
+ bindChangeHandlers : function ( elements , force , delay ) {
54
+ var self = this ,
55
+ observableFields = shippingRatesValidationRules . getObservableFields ( ) ;
56
+
57
+ $ . each ( elements , function ( index , elem ) {
43
58
if ( elem && ( observableFields . indexOf ( elem . index ) != - 1 || force ) ) {
44
59
if ( elem . index !== 'postcode' ) {
45
60
self . bindHandler ( elem , delay ) ;
@@ -53,17 +68,23 @@ define(
53
68
} ) ;
54
69
} ,
55
70
56
- bindHandler : function ( element , delay ) {
71
+ /**
72
+ * @param {Object } element
73
+ * @param {Number } delay
74
+ */
75
+ bindHandler : function ( element , delay ) {
57
76
var self = this ;
77
+
58
78
delay = typeof delay === "undefined" ? self . validateDelay : delay ;
79
+
59
80
if ( element . component . indexOf ( '/group' ) != - 1 ) {
60
- $ . each ( element . elems ( ) , function ( index , elem ) {
81
+ $ . each ( element . elems ( ) , function ( index , elem ) {
61
82
self . bindHandler ( elem ) ;
62
83
} ) ;
63
84
} else {
64
- element . on ( 'value' , function ( ) {
85
+ element . on ( 'value' , function ( ) {
65
86
clearTimeout ( self . validateAddressTimeout ) ;
66
- self . validateAddressTimeout = setTimeout ( function ( ) {
87
+ self . validateAddressTimeout = setTimeout ( function ( ) {
67
88
if ( self . postcodeValidation ( ) ) {
68
89
self . validateFields ( ) ;
69
90
}
@@ -73,36 +94,44 @@ define(
73
94
}
74
95
} ,
75
96
76
- postcodeValidation : function ( ) {
97
+ /**
98
+ * @return {* }
99
+ */
100
+ postcodeValidation : function ( ) {
101
+ var countryId = $ ( 'select[name="country_id"]' ) . val ( ) ,
102
+ validationResult = postcodeValidator . validate ( postcodeElement . value ( ) , countryId ) ,
103
+ warnMessage ;
104
+
77
105
if ( postcodeElement == null || postcodeElement . value ( ) == null ) {
78
106
return true ;
79
107
}
80
108
81
- var countryId = $ ( 'select[name="shippingAddress[country_id]"]' ) . val ( ) ;
82
- var validationResult = postcodeValidator . validate ( postcodeElement . value ( ) , countryId ) ;
83
-
84
109
postcodeElement . warn ( null ) ;
110
+
85
111
if ( ! validationResult ) {
86
- var warnMessage = $t ( 'Provided Zip/Postal Code seems to be invalid.' ) ;
112
+ warnMessage = $t ( 'Provided Zip/Postal Code seems to be invalid.' ) ;
87
113
if ( postcodeValidator . validatedPostCodeExample . length ) {
88
114
warnMessage += $t ( ' Example: ' ) + postcodeValidator . validatedPostCodeExample . join ( '; ' ) + '. ' ;
89
115
}
90
116
warnMessage += $t ( 'If you believe it is the right one you can ignore this notice.' ) ;
91
117
postcodeElement . warn ( warnMessage ) ;
92
118
}
119
+
93
120
return validationResult ;
94
121
} ,
95
122
96
123
/**
97
124
* Convert form data to quote address and validate fields for shipping rates
98
125
*/
99
- validateFields : function ( ) {
126
+ validateFields : function ( ) {
100
127
var addressFlat = addressConverter . formDataProviderToFlatData (
101
- this . collectObservedData ( ) ,
102
- 'shippingAddress'
103
- ) ;
128
+ this . collectObservedData ( ) ,
129
+ 'shippingAddress'
130
+ ) ,
131
+ address ;
132
+
104
133
if ( this . validateAddressData ( addressFlat ) ) {
105
- var address = addressConverter . formAddressDataToQuoteAddress ( addressFlat ) ;
134
+ address = addressConverter . formAddressDataToQuoteAddress ( addressFlat ) ;
106
135
selectShippingAddress ( address ) ;
107
136
}
108
137
} ,
@@ -112,11 +141,13 @@ define(
112
141
*
113
142
* @returns {* }
114
143
*/
115
- collectObservedData : function ( ) {
144
+ collectObservedData : function ( ) {
116
145
var observedValues = { } ;
117
- $ . each ( observedElements , function ( index , field ) {
146
+
147
+ $ . each ( observedElements , function ( index , field ) {
118
148
observedValues [ field . dataScope ] = field . value ( ) ;
119
149
} ) ;
150
+
120
151
return observedValues ;
121
152
}
122
153
} ;
0 commit comments