Skip to content

[Bug] Layer is not cleared when data is empty and is resolved from a promise #9798

@wandering-tales

Description

@wandering-tales

Description

It seems #8776 is not fully solved.

An inconsistent behavior is observed when data is resolved from a promise.

Flavors

  • Script tag
  • React
  • Python/Jupyter notebook
  • MapboxOverlay
  • GoogleMapsOverlay
  • CARTO
  • ArcGIS

Expected Behavior

Nothing should be rendered when the data array is empty.

Steps to Reproduce

I have used the same example as in #8776 but setting data to promises:

const {DeckGL, TextLayer} = deck;

let data = ['Foo Bar'];

const deckInstance = new DeckGL({
  mapStyle: 'https://basemaps.cartocdn.com/gl/positron-gl-style/style.json',
  initialViewState: {
    longitude: 0,
    latitude: 51,
    zoom: 8,
  },
  layers: []
});

function redraw() {
  const layer = new TextLayer({
    id: 'TextLayer',
    data,
    getPosition: d => [0, 51, 0],
    getSize: 16,
    getText: d => d,
  });
  
  deckInstance.setProps({ layers: [layer] });
}

document.addEventListener('click', () => {
  if (data.length === 0) {
    data = Promise.resolve(['Foo Bar']);
  } else {
    data = Promise.resolve([]);
  }

  redraw();
});

redraw();

Environment

  • Framework version: deck.gl/[email protected]
  • Browser: Firefox 143.0.1
  • OS: MacOS Sequoia 15.7

Logs

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions