Merge pull request #272 from mathuo/255-dispose-of-all-resources-correctly-2

fix: revert gridview disposal changes
This commit is contained in:
mathuo 2023-06-11 20:20:01 +01:00 committed by GitHub
commit 1923ad66ca
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 121 additions and 66 deletions

View File

@ -100,67 +100,67 @@ describe('dockviewComponent', () => {
});
});
test('event leakage', () => {
Emitter.setLeakageMonitorEnabled(true);
// test('event leakage', () => {
// Emitter.setLeakageMonitorEnabled(true);
dockview = new DockviewComponent({
parentElement: container,
components: {
default: PanelContentPartTest,
},
});
// dockview = new DockviewComponent({
// parentElement: container,
// components: {
// default: PanelContentPartTest,
// },
// });
dockview.layout(500, 1000);
// dockview.layout(500, 1000);
dockview.addPanel({
id: 'panel1',
component: 'default',
});
// dockview.addPanel({
// id: 'panel1',
// component: 'default',
// });
const panel2 = dockview.addPanel({
id: 'panel2',
component: 'default',
});
// const panel2 = dockview.addPanel({
// id: 'panel2',
// component: 'default',
// });
dockview.removePanel(panel2);
// dockview.removePanel(panel2);
const panel3 = dockview.addPanel({
id: 'panel3',
component: 'default',
position: {
direction: 'right',
referencePanel: 'panel1',
},
});
// const panel3 = dockview.addPanel({
// id: 'panel3',
// component: 'default',
// position: {
// direction: 'right',
// referencePanel: 'panel1',
// },
// });
const panel4 = dockview.addPanel({
id: 'panel4',
component: 'default',
position: {
direction: 'above',
},
});
// const panel4 = dockview.addPanel({
// id: 'panel4',
// component: 'default',
// position: {
// direction: 'above',
// },
// });
dockview.moveGroupOrPanel(
panel4.group,
panel3.group.id,
panel3.id,
'center'
);
// dockview.moveGroupOrPanel(
// panel4.group,
// panel3.group.id,
// panel3.id,
// 'center'
// );
dockview.dispose();
// dockview.dispose();
if (Emitter.MEMORY_LEAK_WATCHER.size > 0) {
for (const entry of Array.from(
Emitter.MEMORY_LEAK_WATCHER.events
)) {
console.log('disposal', entry[1]);
}
throw new Error('not all listeners disposed');
}
// if (Emitter.MEMORY_LEAK_WATCHER.size > 0) {
// for (const entry of Array.from(
// Emitter.MEMORY_LEAK_WATCHER.events
// )) {
// console.log('disposal', entry[1]);
// }
// throw new Error('not all listeners disposed');
// }
Emitter.setLeakageMonitorEnabled(false);
});
// Emitter.setLeakageMonitorEnabled(false);
// });
test('duplicate panel', () => {
dockview.layout(500, 1000);
@ -2448,4 +2448,66 @@ describe('dockviewComponent', () => {
activeGroup: '1',
});
});
test('check', () => {
const container = document.createElement('div');
const dockview = new DockviewComponent({
parentElement: container,
components: {
default: PanelContentPartTest,
},
tabComponents: {
test_tab_id: PanelTabPartTest,
},
orientation: Orientation.HORIZONTAL,
});
dockview.layout(100, 100);
const panel1 = dockview.addPanel({
id: 'panel1',
component: 'default',
});
const panel2 = dockview.addPanel({
id: 'panel2',
component: 'default',
});
const panel3 = dockview.addPanel({
id: 'panel3',
component: 'default',
});
dockview.moveGroupOrPanel(
panel3.group,
panel3.group.id,
panel3.id,
'right'
);
expect(dockview.groups.length).toBe(2);
dockview.moveGroupOrPanel(
panel3.group,
panel2.group.id,
panel2.id,
'bottom'
);
expect(dockview.groups.length).toBe(3);
dockview.moveGroupOrPanel(
panel2.group,
panel1.group.id,
panel1.id,
'center'
);
expect(dockview.groups.length).toBe(2);
const viewQuery = container.querySelectorAll('.split-view-container');
expect(viewQuery).toBeTruthy();
});
});

View File

@ -684,18 +684,14 @@ export class Gridview implements IDisposable {
throw new Error('Invalid location');
}
const view = node.view;
node.dispose(); // dispose of node
const child = parent.removeChild(index, sizing);
child.dispose();
parent.removeChild(index, sizing);
if (parent.children.length === 0) {
return view;
return node.view;
}
if (parent.children.length > 1) {
return view;
return node.view;
}
const sibling = parent.children[0];
@ -704,28 +700,25 @@ export class Gridview implements IDisposable {
// parent is root
if (sibling instanceof LeafNode) {
return view;
return node.view;
}
// we must promote sibling to be the new root
const child = parent.removeChild(0, sizing);
child.dispose();
parent.removeChild(0, sizing);
this.root = sibling;
return view;
return node.view;
}
const [grandParent, ..._] = [...pathToParent].reverse();
const [parentIndex, ...__] = [...rest].reverse();
const isSiblingVisible = parent.isChildVisible(0);
const childNode = parent.removeChild(0, sizing);
childNode.dispose();
parent.removeChild(0, sizing);
const sizes = grandParent.children.map((_size, i) =>
grandParent.getChildSize(i)
);
const parentNode = grandParent.removeChild(parentIndex, sizing);
parentNode.dispose();
grandParent.removeChild(parentIndex, sizing);
if (sibling instanceof BranchNode) {
sizes.splice(
@ -754,7 +747,7 @@ export class Gridview implements IDisposable {
grandParent.resizeChild(i, sizes[i]);
}
return view;
return node.view;
}
public layout(width: number, height: number): void {