Skip to content

Commit

Permalink
feat: experimental work
Browse files Browse the repository at this point in the history
  • Loading branch information
mathuo committed Dec 20, 2024
1 parent 25489bf commit 97e8a95
Show file tree
Hide file tree
Showing 7 changed files with 439 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -679,6 +679,239 @@ describe('dockviewComponent', () => {
expect(viewQuery.length).toBe(1);
});

describe('serialization', () => {
test('reuseExistingPanels true', () => {
const parts: PanelContentPartTest[] = [];

dockview = new DockviewComponent(container, {
createComponent(options) {
switch (options.name) {
case 'default':
const part = new PanelContentPartTest(
options.id,
options.name
);
parts.push(part);
return part;
default:
throw new Error(`unsupported`);
}
},
});

dockview.layout(1000, 1000);

dockview.addPanel({ id: 'panel1', component: 'default' });
dockview.addPanel({ id: 'panel2', component: 'default' });
dockview.addPanel({ id: 'panel7', component: 'default' });

expect(parts.length).toBe(3);

expect(parts.map((part) => part.isDisposed)).toEqual([
false,
false,
false,
]);

dockview.fromJSON(
{
activeGroup: 'group-1',
grid: {
root: {
type: 'branch',
data: [
{
type: 'leaf',
data: {
views: ['panel1'],
id: 'group-1',
activeView: 'panel1',
},
size: 500,
},
{
type: 'branch',
data: [
{
type: 'leaf',
data: {
views: ['panel2', 'panel3'],
id: 'group-2',
},
size: 500,
},
{
type: 'leaf',
data: {
views: ['panel4'],
id: 'group-3',
},
size: 500,
},
],
size: 500,
},
],
size: 1000,
},
height: 1000,
width: 1000,
orientation: Orientation.VERTICAL,
},
panels: {
panel1: {
id: 'panel1',
contentComponent: 'default',
tabComponent: 'tab-default',
title: 'panel1',
},
panel2: {
id: 'panel2',
contentComponent: 'default',
title: 'panel2',
},
panel3: {
id: 'panel3',
contentComponent: 'default',
title: 'panel3',
renderer: 'onlyWhenVisible',
},
panel4: {
id: 'panel4',
contentComponent: 'default',
title: 'panel4',
renderer: 'always',
},
},
},
{ reuseExistingPanels: true }
);

expect(parts.map((part) => part.isDisposed)).toEqual([
false,
false,
true,
false,
false,
]);
});

test('reuseExistingPanels false', () => {
const parts: PanelContentPartTest[] = [];

dockview = new DockviewComponent(container, {
createComponent(options) {
switch (options.name) {
case 'default':
const part = new PanelContentPartTest(
options.id,
options.name
);
parts.push(part);
return part;
default:
throw new Error(`unsupported`);
}
},
});

dockview.layout(1000, 1000);

dockview.addPanel({ id: 'panel1', component: 'default' });
dockview.addPanel({ id: 'panel2', component: 'default' });
dockview.addPanel({ id: 'panel7', component: 'default' });

expect(parts.length).toBe(3);

expect(parts.map((part) => part.isDisposed)).toEqual([
false,
false,
false,
]);

dockview.fromJSON({
activeGroup: 'group-1',
grid: {
root: {
type: 'branch',
data: [
{
type: 'leaf',
data: {
views: ['panel1'],
id: 'group-1',
activeView: 'panel1',
},
size: 500,
},
{
type: 'branch',
data: [
{
type: 'leaf',
data: {
views: ['panel2', 'panel3'],
id: 'group-2',
},
size: 500,
},
{
type: 'leaf',
data: {
views: ['panel4'],
id: 'group-3',
},
size: 500,
},
],
size: 500,
},
],
size: 1000,
},
height: 1000,
width: 1000,
orientation: Orientation.VERTICAL,
},
panels: {
panel1: {
id: 'panel1',
contentComponent: 'default',
tabComponent: 'tab-default',
title: 'panel1',
},
panel2: {
id: 'panel2',
contentComponent: 'default',
title: 'panel2',
},
panel3: {
id: 'panel3',
contentComponent: 'default',
title: 'panel3',
renderer: 'onlyWhenVisible',
},
panel4: {
id: 'panel4',
contentComponent: 'default',
title: 'panel4',
renderer: 'always',
},
},
});

expect(parts.map((part) => part.isDisposed)).toEqual([
true,
true,
true,
false,
false,
false,
false,
]);
});
});

test('serialization', () => {
dockview.layout(1000, 1000);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,10 @@ export class TestPanel implements IDockviewPanel {
});
}

updateFromStateModel(state: GroupviewPanelState): void {
//
}

init(params: IGroupPanelInitParameters) {
this._params = params;
}
Expand Down
7 changes: 5 additions & 2 deletions packages/dockview-core/src/api/component.api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -854,8 +854,11 @@ export class DockviewApi implements CommonApi<SerializedDockview> {
/**
* Create a component from a serialized object.
*/
fromJSON(data: SerializedDockview): void {
this.component.fromJSON(data);
fromJSON(
data: SerializedDockview,
options?: { reuseExistingPanels: boolean }
): void {
this.component.fromJSON(data, options);
}

/**
Expand Down
Loading

0 comments on commit 97e8a95

Please sign in to comment.