@maptiler/geocoding-control 2.1.0-rc1 → 2.1.0-with-autocomplete-timeout

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -65,6 +65,7 @@ export let searchValue = "";
65
65
  export let pickedResultStyle = "full-geometry";
66
66
  export let showPlaceType = "if-needed";
67
67
  export let showResultsWhileTyping = true;
68
+ export let autocompleteTimeout = undefined;
68
69
  export let selectFirst = true;
69
70
  export let flyToSelected = false;
70
71
  export let markerOnSelected = true;
@@ -75,7 +76,7 @@ export let zoom = ZOOM_DEFAULTS;
75
76
  export let apiUrl = "https://api.maptiler.com/geocoding";
76
77
  export let fetchParameters = {};
77
78
  export let iconsBaseUrl = "https://cdn.maptiler.com/maptiler-geocoding-control/v" +
78
- "2.1.0-rc1" +
79
+ "2.1.0-with-autocomplete-timeout" +
79
80
  "/icons/";
80
81
  /**
81
82
  * @deprecated use `adjustUrl`
@@ -144,6 +145,7 @@ let error;
144
145
  let cachedFeatures = [];
145
146
  let abortController;
146
147
  let searchTimeoutRef;
148
+ let autocompleteTimeoutRef;
147
149
  let focusedDelayed;
148
150
  let prevIdToFly;
149
151
  let focused = false;
@@ -203,6 +205,14 @@ $: setTimeout(() => {
203
205
  searchValue = "";
204
206
  }
205
207
  });
208
+ function isInAutocompleteTimeout() {
209
+ return !!autocompleteTimeoutRef;
210
+ }
211
+ $: if (selectFirst && listFeatures?.length) {
212
+ if (!isInAutocompleteTimeout()) {
213
+ selectedItemIndex = 0;
214
+ }
215
+ }
206
216
  $: if (selectFirst &&
207
217
  listFeatures?.length &&
208
218
  selectedItemIndex == -1 &&
@@ -210,6 +220,10 @@ $: if (selectFirst &&
210
220
  selectedItemIndex = 0;
211
221
  }
212
222
  $: selected = listFeatures?.[selectedItemIndex];
223
+ $: if (selected) {
224
+ window.clearTimeout(autocompleteTimeoutRef);
225
+ autocompleteTimeoutRef = undefined;
226
+ }
213
227
  $: if (mapController) {
214
228
  const coords = isQueryReverse(searchValue);
215
229
  mapController.setReverseMarker(coords ? [coords.decimalLongitude, coords.decimalLatitude] : undefined);
@@ -269,9 +283,15 @@ onDestroy(() => {
269
283
  function handleSubmit(event) {
270
284
  focused = false;
271
285
  if (searchTimeoutRef) {
272
- clearTimeout(searchTimeoutRef);
286
+ window.clearTimeout(searchTimeoutRef);
273
287
  searchTimeoutRef = undefined;
274
288
  }
289
+ if (autocompleteTimeoutRef) {
290
+ window.clearTimeout(autocompleteTimeoutRef);
291
+ autocompleteTimeoutRef = undefined;
292
+ search(searchValue, { appendSpace: true });
293
+ return;
294
+ }
275
295
  if (selectedItemIndex > -1 && listFeatures) {
276
296
  picked = listFeatures[selectedItemIndex];
277
297
  searchValue =
@@ -303,7 +323,7 @@ function isQueryReverse(searchValue) {
303
323
  return false;
304
324
  }
305
325
  }
306
- async function search(searchValue, { byId = false, exact = false, } = {}) {
326
+ async function search(searchValue, { byId = false, exact = false, appendSpace = false, } = {}) {
307
327
  error = undefined;
308
328
  abortController?.abort();
309
329
  const ac = new AbortController();
@@ -314,7 +334,7 @@ async function search(searchValue, { byId = false, exact = false, } = {}) {
314
334
  "/" +
315
335
  encodeURIComponent(isReverse
316
336
  ? isReverse.decimalLongitude + "," + isReverse.decimalLatitude
317
- : searchValue) +
337
+ : searchValue + (appendSpace ? " " : "")) +
318
338
  ".json");
319
339
  const sp = urlObj.searchParams;
320
340
  if (language !== undefined) {
@@ -529,21 +549,29 @@ function handleInput(_, debounce = true, reverse = false) {
529
549
  error = undefined;
530
550
  picked = undefined;
531
551
  focused = true;
532
- if (showResultsWhileTyping || reverse) {
533
- if (searchTimeoutRef) {
534
- clearTimeout(searchTimeoutRef);
535
- }
536
- if (searchValue.length < minLength) {
537
- return;
538
- }
539
- const sv = searchValue;
540
- searchTimeoutRef = window.setTimeout(() => {
541
- search(sv).catch((err) => (error = err));
542
- }, debounce ? debounceSearch : 0);
552
+ if (searchTimeoutRef) {
553
+ window.clearTimeout(searchTimeoutRef);
554
+ searchTimeoutRef = undefined;
543
555
  }
544
- else {
556
+ if (autocompleteTimeoutRef) {
557
+ window.clearTimeout(autocompleteTimeoutRef);
558
+ autocompleteTimeoutRef = undefined;
559
+ }
560
+ if ((!showResultsWhileTyping && !reverse) ||
561
+ searchValue.length < minLength) {
545
562
  listFeatures = undefined;
546
- error = undefined;
563
+ return;
564
+ }
565
+ const sv = searchValue;
566
+ searchTimeoutRef = window.setTimeout(() => {
567
+ searchTimeoutRef = undefined;
568
+ search(sv).catch((err) => (error = err));
569
+ }, debounce ? debounceSearch : 0);
570
+ if (!searchValue.endsWith(" ")) {
571
+ autocompleteTimeoutRef = window.setTimeout(() => {
572
+ autocompleteTimeoutRef = undefined;
573
+ search(sv, { appendSpace: true }).catch((err) => (error = err));
574
+ }, autocompleteTimeout);
547
575
  }
548
576
  }
549
577
  function pick(feature) {
@@ -31,6 +31,7 @@ declare const __propDef: {
31
31
  pickedResultStyle?: PickedResultStyle;
32
32
  showPlaceType?: ShowPlaceType;
33
33
  showResultsWhileTyping?: boolean;
34
+ autocompleteTimeout?: number | undefined;
34
35
  selectFirst?: boolean;
35
36
  flyToSelected?: boolean;
36
37
  markerOnSelected?: boolean;
package/svelte/types.d.ts CHANGED
@@ -132,6 +132,7 @@ export type ControlOptions = {
132
132
  * Default value is `false`.
133
133
  */
134
134
  showResultsWhileTyping?: boolean;
135
+ autocompleteTimeout?: number;
135
136
  /**
136
137
  * Set to `false` to disable fuzzy search.
137
138
  *
package/types.d.ts CHANGED
@@ -132,6 +132,7 @@ export type ControlOptions = {
132
132
  * Default value is `false`.
133
133
  */
134
134
  showResultsWhileTyping?: boolean;
135
+ autocompleteTimeout?: number;
135
136
  /**
136
137
  * Set to `false` to disable fuzzy search.
137
138
  *