Browse Source

Avoid removing components with override

pull/3487/head
Artur Arseniev 5 years ago
parent
commit
22ce9bd1d0
  1. 11
      src/dom_components/model/Component.js
  2. 15
      test/specs/dom_components/model/Symbols.js

11
src/dom_components/model/Component.js

@ -887,19 +887,22 @@ 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 changed = '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 toUpFn = symb => {
const symbPrnt = symb.parent();
symbPrnt && !symbPrnt.__isSymbOvrd(changed) && symb.remove(opts);
};
// Check if the parent allows the removing
let toUp = !parent.__isSymbOvrd(rmEv)
let toUp = !parent.__isSymbOvrd(changed)
? m.__getSymbToUp(toUpOpts)
: [];
if (isSymbNested) {
toUp = parent.__getSymbToUp(toUpOpts);
toUp = parent.__getSymbToUp({ ...toUpOpts, changed });
toUpFn = symb => {
const toRemove = symb.components().at(index);
toRemove && toRemove.remove({ fromInstance: parent, ...opts });

15
test/specs/dom_components/model/Symbols.js

@ -483,7 +483,6 @@ describe('Symbols', () => {
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)
@ -494,6 +493,20 @@ describe('Symbols', () => {
);
});
test('Symbol is not propagating remove on instances with ovverride', () => {
comp.set(keySymbolOvrd, ['components']);
const innCompsLen = symbol.components().length;
symbol
.components()
.at(0)
.remove();
all.forEach(cmp =>
expect(cmp.components().length).toBe(
cmp === comp ? innCompsLen : innCompsLen - 1
)
);
});
test('On symbol components update, those having override are ignored', () => {
comp.set(keySymbolOvrd, ['components']);
const innCompsLen = comp.components().length;

Loading…
Cancel
Save