Browse Source

Fix cloning pages issue (#6291)

release-v0.22.3-rc.0
mohamed yahia 1 year ago
committed by GitHub
parent
commit
8605e40a34
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 13
      packages/core/src/dom_components/model/ComponentWrapper.ts
  2. 36
      packages/core/test/specs/dom_components/model/ComponentWrapper.ts

13
packages/core/src/dom_components/model/ComponentWrapper.ts

@ -36,10 +36,11 @@ export default class ComponentWrapper extends Component {
const CmpHead = cmp?.getType(typeHead)?.model;
const CmpDef = cmp?.getType('default').model;
if (CmpHead) {
const { head, docEl } = props;
this.set(
{
head: new CmpHead({ ...props.head }, opt),
docEl: new CmpDef({ tagName: 'html', ...props.docEl }, opt),
head: head && head instanceof Component ? head : new CmpHead({ ...head }, opt),
docEl: docEl && docEl instanceof Component ? docEl : new CmpDef({ tagName: 'html', ...docEl }, opt),
},
{ silent: true },
);
@ -58,6 +59,14 @@ export default class ComponentWrapper extends Component {
return this.attributes.doctype || '';
}
clone(opt?: { symbol?: boolean | undefined; symbolInv?: boolean | undefined }): this {
const result = super.clone(opt);
result.set('head', this.get('head').clone(opt));
result.set('docEl', this.get('docEl').clone(opt));
return result;
}
toHTML(opts: ToHTMLOptions = {}) {
const { doctype } = this;
const asDoc = !isUndefined(opts.asDocument) ? opts.asDocument : !!doctype;

36
packages/core/test/specs/dom_components/model/ComponentWrapper.ts

@ -0,0 +1,36 @@
import Component from '../../../../src/dom_components/model/Component';
import ComponentHead from '../../../../src/dom_components/model/ComponentHead';
import Editor from '../../../../src/editor';
describe('ComponentWrapper', () => {
let em: Editor;
beforeEach(() => {
em = new Editor({ avoidDefaults: true });
em.Pages.onLoad();
});
describe('.clone', () => {
test('clones the component and returns a new instance for head and document element', () => {
const originalComponent = em.Pages.getSelected()?.getMainComponent();
const clonedComponent = originalComponent?.clone();
em.Pages.add(
{
id: 'PAGE_ID',
clonedComponent,
},
{
select: true,
},
);
const newPageComponent = em.Pages.get('PAGE_ID')?.getMainComponent();
expect(clonedComponent?.head).toBeInstanceOf(ComponentHead);
expect(clonedComponent?.head.cid).not.toEqual(originalComponent?.head.cid);
expect(clonedComponent?.docEl).toBeInstanceOf(Component);
expect(clonedComponent?.docEl.cid).not.toEqual(originalComponent?.docEl.cid);
expect(newPageComponent?.head.cid).not.toEqual(originalComponent?.head.cid);
});
});
});
Loading…
Cancel
Save