Skip to content

Commit a9447a2

Browse files
committed
Make methods more flexible with regards to relevant features.
1 parent d68658f commit a9447a2

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/mapbox.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,13 @@ type MapBoxQueryOptions<T extends BaseMapBoxGeocodingOptions> = {
6363
[K in keyof Omit<T, "countries" | "types">]: T[K];
6464
} & MapBoxAdjustedGeocodingParams;
6565

66-
const RELEVANT_FEATURE_TYPES = ["postcode", "place", "region", "country"];
66+
const DEFAULT_RELEVANT_FEATURE_TYPES = ["postcode", "place", "region", "country"];
6767
const NA_COUNTRIES = ["United States", "Canada", "Mexico"];
6868
const NA_ABBREVIATIONS = ["US-", "CA-", "MX-"];
6969

70-
export function findBestFeature(collection: MapBoxFeatureCollection): MapBoxFeature | null {
71-
const relevantFeatures = collection.features.filter(feature => RELEVANT_FEATURE_TYPES.some(type => feature.place_type.includes(type)));
70+
export function findBestFeature(collection: MapBoxFeatureCollection, relevantTypes?: MapBoxFeatureType[]): MapBoxFeature | null {
71+
const types = relevantTypes ?? DEFAULT_RELEVANT_FEATURE_TYPES;
72+
const relevantFeatures = collection.features.filter(feature => types.some(type => feature.place_type.includes(type)));
7273
const placeFeature = relevantFeatures.find(feature => feature.place_type.includes("place")) ?? (relevantFeatures.find(feature => feature.place_type.includes("postcode")) ?? undefined);
7374
if (placeFeature !== undefined) {
7475
return placeFeature;
@@ -84,14 +85,15 @@ export function findBestFeature(collection: MapBoxFeatureCollection): MapBoxFeat
8485
return null;
8586
}
8687

87-
export function textForMapboxFeature(feature: MapBoxFeature): string {
88+
export function textForMapboxFeature(feature: MapBoxFeature, relevantTypes?: MapBoxFeatureType[]): string {
89+
const types = relevantTypes ?? DEFAULT_RELEVANT_FEATURE_TYPES;
8890
const pieces: string[] = [];
8991
if (feature.text) {
9092
pieces.push(feature.text);
9193
}
9294
feature.context.forEach(item => {
9395
const itemType = item.id.split(".")[0];
94-
if (!RELEVANT_FEATURE_TYPES.includes(itemType)) {
96+
if (!types.includes(itemType)) {
9597
return;
9698
}
9799
let text = null as string | null;
@@ -113,8 +115,8 @@ export function textForMapboxFeature(feature: MapBoxFeature): string {
113115
return pieces.join(", ");
114116
}
115117

116-
export function textForMapboxResults(results: MapBoxFeatureCollection): string {
117-
const feature = findBestFeature(results);
118+
export function textForMapboxResults(results: MapBoxFeatureCollection, relevantTypes?: MapBoxFeatureType[]): string {
119+
const feature = findBestFeature(results, relevantTypes);
118120
return feature !== null ? textForMapboxFeature(feature) : "";
119121
}
120122

0 commit comments

Comments
 (0)