address_suggestion-1.0.3/js/address_suggestion.js
js/address_suggestion.js
(function ($, Drupal, once) {
Drupal.behaviors.address_suggestion = {
attach: function (context, settings) {
$(once('initiate-autocomplete', 'input.address-suggestion', context)).each(function () {
const formWrapper = $(this).closest('.js-form-wrapper');
const formPage = formWrapper.closest('form');
const inputAutocomplete = $(this).attr('role', 'presentation');
const uiAutocomplete = inputAutocomplete.data('ui-autocomplete');
const isHide = inputAutocomplete.data('hide');
uiAutocomplete.options.select = function (event, ui) {
event.preventDefault();
formWrapper.find('input.address-line1').val(ui.item.street_name);
formWrapper.find('input.address-line2').val(ui.item.district);
if (ui.item.name && ui.item.name !== '') {
formWrapper.find('input.organization').val(ui.item.name);
}
formWrapper.find('input.postal-code').val(ui.item.zip_code);
formWrapper.find('input.locality').val(ui.item.town_name);
ui.item.label = ui.item.label.substring(0, 128);
if (typeof ui.item.state !== "undefined") {
ui.item.state = ui.item.state.substring(0, 128);
formWrapper.find('select.administrative-area').val(ui.item.state);
} else if (typeof ui.item.administrative_area !== "undefined") {
formWrapper.find('select.administrative-area').val(ui.item.administrative_area);
}
if (formWrapper.find('input.postal-code').length === 0 && formWrapper.find('input.locality').length === 0) {
formWrapper.find('input.address-line1').val(ui.item.label);
}
let administrative = formWrapper.find('.administrative-area');
if (administrative.length && !administrative.val()) {
if (administrative.is('select') && administrative.find('option[value="' + ui.item.administrative_area + '"]').length === 0) {
let newOption = '<option value="' + ui.item.administrative_area + '">' + ui.item.administrative_area + '</option>';
administrative.append(newOption);
}
administrative.val(ui.item.administrative_area);
}
if ("location_field" in settings.address_suggestion && 'location' in ui.item) {
let locationField = settings.address_suggestion.location_field;
let typeField = settings.address_suggestion.type_field;
let latitude = ui.item.location.latitude;
let longitude = ui.item.location.longitude;
function setLocationValues() {
if (typeField === 'geolocation') {
formPage.find("input[name*='" + locationField + "[0][lat]']").val(latitude);
formPage.find("input[name*='" + locationField + "[0][lng]']").val(longitude);
}
if (typeField === 'geofield') {
formPage.find("input[name*='" + locationField + "[0][value][lat]']").val(latitude);
formPage.find("input[name*='" + locationField + "[0][value][lon]']").val(longitude);
}
}
setLocationValues();
}
formWrapper.find('input.address-line').val(ui.item.label);
formWrapper.find('select.country').val(ui.item.country_code.toUpperCase());
if (isHide) {
if (administrative.val() === '') {
formWrapper.find('.administrative-area').remove();
}
let country = ui.item.country_code.toUpperCase();
formWrapper.find('input.country').val(country);
}
};
});
}
};
}(jQuery, Drupal, once));
