Skip to content
Snippets Groups Projects
Commit 279ef709 authored by Italo Mairo's avatar Italo Mairo
Browse files

geocoder.drupal.js fixes (Issue #3418576: Autocomplete JS not working)

parent 248e9c80
No related branches found
No related tags found
No related merge requests found
Pipeline #86334 canceled
......@@ -3,71 +3,59 @@
* Javascript for the Geocoder Origin Autocomplete.
*/
(function geocoderOriginAutocomplete($, Drupal, drupalSettings) {
(function($, Drupal, drupalSettings) {
'use strict';
Drupal.behaviors.geocode_origin_autocomplete = {
attach(context, settings) {
function geocode(address, providers, addressFormat) {
const { baseUrl } = drupalSettings.path;
const geocodePath = `${baseUrl}geocoder / api / geocode`;
const addressFormatQueryUrl =
addressFormat === null ? '' : ` & addressFormat = ${addressFormat}`;
attach: function(context, settings) {
function geocode (address, providers, address_format) {
const base_url = drupalSettings.path.baseUrl;
const geocode_path = base_url + 'geocoder/api/geocode';
const address_format_query_url = address_format === null ? '' : '&address_format=' + address_format;
return $.ajax({
url: `${geocodePath} ? address = ${encodeURIComponent(
address,
)} & geocoder = ${providers}${addressFormatQueryUrl}`,
type: 'GET',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: geocode_path + '?address=' + encodeURIComponent(address) + '&geocoder=' + providers + address_format_query_url,
type:"GET",
contentType:"application/json; charset=utf-8",
dataType: "json",
});
}
// Run filters on page load if state is saved by browser.
once(
'autocomplete-enabled',
'.origin-address-autocomplete .address-input',
context,
).forEach(function setupAutocomplete(element) {
const providers =
settings.geocode_origin_autocomplete.providers.toString();
const { addressFormat } = settings.geocode_origin_autocomplete;
$(element)
.autocomplete({
once('autocomplete-enabled', '.origin-address-autocomplete .address-input', context).forEach(function (element) {
const providers = settings.geocode_origin_autocomplete['providers'].toString();
const address_format = settings.geocode_origin_autocomplete['address_format'];
$(element).autocomplete({
autoFocus: true,
minLength: settings.geocode_origin_autocomplete.minTerms || 4,
minLength: settings.geocode_origin_autocomplete['minTerms'] || 4,
delay: settings.geocode_origin_autocomplete.delay || 800,
// This bit uses the geocoder to fetch address values.
source(request, response) {
const thisElement = this.element;
source: function (request, response) {
let thisElement = this.element;
thisElement.addClass('ui-autocomplete-loading');
// Execute the geocoder.
$.when(
/* eslint-disable max-nested-callbacks */
geocode(request.term, providers, addressFormat).then(
$.when(geocode(request.term, providers, address_format).then(
// On Resolve/Success.
function handleSuccess(results) {
response(
$.map(results, function getAddressValue(item) {
function (results) {
response($.map(results, function (item) {
thisElement.removeClass('ui-autocomplete-loading');
return {
// the value property is needed to be passed to the select.
value: item.formatted_address,
value: item['formatted_address'],
};
}),
);
}));
},
// On Reject/Error.
function handleFailure() {
response(function evalFalse() {
function() {
response(function(){
return false;
});
},
),
/* eslint-enable max-nested-callbacks */
);
},
})
.addClass('form-autocomplete');
}));
}
}).addClass('form-autocomplete');
});
},
}
};
})(jQuery, Drupal, drupalSettings);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment