Skip to content

Commit da72bf2

Browse files
feat(google-maps): toggle marker tap panning and info windows (#376)
* feat(google-maps): toggle marker tap panning * feat(google-maps): marker event readme * Update packages/google-maps/index.android.ts * chore: update variable name * fix: readme
1 parent fd9d9fb commit da72bf2

File tree

4 files changed

+43
-13
lines changed

4 files changed

+43
-13
lines changed

packages/google-maps/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ The following properties are available for adjusting the camera view on initiali
313313
`zoom` | `number` | Zoom level (described [here](https://developers.google.com/maps/documentation/javascript/tutorial#zoom-levels))
314314
`bearing` | `number` | Bearing, in degrees
315315
`tilt` | `number` | Tilt, in degrees
316+
`preventDefaultMarkerTapBehavior` | `boolean` | Prevents the default marker event handling (panning/info windows) done by Google Maps
316317

317318
#### Events
318319

packages/google-maps/common.ts

+7
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ export const tiltProperty = new Property<MapViewBase, number>({
3535
name: 'tilt',
3636
});
3737

38+
export const preventDefaultMarkerTapBehaviorProperty = new Property<MapViewBase, boolean>({
39+
name: 'preventDefaultMarkerTapBehavior',
40+
defaultValue: false,
41+
});
42+
3843
export class MapViewBase extends ContentView {
3944
static readyEvent = 'ready';
4045
static mapTapEvent = 'mapTap';
@@ -73,10 +78,12 @@ export class MapViewBase extends ContentView {
7378
zoom: number;
7479
bearing: number;
7580
tilt: number;
81+
preventDefaultMarkerTapBehavior: boolean;
7682
}
7783

7884
latProperty.register(MapViewBase);
7985
lngProperty.register(MapViewBase);
8086
zoomProperty.register(MapViewBase);
8187
bearingProperty.register(MapViewBase);
8288
tiltProperty.register(MapViewBase);
89+
preventDefaultMarkerTapBehaviorProperty.register(MapViewBase);

packages/google-maps/index.android.ts

+24-8
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ import {
4545
Style,
4646
TileOverlayOptions,
4747
} from '.';
48-
import { bearingProperty, JointType, latProperty, lngProperty, MapType, MapViewBase, tiltProperty, zoomProperty } from './common';
48+
import { bearingProperty, preventDefaultMarkerTapBehaviorProperty, JointType, latProperty, lngProperty, MapType, MapViewBase, tiltProperty, zoomProperty } from './common';
4949

5050
import { intoNativeMarkerOptions, intoNativeCircleOptions, intoNativePolygonOptions, intoNativeGroundOverlayOptions, intoNativePolylineOptions, hueFromColor, intoNativeJointType, toJointType, intoNativeTileOverlayOptions, deserialize, serialize } from './utils';
5151

@@ -185,13 +185,6 @@ export class MapView extends MapViewBase {
185185
marker: Marker.fromNative(marker),
186186
});
187187
break;
188-
case 'click':
189-
ref?.get?.().notify(<MarkerTapEvent>{
190-
eventName: MapView.markerTapEvent,
191-
object: ref?.get?.(),
192-
marker: Marker.fromNative(marker),
193-
});
194-
break;
195188
}
196189
},
197190
onMapClickEvent(latLng: com.google.android.gms.maps.model.LatLng, isLongClick: boolean) {
@@ -369,6 +362,7 @@ export class MapView extends MapViewBase {
369362
tilt: owner.tilt,
370363
zoom: owner.zoom,
371364
});
365+
owner._setMapClickListener(map, owner.preventDefaultMarkerTapBehavior);
372366
}
373367

374368
ref.get?.().notify?.({
@@ -504,6 +498,12 @@ export class MapView extends MapViewBase {
504498
}
505499
}
506500

501+
[preventDefaultMarkerTapBehaviorProperty.setNative](value) {
502+
if (this._map) {
503+
this._setMapClickListener(this._map, value);
504+
}
505+
}
506+
507507
_updateCamera(
508508
map,
509509
owner: {
@@ -555,6 +555,22 @@ export class MapView extends MapViewBase {
555555
}
556556
}
557557
}
558+
559+
_setMapClickListener(map, preventDefaultMarkerTapBehavior) {
560+
map.setOnMarkerClickListener(
561+
new com.google.android.gms.maps.GoogleMap.OnMarkerClickListener({
562+
onMarkerClick: (marker) => {
563+
this.notify(<MarkerTapEvent>{
564+
eventName: MapView.markerTapEvent,
565+
object: this,
566+
marker: Marker.fromNative(marker),
567+
});
568+
569+
return preventDefaultMarkerTapBehavior;
570+
},
571+
})
572+
);
573+
}
558574
}
559575

560576
export class IndoorLevel implements IIndoorLevel {

packages/google-maps/index.ios.ts

+11-5
Original file line numberDiff line numberDiff line change
@@ -375,11 +375,17 @@ class GMSMapViewDelegateImpl extends NSObject implements GMSMapViewDelegate {
375375
}
376376

377377
mapViewDidTapMarker(mapView: GMSMapView, marker: GMSMarker): boolean {
378-
this._owner?.get?.().notify(<EventData & MarkerTapEvent>{
379-
eventName: MapView.markerTapEvent,
380-
object: this._owner?.get?.(),
381-
marker: Marker.fromNative(marker),
382-
});
378+
const owner = this._owner?.get?.();
379+
if (owner) {
380+
owner.notify(<EventData & MarkerTapEvent>{
381+
eventName: MapView.markerTapEvent,
382+
object: owner,
383+
marker: Marker.fromNative(marker),
384+
});
385+
386+
return owner.preventDefaultMarkerTapBehavior;
387+
}
388+
383389
return false;
384390
}
385391

0 commit comments

Comments
 (0)