diff --git a/src/components/__tests__/advanced-marker.test.tsx b/src/components/__tests__/advanced-marker.test.tsx
index e29c9bca..197a9fa5 100644
--- a/src/components/__tests__/advanced-marker.test.tsx
+++ b/src/components/__tests__/advanced-marker.test.tsx
@@ -161,6 +161,40 @@ describe('map and marker-library loaded', () => {
).toBeTruthy();
});
+ test('disables custom content pointer targeting when clickable toggles off', async () => {
+ const handleClick = jest.fn();
+
+ const {rerender} = render(
+
+ Marker Content!
+
+ );
+
+ const marker = await waitForMockInstance(
+ google.maps.marker.AdvancedMarkerElement
+ );
+
+ expect(marker.gmpClickable).toBe(true);
+ expect((marker.content as HTMLElement).style.pointerEvents).toBe('all');
+ expect((marker.content as HTMLElement).style.cursor).toBe('pointer');
+
+ rerender(
+
+ Marker Content!
+
+ );
+
+ expect(marker.gmpClickable).toBe(false);
+ expect((marker.content as HTMLElement).style.pointerEvents).toBe('none');
+ expect((marker.content as HTMLElement).style.cursor).toBe('');
+ });
+
test.todo('marker should work with options');
test.todo('marker should have a click listener');
diff --git a/src/components/advanced-marker.tsx b/src/components/advanced-marker.tsx
index d447048d..a240b273 100644
--- a/src/components/advanced-marker.tsx
+++ b/src/components/advanced-marker.tsx
@@ -312,23 +312,22 @@ function useAdvancedMarker(props: AdvancedMarkerProps) {
// maps api (as of 2024-10-10)
marker.gmpClickable = gmpClickable;
- // enable pointer events for the markers with custom content
- if (gmpClickable && marker?.content && isElementNode(marker.content)) {
- marker.content.style.pointerEvents = 'all';
-
- if (onClick) {
- marker.content.style.cursor = 'pointer';
- }
+ // keep pointer/cursor styles in sync for markers with custom content.
+ // Non-clickable custom HTML must disable pointer targeting explicitly so
+ // interactions fall through to the map underneath.
+ if (marker?.content && isElementNode(marker.content)) {
+ marker.content.style.pointerEvents = gmpClickable ? 'all' : 'none';
+ marker.content.style.cursor = gmpClickable && onClick ? 'pointer' : '';
}
}, [marker, clickable, onClick, onMouseEnter, onMouseLeave]);
- useMapsEventListener(marker, 'click', onClick);
useMapsEventListener(marker, 'drag', onDrag);
useMapsEventListener(marker, 'dragstart', onDragStart);
useMapsEventListener(marker, 'dragend', onDragEnd);
- useDomEventListener(marker?.element, 'mouseenter', onMouseEnter);
- useDomEventListener(marker?.element, 'mouseleave', onMouseLeave);
+ useDomEventListener(marker, 'gmp-click', onClick);
+ useDomEventListener(marker, 'mouseenter', onMouseEnter);
+ useDomEventListener(marker, 'mouseleave', onMouseLeave);
return [marker, contentContainer] as const;
}