AutocompleteSearchBox
The AutocompleteSearchBox is used to tie in a Google Maps Places search into a text input field using the Google Maps Places Autocomplete widget.
It's recommended to use the AutocompleteSearchBox over PlacesSearchBox because you have more options to configure the search box. See the Places widgets page "Summary of classes" for more information on the differences.
AutocompleteSearchBox
extends Evented.
Example usage
const autocompleteSearchBox = G.autocompleteSearchBox('.inputSelector');
autocompleteSearchBox.init().then(() => {
autocompleteSearchBox.onPlaceChanged((place, bounds) => {
G.marker({
map: map,
position: place.geometry.location,
tooltip: place.name,
});
map.fitBounds(bounds);
});
});
Creating the AutocompleteSearchBox object
G.autocompleteSearchBox(input?: AutocompleteSearchBoxValue, options? AutocompleteSearchBoxOptions): AutocompleteSearchBox
There are a few ways that you can setup the AutocompleteSearchBox
object.
No parameters.
G.autocompleteSearchBox(): AutocompleteSearchBox
const autocompleteSearchBox = G.autocompleteSearchBox();
Pass the options.
G.autocompleteSearchBox(options: AutocompleteSearchBoxOptions): AutocompleteSearchBox
Parameter | Type | Required | Description |
---|---|---|---|
options | AutocompleteSearchBoxOptions | Yes | The options. |
const autocompleteSearchBox = G.autocompleteSearchBox({
input: '#inputId'
});
Pass the input selector.
G.autocompleteSearchBox(input: HTMLInputElement | string): AutocompleteSearchBox
Parameter | Type | Required | Description |
---|---|---|---|
input | HTMLInputElement | string | Yes | The input selector. |
const autocompleteSearchBox = G.autocompleteSearchBox('#inputId');
Pass the input selector and the options.
G.autocompleteSearchBox(input: HTMLInputElement | string, options: AutocompleteSearchBoxOptions): AutocompleteSearchBox
Parameter | Type | Required | Description |
---|---|---|---|
input | HTMLInputElement | string | Yes | The input selector. |
options | AutocompleteSearchBoxOptions | Yes | The options. |
const myTextField = document.querySelector('.myInput');
const autocompleteSearchBox = G.autocompleteSearchBox(myTextField, {bounds: myLatLngBoundsObject});
Pass an existing AutocompleteSearchBox object.
G.autocompleteSearchBox(object: AutocompleteSearchBox): AutocompleteSearchBox
In this case the AutocompleteSearchBox
object is simply returned.
Parameter | Type | Required | Description |
---|---|---|---|
object | AutocompleteSearchBox | Yes | A AutocompleteSearchBox object. |
const autocompleteSearchBox = G.autocompleteSearchBox(autocompleteSearchBoxObject);
AutocompleteSearchBox value type
The AutocompleteSearchBoxValue
can be one of the following values:
AutocompleteSearchBox
object- AutocompleteSearchBoxOptions object
- An HTMLInputElement object that is the text input to associate the search box with.
- A string CSS selector for the text input to associate the search box with. Any valid selector for
document.querySelector
can be used.
AutocompleteSearchBox options
Type AutocompleteSearchBoxOptions
Option | Type | Default | Description |
---|---|---|---|
bounds | LatLngBoundsValue | A LatLngBounds value type. | |
countryRestriction | string | Array | null | null | The country or countries to restrict the search to. The value should be a single two letter country code or an array of two letter country codes. |
fields | string | Array | ['ALL'] | The fields to be returned from Google when a Place is found. By default all fields are returned. |
input | HTMLInputElement | string | The input selector. | |
strictBounds | boolean | false | Whether the Autocomplete widget should only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent. |
types | string | Array | The types of predictions to be returned. For example, you can restrict to certain business types or location types. See setTypes for more information. |
You can lower your Google billing by only returning the actual fields that you need for each place.
Events
Below are the events that the AutocompleteSearchBox will emit.
Event | Description |
---|---|
place_changed | Called when the user selects a Place. |
place_changed
autocompleteSearchBox.on('place_changed', (event) => {
// Handle the event
console.log('Place: ', event.place);
console.log('Bounds: ', event.bounds);
});
// Or, you can destructure the Event object
autocompleteSearchBox.on('place_changed', ({place, bounds}) => {
// Handle the event
console.log('Place: ', place);
console.log('Bounds: ', bounds);
});
// Or you can call methods to get the data
autocompleteSearchBox.on('place_changed', () => {
// Handle the event
console.log('Place: ', autocompleteSearchBox.getPlace());
console.log('Bounds: ', autocompleteSearchBox.getPlaceBounds());
});
// You can also use the event constant
autocompleteSearchBox.on(G.AutocompleteSearchBoxEvents.PLACE_CHANGED, () => {
// Handle the event
console.log('Place: ', autocompleteSearchBox.getPlace());
console.log('Bounds: ', autocompleteSearchBox.getPlaceBounds());
});
// Or, use the onPlaceChanged() method
autocompleteSearchBox.onPlaceChanged(() => {
// Handle the event
console.log('Place: ', autocompleteSearchBox.getPlace());
console.log('Bounds: ', autocompleteSearchBox.getPlaceBounds());
});
Properties
- Properties inherited from Layer.
Property | Type | Description |
---|---|---|
bounds | LatLngBoundsValue | A LatLngBounds value type. |
countryRestriction | string|Array|null | The country or countries to restrict the search to. The value should be a single two letter country code or an array of two letter country codes. |
fields | string | Array | The fields to be returned from Google when a Place is found. By default all fields are returned. |
input | HTMLInputElement | string | The input selector. |
strictBounds | boolean | Whether the Autocomplete widget should only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent. |
types | null | string | Array | The types of predictions to be returned. For example, you can restrict to certain business types or location types. See setTypes for more information. |
bounds
Get and set the region to use for biasing query predictions. The value returned is the same as getBounds.
Get the bounds. A LatLngBounds object is returned if the bounds exist, otherwise undefined
is returned.
const bounds = autocompleteSearchBox.bounds;
Set the bounds. This does the same thing as the setBounds method.
autocompleteSearchBox.bounds = myLatLngBoundsObject;
countryRestriction
Get and set the country restriction(s) for the search.
Get the country restriction(s).
const countries = autocompleteSearchBox.countryRestriction;
Set the country restriction. The value should be a single two letter country code or an array of two letter country codes. You can only set up to five country code strings. See the IBAN ISO codes for a list. (Only use the Alpha-2 codes).
This does the same thing as the setCountryRestriction method.
// Set a single value
autocompleteSearchBox.countryRestriction = 'us';
// Set mulitple country codes
autocompleteSearchBox.countryRestriction = ['es', 'fr'];
fields
Get and set the fields to return for a matched Place.
Get the fields. The value returned is the same as getFields.
const fields = autocompleteSearchBox.fields;
Set the fields to be included for the Place response when a Place is successfully retrieved. If ['ALL'] is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). For a list of fields see the Google PlaceResult documentation. Nested fields can be specified with dot-paths (for example, "geometry.location"). The default is ['ALL'].
This does the same thing as calling the setFields method.
// Set a single field to return
autocompleteSearchBox.fields = 'geometry';
autocompleteSearchBox.fields = ['geometry'];
// Set multiple fields to return
autocompleteSearchBox.fields = ['address_components', 'geometry'];
// Retrieve all fields
autocompleteSearchBox.fields = ['ALL'];
input
Get and set the selector for the text input to associate the search box with.
Get the input. The value returned is the same as getInput.
const input = autocompleteSearchBox.input;
Set the input. This does the same thing as the setInput method.
autocompleteSearchBox.input = document.querySelector('.inputClass');
// Or
autocompleteSearchBox.input = '.inputClass';
strictBounds
Get and set whether the Autocomplete widget should only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent.
Get the value. The value returned is the same as getStrictBounds.
const strictBounds = autocompleteSearchBox.strictBounds;
Set the value. This does the same thing as calling the setStrictBounds method.
Setting strictBounds
to false
(which is the default) will make the results biased towards, but not restricted to, places contained within the bounds.
Setting strictBounds
to true
will sell the Autocomplete service to only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent.
autocompleteSearchBox.strictBounds = true;
types
Get and set the types of preditions to return.
Get the value. The value returned is the same as getTypes.
const types = autocompleteSearchBox.types;
Set the value. This does the same thing as calling the setTypes method.
See setTypes for more information as there are restrictions on the values that you can set.
// Clear existing types
autocompleteSearchBox.types = null;
// Set a single type
autocompleteSearchBox.types = 'regions';
// Set multiple types
autocompleteSearchBox.types = ['electrician', 'electronics_store', 'hardware_store'];
Methods
getBounds
getBounds(): LatLngBounds | undefined
Get the bounds to which query predictions are biased.
const bounds = autocompleteSearchBox.getBounds();
getCountryRestriction
getCountryRestriction(): string|string[]|null
Get the country or countries to restrict the search to.
const countries = autocompleteSearchBox.getCountryRestriction();
getFields
getFields(): string[]
Get the fields to be included for the Place in the details response when the details are successfully retrieved.
const fields = autocompleteSearchBox.getFields();
getInput
getInput(): HTMLInputElement | undefined
Get the HTML input reference that the autocomplete is associated with, if it's set.
const input = autocompleteSearchBox.getInput();
getPlace
getPlace(): google.maps.places.PlaceResult | undefined
Gets the place that has been found. The results from the places_changed
event is one place and it's the place that the user clicked on.
const place = autocompleteSearchBox.getPlace();
getPlaceBounds
getPlaceBounds(): LatLngBounds | undefined
Get the map bounds based on the place that has been found. This value is available after the user selected a place.
This is often used to update the map bounds to show the selected place.
myMap.fitBounds(autocompleteSearchBox.getPlaceBounds());
getStrictBounds
getStrictBounds(): boolean
Get whether the Autocomplete widget should only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent.
const strictBounds = autocompleteSearchBox.getStrictBounds();
getTypes
getTypes(): string[] | undefined
Get the types of predictions to be returned.
const types = autocompleteSearchBox.getTypes();
init
init(): Promise<void>
Initialize the places search box object. Call this after you've set the input selector.
This must be called in order for the places search box to work.
const autocompleteSearchBox = G.autocompleteSearchBox('.inputSelector');
autocompleteSearchBox.init().then(() => {
autocompleteSearchBox.on('places_changed', () => {
const place = autocompleteSearchBox.getPlace();
G.marker({
map: map,
position: place.geometry.location,
tooltip: place.name,
});
map.fitBounds(autocompleteSearchBox.getPlaceBounds());
});
});
isInitialized
isInitialized(): boolean
Returns whether the places search box object has been initialized.
if (autocompleteSearchBox.isInitialized()) {
// Do something
}
onPlaceChanged
onPlaceChanged(callback: (place: google.maps.places.PlaceResult, bounds: LatLngBounds) => void): void
Event handler for when the user selects a place.
This is an alternate option to doing:
autocompleteSearchBox.on('place_changed', (event) => {
// Handle the event
console.log('Place: ', event.place)
});
Instead, you can do this:
autocompleteSearchBox.onPlaceChanged((place, bounds) => {
G.marker({
map: map,
position: place.geometry.location,
tooltip: place.name,
});
map.fitBounds(bounds);
});
// Or you can call methods to get the data
autocompleteSearchBox.onPlaceChanged(() => {
// Handle the event
console.log('Place: ', autocompleteSearchBox.getPlace());
console.log('Bounds: ', autocompleteSearchBox.getPlaceBounds());
});
setBounds
setBounds(value: LatLngBoundsValue): AutocompleteSearchBox
Sets the region to use for biasing query predictions. Results will only be biased towards this area and not be completely restricted to it.
Parameter | Type | Required | Description |
---|---|---|---|
bounds | LatLngBoundsValue | Yes | A LatLngBounds value type. |
autocompleteSearchBox.setBounds(myLatLngBoundsObject);
setCountryRestriction
setCountryRestriction(value: string | string[] | null): AutocompleteSearchBox
Parameter | Type | Required | Description |
---|---|---|---|
value | string | string[] | null | Yes | The value should be a single two letter country code or an array of two letter country codes. You can only set up to five country code strings. See the IBAN ISO codes for a list. (Only use the Alpha-2 codes). |
// Set a single value
autocompleteSearchBox.setCountryRestriction('us');
// Set mulitple country codes
autocompleteSearchBox.setCountryRestriction(['es', 'fr']);
setFields
setFields(value: string | string[]): AutocompleteSearchBox
Set the fields to be included for the Place response when a Place is successfully retrieved. If ['ALL'] is passed in, all available fields will be returned and billed for (this is not recommended for production deployments). For a list of fields see the Google PlaceResult documentation. Nested fields can be specified with dot-paths (for example, "geometry.location"). The default is ['ALL'].
Parameter | Type | Required | Description |
---|---|---|---|
value | string |string[] | Yes | The field(s) to return for the retrieved place. For a list of fields see the Google PlaceResult documentation. Nested fields can be specified with dot-paths (for example, "geometry.location"). |
// Only return a single field
autocompleteSearchBox.setFields('geometry');
// Retrieve multiple fields
autocompleteSearchBox.setFields(['address_components', 'geometry']);
// Retrieve all fields
autocompleteSearchBox.setFields(['ALL']);
setInput
setInput(value: LatLngBoundsValue): AutocompleteSearchBox
Set the selector for the text input to associate the search box with.
Parameter | Type | Required | Description |
---|---|---|---|
input | HTMLInputElement | string | Yes | The input selector. |
autocompleteSearchBox.setInput('.myInputSelector');
setOptions
setOptions(options: AutocompleteSearchBoxOptions): AutocompleteSearchBox
Set the options for the places search box.
Parameter | Type | Required | Description |
---|---|---|---|
options | AutocompleteSearchBoxOptions | Yes | The places search box options. |
autocompleteSearchBox = G.autocompleteSearchBox();
autocompleteSearchBox.setOptions({
input: '#inputId'
});
setStrictBounds
Set whether the Autocomplete widget should only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent.
setStrictBounds(value: boolean): AutocompleteSearchBox
Parameter | Type | Required | Description |
---|---|---|---|
value | boolean | Yes | Whether the Autocomplete widget should only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent. |
Setting strictBounds
to false
(which is the default) will make the results biased towards, but not restricted to, places contained within the bounds.
Setting strictBounds
to true
will sell the Autocomplete service to only return those places that are inside the bounds of the Autocomplete widget at the time the query is sent.
autocompleteSearchBox.setStrictBounds(true);
setTypes
setTypes(value: null | string | string[]): AutocompleteSearchBox
Set the types of predictions to be returned. For example, you can restrict to certain business types or location types.
Parameter | Type | Required | Description |
---|---|---|---|
value | null | string | Array | Yes | The types to set. |
To clear the types set it to null
or an empty array []
.
// Clear existing types
autocompleteSearchBox.setTypes(null);
// Set a single type
autocompleteSearchBox.setTypes('regions');
// Set multiple types
autocompleteSearchBox.setTypes(['electrician', 'electronics_store', 'hardware_store']);