Skip to content

Commit b99243d

Browse files
authored
fix: Ensure view state is updated in Python with a maplibre map renderer (#1017)
Passing `onViewStateChange` to deck.gl when using MapboxOverlay does nothing. Instead, we need to map the event propagated by `onMoveEnd` to the existing callback
1 parent fe30f71 commit b99243d

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ function App() {
198198

199199
// This condition is necessary to confirm that the viewState is
200200
// of type MapViewState.
201-
if ("latitude" in viewState) {
201+
if (viewState && "latitude" in viewState) {
202202
// TODO: ensure all view state types get updated on the JS side
203203
setViewState(viewState);
204204
}

src/renderers/overlay.tsx

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { MapboxOverlay, MapboxOverlayProps } from "@deck.gl/mapbox";
22
import React from "react";
3-
import Map, { useControl } from "react-map-gl/maplibre";
3+
import Map, { useControl, ViewStateChangeEvent } from "react-map-gl/maplibre";
44

55
import type { MapRendererProps, OverlayRendererProps } from "./types";
66
import { isGlobeView } from "../util";
@@ -35,15 +35,29 @@ const OverlayRenderer: React.FC<MapRendererProps & OverlayRendererProps> = (
3535
customAttribution,
3636
initialViewState,
3737
views,
38+
onViewStateChange,
3839
...deckProps
3940
} = mapProps;
41+
const onMoveEnd = onViewStateChange
42+
? (evt: ViewStateChangeEvent) => {
43+
const viewState = {
44+
longitude: evt.viewState.longitude,
45+
latitude: evt.viewState.latitude,
46+
zoom: evt.viewState.zoom,
47+
pitch: evt.viewState.pitch,
48+
bearing: evt.viewState.bearing,
49+
};
50+
onViewStateChange({ viewId: "mapLibreId", viewState });
51+
}
52+
: undefined;
4053
return (
4154
<Map
4255
reuseMaps
4356
initialViewState={initialViewState}
4457
mapStyle={mapStyle}
4558
attributionControl={{ customAttribution }}
4659
style={{ width: "100%", height: "100%" }}
60+
onMoveEnd={onMoveEnd}
4761
{...(isGlobeView(views) && { projection: "globe" })}
4862
>
4963
{controls.map((control) => control.renderMaplibre())}

0 commit comments

Comments
 (0)