Skip to content

Commit 8eeaa9f

Browse files
chrisgervangclaude
andcommitted
refactor(mapbox): Remove mapboxLayers tracking from UserData
Instead of tracking MapboxLayer instances in a Set, use map.getLayer() to check if a deck layer has a corresponding MapboxLayer on the map. This simplifies the code since resolve-layers already creates MapboxLayer instances with the same ID as the deck layer. Ref: #9944 Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent f810939 commit 8eeaa9f

File tree

2 files changed

+6
-24
lines changed

2 files changed

+6
-24
lines changed

modules/mapbox/src/deck-utils.ts

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import {Deck, MapView, _GlobeView as GlobeView, _flatten as flatten} from '@deck.gl/core';
66
import type {Viewport, MapViewState, Layer} from '@deck.gl/core';
77
import type {Parameters} from '@luma.gl/core';
8-
import type MapboxLayer from './mapbox-layer';
98
import type MapboxLayerGroup from './mapbox-layer-group';
109
import type {LayerOverlayProps, Map} from './types';
1110

@@ -15,8 +14,6 @@ const MAPBOX_VIEW_ID = 'mapbox';
1514

1615
type UserData = {
1716
currentViewport?: Viewport | null;
18-
mapboxLayers: Set<MapboxLayer<any>>;
19-
// mapboxVersion: {minor: number; major: number};
2017
};
2118

2219
// Mercator constants
@@ -72,7 +69,6 @@ export function getDeckInstance({
7269

7370
deck.setProps(deckProps);
7471

75-
(deck.userData as UserData).mapboxLayers = new Set();
7672
map.__deck = deck;
7773
map.on('render', () => {
7874
if (deck.isInitialized) afterRender(deck, map);
@@ -120,14 +116,6 @@ export function getDefaultParameters(map: Map, interleaved: boolean): Parameters
120116
return result;
121117
}
122118

123-
export function addLayer(deck: Deck, layer: MapboxLayer<any>): void {
124-
(deck.userData as UserData).mapboxLayers.add(layer);
125-
}
126-
127-
export function removeLayer(deck: Deck, layer: MapboxLayer<any>): void {
128-
(deck.userData as UserData).mapboxLayers.delete(layer);
129-
}
130-
131119
export function drawLayer(
132120
deck: Deck,
133121
map: Map,
@@ -344,12 +332,9 @@ function getViewport(deck: Deck, map: Map, renderParameters?: unknown): Viewport
344332
}
345333

346334
function afterRender(deck: Deck, map: Map): void {
347-
const {mapboxLayers} = deck.userData as UserData;
348-
349-
// Draw non-Mapbox layers
350-
const mapboxLayerIds = Array.from(mapboxLayers, layer => layer.id);
335+
// Draw non-Mapbox layers (layers that don't have a corresponding MapboxLayer on the map)
351336
const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];
352-
const hasNonMapboxLayers = deckLayers.some(layer => layer && !mapboxLayerIds.includes(layer.id));
337+
const hasNonMapboxLayers = deckLayers.some(layer => layer && !map.getLayer(layer.id));
353338
let viewports = deck.getViewports();
354339
const mapboxViewportIdx = viewports.findIndex(vp => vp.id === MAPBOX_VIEW_ID);
355340
const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;
@@ -364,7 +349,7 @@ function afterRender(deck: Deck, map: Map): void {
364349
viewports,
365350
layerFilter: params =>
366351
(!deck.props.layerFilter || deck.props.layerFilter(params)) &&
367-
(params.viewport.id !== MAPBOX_VIEW_ID || !mapboxLayerIds.includes(params.layer.id)),
352+
(params.viewport.id !== MAPBOX_VIEW_ID || !map.getLayer(params.layer.id)),
368353
clearCanvas: false
369354
});
370355
}

modules/mapbox/src/mapbox-layer.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// SPDX-License-Identifier: MIT
33
// Copyright (c) vis.gl contributors
44

5-
import {addLayer, removeLayer, drawLayer} from './deck-utils';
5+
import {drawLayer} from './deck-utils';
66
import type {Map, CustomLayerInterface} from './types';
77
import type {Deck, Layer} from '@deck.gl/core';
88

@@ -40,15 +40,12 @@ export default class MapboxLayer<LayerT extends Layer> implements CustomLayerInt
4040

4141
/* Mapbox custom layer methods */
4242

43-
onAdd(map: MapWithDeck, gl: WebGL2RenderingContext): void {
43+
onAdd(map: MapWithDeck): void {
4444
this.map = map;
45-
addLayer(map.__deck, this);
4645
}
4746

4847
onRemove(): void {
49-
if (this.map) {
50-
removeLayer(this.map.__deck, this);
51-
}
48+
this.map = null;
5249
}
5350

5451
setProps(props: MapboxLayerProps<LayerT>) {

0 commit comments

Comments
 (0)