Skip to content

Commit 17cc760

Browse files
committed
fix(google-maps): some events not firing on advanced marker
The events introduced by #29747 didn't work, because the advanced marker doesn't support them. Instead we need to bind them as native events on the DOM node. Fixes #31801.
1 parent 056f89e commit 17cc760

File tree

4 files changed

+27
-24
lines changed

4 files changed

+27
-24
lines changed

goldens/google-maps/index.api.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -320,14 +320,14 @@ export class MapAdvancedMarker implements OnInit, OnChanges, OnDestroy, MapAncho
320320
getAnchor(): google.maps.marker.AdvancedMarkerElement;
321321
set gmpDraggable(draggable: boolean);
322322
readonly mapClick: Observable<google.maps.MapMouseEvent>;
323-
readonly mapDblclick: Observable<google.maps.MapMouseEvent>;
323+
readonly mapDblclick: Observable<MouseEvent>;
324324
readonly mapDrag: Observable<google.maps.MapMouseEvent>;
325325
readonly mapDragend: Observable<google.maps.MapMouseEvent>;
326326
readonly mapDragstart: Observable<google.maps.MapMouseEvent>;
327-
readonly mapMouseout: Observable<google.maps.MapMouseEvent>;
327+
readonly mapMouseout: Observable<MouseEvent>;
328328
readonly mapMouseover: Observable<google.maps.MapMouseEvent>;
329-
readonly mapMouseup: Observable<google.maps.MapMouseEvent>;
330-
readonly mapRightclick: Observable<google.maps.MapMouseEvent>;
329+
readonly mapMouseup: Observable<MouseEvent>;
330+
readonly mapRightclick: Observable<MouseEvent>;
331331
readonly markerInitialized: EventEmitter<google.maps.marker.AdvancedMarkerElement>;
332332
// (undocumented)
333333
ngOnChanges(changes: SimpleChanges): void;
@@ -493,7 +493,7 @@ export class MapDirectionsService {
493493
export class MapEventManager {
494494
constructor(_ngZone: NgZone);
495495
destroy(): void;
496-
getLazyEmitter<T>(name: string): Observable<T>;
496+
getLazyEmitter<T>(name: string, type?: 'custom' | 'native'): Observable<T>;
497497
setTarget(target: MapEventManagerTarget): void;
498498
}
499499

src/google-maps/map-advanced-marker/map-advanced-marker.spec.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,21 @@ describe('MapAdvancedMarker', () => {
121121
const advancedMarkerSpy = createAdvancedMarkerSpy(DEFAULT_MARKER_OPTIONS);
122122
createAdvancedMarkerConstructorSpy(advancedMarkerSpy);
123123

124-
const addSpy = advancedMarkerSpy.addListener;
124+
const customSpy = advancedMarkerSpy.addListener;
125+
const nativeSpy = advancedMarkerSpy.addEventListener;
125126
const fixture = TestBed.createComponent(TestApp);
126127
fixture.detectChanges();
127128
flush();
128129

129-
expect(addSpy).toHaveBeenCalledWith('click', jasmine.any(Function));
130-
expect(addSpy).toHaveBeenCalledWith('dblclick', jasmine.any(Function));
131-
expect(addSpy).toHaveBeenCalledWith('mouseout', jasmine.any(Function));
132-
expect(addSpy).toHaveBeenCalledWith('mouseover', jasmine.any(Function));
133-
expect(addSpy).toHaveBeenCalledWith('mouseup', jasmine.any(Function));
134-
expect(addSpy).toHaveBeenCalledWith('rightclick', jasmine.any(Function));
135-
expect(addSpy).not.toHaveBeenCalledWith('drag', jasmine.any(Function));
136-
expect(addSpy).not.toHaveBeenCalledWith('dragend', jasmine.any(Function));
137-
expect(addSpy).not.toHaveBeenCalledWith('dragstart', jasmine.any(Function));
130+
expect(customSpy).toHaveBeenCalledWith('click', jasmine.any(Function));
131+
expect(nativeSpy).toHaveBeenCalledWith('dblclick', jasmine.any(Function));
132+
expect(nativeSpy).toHaveBeenCalledWith('mouseout', jasmine.any(Function));
133+
expect(nativeSpy).toHaveBeenCalledWith('mouseover', jasmine.any(Function));
134+
expect(nativeSpy).toHaveBeenCalledWith('mouseup', jasmine.any(Function));
135+
expect(nativeSpy).toHaveBeenCalledWith('auxclick', jasmine.any(Function));
136+
expect(customSpy).not.toHaveBeenCalledWith('drag', jasmine.any(Function));
137+
expect(customSpy).not.toHaveBeenCalledWith('dragend', jasmine.any(Function));
138+
expect(customSpy).not.toHaveBeenCalledWith('dragstart', jasmine.any(Function));
138139
}));
139140

140141
it('should be able to add an event listener after init', fakeAsync(() => {

src/google-maps/map-advanced-marker/map-advanced-marker.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -135,32 +135,32 @@ export class MapAdvancedMarker
135135
/**
136136
* This event is fired when the AdvancedMarkerElement is double-clicked.
137137
*/
138-
@Output() readonly mapDblclick: Observable<google.maps.MapMouseEvent> =
139-
this._eventManager.getLazyEmitter<google.maps.MapMouseEvent>('dblclick');
138+
@Output() readonly mapDblclick: Observable<MouseEvent> =
139+
this._eventManager.getLazyEmitter<MouseEvent>('dblclick', 'native');
140140

141141
/**
142142
* This event is fired when the mouse moves out of the AdvancedMarkerElement.
143143
*/
144-
@Output() readonly mapMouseout: Observable<google.maps.MapMouseEvent> =
145-
this._eventManager.getLazyEmitter<google.maps.MapMouseEvent>('mouseout');
144+
@Output() readonly mapMouseout: Observable<MouseEvent> =
145+
this._eventManager.getLazyEmitter<MouseEvent>('mouseout', 'native');
146146

147147
/**
148148
* This event is fired when the mouse moves over the AdvancedMarkerElement.
149149
*/
150150
@Output() readonly mapMouseover: Observable<google.maps.MapMouseEvent> =
151-
this._eventManager.getLazyEmitter<google.maps.MapMouseEvent>('mouseover');
151+
this._eventManager.getLazyEmitter<google.maps.MapMouseEvent>('mouseover', 'native');
152152

153153
/**
154154
* This event is fired when the mouse button is released over the AdvancedMarkerElement.
155155
*/
156-
@Output() readonly mapMouseup: Observable<google.maps.MapMouseEvent> =
157-
this._eventManager.getLazyEmitter<google.maps.MapMouseEvent>('mouseup');
156+
@Output() readonly mapMouseup: Observable<MouseEvent> =
157+
this._eventManager.getLazyEmitter<MouseEvent>('mouseup', 'native');
158158

159159
/**
160160
* This event is fired when the AdvancedMarkerElement is right-clicked.
161161
*/
162-
@Output() readonly mapRightclick: Observable<google.maps.MapMouseEvent> =
163-
this._eventManager.getLazyEmitter<google.maps.MapMouseEvent>('rightclick');
162+
@Output() readonly mapRightclick: Observable<MouseEvent> =
163+
this._eventManager.getLazyEmitter<MouseEvent>('auxclick', 'native');
164164

165165
/**
166166
* This event is repeatedly fired while the user drags the AdvancedMarkerElement.

src/google-maps/testing/fake-google-map-utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ export function createAdvancedMarkerSpy(
153153
): jasmine.SpyObj<google.maps.marker.AdvancedMarkerElement> {
154154
const advancedMarkerSpy = jasmine.createSpyObj('google.maps.marker.AdvancedMarkerElement', [
155155
'addListener',
156+
'addEventListener',
157+
'removeEventListener',
156158
]);
157159
advancedMarkerSpy.addListener.and.returnValue({remove: () => {}});
158160
return advancedMarkerSpy;

0 commit comments

Comments
 (0)