UNPKG

ngx-google-place-autocomplete

Version:

* A simple and lightweight google place autocomplete directive for Angular2

106 lines 9.57 kB
/** * @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