UNPKG

@geoapify/geocoder-autocomplete

Version:

A JavaScript address autocomplete input, compatible with Leaflet, MapLibre, OpenLayers, and other map libraries for efficient location search and geocoding.

117 lines (116 loc) 3.76 kB
export class Callbacks { changeCallbacks = []; suggestionsChangeCallbacks = []; inputCallbacks = []; openCallbacks = []; closeCallbacks = []; requestStartCallbacks = []; requestEndCallbacks = []; addCallback(operation, callback) { let currentCallbacks = this.getCallbacksByOperation(operation); if (currentCallbacks) { if (currentCallbacks.indexOf(callback) < 0) { currentCallbacks.push(callback); } } } removeCallback(operation, callback) { let currentCallbacks = this.getCallbacksByOperation(operation); if (currentCallbacks) { if (currentCallbacks.indexOf(callback) >= 0) { currentCallbacks.splice(currentCallbacks.indexOf(callback), 1); this.setCallbacksByOperation(operation, currentCallbacks); } else if (!callback) { this.setCallbacksByOperation(operation, []); } } } notifyInputChange(currentValue) { this.inputCallbacks.forEach(callback => callback(currentValue)); } notifyChange(feature) { this.changeCallbacks.forEach(callback => callback(feature)); } notifySuggestions(features) { this.suggestionsChangeCallbacks.forEach(callback => callback(features)); } notifyOpened() { this.openCallbacks.forEach(callback => callback(true)); } notifyClosed() { this.closeCallbacks.forEach(callback => callback(false)); } notifyRequestStart(query) { this.requestStartCallbacks.forEach(callback => callback(query)); } notifyRequestEnd(success, data, error) { this.requestEndCallbacks.forEach(callback => callback(success, data, error)); } getCallbacksByOperation(operation) { let currentCallbacks = null; switch (operation) { case 'select': { currentCallbacks = this.changeCallbacks; break; } case 'suggestions': { currentCallbacks = this.suggestionsChangeCallbacks; break; } case 'input': { currentCallbacks = this.inputCallbacks; break; } case 'close': { currentCallbacks = this.closeCallbacks; break; } case 'open': { currentCallbacks = this.openCallbacks; break; } case 'request_start': { currentCallbacks = this.requestStartCallbacks; break; } case 'request_end': { currentCallbacks = this.requestEndCallbacks; break; } } return currentCallbacks; } setCallbacksByOperation(operation, callbacks) { switch (operation) { case 'select': { this.changeCallbacks = callbacks; break; } case 'suggestions': { this.suggestionsChangeCallbacks = callbacks; break; } case 'input': { this.inputCallbacks = callbacks; break; } case 'close': { this.closeCallbacks = callbacks; break; } case 'open': { this.openCallbacks = callbacks; break; } case 'request_start': { this.requestStartCallbacks = callbacks; break; } case 'request_end': { this.requestEndCallbacks = callbacks; break; } } } }