Skip to content

Commit e6d0a0a

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 e6d0a0a

File tree

2 files changed

+6
-23
lines changed

2 files changed

+6
-23
lines changed

modules/mapbox/src/deck-utils.ts

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ const MAPBOX_VIEW_ID = 'mapbox';
1515

1616
type UserData = {
1717
currentViewport?: Viewport | null;
18-
mapboxLayers: Set<MapboxLayer<any>>;
19-
// mapboxVersion: {minor: number; major: number};
2018
};
2119

2220
// Mercator constants
@@ -72,7 +70,6 @@ export function getDeckInstance({
7270

7371
deck.setProps(deckProps);
7472

75-
(deck.userData as UserData).mapboxLayers = new Set();
7673
map.__deck = deck;
7774
map.on('render', () => {
7875
if (deck.isInitialized) afterRender(deck, map);
@@ -120,14 +117,6 @@ export function getDefaultParameters(map: Map, interleaved: boolean): Parameters
120117
return result;
121118
}
122119

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-
131120
export function drawLayer(
132121
deck: Deck,
133122
map: Map,
@@ -344,12 +333,9 @@ function getViewport(deck: Deck, map: Map, renderParameters?: unknown): Viewport
344333
}
345334

346335
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);
336+
// Draw non-Mapbox layers (layers that don't have a corresponding MapboxLayer on the map)
351337
const deckLayers = flatten(deck.props.layers, Boolean) as Layer[];
352-
const hasNonMapboxLayers = deckLayers.some(layer => layer && !mapboxLayerIds.includes(layer.id));
338+
const hasNonMapboxLayers = deckLayers.some(layer => layer && !map.getLayer(layer.id));
353339
let viewports = deck.getViewports();
354340
const mapboxViewportIdx = viewports.findIndex(vp => vp.id === MAPBOX_VIEW_ID);
355341
const hasNonMapboxViews = viewports.length > 1 || mapboxViewportIdx < 0;
@@ -364,7 +350,7 @@ function afterRender(deck: Deck, map: Map): void {
364350
viewports,
365351
layerFilter: params =>
366352
(!deck.props.layerFilter || deck.props.layerFilter(params)) &&
367-
(params.viewport.id !== MAPBOX_VIEW_ID || !mapboxLayerIds.includes(params.layer.id)),
353+
(params.viewport.id !== MAPBOX_VIEW_ID || !map.getLayer(params.layer.id)),
368354
clearCanvas: false
369355
});
370356
}

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)