From f7cdfc65b5911593cbf203e9f737b831e86f0dc0 Mon Sep 17 00:00:00 2001 From: Andrew Sidhu Date: Wed, 13 Aug 2025 00:40:33 -0400 Subject: [PATCH] fix(google-maps): right click enhancement. By rewriting the prototype of the advancedmarker and inject functionality for right clicking there.We have a cleaner and more native event management within the component and fix issues surrounding different ways contextmenu is supported across browsers. --- src/dev-app/google-map/google-map-demo.html | 9 +++- src/dev-app/google-map/google-map-demo.ts | 4 ++ .../map-advanced-marker.ts | 47 +++++++++++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/dev-app/google-map/google-map-demo.html b/src/dev-app/google-map/google-map-demo.html index 9d4b75dd5a20..4b3077487f17 100644 --- a/src/dev-app/google-map/google-map-demo.html +++ b/src/dev-app/google-map/google-map-demo.html @@ -14,17 +14,22 @@ + (mapClick)="infoWindow.open(firstMarker)" + (mapRightclick)="handleMarkerRightclick($event)" + > @for (markerPosition of markerPositions; track markerPosition) { + (mapClick)="infoWindow.open(marker)" + (mapRightclick)="handleMarkerRightclick($event)" + > } @if (hasCustomContentMarker) { { + // Only handle right mouse button clicks (button 2) + if (event.button === 2) { + const mapMouseEvent = { + domEvent: event, + latLng: null, + stop: () => { + event.stopPropagation(); + event.preventDefault(); + }, + } as google.maps.MapMouseEvent; + + handler(mapMouseEvent); + } + }; + + this.element.addEventListener('mousedown', listener); + + return { + remove: () => { + this.element.removeEventListener('mousedown', listener); + }, + }; + } else { + // Use original method for other events + return originalAddListener.call(this, eventName, handler); + } + }; + + // Mark prototype as enhanced to avoid multiple enhancements + markerProto._rightClickEnhanced = true; + } + } + ngOnChanges(changes: SimpleChanges) { const {advancedMarker, _content, _position, _title, _draggable, _zIndex} = this; if (advancedMarker) {