@@ -4,118 +4,113 @@ export default (zipcodeField = 'zipcode', houseNumberField = 'house_number', hou
44 houseNumberAdditionField,
55 streetField,
66 cityField,
7- zipcodeElement : null ,
8- houseNumberElement : null ,
9- houseNumberAdditionElement : null ,
10- streetElement : null ,
11- cityElement : null ,
127
138 init ( ) {
14- this . zipcodeElement = this . getElement ( this . zipcodeField )
15- this . houseNumberElement = this . getElement ( this . houseNumberField )
16- this . houseNumberAdditionElement = this . getElement ( this . houseNumberAdditionField )
17- this . streetElement = this . getElement ( this . streetField )
18- this . cityElement = this . getElement ( this . cityField )
19-
20- this . bindChange ( this . zipcodeElement )
21- this . bindChange ( this . houseNumberElement )
22- this . bindChange ( this . houseNumberAdditionElement )
9+ let watchedFields = new Set (
10+ [ this . zipcodeField , this . houseNumberField , this . houseNumberAdditionField ] . filter ( Boolean ) ,
11+ )
12+
13+ this . $el . addEventListener ( 'change' , ( event ) => {
14+ let target = event . target
15+
16+ if ( target ?. id && watchedFields . has ( target . id ) ) {
17+ this . lookup ( )
18+ }
19+ } )
2320 } ,
2421
2522 getElement ( field ) {
26- let element = null
27-
28- if ( field ) {
29- element = document . getElementById ( field )
23+ if ( ! field ) {
24+ return null
3025 }
3126
32- return element
33- } ,
27+ let selector = `#${ CSS . escape ( field ) } `
3428
35- bindChange ( element ) {
36- if ( element ) {
37- element . addEventListener ( 'change' , ( ) => {
38- this . lookup ( )
39- } )
40- }
29+ return this . $el . querySelector ( selector ) ?? window . document . getElementById ( field )
4130 } ,
4231
43- getHouseNumberAddition ( ) {
44- let houseNumberAddition = ''
45-
46- if ( this . houseNumberAdditionElement && this . houseNumberAdditionElement . value ) {
47- houseNumberAddition = this . houseNumberAdditionElement . value
32+ getHouseNumberAddition ( houseNumberAdditionElement ) {
33+ if ( houseNumberAdditionElement && houseNumberAdditionElement . value ) {
34+ return houseNumberAdditionElement . value
4835 }
4936
50- return houseNumberAddition
37+ return ''
5138 } ,
5239
53- clearAddress ( ) {
54- if ( this . streetElement ) {
55- this . streetElement . value = ''
40+ clearAddress ( streetElement , cityElement ) {
41+ if ( streetElement ) {
42+ streetElement . value = ''
5643 }
5744
58- if ( this . cityElement ) {
59- this . cityElement . value = ''
45+ if ( cityElement ) {
46+ cityElement . value = ''
6047 }
6148 } ,
6249
63- setAddressState ( disabled ) {
64- if ( this . streetElement ) {
65- this . streetElement . disabled = disabled
50+ setAddressState ( streetElement , cityElement , disabled ) {
51+ if ( streetElement ) {
52+ streetElement . disabled = disabled
6653 }
6754
68- if ( this . cityElement ) {
69- this . cityElement . disabled = disabled
55+ if ( cityElement ) {
56+ cityElement . disabled = disabled
7057 }
7158 } ,
7259
7360 async lookup ( ) {
74- let zipcode = this . zipcodeElement ? this . zipcodeElement . value : ''
75- let houseNumber = this . houseNumberElement ? this . houseNumberElement . value : ''
76- let houseNumberAddition = this . getHouseNumberAddition ( )
61+ let zipcodeElement = this . getElement ( this . zipcodeField )
62+ let houseNumberElement = this . getElement ( this . houseNumberField )
63+ let houseNumberAdditionElement = this . getElement ( this . houseNumberAdditionField )
64+ let streetElement = this . getElement ( this . streetField )
65+ let cityElement = this . getElement ( this . cityField )
66+
67+ let zipcode = zipcodeElement ? zipcodeElement . value : ''
68+ let houseNumber = houseNumberElement ? houseNumberElement . value : ''
69+ let houseNumberAddition = this . getHouseNumberAddition ( houseNumberAdditionElement )
7770
7871 let canLookup = Boolean (
7972 zipcode &&
8073 houseNumber &&
81- this . streetElement &&
82- this . cityElement
74+ streetElement &&
75+ cityElement
8376 )
8477
85- if ( canLookup ) {
86- this . setAddressState ( true )
87-
88- let responseData = null
89-
90- try {
91- let response = await fetch ( '/api/postcodenl' , {
92- method : 'POST' ,
93- headers : {
94- 'Content-Type' : 'application/json' ,
95- } ,
96- body : JSON . stringify ( {
97- postcode : zipcode ,
98- house_number : houseNumber ,
99- house_number_addition : houseNumberAddition ,
100- } ) ,
101- } )
102-
103- let responseText = await response . text ( )
104-
105- responseData = JSON . parse ( responseText )
106- } catch ( error ) {
107- console . error ( error )
108- responseData = null
109- }
78+ if ( ! canLookup ) {
79+ return
80+ }
81+
82+ this . setAddressState ( streetElement , cityElement , true )
83+
84+ let responseData = null
85+
86+ try {
87+ let response = await fetch ( '/api/postcodenl' , {
88+ method : 'POST' ,
89+ headers : {
90+ 'Content-Type' : 'application/json' ,
91+ } ,
92+ body : JSON . stringify ( {
93+ postcode : zipcode ,
94+ house_number : houseNumber ,
95+ house_number_addition : houseNumberAddition ,
96+ } ) ,
97+ } )
11098
111- this . setAddressState ( false )
99+ let responseText = await response . text ( )
112100
113- if ( responseData && responseData . city && responseData . street ) {
114- this . streetElement . value = responseData . street
115- this . cityElement . value = responseData . city
116- } else {
117- this . clearAddress ( )
118- }
101+ responseData = JSON . parse ( responseText )
102+ } catch ( error ) {
103+ console . error ( error )
104+ responseData = null
105+ }
106+
107+ this . setAddressState ( streetElement , cityElement , false )
108+
109+ if ( responseData && responseData . city && responseData . street ) {
110+ streetElement . value = responseData . street
111+ cityElement . value = responseData . city
112+ } else {
113+ this . clearAddress ( streetElement , cityElement )
119114 }
120115 } ,
121- } )
116+ } )
0 commit comments