From 0ee09e756db4e25118452e92fa809620a0c0f176 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Mon, 13 Dec 2021 14:50:34 +0100 Subject: [PATCH] Update stack layers --- src/style_manager/index.js | 21 +++++++++++--------- src/style_manager/model/PropertyStack.js | 11 ++++++++++ test/specs/style_manager/model/Properties.js | 2 +- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/style_manager/index.js b/src/style_manager/index.js index 955a2307c..2137e46ef 100644 --- a/src/style_manager/index.js +++ b/src/style_manager/index.js @@ -568,15 +568,18 @@ export default () => { sector.getProperties().map(prop => { this.__upProp(prop, style, parentStyles, opts); const props = prop.getProperties?.(); - const isStack = prop.getType() === 'stack'; - - if (props && !isStack) { - const newStyle = prop.__getFromStyle(style); - const newParentStyles = parentStyles.map(p => ({ - ...p, - style: prop.__getFromStyle(p.style), - })); - props.forEach(prop => this.__upProp(prop, newStyle, newParentStyles, opts)); + + if (props) { + if (prop.getType() === 'stack') { + prop.__setLayers(prop.__getLayersFromStyle(style)); + } else { + const newStyle = prop.__getFromStyle(style); + const newParentStyles = parentStyles.map(p => ({ + ...p, + style: prop.__getFromStyle(p.style), + })); + props.forEach(prop => this.__upProp(prop, newStyle, newParentStyles, opts)); + } } }); }); diff --git a/src/style_manager/model/PropertyStack.js b/src/style_manager/model/PropertyStack.js index 14081851d..d995e9033 100644 --- a/src/style_manager/model/PropertyStack.js +++ b/src/style_manager/model/PropertyStack.js @@ -105,6 +105,17 @@ export default Property.extend({ return Property.prototype._up.call(this, rest, opts); }, + __setLayers(newLayers = []) { + const layers = this.getLayers(); + const layersNew = newLayers.map(values => ({ values })); + + if (layers.length === layersNew.length) { + layersNew.map((layer, n) => layers.at(n)?.upValues(layer.values)); + } else { + this.getLayers().reset(layersNew); + } + }, + __parseValue(value) { const result = this.parseValue(value); result.__layers = value diff --git a/test/specs/style_manager/model/Properties.js b/test/specs/style_manager/model/Properties.js index 2514b8c18..cd31d3580 100644 --- a/test/specs/style_manager/model/Properties.js +++ b/test/specs/style_manager/model/Properties.js @@ -183,7 +183,7 @@ describe('StyleManager properties logic', () => { compTypeProp.getProperty(propCTest).upValue('valueC-2-mod'); expect(rule1.getStyle()).toEqual({ __p: false, - [propTest]: 'valueA-1 valueB-1-mod valueC-1, valueA-2 valueB-2 valueC-2-mod', + [propTest]: 'valueA-1 valueB-1-mod valueC-1-ext, valueA-2 valueB-2 valueC-2-mod', }); });