ngx-google-place-autocomplete
Version:
* A simple and lightweight google place autocomplete directive for Angular2
106 lines • 9.57 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Directive, ElementRef, Output, EventEmitter, NgZone } from '@angular/core';
export class NgxGooglePlaceAutocompleteDirective {
/**
* @param {?} elRef
* @param {?} zone
*/
constructor(elRef, zone) {
this.zone = zone;
this.onSelect = new EventEmitter();
this.element = elRef.nativeElement;
}
/**
* @return {?}
*/
ngOnInit() {
/** @type {?} */
const autocomplete = new google.maps.places.Autocomplete(this.element);
google.maps.event.addListener(autocomplete, 'place_changed', (/**
* @return {?}
*/
() => {
this.zone.run((/**
* @return {?}
*/
() => {
/** @type {?} */
const place = this.getFormattedAddress(autocomplete.getPlace());
if (place) {
this.onSelect.emit(place);
}
}));
}));
}
/**
* @param {?} place
* @return {?}
*/
getFormattedAddress(place) {
/** @type {?} */
const location_obj = {
fullAddress: null,
city: null,
state: null,
streetNumber: null,
streetName: null,
country: null,
postalCode: null
};
for (let i in place.address_components) {
/** @type {?} */
const item = place.address_components[i];
location_obj['fullAddress'] = place.formatted_address;
if (item['types'].indexOf('locality') > -1) {
location_obj['city'] = item['long_name'];
}
else if (item['types'].indexOf('administrative_area_level_1') > -1) {
location_obj['state'] = item['short_name'];
}
else if (item['types'].indexOf('street_number') > -1) {
location_obj['streetNumber'] = item['short_name'];
}
else if (item['types'].indexOf('route') > -1) {
location_obj['streetName'] = item['long_name'];
}
else if (item['types'].indexOf('country') > -1) {
location_obj['country'] = item['long_name'];
}
else if (item['types'].indexOf('postal_code') > -1) {
location_obj['postalCode'] = item['short_name'];
}
}
return location_obj;
}
}
NgxGooglePlaceAutocompleteDirective.decorators = [
{ type: Directive, args: [{
selector: '[ngx-google-place]'
},] }
];
/** @nocollapse */
NgxGooglePlaceAutocompleteDirective.ctorParameters = () => [
{ type: ElementRef },
{ type: NgZone }
];
NgxGooglePlaceAutocompleteDirective.propDecorators = {
onSelect: [{ type: Output }]
};
if (false) {
/**
* @type {?}
* @private
*/
NgxGooglePlaceAutocompleteDirective.prototype.element;
/** @type {?} */
NgxGooglePlaceAutocompleteDirective.prototype.onSelect;
/**
* @type {?}
* @private
*/
NgxGooglePlaceAutocompleteDirective.prototype.zone;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWdvb2dsZS1wbGFjZS1hdXRvY29tcGxldGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWdvb2dsZS1wbGFjZS1hdXRvY29tcGxldGUvIiwic291cmNlcyI6WyJsaWIvbmd4LWdvb2dsZS1wbGFjZS1hdXRvY29tcGxldGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVE1RixNQUFNLE9BQU8sbUNBQW1DOzs7OztJQUs1QyxZQUFZLEtBQWlCLEVBQVUsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7UUFGekMsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR3ZELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztJQUN2QyxDQUFDOzs7O0lBRUQsUUFBUTs7Y0FDRSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUV0RSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLGVBQWU7OztRQUFFLEdBQUcsRUFBRTtZQUM5RCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUc7OztZQUFDLEdBQUcsRUFBRTs7c0JBQ1QsS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQy9ELElBQUksS0FBSyxFQUFFO29CQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM3QjtZQUNMLENBQUMsRUFBQyxDQUFDO1FBQ1AsQ0FBQyxFQUFDLENBQUM7SUFDUCxDQUFDOzs7OztJQUVELG1CQUFtQixDQUFDLEtBQUs7O2NBQ2YsWUFBWSxHQUFHO1lBQ2pCLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLElBQUk7WUFDWCxZQUFZLEVBQUUsSUFBSTtZQUNsQixVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxJQUFJO1NBQ25CO1FBRUQsS0FBSyxJQUFJLENBQUMsSUFBSSxLQUFLLENBQUMsa0JBQWtCLEVBQUU7O2tCQUM5QixJQUFJLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUN4QyxZQUFZLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1lBRXRELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDeEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM1QztpQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsNkJBQTZCLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDbEUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUM5QztpQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BELFlBQVksQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDckQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUM1QyxZQUFZLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xEO2lCQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDOUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUMvQztpQkFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2xELFlBQVksQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDbkQ7U0FDSjtRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7OztZQXpESixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjthQUNqQzs7OztZQU5tQixVQUFVO1lBQWdDLE1BQU07Ozt1QkFXL0QsTUFBTTs7Ozs7OztJQURQLHNEQUFrQzs7SUFDbEMsdURBQTJEOzs7OztJQUU1QixtREFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZGVjbGFyZSBsZXQgZ29vZ2xlOiBhbnk7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW25neC1nb29nbGUtcGxhY2VdJ1xyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE5neEdvb2dsZVBsYWNlQXV0b2NvbXBsZXRlRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgICBwcml2YXRlIGVsZW1lbnQ6IEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGVsUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHpvbmU6IE5nWm9uZSkge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUodGhpcy5lbGVtZW50KTtcclxuXHJcbiAgICAgICAgZ29vZ2xlLm1hcHMuZXZlbnQuYWRkTGlzdGVuZXIoYXV0b2NvbXBsZXRlLCAncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZSA9IHRoaXMuZ2V0Rm9ybWF0dGVkQWRkcmVzcyhhdXRvY29tcGxldGUuZ2V0UGxhY2UoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGxhY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQocGxhY2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGb3JtYXR0ZWRBZGRyZXNzKHBsYWNlKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb25fb2JqID0ge1xyXG4gICAgICAgICAgICBmdWxsQWRkcmVzczogbnVsbCxcclxuICAgICAgICAgICAgY2l0eTogbnVsbCxcclxuICAgICAgICAgICAgc3RhdGU6IG51bGwsXHJcbiAgICAgICAgICAgIHN0cmVldE51bWJlcjogbnVsbCxcclxuICAgICAgICAgICAgc3RyZWV0TmFtZTogbnVsbCxcclxuICAgICAgICAgICAgY291bnRyeTogbnVsbCxcclxuICAgICAgICAgICAgcG9zdGFsQ29kZTogbnVsbFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgaW4gcGxhY2UuYWRkcmVzc19jb21wb25lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBwbGFjZS5hZGRyZXNzX2NvbXBvbmVudHNbaV07XHJcbiAgICAgICAgICAgIGxvY2F0aW9uX29ialsnZnVsbEFkZHJlc3MnXSA9IHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1bJ3R5cGVzJ10uaW5kZXhPZignbG9jYWxpdHknKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbl9vYmpbJ2NpdHknXSA9IGl0ZW1bJ2xvbmdfbmFtZSddO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1bJ3R5cGVzJ10uaW5kZXhPZignYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25fb2JqWydzdGF0ZSddID0gaXRlbVsnc2hvcnRfbmFtZSddO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW1bJ3R5cGVzJ10uaW5kZXhPZignc3RyZWV0X251bWJlcicpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uX29ialsnc3RyZWV0TnVtYmVyJ10gPSBpdGVtWydzaG9ydF9uYW1lJ107XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVsndHlwZXMnXS5pbmRleE9mKCdyb3V0ZScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uX29ialsnc3RyZWV0TmFtZSddID0gaXRlbVsnbG9uZ19uYW1lJ107XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbVsndHlwZXMnXS5pbmRleE9mKCdjb3VudHJ5JykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25fb2JqWydjb3VudHJ5J10gPSBpdGVtWydsb25nX25hbWUnXTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtWyd0eXBlcyddLmluZGV4T2YoJ3Bvc3RhbF9jb2RlJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25fb2JqWydwb3N0YWxDb2RlJ10gPSBpdGVtWydzaG9ydF9uYW1lJ107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBsb2NhdGlvbl9vYmo7XHJcbiAgICB9XHJcbn1cclxuIl19