diff --git a/src/style/style_layer.js b/src/style/style_layer.js index 263b123eab7..9cfd91bd62f 100644 --- a/src/style/style_layer.js +++ b/src/style/style_layer.js @@ -39,7 +39,7 @@ class StyleLayer extends Evented { minzoom: ?number; maxzoom: ?number; filter: FilterSpecification | void; - visibility: 'visible' | 'none'; + visibility: 'visible' | 'none' | void; _crossfadeParameters: CrossfadeParameters; _unevaluatedLayout: Layout; @@ -69,7 +69,6 @@ class StyleLayer extends Evented { this.id = layer.id; this.type = layer.type; - this.visibility = 'visible'; this._featureFilter = () => true; if (layer.type === 'custom') return; @@ -116,7 +115,7 @@ class StyleLayer extends Evented { return this._unevaluatedLayout.getValue(name); } - setLayoutProperty(name: string, value: mixed, options: StyleSetterOptions = {}) { + setLayoutProperty(name: string, value: any, options: StyleSetterOptions = {}) { if (value !== null && value !== undefined) { const key = `layers.${this.id}.layout.${name}`; if (this._validate(validateLayoutProperty, key, name, value, options)) { @@ -125,7 +124,7 @@ class StyleLayer extends Evented { } if (name === 'visibility') { - this.visibility = value === 'none' ? value : 'visible'; + this.visibility = value; return; } @@ -210,9 +209,9 @@ class StyleLayer extends Evented { 'paint': this._transitionablePaint && this._transitionablePaint.serialize() }; - if (this.visibility === 'none') { + if (this.visibility) { output.layout = output.layout || {}; - output.layout.visibility = 'none'; + output.layout.visibility = this.visibility; } return filterObject(output, (value, key) => { @@ -270,5 +269,3 @@ class StyleLayer extends Evented { } export default StyleLayer; - - diff --git a/test/unit/style/style_layer.test.js b/test/unit/style/style_layer.test.js index 29b241107af..f8450010fc3 100644 --- a/test/unit/style/style_layer.test.js +++ b/test/unit/style/style_layer.test.js @@ -315,6 +315,33 @@ test('StyleLayer#serialize', (t) => { t.end(); }); + t.test('serializes "visibility" of "visible"', (t) => { + const layer = createStyleLayer(createSymbolLayer()); + layer.setLayoutProperty('visibility', 'visible'); + + t.equal(layer.serialize().layout['visibility'], 'visible'); + + t.end(); + }); + + t.test('serializes "visibility" of "none"', (t) => { + const layer = createStyleLayer(createSymbolLayer()); + layer.setLayoutProperty('visibility', 'none'); + + t.equal(layer.serialize().layout['visibility'], 'none'); + + t.end(); + }); + + t.test('serializes "visibility" of undefined', (t) => { + const layer = createStyleLayer(createSymbolLayer()); + layer.setLayoutProperty('visibility', undefined); + + t.equal(layer.serialize().layout['visibility'], undefined); + + t.end(); + }); + t.end(); });