@@ -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