I have created a lookup component which on entering few characters of a location will display location predictions.
There are 3 methods that has been defined in client-side controller:
keyPressController
: executed when the user enters a search key. I have taken into consideration that the user need to enter at least 3 characters to fetch the location predictions.selectOption
: executed when the user selects a value from the list boxclear
: executed on click of cross icon to remove the selected value from the lookup
To fetch the results, I am calling Place Autocomplete service, a part of the Google Places API Web Service, using the below Apex method, which returns location predictions in response to this HTTP request. For more details about this web service, please check the link in the references section of this post.
@AuraEnabled
public static string getAddressAutoComplete(String input, String types) {
String url = 'https://maps.googleapis.com/maps/api/place/autocomplete/json?input='
+ EncodingUtil.urlEncode(input, 'UTF-8')
+ '&types=' + types
+ '&key=' + GoogleMapsController.getGoogleMapsAPIKey();
return GoogleMapsController.getHttp(url);
}
The response which is in JSON format is parsed in Javascript in the helper method of the component as below:
displayOptionsLocation: function (component, searchKey) {
var action = component.get("c.getAddressAutoComplete");
action.setParams({
"input": searchKey,
"types": '(regions)'
});
action.setCallback(this, function (response) {
var state = response.getState();
if (state === "SUCCESS") {
var options = JSON.parse(response.getReturnValue());
var predictions = options.predictions;
var addresses = [];
if (predictions.length > 0) {
for (var i = 0; i < predictions.length; i++) {
addresses.push(
{
value: predictions[i].types[0],
label: predictions[i].description
});
}
component.set("v.filteredOptions", addresses);
}
}
});
$A.enqueueAction(action);
}
The look and feel of this component is controlled by
$A.util.addClass
and $A.util.removeClass
methods.Please check the github link for the component code below:
https://github.com/iamsonal/GoogleMapsAutocomplete
References:
https://developers.google.com/places/web-service/autocomplete