From 3aeb1fa213f1f57dca2ffffd936e5c2f10bc131b Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Sun, 15 Nov 2020 21:35:18 +0100 Subject: [PATCH] Fix RTE update in text components. Closes #3069 --- src/dom_components/model/Component.js | 5 ++++- src/dom_components/model/Components.js | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/dom_components/model/Component.js b/src/dom_components/model/Component.js index 5bc07f39a..9e9e9a335 100644 --- a/src/dom_components/model/Component.js +++ b/src/dom_components/model/Component.js @@ -579,7 +579,10 @@ const Component = Backbone.Model.extend(Styleable).extend( const addChild = !this.opt.avoidChildren; this.set('components', comps); addChild && - comps.add(isFunction(components) ? components(this) : components); + comps.add( + isFunction(components) ? components(this) : components, + this.opt + ); this.listenTo(...toListen); return this; }, diff --git a/src/dom_components/model/Components.js b/src/dom_components/model/Components.js index 2de3b3d97..19be81dae 100644 --- a/src/dom_components/model/Components.js +++ b/src/dom_components/model/Components.js @@ -11,9 +11,21 @@ import { let Component; -const getIdsToKeep = prev => { +const getIdsToKeep = (prev, res = []) => { const pr = prev || []; - return pr.map(comp => comp.getId()); + pr.forEach(comp => { + res.push(comp.getId()); + getIdsToKeep(comp.components(), res); + }); + return res; +}; + +const getNewIds = (items, res = []) => { + items.map(item => { + res.push(item.getId()); + getNewIds(item.components(), res); + }); + return res; }; export default Backbone.Collection.extend({ @@ -31,7 +43,7 @@ export default Backbone.Collection.extend({ const coll = this; const prev = opts.previousModels || []; const toRemove = prev.filter(prev => !models.get(prev.cid)); - const newIds = models.map(i => i.getId()); + const newIds = getNewIds(models); opts.keepIds = getIdsToKeep(prev).filter(pr => newIds.indexOf(pr) >= 0); toRemove.forEach(md => this.removeChildren(md, coll, opts)); models.each(model => this.onAdd(model));