diff --git a/src/dom_components/index.js b/src/dom_components/index.js index 3dd70903f..66d9026ed 100644 --- a/src/dom_components/index.js +++ b/src/dom_components/index.js @@ -750,8 +750,9 @@ export default () => { }, destroy() { - this.clear(); - componentView.remove(); + const all = this.allById(); + Object.keys(all).forEach(id => all[id] && all[id].remove()); + componentView && componentView.remove(); [c, em, componentsById, component, componentView].forEach(i => (i = {})); this.em = {}; } diff --git a/src/pages/index.js b/src/pages/index.js index 706cc1778..e0a6774c8 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -6,6 +6,10 @@ import Page from './model/Page'; export const evPfx = 'page:'; export const evPageSelect = `${evPfx}select`; +export const evPageAdd = `${evPfx}add`; +export const evPageAddBefore = `${evPageAdd}:before`; +export const evPageRemove = `${evPfx}remove`; +export const evPageRemoveBefore = `${evPageRemove}:before`; const typeMain = 'main'; export default () => { @@ -36,8 +40,8 @@ export default () => { this.em = em; this.model = model; this.select(mainPage, { silent: 1, main: 1 }); - pages.on('add', (p, c, o) => em.trigger(`${evPfx}add`, p, o)); - pages.on('remove', (p, c, o) => em.trigger(`${evPfx}remove`, p, o)); + pages.on('add', (p, c, o) => em.trigger(evPageAdd, p, o)); + pages.on('remove', (p, c, o) => em.trigger(evPageRemove, p, o)); model.on('change:selected', this._onPageChange); return this; diff --git a/test/specs/pages/index.js b/test/specs/pages/index.js index ffba3f696..c16b8170b 100644 --- a/test/specs/pages/index.js +++ b/test/specs/pages/index.js @@ -73,8 +73,6 @@ describe('Pages', () => { expect(pageComp.components().length).toBe(0); }); - // describe.only('Enable page manager', () => {}); - describe.skip('Init with pages', () => { let idPage1, idComp1, idComp2, comp1, comp2, initPages, allbyId; const createCompDef = id => ({ @@ -166,3 +164,31 @@ describe('Pages', () => { }); }); }); + +describe('Managing pages', () => { + let editor; + let em; + let domc; + let initCmpLen; + let pm; + + beforeEach(() => { + editor = new Editor({ pageManager: true }); + em = editor.getModel(); + domc = em.get('DomComponents'); + pm = em.get('PageManager'); + initCmpLen = Object.keys(domc.allById()).length; + }); + + afterEach(() => { + editor.destroy(); + pm = 0; + em = 0; + domc = 0; + }); + + test('Able to abort page add', () => { + pm.add({}); + expect(pm.getAll().length).toBe(2); + }); +});