From c16e666e74d95250e9d8351a1d4babf96eedcd34 Mon Sep 17 00:00:00 2001 From: DefJunx Date: Thu, 10 Oct 2019 10:01:52 +0200 Subject: [PATCH] feat(AgmMarker): add dblclick observable (#1739) add and manage double click event for marker fixes #1601 --- packages/core/directives/marker.ts | 64 +++++++++++++++++------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/packages/core/directives/marker.ts b/packages/core/directives/marker.ts index f02530291..9eb400566 100644 --- a/packages/core/directives/marker.ts +++ b/packages/core/directives/marker.ts @@ -34,7 +34,7 @@ let markerId = 0; @Directive({ selector: 'agm-marker', providers: [ - {provide: FitBoundsAccessor, useExisting: forwardRef(() => AgmMarker)}, + { provide: FitBoundsAccessor, useExisting: forwardRef(() => AgmMarker) }, ], inputs: [ 'latitude', 'longitude', 'title', 'label', 'draggable: markerDraggable', 'iconUrl', @@ -121,6 +121,11 @@ export class AgmMarker implements OnDestroy, OnChanges, AfterContentInit, FitBou */ @Output() markerClick: EventEmitter = new EventEmitter(); + /** + * This event emitter gets emitted when the user clicks twice on the marker. + */ + @Output() markerDblClick: EventEmitter = new EventEmitter(); + /** * This event is fired when the user rightclicks on the marker. */ @@ -178,7 +183,7 @@ export class AgmMarker implements OnDestroy, OnChanges, AfterContentInit, FitBou } /** @internal */ - ngOnChanges(changes: {[key: string]: SimpleChange}) { + ngOnChanges(changes: { [key: string]: SimpleChange }) { if (typeof this.latitude === 'string') { this.latitude = Number(this.latitude); } @@ -234,7 +239,7 @@ export class AgmMarker implements OnDestroy, OnChanges, AfterContentInit, FitBou } protected _updateFitBoundsDetails() { - this._fitBoundsDetails$.next({latLng: {lat: this.latitude, lng: this.longitude}}); + this._fitBoundsDetails$.next({ latLng: { lat: this.latitude, lng: this.longitude } }); } private _addEventListeners() { @@ -246,51 +251,56 @@ export class AgmMarker implements OnDestroy, OnChanges, AfterContentInit, FitBou }); this._observableSubscriptions.push(cs); + const dcs = this._markerManager.createEventObservable('dblclick', this).subscribe(() => { + this.markerDblClick.emit(null); + }); + this._observableSubscriptions.push(dcs); + const rc = this._markerManager.createEventObservable('rightclick', this).subscribe(() => { this.markerRightClick.emit(null); }); this._observableSubscriptions.push(rc); const ds = - this._markerManager.createEventObservable('dragstart', this) - .subscribe((e: mapTypes.MouseEvent) => { - this.dragStart.emit({coords: {lat: e.latLng.lat(), lng: e.latLng.lng()}} as MouseEvent); - }); + this._markerManager.createEventObservable('dragstart', this) + .subscribe((e: mapTypes.MouseEvent) => { + this.dragStart.emit({ coords: { lat: e.latLng.lat(), lng: e.latLng.lng() } } as MouseEvent); + }); this._observableSubscriptions.push(ds); const d = - this._markerManager.createEventObservable('drag', this) - .subscribe((e: mapTypes.MouseEvent) => { - this.drag.emit({coords: {lat: e.latLng.lat(), lng: e.latLng.lng()}} as MouseEvent); - }); + this._markerManager.createEventObservable('drag', this) + .subscribe((e: mapTypes.MouseEvent) => { + this.drag.emit({ coords: { lat: e.latLng.lat(), lng: e.latLng.lng() } } as MouseEvent); + }); this._observableSubscriptions.push(d); const de = - this._markerManager.createEventObservable('dragend', this) - .subscribe((e: mapTypes.MouseEvent) => { - this.dragEnd.emit({coords: {lat: e.latLng.lat(), lng: e.latLng.lng()}} as MouseEvent); - }); + this._markerManager.createEventObservable('dragend', this) + .subscribe((e: mapTypes.MouseEvent) => { + this.dragEnd.emit({ coords: { lat: e.latLng.lat(), lng: e.latLng.lng() } } as MouseEvent); + }); this._observableSubscriptions.push(de); const mover = - this._markerManager.createEventObservable('mouseover', this) - .subscribe((e: mapTypes.MouseEvent) => { - this.mouseOver.emit({coords: {lat: e.latLng.lat(), lng: e.latLng.lng()}} as MouseEvent); - }); + this._markerManager.createEventObservable('mouseover', this) + .subscribe((e: mapTypes.MouseEvent) => { + this.mouseOver.emit({ coords: { lat: e.latLng.lat(), lng: e.latLng.lng() } } as MouseEvent); + }); this._observableSubscriptions.push(mover); const mout = - this._markerManager.createEventObservable('mouseout', this) - .subscribe((e: mapTypes.MouseEvent) => { - this.mouseOut.emit({coords: {lat: e.latLng.lat(), lng: e.latLng.lng()}} as MouseEvent); - }); + this._markerManager.createEventObservable('mouseout', this) + .subscribe((e: mapTypes.MouseEvent) => { + this.mouseOut.emit({ coords: { lat: e.latLng.lat(), lng: e.latLng.lng() } } as MouseEvent); + }); this._observableSubscriptions.push(mout); const anChng = - this._markerManager.createEventObservable('animation_changed', this) - .subscribe(() => { - this.animationChange.emit(this.animation); - }); + this._markerManager.createEventObservable('animation_changed', this) + .subscribe(() => { + this.animationChange.emit(this.animation); + }); this._observableSubscriptions.push(anChng); }