Skip to content

Commit

Permalink
Ensure that an unset filter is undefined rather than null
Browse files Browse the repository at this point in the history
  • Loading branch information
jfirebaugh committed Nov 20, 2017
1 parent 51d0ec3 commit b10100f
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 6 deletions.
18 changes: 14 additions & 4 deletions src/style/style.js
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,7 @@ class Style extends Evented {
this._updateLayer(layer);
}

setFilter(layerId: string, filter: FilterSpecification) {
setFilter(layerId: string, filter: ?FilterSpecification) {
this._checkLoaded();

const layer = this.getLayer(layerId);
Expand All @@ -723,11 +723,21 @@ class Style extends Evented {
return;
}

if (filter !== null && filter !== undefined && this._validate(validateStyle.filter, `layers.${layer.id}.filter`, filter)) return;
if (util.deepEqual(layer.filter, filter)) {
return;
}

if (util.deepEqual(layer.filter, filter)) return;
layer.filter = util.clone(filter);
if (filter === null || filter === undefined) {
layer.filter = undefined;
this._updateLayer(layer);
return;
}

if (this._validate(validateStyle.filter, `layers.${layer.id}.filter`, filter)) {
return;
}

layer.filter = util.clone(filter);
this._updateLayer(layer);
}

Expand Down
2 changes: 1 addition & 1 deletion src/style/style_layer.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class StyleLayer extends Evented {
sourceLayer: ?string;
minzoom: ?number;
maxzoom: ?number;
filter: mixed;
filter: FilterSpecification | void;
visibility: 'visible' | 'none';

_unevaluatedLayout: Layout<any>;
Expand Down
2 changes: 1 addition & 1 deletion src/ui/map.js
Original file line number Diff line number Diff line change
Expand Up @@ -1157,7 +1157,7 @@ class Map extends Camera {
* @see [Highlight features containing similar data](https://www.mapbox.com/mapbox-gl-js/example/query-similar-features/)
* @see [Create a timeline animation](https://www.mapbox.com/mapbox-gl-js/example/timeline-animation/)
*/
setFilter(layer: string, filter: FilterSpecification) {
setFilter(layer: string, filter: ?FilterSpecification) {
this.style.setFilter(layer, filter);
this._update(true);
return this;
Expand Down
9 changes: 9 additions & 0 deletions test/unit/style/style.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1349,6 +1349,15 @@ test('Style#setFilter', (t) => {
});
});

t.test('unsets filter', (t) => {
const style = createStyle();
style.on('style.load', () => {
style.setFilter('symbol', null);
t.equal(style.getLayer('symbol').serialize().filter, undefined);
t.end();
});
});

t.test('emits if invalid', (t) => {
const style = createStyle();
style.on('style.load', () => {
Expand Down

0 comments on commit b10100f

Please sign in to comment.