import {Component, Directive, Input, Output, ElementRef, EventEmitter, OnInit} from '@angular/core'; import {GooglePlaceService} from './ng2-google-place.service'; import {Address} from './ng2-google-place.classes' declare var google:any; @Directive({ selector: '[ng2-google-place-autocomplete]', }) export class GooglePlaceDirective implements OnInit { @Input('options') options:any; @Output() CountryCodes : EventEmitter = new EventEmitter(); @Output() setAddress : EventEmitter = new EventEmitter(); @Output() street_number: EventEmitter = new EventEmitter(); @Output() postal_code: EventEmitter = new EventEmitter(); @Output() country : EventEmitter = new EventEmitter(); @Output() lat : EventEmitter = new EventEmitter(); @Output() lng: EventEmitter = new EventEmitter(); @Output() adr_address: EventEmitter = new EventEmitter(); @Output() formatted_address: EventEmitter = new EventEmitter(); @Output() name: EventEmitter = new EventEmitter(); @Output() place_id: EventEmitter = new EventEmitter(); @Output() types: EventEmitter = new EventEmitter(); @Output() url: EventEmitter = new EventEmitter(); @Output() utc_offset: EventEmitter = new EventEmitter(); @Output() vicinity: EventEmitter = new EventEmitter(); @Output() photos: EventEmitter = new EventEmitter(); @Output() street: EventEmitter = new EventEmitter(); @Output() city: EventEmitter = new EventEmitter(); @Output() state: EventEmitter = new EventEmitter(); @Output() district: EventEmitter = new EventEmitter(); /* NOT USED YET @Output() intersection: EventEmitter = new EventEmitter(); @Output() political: EventEmitter = new EventEmitter(); @Output() colloquial_area: EventEmitter = new EventEmitter(); @Output() ward: EventEmitter = new EventEmitter(); @Output() administrative_area_level_3: EventEmitter = new EventEmitter(); @Output() administrative_area_level_4: EventEmitter = new EventEmitter(); @Output() administrative_area_level_5: EventEmitter = new EventEmitter(); @Output() sublocality: EventEmitter = new EventEmitter(); @Output() sublocality_level_1: EventEmitter = new EventEmitter(); @Output() sublocality_level_2: EventEmitter = new EventEmitter(); @Output() sublocality_level_3: EventEmitter = new EventEmitter(); @Output() sublocality_level_4: EventEmitter = new EventEmitter(); @Output() sublocality_level_5: EventEmitter = new EventEmitter(); @Output() neighborhood: EventEmitter = new EventEmitter(); @Output() premise: EventEmitter = new EventEmitter(); @Output() subpremise: EventEmitter = new EventEmitter(); @Output() natural_feature: EventEmitter = new EventEmitter(); @Output() airport: EventEmitter = new EventEmitter(); @Output() park: EventEmitter = new EventEmitter(); @Output() point_of_interest: EventEmitter = new EventEmitter(); @Output() floor: EventEmitter = new EventEmitter(); @Output() establishment: EventEmitter = new EventEmitter(); @Output() parking: EventEmitter = new EventEmitter(); @Output() post_box: EventEmitter = new EventEmitter(); @Output() room: EventEmitter = new EventEmitter(); @Output() postal_town: EventEmitter = new EventEmitter(); @Output() bus_station: EventEmitter = new EventEmitter(); @Output() train_station: EventEmitter = new EventEmitter(); @Output() transit_station: EventEmitter = new EventEmitter(); */ autocomplete:any; trigger:any; place:Address; constructor(private el: ElementRef, private service: GooglePlaceService) { } ngOnInit(){ this.CountryCodes.emit(this.service.countryIsoCode()) this.autocomplete = new google.maps.places.Autocomplete(this.el.nativeElement, this.options); this.trigger = this.autocomplete.addListener('place_changed', () => { this.place = this.autocomplete.getPlace(); if (this.place && this.place.place_id){ this.invokeEvent() } }); } invokeEvent() { this.setAddress.emit(this.place); this.street_number.emit(this.service.street_number(this.place.address_components) ?this.service.street_number(this.place.address_components) : null) this.street.emit(this.service.street(this.place.address_components) ? this.service.street(this.place.address_components) : null) this.city.emit(this.service.city(this.place.address_components) ? this.service.city(this.place.address_components) : null) this.state.emit(this.service.state(this.place.address_components) ? this.service.state(this.place.address_components) : null) this.country.emit(this.service.country(this.place.address_components) ? this.service.country(this.place.address_components) : null) this.postal_code.emit(this.service.postal_code(this.place.address_components) ? this.service.postal_code(this.place.address_components) : null) this.district.emit(this.service.administrative_area_level_2(this.place.address_components) ? this.service.administrative_area_level_2(this.place.address_components) : null) this.lat.emit(this.place.geometry.location.lat() ? this.place.geometry.location.lat() : null) this.lng.emit(this.place.geometry.location.lng() ? this.place.geometry.location.lng() : null) this.adr_address.emit(this.place.adr_address ? this.place.adr_address : null) this.formatted_address.emit(this.place.formatted_address ? this.place.formatted_address : null) this.name.emit(this.place.name ? this.place.name : null) this.place_id.emit(this.place.place_id ? this.place.place_id : null) this.types.emit(this.place.types ? this.place.types : null) this.url.emit(this.place.url ? this.place.url : null) this.utc_offset.emit(this.place.utc_offset ? this.place.utc_offset : null) this.vicinity.emit(this.place.vicinity ? this.place.vicinity : null) this.photos.emit(this.place.photos ? this.place.photos : null) /* DEPRECATED SINCE 2014 this.place.id reference */ /* NOT USED YET this.intersection.emit(this.service.intersection(this.place.address_components) ? this.service.intersection(this.place.address_components) : null) this.political.emit(this.service.political(this.place.address_components) ? this.service.political(this.place.address_components) : null) this.colloquial_area.emit(this.service.colloquial_area(this.place.address_components) ? this.service.colloquial_area(this.place.address_components) : null) this.ward.emit(this.service.ward(this.place.address_components) ? this.service.ward(this.place.address_components) : null) this.administrative_area_level_3.emit(this.service.administrative_area_level_3(this.place.address_components) ? this.service.administrative_area_level_3(this.place.address_components) : null) this.administrative_area_level_4.emit(this.service.administrative_area_level_4(this.place.address_components) ? this.service.administrative_area_level_4(this.place.address_components) : null) this.administrative_area_level_5.emit(this.service.administrative_area_level_5(this.place.address_components) ? this.service.administrative_area_level_5(this.place.address_components) : null) this.sublocality.emit(this.service.sublocality(this.place.address_components) ? this.service.sublocality(this.place.address_components) : null) this.sublocality_level_1.emit(this.service.sublocality_level_1(this.place.address_components) ? this.service.sublocality_level_1(this.place.address_components) : null) this.sublocality_level_2.emit(this.service.sublocality_level_2(this.place.address_components) ? this.service.sublocality_level_2(this.place.address_components) : null) this.sublocality_level_3.emit(this.service.sublocality_level_3(this.place.address_components) ? this.service.sublocality_level_3(this.place.address_components) : null) this.sublocality_level_4.emit(this.service.sublocality_level_4(this.place.address_components) ? this.service.sublocality_level_4(this.place.address_components) : null) this.sublocality_level_5.emit(this.service.sublocality_level_5(this.place.address_components) ? this.service.sublocality_level_5(this.place.address_components) : null) this.neighborhood.emit(this.service.neighborhood(this.place.address_components) ? this.service.neighborhood(this.place.address_components) : null) this.premise.emit(this.service.premise(this.place.address_components) ? this.service.premise(this.place.address_components) : null) this.subpremise.emit(this.service.subpremise(this.place.address_components) ? this.service.subpremise(this.place.address_components) : null) this.natural_feature.emit(this.service.natural_feature(this.place.address_components) ? this.service.natural_feature(this.place.address_components) : null) this.airport.emit(this.service.airport(this.place.address_components) ? this.service.airport(this.place.address_components) : null) this.park.emit(this.service.park(this.place.address_components) ? this.service.park(this.place.address_components) : null) this.point_of_interest.emit(this.service.point_of_interest(this.place.address_components) ? this.service.point_of_interest(this.place.address_components) : null) this.floor.emit(this.service.floor(this.place.address_components) ? this.service.floor(this.place.address_components) : null) this.establishment.emit(this.service.establishment(this.place.address_components) ? this.service.establishment(this.place.address_components) : null) this.parking.emit(this.service.parking(this.place.address_components) ? this.service.parking(this.place.address_components) : null) this.post_box.emit(this.service.post_box(this.place.address_components) ? this.service.post_box(this.place.address_components) : null) this.postal_town.emit(this.service.postal_town(this.place.address_components) ? this.service.postal_town(this.place.address_components) : null) this.room.emit(this.service.room(this.place.address_components) ? this.service.room(this.place.address_components) : null) this.bus_station.emit(this.service.bus_station(this.place.address_components) ? this.service.bus_station(this.place.address_components) : null) this.train_station.emit(this.service.train_station(this.place.address_components) ? this.service.train_station(this.place.address_components) : null) this.transit_station.emit(this.service.transit_station(this.place.address_components) ? this.service.transit_station(this.place.address_components) : null) */ } }