Skip to content

Commit a1f5321

Browse files
fix(mapbox): Fix view selection logic in getViewport (#9688)
* fix(mapbox): Fix view selection logic in getViewport Updates getViewport to select the 'mapbox' view from deck.props.views if available, falling back to getDefaultView. * first element * Update deck-utils.ts Co-authored-by: Ib Green <[email protected]> * Refactor mapbox view ID to constant Introduced MAPBOX_VIEW_ID constant to replace hardcoded 'mapbox' strings for view IDs * Use find --------- Co-authored-by: Ib Green <[email protected]>
1 parent 87883cd commit a1f5321

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

modules/mapbox/src/deck-utils.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import type {Map} from './types';
1010

1111
import {lngLatToWorld, unitsPerMeter} from '@math.gl/web-mercator';
1212

13+
const MAPBOX_VIEW_ID = 'mapbox';
14+
1315
type UserData = {
1416
isExternal: boolean;
1517
currentViewport?: Viewport | null;
@@ -200,9 +202,9 @@ function getProjection(map: Map): 'mercator' | 'globe' {
200202

201203
export function getDefaultView(map: Map): GlobeView | MapView {
202204
if (getProjection(map) === 'globe') {
203-
return new GlobeView({id: 'mapbox'});
205+
return new GlobeView({id: MAPBOX_VIEW_ID});
204206
}
205-
return new MapView({id: 'mapbox'});
207+
return new MapView({id: MAPBOX_VIEW_ID});
206208
}
207209

208210
export function getViewState(map: Map): MapViewState & {
@@ -300,7 +302,10 @@ type MaplibreRenderParameters = {
300302

301303
function getViewport(deck: Deck, map: Map, renderParameters?: unknown): Viewport {
302304
const viewState = getViewState(map);
303-
const view = getDefaultView(map);
305+
const {views} = deck.props;
306+
const view =
307+
(views && flatten(views).find((v: {id: string}) => v.id === MAPBOX_VIEW_ID)) ||
308+
getDefaultView(map);
304309

305310
if (renderParameters) {
306311
// Called from MapboxLayer.render
@@ -337,7 +342,7 @@ function afterRender(deck: Deck, map: Map): void {
337342
layer => layer && !mapboxLayerIds.includes(layer.id)
338343
);
339344
let viewports = deck.getViewports();
340-
const mapboxViewportIdx = viewports.findIndex(vp => vp.id === 'mapbox');
345+
const mapboxViewportIdx = viewports.findIndex(vp => vp.id === MAPBOX_VIEW_ID);
341346
const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;
342347

343348
if (hasNonMapboxLayers || hasNonMapboxViews) {
@@ -350,7 +355,7 @@ function afterRender(deck: Deck, map: Map): void {
350355
viewports,
351356
layerFilter: params =>
352357
(!deck.props.layerFilter || deck.props.layerFilter(params)) &&
353-
(params.viewport.id !== 'mapbox' || !mapboxLayerIds.includes(params.layer.id)),
358+
(params.viewport.id !== MAPBOX_VIEW_ID || !mapboxLayerIds.includes(params.layer.id)),
354359
clearCanvas: false
355360
});
356361
}

0 commit comments

Comments
 (0)