mirror of
https://github.com/mathuo/dockview
synced 2025-02-02 06:25:44 +00:00
bug: fix rendering issue
This commit is contained in:
parent
75066f2420
commit
a855c55132
@ -11,6 +11,8 @@ import { IDockviewPanel } from '../../../../dockview/dockviewPanel';
|
|||||||
import { IDockviewPanelModel } from '../../../../dockview/dockviewPanelModel';
|
import { IDockviewPanelModel } from '../../../../dockview/dockviewPanelModel';
|
||||||
import { DockviewComponent } from '../../../../dockview/dockviewComponent';
|
import { DockviewComponent } from '../../../../dockview/dockviewComponent';
|
||||||
import { OverlayRenderContainer } from '../../../../overlayRenderContainer';
|
import { OverlayRenderContainer } from '../../../../overlayRenderContainer';
|
||||||
|
import { fromPartial } from '@total-typescript/shoehorn';
|
||||||
|
import { DockviewGroupPanelModel } from '../../../../dockview/dockviewGroupPanelModel';
|
||||||
|
|
||||||
class TestContentRenderer
|
class TestContentRenderer
|
||||||
extends CompositeDisposable
|
extends CompositeDisposable
|
||||||
@ -26,6 +28,7 @@ class TestContentRenderer
|
|||||||
constructor(public id: string) {
|
constructor(public id: string) {
|
||||||
super();
|
super();
|
||||||
this.element = document.createElement('div');
|
this.element = document.createElement('div');
|
||||||
|
this.element.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
init(parameters: GroupPanelContentPartInitParameters): void {
|
init(parameters: GroupPanelContentPartInitParameters): void {
|
||||||
@ -146,4 +149,40 @@ describe('contentContainer', () => {
|
|||||||
|
|
||||||
disposable.dispose();
|
disposable.dispose();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("that panels renderered as 'onlyWhenVisibile' are removed when closed", () => {
|
||||||
|
const cut = new ContentContainer(
|
||||||
|
fromPartial<DockviewComponent>({
|
||||||
|
overlayRenderContainer: {
|
||||||
|
detatch: jest.fn(),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
fromPartial<DockviewGroupPanelModel>({})
|
||||||
|
);
|
||||||
|
|
||||||
|
const panel1 = fromPartial<IDockviewPanel>({
|
||||||
|
api: {
|
||||||
|
renderer: 'onlyWhenVisibile',
|
||||||
|
},
|
||||||
|
view: { content: new TestContentRenderer('panel_1') },
|
||||||
|
});
|
||||||
|
|
||||||
|
const panel2 = fromPartial<IDockviewPanel>({
|
||||||
|
api: {
|
||||||
|
renderer: 'onlyWhenVisibile',
|
||||||
|
},
|
||||||
|
view: { content: new TestContentRenderer('panel_2') },
|
||||||
|
});
|
||||||
|
|
||||||
|
cut.openPanel(panel1);
|
||||||
|
|
||||||
|
expect(panel1.view.content.element.parentElement).toBe(cut.element);
|
||||||
|
expect(cut.element.childNodes.length).toBe(1);
|
||||||
|
|
||||||
|
cut.openPanel(panel2);
|
||||||
|
|
||||||
|
expect(panel1.view.content.element.parentElement).toBeNull();
|
||||||
|
expect(panel2.view.content.element.parentElement).toBe(cut.element);
|
||||||
|
expect(cut.element.childNodes.length).toBe(1);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -203,11 +203,11 @@ export class ContentContainer
|
|||||||
|
|
||||||
public closePanel(): void {
|
public closePanel(): void {
|
||||||
if (this.panel) {
|
if (this.panel) {
|
||||||
if (this.accessor.options.defaultRenderer === 'onlyWhenVisibile') {
|
if (this.panel.api.renderer === 'onlyWhenVisibile') {
|
||||||
this._element.removeChild(this.panel.view.content.element);
|
this._element.removeChild(this.panel.view.content.element);
|
||||||
}
|
}
|
||||||
this.panel = undefined;
|
|
||||||
}
|
}
|
||||||
|
this.panel = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
public dispose(): void {
|
public dispose(): void {
|
||||||
|
@ -138,7 +138,6 @@ export class DockviewGroupPanelModel
|
|||||||
{
|
{
|
||||||
private readonly tabsContainer: ITabsContainer;
|
private readonly tabsContainer: ITabsContainer;
|
||||||
private readonly contentContainer: IContentContainer;
|
private readonly contentContainer: IContentContainer;
|
||||||
// private readonly dropTarget: Droptarget;
|
|
||||||
private _activePanel: IDockviewPanel | undefined;
|
private _activePanel: IDockviewPanel | undefined;
|
||||||
private watermark?: IWatermarkRenderer;
|
private watermark?: IWatermarkRenderer;
|
||||||
private _isGroupActive = false;
|
private _isGroupActive = false;
|
||||||
@ -527,6 +526,7 @@ export class DockviewGroupPanelModel
|
|||||||
if (!skipSetGroupActive) {
|
if (!skipSetGroupActive) {
|
||||||
this.accessor.doSetGroupActive(this.groupPanel);
|
this.accessor.doSetGroupActive(this.groupPanel);
|
||||||
}
|
}
|
||||||
|
this.contentContainer.renderPanel(panel, { asActive: true });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,8 +14,27 @@ import './app.scss';
|
|||||||
const components = {
|
const components = {
|
||||||
default: (props: IDockviewPanelProps<{ title: string }>) => {
|
default: (props: IDockviewPanelProps<{ title: string }>) => {
|
||||||
return (
|
return (
|
||||||
<div style={{ height: '100%', overflow: 'auto', color: 'white' }}>
|
<div
|
||||||
{''}
|
style={{
|
||||||
|
height: '100%',
|
||||||
|
overflow: 'auto',
|
||||||
|
color: 'white',
|
||||||
|
position: 'relative',
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
style={{
|
||||||
|
position: 'absolute',
|
||||||
|
top: '50%',
|
||||||
|
left: '50%',
|
||||||
|
transform: 'translate(-50%,-50%)',
|
||||||
|
pointerEvents: 'none',
|
||||||
|
fontSize: '42px',
|
||||||
|
opacity: 0.5,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
{props.api.title}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user