Skip to content

Commit ebf27ef

Browse files
author
Egor Dmitriev
committed
[BUGFIX] Fixed issue where street gets duplicate values while changing housenumber, additon or on initial load
1 parent 465e706 commit ebf27ef

File tree

1 file changed

+75
-13
lines changed

1 file changed

+75
-13
lines changed

view/frontend/web/js/view/form/postcode.js

Lines changed: 75 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,7 @@ define([
8383
this.toggleHousenumberAdditionFields(this.getAddressData());
8484
var formData = this.source.get(this.customScope);
8585
if (formData.experius_postcode_housenumber) {
86-
if (this.getSettings().useStreet2AsHouseNumber) {
87-
registry.get(this.parentName + '.street.1').set('value', formData.experius_postcode_housenumber).set('error', false);
88-
} else {
89-
var street = typeof(formData.street) == 'object' ? formData.street[0] : formData.street;
90-
registry.get(this.parentName + '.street.0').set('value', street + ' ' + formData.experius_postcode_housenumber).set('error', false);
91-
}
86+
this.postcodeHasChanged();
9287
}
9388
} else if (registry.get(this.parentName + '.experius_postcode_fieldset.experius_postcode_disable').get('visible')) {
9489
this.hideFields();
@@ -188,8 +183,7 @@ define([
188183
registry.get(self.parentName + '.street.1').set('value', formData.experius_postcode_housenumber).set('error', false);
189184
self.debug('address on two lines');
190185
} else {
191-
var street = typeof(formData.street) == 'object' ? formData.street[0] : formData.street;
192-
registry.get(self.parentName + '.street.0').set('value', street + ' ' + formData.experius_postcode_housenumber).set('error', false);
186+
registry.get(self.parentName + '.street.0').set('value', self.formatAddress()).set('error', false);
193187
self.debug('address on single line');
194188
}
195189
registry.get(self.parentName + '.postcode').set('value', formData.experius_postcode_postcode).set('error', false);
@@ -403,7 +397,11 @@ define([
403397
registry.get(self.parentName + '.street.1').set('value', response.houseNumber.toString()).set('error', false);
404398
self.debug('address on two lines');
405399
} else {
406-
registry.get(self.parentName + '.street.0').set('value', response.street + ' ' + response.houseNumber).set('error', false);
400+
var address = self.formatAddress({
401+
street: response.street,
402+
housenumber: response.houseNumber
403+
});
404+
registry.get(self.parentName + '.street.0').set('value', address).set('error', false);
407405
self.debug('address on single line');
408406
}
409407
registry.get(self.parentName + '.country_id').set('value', 'NL').set('error', false);
@@ -528,10 +526,7 @@ define([
528526
registry.get(parentParentName + '.street.1').set('value', new_street_value);
529527
console.log(new_street_value);
530528
} else {
531-
current_street_value = this.removeOldAdditionFromString(registry.get(parentParentName + '.street.0').get('value'));
532-
addition = (newValue) ? ' ' + newValue : '';
533-
new_street_value = current_street_value + addition;
534-
registry.get(parentParentName + '.street.0').set('value', new_street_value);
529+
registry.get(parentParentName + '.street.0').set('value', this.formatAddress());
535530
}
536531
}
537532

@@ -548,6 +543,73 @@ define([
548543
return street;
549544
}
550545
return street;
546+
},
547+
548+
formatAddress: function(overrideData) {
549+
var formData = this.source.get(this.customScope);
550+
if (!formData) {
551+
return null;
552+
}
553+
overrideData = overrideData || {};
554+
555+
// User overridden value or the one in formdata
556+
var address = overrideData.street || (typeof(formData.street) == 'object' ? formData.street[0] : formData.street);
557+
var postcode = overrideData.postcode || formData.experius_postcode_postcode;
558+
var houseNo = overrideData.housenumber || formData.experius_postcode_housenumber;
559+
var houseNoAdd = overrideData.housenumber_addition || formData.experius_postcode_housenumber_addition_manual;
560+
561+
// If street is already set while not recorded. This means value is set by a third party.
562+
// Here we snapshot the current values into the previous value to avoid duplicate value addition
563+
if(this.previousStreet !== address) {
564+
this.previousPostcodeValue = postcode;
565+
this.previousHousenumberValue = houseNo;
566+
this.previousValue = this.previousHousenumberAdd = houseNoAdd;
567+
this.previousStreet = address;
568+
}
569+
570+
if(this.previousHousenumberValue || this.previousHousenumberAdd || this.previousValue || this.previousPostcodeValue) {
571+
// Remove addition
572+
if(this.previousValue || this.previousHousenumberAdd) {
573+
address = this.removeOldValueAdditionFromString(address, this.previousValue || this.previousHousenumberAdd);
574+
}
575+
576+
// Remove house number
577+
if(this.previousHousenumberValue) {
578+
address = this.removeOldValueAdditionFromString(address, this.previousHousenumberValue);
579+
}
580+
}
581+
582+
if(houseNo) { // Add house number
583+
address += ' ' + houseNo;
584+
}
585+
if(houseNoAdd) { // Add house number addition
586+
address += ' ' + houseNoAdd;
587+
}
588+
589+
// Save current values
590+
this.previousPostcodeValue = postcode;
591+
this.previousHousenumberValue = houseNo;
592+
this.previousValue = this.previousHousenumberAdd = houseNoAdd;
593+
this.previousStreet = address || undefined;
594+
595+
return address;
596+
597+
},
598+
599+
/**
600+
* Removes given stubstring from the end of the given value string if possible
601+
* @param value
602+
* @param addition
603+
* @returns {string|*}
604+
*/
605+
removeOldValueAdditionFromString: function (value, addition) {
606+
var newValue = value.trim();
607+
var strAddition = "" + addition;
608+
if(newValue.endsWith(strAddition)) {
609+
return newValue.substr(newValue, newValue.length - strAddition.length).trim();
610+
} else {
611+
return value;
612+
}
551613
}
552614
});
553615
});

0 commit comments

Comments
 (0)