Skip to content

Commit 9412f4c

Browse files
fix: duplicate postcode suggested
Using utility utilArrayUniqBy provided in the iD codebase to fix the duplication issue.
1 parent 89af800 commit 9412f4c

File tree

1 file changed

+41
-40
lines changed

1 file changed

+41
-40
lines changed

modules/ui/fields/address.js

+41-40
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@ export function uiFieldAddress(field, context) {
2424
['housenumber', 'street'],
2525
['city', 'postcode']
2626
]
27-
}];
27+
}];
2828

2929
fileFetcher.get('address_formats')
30-
.then(function(d) {
30+
.then(function (d) {
3131
_addressFormats = d;
3232
if (!_selection.empty()) {
3333
_selection.call(address);
3434
}
3535
})
36-
.catch(function() { /* ignore */ });
36+
.catch(function () { /* ignore */ });
3737

3838

3939
function getNear(isAddressable, type, searchRadius, resultProp) {
@@ -70,7 +70,7 @@ export function uiFieldAddress(field, context) {
7070
klass: `address-${type}`
7171
};
7272
})
73-
.sort(function(a, b) {
73+
.sort(function (a, b) {
7474
return a.dist - b.dist;
7575
});
7676

@@ -114,9 +114,10 @@ export function uiFieldAddress(field, context) {
114114
}
115115

116116
function getNearPostcodes() {
117-
return [... new Set([]
117+
const postcodes = []
118118
.concat(getNearValues('postcode'))
119-
.concat(getNear(d => d.tags.postal_code, 'postcode', 200, 'postal_code')))];
119+
.concat(getNear(d => d.tags.postal_code, 'postcode', 200, 'postal_code'));
120+
return utilArrayUniqBy(postcodes, item => item.value);
120121
}
121122

122123
function getNearValues(key) {
@@ -152,17 +153,17 @@ export function uiFieldAddress(field, context) {
152153
];
153154

154155
var widths = addressFormat.widths || {
155-
housenumber: 1/5, unit: 1/5, street: 1/2, place: 1/2,
156-
city: 2/3, state: 1/4, postcode: 1/3
156+
housenumber: 1 / 5, unit: 1 / 5, street: 1 / 2, place: 1 / 2,
157+
city: 2 / 3, state: 1 / 4, postcode: 1 / 3
157158
};
158159

159160
function row(r) {
160161
// Normalize widths.
161-
var total = r.reduce(function(sum, key) {
162+
var total = r.reduce(function (sum, key) {
162163
return sum + (widths[key] || 0.5);
163164
}, 0);
164165

165-
return r.map(function(key) {
166+
return r.map(function (key) {
166167
return {
167168
id: key,
168169
width: (widths[key] || 0.5) / total
@@ -171,7 +172,7 @@ export function uiFieldAddress(field, context) {
171172
}
172173

173174
var rows = _wrap.selectAll('.addr-row')
174-
.data(addressFormat.format, function(d) {
175+
.data(addressFormat.format, function (d) {
175176
return d.toString();
176177
});
177178

@@ -201,23 +202,23 @@ export function uiFieldAddress(field, context) {
201202
switch (d.id) {
202203
case 'street':
203204
nearValues = getNearStreets;
204-
break;
205+
break;
205206
case 'place':
206207
nearValues = getNearPlaces;
207-
break;
208+
break;
208209
case 'street+place':
209210
nearValues = () => []
210211
.concat(getNearStreets())
211212
.concat(getNearPlaces());
212213
d.isAutoStreetPlace = true;
213214
d.id = _tags[`${field.key}:place`] ? 'place' : 'street';
214-
break;
215+
break;
215216
case 'city':
216217
nearValues = getNearCities;
217-
break;
218+
break;
218219
case 'postcode':
219220
nearValues = getNearPostcodes;
220-
break;
221+
break;
221222
default:
222223
nearValues = getNearValues;
223224
}
@@ -226,12 +227,12 @@ export function uiFieldAddress(field, context) {
226227
.call(uiCombobox(context, `address-${d.isAutoStreetPlace ? 'street-place' : d.id}`)
227228
.minItems(1)
228229
.caseSensitive(true)
229-
.fetcher(function(typedValue, callback) {
230+
.fetcher(function (typedValue, callback) {
230231
typedValue = typedValue.toLowerCase();
231232
callback(nearValues(d.id)
232233
.filter(v => v.value.toLowerCase().indexOf(typedValue) !== -1));
233234
})
234-
.on('accept', function(selected) {
235+
.on('accept', function (selected) {
235236
if (d.isAutoStreetPlace) {
236237
// set subtag depending on selected entry
237238
d.id = selected ? selected.type : 'street';
@@ -283,7 +284,7 @@ export function uiFieldAddress(field, context) {
283284

284285

285286
function change(onInput) {
286-
return function() {
287+
return function () {
287288
var tags = {};
288289

289290
_wrap.selectAll('input')
@@ -316,7 +317,7 @@ export function uiFieldAddress(field, context) {
316317

317318

318319
function updatePlaceholder(inputSelection) {
319-
return inputSelection.attr('placeholder', function(subfield) {
320+
return inputSelection.attr('placeholder', function (subfield) {
320321
if (_tags && Array.isArray(_tags[field.key + ':' + subfield.id])) {
321322
return t('inspector.multiple_values');
322323
}
@@ -339,28 +340,28 @@ export function uiFieldAddress(field, context) {
339340

340341
function updateTags(tags) {
341342
utilGetSetValue(_wrap.selectAll('input'), subfield => {
342-
var val;
343-
if (subfield.isAutoStreetPlace) {
344-
const streetKey = `${field.key}:street`;
345-
const placeKey = `${field.key}:place`;
346-
347-
if (tags[streetKey] !== undefined || tags[placeKey] === undefined) {
348-
val = tags[streetKey];
349-
subfield.id = 'street';
350-
} else {
351-
val = tags[placeKey];
352-
subfield.id = 'place';
353-
}
343+
var val;
344+
if (subfield.isAutoStreetPlace) {
345+
const streetKey = `${field.key}:street`;
346+
const placeKey = `${field.key}:place`;
347+
348+
if (tags[streetKey] !== undefined || tags[placeKey] === undefined) {
349+
val = tags[streetKey];
350+
subfield.id = 'street';
354351
} else {
355-
val = tags[`${field.key}:${subfield.id}`];
352+
val = tags[placeKey];
353+
subfield.id = 'place';
356354
}
357-
return typeof val === 'string' ? val : '';
358-
})
359-
.attr('title', function(subfield) {
355+
} else {
356+
val = tags[`${field.key}:${subfield.id}`];
357+
}
358+
return typeof val === 'string' ? val : '';
359+
})
360+
.attr('title', function (subfield) {
360361
var val = tags[field.key + ':' + subfield.id];
361362
return (val && Array.isArray(val)) ? val.filter(Boolean).join('\n') : undefined;
362363
})
363-
.classed('mixed', function(subfield) {
364+
.classed('mixed', function (subfield) {
364365
return Array.isArray(tags[field.key + ':' + subfield.id]);
365366
})
366367
.call(updatePlaceholder);
@@ -372,20 +373,20 @@ export function uiFieldAddress(field, context) {
372373
}
373374

374375

375-
address.entityIDs = function(val) {
376+
address.entityIDs = function (val) {
376377
if (!arguments.length) return _entityIDs;
377378
_entityIDs = val;
378379
return address;
379380
};
380381

381382

382-
address.tags = function(tags) {
383+
address.tags = function (tags) {
383384
_tags = tags;
384385
updateTags(tags);
385386
};
386387

387388

388-
address.focus = function() {
389+
address.focus = function () {
389390
var node = _wrap.selectAll('input').node();
390391
if (node) node.focus();
391392
};

0 commit comments

Comments
 (0)