diff --git a/packages/core/src/dom_components/model/Component.ts b/packages/core/src/dom_components/model/Component.ts index 3ba6cf2b0..3bfd9c886 100644 --- a/packages/core/src/dom_components/model/Component.ts +++ b/packages/core/src/dom_components/model/Component.ts @@ -20,13 +20,13 @@ import Selectors from '../../selector_manager/model/Selectors'; import Traits from '../../trait_manager/model/Traits'; import EditorModel from '../../editor/model/Editor'; import { - AddComponentsOption, ComponentAdd, ComponentDefinition, ComponentDefinitionDefined, ComponentOptions, ComponentProperties, DragMode, + ResetComponentsOptions, SymbolToUpOptions, ToHTMLOptions, } from './types'; @@ -1005,7 +1005,7 @@ export default class Component extends StyleableModel { */ components( components?: T, - opts: AddComponentsOption = {}, + opts: ResetComponentsOptions = {}, ): undefined extends T ? Components : Component[] { const coll = this.get('components')!; diff --git a/packages/core/src/dom_components/model/types.ts b/packages/core/src/dom_components/model/types.ts index 8364d00d4..10df3a2d1 100644 --- a/packages/core/src/dom_components/model/types.ts +++ b/packages/core/src/dom_components/model/types.ts @@ -19,6 +19,12 @@ export type DraggableDroppableFn = (source: Component, target: Component, index? export interface AddComponentsOption extends AddOptions, OptionAsDocument {} +export interface ResetComponentsOptions extends AddComponentsOption { + previousModels?: Component[]; + keepIds?: string[]; + skipDomReset?: boolean; +} + interface ComponentWithCheck { new (props: any, opt: ComponentOptions): C; isComponent(node: HTMLElement, opts?: ParseNodeOptions): ComponentDefinitionDefined | undefined | boolean; diff --git a/packages/core/src/dom_components/view/ComponentsView.ts b/packages/core/src/dom_components/view/ComponentsView.ts index 15bcb5601..7ae09e0b0 100644 --- a/packages/core/src/dom_components/view/ComponentsView.ts +++ b/packages/core/src/dom_components/view/ComponentsView.ts @@ -7,6 +7,7 @@ import Component from '../model/Component'; import ComponentView from './ComponentView'; import FrameView from '../../canvas/view/FrameView'; import Components from '../model/Components'; +import { ResetComponentsOptions } from '../model/types'; export default class ComponentsView extends View { opts!: any; @@ -124,9 +125,12 @@ export default class ComponentsView extends View { return rendered; } - resetChildren(models: Components, { previousModels = [] } = {}) { - this.parentEl!.innerHTML = ''; - previousModels.forEach((md) => this.removeChildren(md, this.collection)); + resetChildren(models: Components, opts: ResetComponentsOptions = {}) { + const { previousModels } = opts; + if (!opts.skipDomReset) { + this.parentEl!.innerHTML = ''; + } + previousModels?.forEach((md) => this.removeChildren(md, this.collection)); models.each((model) => this.addToCollection(model)); }