Description
For MapLibre dark mode, map.setStyle is called to load a new map style. map.setStyle unloads all map layers. Following this, layers are manually readded. Is there a recommended workflow for 1. add MapboxOverlay with beforeId 2. change map style via map.setStyle?
Right now, the mysterious magic layers that deckgl creates to support the only layer I want to add via MapboxOverlay (that has a beforeId) are causing implosion when the referenced beforeId layer is unloaded. It seems to retry the reference every tick and crashes the whole map.
I have tried many ways to coax deckgl into removing its mysterious magic layers before calling map.setStyle then adding them back afterwards, but I haven't gotten anything to work - map.removeControl, mapboxOverlay.setProps({ layers: [] }), or setProps with the layer beforeId: undefined.
Flavors
Expected Behavior
Any of:
No error (implies that this is fixable in an ideal way)
Not retrying the reference every tick and crashing the map (probably MapLibre)
A workflow for unloading referenced layers (realistic fix)
A documented workflow for unloading referenced layers (+documentation)
Less mysterious magic (wishful thinking for making simple such complex abstractions)
Steps to Reproduce
- Add MapLibre layer
- Add MapboxOverlay with beforeId referencing that layer
- Call map.setStyle
If this isn't enough I can try to work it a little harder.
Environment
- Framework version: @deck.gl/core, @deck.gl/mapbox 9.3.2
- Browser: Firefox
- OS: Windows
Logs
Error: Cannot move layer "deck-layer-group-before:conus-mask" before non-existing layer "conus-mask".
moveLayer style.ts:1174
moveLayer map.ts:2707
resolveLayerGroups resolve-layer-groups.ts:85
_resolveLayers mapbox-overlay.ts:161
_handleStyleChange mapbox-overlay.ts:241
fire evented.ts:132
Map map.ts:823
fire evented.ts:132
fire evented.ts:147
update style.ts:795
_render map.ts:3451
triggerRepaint map.ts:3617
r2 browser.ts:14
frame browser.ts:12
triggerRepaint map.ts:3611
_update map.ts:3381
Map map.ts:822
fire evented.ts:132
fire evented.ts:147
update style.ts:795
_render map.ts:3451
triggerRepaint map.ts:3617
r2 browser.ts:14
frame browser.ts:12
triggerRepaint map.ts:3611
_update map.ts:3381
Map map.ts:822
fire evented.ts:132
fire evented.ts:147
update style.ts:795
_render map.ts:3451
triggerRepaint map.ts:3617
r2 browser.ts:14
frame browser.ts:12
triggerRepaint map.ts:3611
_update map.ts:3381
Map map.ts:822
fire evented.ts:132
fire evented.ts:147
update style.ts:795
_render map.ts:3451
triggerRepaint map.ts:3617
r2 browser.ts:14
frame browser.ts:12
triggerRepaint map.ts:3611
_update map.ts:3381
Map map.ts:822
fire evented.ts:132
fire evented.ts:147
update style.ts:795
_render map.ts:3451
triggerRepaint map.ts:3617
r2 browser.ts:14
maplibre-gl.js:482:48
Description
For MapLibre dark mode,
map.setStyleis called to load a new map style.map.setStyleunloads all map layers. Following this, layers are manually readded. Is there a recommended workflow for 1. add MapboxOverlay withbeforeId2. change map style viamap.setStyle?Right now, the mysterious magic layers that deckgl creates to support the only layer I want to add via MapboxOverlay (that has a
beforeId) are causing implosion when the referencedbeforeIdlayer is unloaded. It seems to retry the reference every tick and crashes the whole map.I have tried many ways to coax deckgl into removing its mysterious magic layers before calling
map.setStylethen adding them back afterwards, but I haven't gotten anything to work -map.removeControl,mapboxOverlay.setProps({ layers: [] }), orsetPropswith the layerbeforeId: undefined.Flavors
Expected Behavior
Any of:
No error (implies that this is fixable in an ideal way)
Not retrying the reference every tick and crashing the map (probably MapLibre)
A workflow for unloading referenced layers (realistic fix)
A documented workflow for unloading referenced layers (+documentation)
Less mysterious magic (wishful thinking for making simple such complex abstractions)
Steps to Reproduce
If this isn't enough I can try to work it a little harder.
Environment
Logs