Browse Source

Avoid symbol remove if parent has override

pull/3487/head
Artur Arseniev 5 years ago
parent
commit
a559eebc4b
  1. 8
      src/dom_components/model/Component.js
  2. 7
      test/specs/dom_components/model/Symbols.js

8
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);

7
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)
);

Loading…
Cancel
Save