diff --git a/src/dom_components/model/Component.js b/src/dom_components/model/Component.js index eba486d56..fe2e4ea92 100644 --- a/src/dom_components/model/Component.js +++ b/src/dom_components/model/Component.js @@ -887,14 +887,18 @@ const Component = Backbone.Model.extend(Styleable).extend( // Propagate remove only if the component is an inner symbol if (!m.__isSymbolTop()) { + const rmEv = 'components:remove'; const { index } = o; + const parent = m.parent(); const opts = { fromInstance: m, ...o }; const isSymbNested = m.__isSymbolNested(); let toUpFn = symb => symb.remove(opts); - let toUp = m.__getSymbToUp(toUpOpts); + // Check if the parent allows the removing + let toUp = !parent.__isSymbOvrd(rmEv) + ? m.__getSymbToUp(toUpOpts) + : []; if (isSymbNested) { - const parent = m.parent(); toUp = parent.__getSymbToUp(toUpOpts); toUpFn = symb => { const toRemove = symb.components().at(index); diff --git a/test/specs/dom_components/model/Symbols.js b/test/specs/dom_components/model/Symbols.js index c9386ed7c..78be315f2 100644 --- a/test/specs/dom_components/model/Symbols.js +++ b/test/specs/dom_components/model/Symbols.js @@ -478,12 +478,17 @@ describe('Symbols', () => { allInst.forEach(cmp => expect(cmp.components().length).toBe(innCompsLen) ); + }); + + test('Symbol is not removing components data if override is set', () => { + symbol.set(keySymbolOvrd, ['components']); + const innCompsLen = symbol.components().length; // Check for remove action symbol .components() .at(0) .remove(); - expect(symbol.components().length).toBe(2); + expect(symbol.components().length).toBe(innCompsLen - 1); allInst.forEach(cmp => expect(cmp.components().length).toBe(innCompsLen) );