Skip to content

Commit 48d74f8

Browse files
committed
bug: duplicate container HTML Element
1 parent 872ec7c commit 48d74f8

File tree

10 files changed

+42
-33
lines changed

10 files changed

+42
-33
lines changed

packages/dockview-core/src/__tests__/gridview/baseComponentGridview.spec.ts

+15
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,21 @@ class ClassUnderTest extends BaseGrid<TestPanel> {
105105
}
106106

107107
describe('baseComponentGridview', () => {
108+
test('that the container is not removed when grid is disposed', () => {
109+
const root = document.createElement('div');
110+
const container = document.createElement('div');
111+
root.appendChild(container);
112+
113+
const cut = new ClassUnderTest(container, {
114+
orientation: Orientation.HORIZONTAL,
115+
proportionalLayout: true,
116+
});
117+
118+
cut.dispose();
119+
120+
expect(container.parentElement).toBe(root);
121+
});
122+
108123
test('that .layout(...) force flag works', () => {
109124
const cut = new ClassUnderTest(document.createElement('div'), {
110125
orientation: Orientation.HORIZONTAL,

packages/dockview-core/src/dockview/dockviewComponent.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -368,8 +368,8 @@ export class DockviewComponent
368368
return this._floatingGroups;
369369
}
370370

371-
constructor(parentElement: HTMLElement, options: DockviewComponentOptions) {
372-
super(parentElement, {
371+
constructor(container: HTMLElement, options: DockviewComponentOptions) {
372+
super(container, {
373373
proportionalLayout: true,
374374
orientation: Orientation.HORIZONTAL,
375375
styles: options.hideBorders

packages/dockview-core/src/gridview/baseComponentGridview.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -155,14 +155,17 @@ export abstract class BaseGrid<T extends IGridPanelView>
155155
this.gridview.locked = value;
156156
}
157157

158-
constructor(parentElement: HTMLElement, options: BaseGridOptions) {
159-
super(parentElement, options.disableAutoResizing);
158+
constructor(container: HTMLElement, options: BaseGridOptions) {
159+
super(document.createElement('div'), options.disableAutoResizing);
160160
this.element.style.height = '100%';
161161
this.element.style.width = '100%';
162162

163163
this._classNames = new Classnames(this.element);
164164
this._classNames.setClassNames(options.className ?? '');
165165

166+
// the container is owned by the third-party, do not modify/delete it
167+
container.appendChild(this.element);
168+
166169
this.gridview = new Gridview(
167170
!!options.proportionalLayout,
168171
options.styles,

packages/dockview-core/src/gridview/gridviewComponent.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,8 @@ export class GridviewComponent
113113
this._deserializer = value;
114114
}
115115

116-
constructor(parentElement: HTMLElement, options: GridviewComponentOptions) {
117-
super(parentElement, {
116+
constructor(container: HTMLElement, options: GridviewComponentOptions) {
117+
super(container, {
118118
proportionalLayout: options.proportionalLayout ?? true,
119119
orientation: options.orientation,
120120
styles: options.hideBorders

packages/dockview-core/src/paneview/paneviewComponent.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,10 @@ export class PaneviewComponent extends Resizable implements IPaneviewComponent {
195195
return this._options;
196196
}
197197

198-
constructor(parentElement: HTMLElement, options: PaneviewComponentOptions) {
199-
super(parentElement, options.disableAutoResizing);
198+
constructor(container: HTMLElement, options: PaneviewComponentOptions) {
199+
super(document.createElement('div'), options.disableAutoResizing);
200+
this.element.style.height = '100%';
201+
this.element.style.width = '100%';
200202

201203
this.addDisposables(
202204
this._onDidLayoutChange,
@@ -210,6 +212,9 @@ export class PaneviewComponent extends Resizable implements IPaneviewComponent {
210212
this._classNames = new Classnames(this.element);
211213
this._classNames.setClassNames(options.className ?? '');
212214

215+
// the container is owned by the third-party, do not modify/delete it
216+
container.appendChild(this.element);
217+
213218
this._options = options;
214219

215220
this.paneview = new Paneview(this.element, {

packages/dockview-core/src/splitview/splitviewComponent.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -155,15 +155,17 @@ export class SplitviewComponent
155155
: this.splitview.orthogonalSize;
156156
}
157157

158-
constructor(
159-
parentElement: HTMLElement,
160-
options: SplitviewComponentOptions
161-
) {
162-
super(parentElement, options.disableAutoResizing);
158+
constructor(container: HTMLElement, options: SplitviewComponentOptions) {
159+
super(document.createElement('div'), options.disableAutoResizing);
160+
this.element.style.height = '100%';
161+
this.element.style.width = '100%';
163162

164163
this._classNames = new Classnames(this.element);
165164
this._classNames.setClassNames(options.className ?? '');
166165

166+
// the container is owned by the third-party, do not modify/delete it
167+
container.appendChild(this.element);
168+
167169
this._options = options;
168170

169171
this.splitview = new Splitview(this.element, options);

packages/dockview/src/dockview/dockview.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -318,11 +318,7 @@ export const DockviewReact = React.forwardRef(
318318
}, [props.prefixHeaderActionsComponent]);
319319

320320
return (
321-
<div
322-
className={props.className}
323-
style={{ height: '100%', width: '100%' }}
324-
ref={domRef}
325-
>
321+
<div style={{ height: '100%', width: '100%' }} ref={domRef}>
326322
{portals}
327323
</div>
328324
);

packages/dockview/src/gridview/gridview.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,7 @@ export const GridviewReact = React.forwardRef(
126126
}, [props.components]);
127127

128128
return (
129-
<div
130-
className={props.className}
131-
style={{ height: '100%', width: '100%' }}
132-
ref={domRef}
133-
>
129+
<div style={{ height: '100%', width: '100%' }} ref={domRef}>
134130
{portals}
135131
</div>
136132
);

packages/dockview/src/paneview/paneview.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -176,11 +176,7 @@ export const PaneviewReact = React.forwardRef(
176176
}, [props.onDidDrop]);
177177

178178
return (
179-
<div
180-
className={props.className}
181-
style={{ height: '100%', width: '100%' }}
182-
ref={domRef}
183-
>
179+
<div style={{ height: '100%', width: '100%' }} ref={domRef}>
184180
{portals}
185181
</div>
186182
);

packages/dockview/src/splitview/splitview.tsx

+1-5
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,7 @@ export const SplitviewReact = React.forwardRef(
126126
}, [props.components]);
127127

128128
return (
129-
<div
130-
className={props.className}
131-
style={{ height: '100%', width: '100%' }}
132-
ref={domRef}
133-
>
129+
<div style={{ height: '100%', width: '100%' }} ref={domRef}>
134130
{portals}
135131
</div>
136132
);

0 commit comments

Comments
 (0)