Skip to content

Commit 2843528

Browse files
authored
fix: filter layers in mapbox overlay, interleaved mode (#9603)
1 parent 53cb332 commit 2843528

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

modules/mapbox/src/deck-utils.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,9 @@ export function drawLayer(
174174

175175
deck._drawLayers('mapbox-repaint', {
176176
viewports: [currentViewport],
177-
layerFilter: ({layer: deckLayer}) =>
178-
layer.id === deckLayer.id || deckLayer.props.operation.includes('terrain'),
177+
layerFilter: params =>
178+
(!deck.props.layerFilter || deck.props.layerFilter(params)) &&
179+
(layer.id === params.layer.id || params.layer.props.operation.includes('terrain')),
179180
clearStack,
180181
clearCanvas: false
181182
});

test/modules/mapbox/mapbox-overlay.spec.ts

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@ function sleep(milliseconds: number): Promise<void> {
1717
});
1818
}
1919

20+
class TestScatterplotLayer extends ScatterplotLayer {
21+
draw(params) {
22+
super.draw(params);
23+
this.props.onAfterRedraw({
24+
viewport: this.context.viewport,
25+
layer: this
26+
});
27+
}
28+
}
29+
TestScatterplotLayer.layerName = 'TestScatterplotLayer';
30+
2031
test('MapboxOverlay#overlaid', t => {
2132
const map = new MockMapboxMap({
2233
center: {lng: -122.45, lat: 37.78},
@@ -147,13 +158,22 @@ test('MapboxOverlay#overlaidNoIntitalLayers', t => {
147158
});
148159

149160
test('MapboxOverlay#interleaved', t => {
161+
let drawLog = [];
162+
const onRedrawLayer = ({viewport, layer}) => {
163+
drawLog.push(layer.id);
164+
};
165+
150166
const map = new MockMapboxMap({
151167
center: {lng: -122.45, lat: 37.78},
152168
zoom: 14
153169
});
154170
const overlay = new MapboxOverlay({
155171
interleaved: true,
156-
layers: [new ScatterplotLayer({id: 'poi'})],
172+
layers: [
173+
new TestScatterplotLayer({id: 'poi', onAfterRedraw: onRedrawLayer}),
174+
new TestScatterplotLayer({id: 'poi2', onAfterRedraw: onRedrawLayer})
175+
],
176+
layerFilter: ({layer}) => layer.id === 'poi',
157177
parameters: {
158178
depthWriteEnabled: false,
159179
cullMode: 'back'
@@ -199,14 +219,19 @@ test('MapboxOverlay#interleaved', t => {
199219

200220
await sleep(100);
201221
t.ok(map.getLayer('poi'), 'MapboxLayer is added');
222+
t.ok(map.getLayer('poi2'), 'MapboxLayer is added');
223+
t.deepEqual(drawLog, ['poi'], 'layers correctly filtered');
224+
drawLog = [];
202225

203226
overlay.setProps({
204-
layers: [new ScatterplotLayer({id: 'cities'})]
227+
layers: [new TestScatterplotLayer({id: 'cities', onAfterRedraw: onRedrawLayer})],
228+
layerFilter: undefined
205229
});
206230

207231
await sleep(100);
208232
t.notOk(map.getLayer('poi'), 'MapboxLayer is removed');
209233
t.ok(map.getLayer('cities'), 'MapboxLayer is added');
234+
t.deepEqual(drawLog, ['cities'], 'layers correctly filtered');
210235

211236
map.removeControl(overlay);
212237
t.notOk(overlay._deck, 'Deck instance is finalized');

0 commit comments

Comments
 (0)