Skip to content

Commit 6d3e9ee

Browse files
Fixed postcode field lookup for hidden fields
2 parents 57549b5 + 1bced96 commit 6d3e9ee

1 file changed

Lines changed: 75 additions & 80 deletions

File tree

resources/js/components/postcodeNL.js

Lines changed: 75 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)