Skip to content

Commit 03b7cca

Browse files
committed
moveTo(inactive)
1 parent 148a05a commit 03b7cca

File tree

3 files changed

+294
-7
lines changed

3 files changed

+294
-7
lines changed

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

Lines changed: 256 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6485,6 +6485,262 @@ describe('dockviewComponent', () => {
64856485
});
64866486
});
64876487

6488+
describe('moveGroup', () => {
6489+
test('#1', () => {
6490+
const container = document.createElement('div');
6491+
6492+
const dockview = new DockviewComponent(container, {
6493+
createComponent(options) {
6494+
switch (options.name) {
6495+
case 'default':
6496+
return new PanelContentPartTest(
6497+
options.id,
6498+
options.name
6499+
);
6500+
default:
6501+
throw new Error(`unsupported`);
6502+
}
6503+
},
6504+
});
6505+
const api = new DockviewApi(dockview);
6506+
6507+
dockview.layout(1000, 1000);
6508+
6509+
let panel1!: IDockviewPanel;
6510+
let panel2!: IDockviewPanel;
6511+
let panel3!: IDockviewPanel;
6512+
6513+
const reset = () => {
6514+
dockview.clear();
6515+
6516+
panel1 = api.addPanel({
6517+
id: 'panel_1',
6518+
component: 'default',
6519+
});
6520+
6521+
panel2 = api.addPanel({
6522+
id: 'panel_2',
6523+
component: 'default',
6524+
position: { direction: 'right' },
6525+
});
6526+
6527+
panel3 = api.addPanel({
6528+
id: 'panel_3',
6529+
component: 'default',
6530+
position: { direction: 'right' },
6531+
});
6532+
6533+
panel2.api.setActive();
6534+
};
6535+
6536+
// default case
6537+
6538+
reset();
6539+
expect([
6540+
panel1.group.api.isActive,
6541+
panel2.group.api.isActive,
6542+
]).toEqual([false, true]);
6543+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6544+
false,
6545+
true,
6546+
]);
6547+
6548+
// move inactive group
6549+
6550+
reset();
6551+
panel1.group.api.moveTo({ group: panel2.group, position: 'right' });
6552+
expect([
6553+
panel1.group.api.isActive,
6554+
panel2.group.api.isActive,
6555+
]).toEqual([true, false]);
6556+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6557+
true,
6558+
false,
6559+
]);
6560+
6561+
// move active group
6562+
6563+
reset();
6564+
panel2.group.api.moveTo({ group: panel1.group, position: 'left' });
6565+
expect([
6566+
panel1.group.api.isActive,
6567+
panel2.group.api.isActive,
6568+
]).toEqual([false, true]);
6569+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6570+
false,
6571+
true,
6572+
]);
6573+
6574+
// move inactive group (with inactive flag)
6575+
6576+
reset();
6577+
panel1.group.api.moveTo({
6578+
group: panel2.group,
6579+
position: 'right',
6580+
inactive: true,
6581+
});
6582+
expect([
6583+
panel1.group.api.isActive,
6584+
panel2.group.api.isActive,
6585+
]).toEqual([false, true]);
6586+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6587+
false,
6588+
true,
6589+
]);
6590+
6591+
// move active group (with inactive flag)
6592+
6593+
reset();
6594+
panel2.group.api.moveTo({
6595+
group: panel1.group,
6596+
position: 'left',
6597+
inactive: true,
6598+
});
6599+
expect([
6600+
panel1.group.api.isActive,
6601+
panel2.group.api.isActive,
6602+
]).toEqual([false, true]);
6603+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6604+
false,
6605+
true,
6606+
]);
6607+
6608+
// merge inactive group with active group
6609+
6610+
reset();
6611+
panel1.group.api.moveTo({ group: panel2.group });
6612+
expect([
6613+
panel1.group.api.isActive,
6614+
panel2.group.api.isActive,
6615+
]).toEqual([true, true]);
6616+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6617+
true,
6618+
false,
6619+
]);
6620+
6621+
// merge active group with inactive group
6622+
6623+
reset();
6624+
panel2.group.api.moveTo({ group: panel1.group });
6625+
expect([
6626+
panel1.group.api.isActive,
6627+
panel2.group.api.isActive,
6628+
]).toEqual([true, true]);
6629+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6630+
false,
6631+
true,
6632+
]);
6633+
6634+
// merge inactive group with active group (with inactive flag)
6635+
6636+
reset();
6637+
panel1.group.api.moveTo({ group: panel2.group, inactive: true });
6638+
expect([
6639+
panel1.group.api.isActive,
6640+
panel2.group.api.isActive,
6641+
]).toEqual([true, true]);
6642+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6643+
false,
6644+
true,
6645+
]);
6646+
6647+
// merge active group with inactive group (with inactive flag)
6648+
6649+
reset();
6650+
panel2.group.api.moveTo({ group: panel1.group, inactive: true });
6651+
expect([
6652+
panel1.group.api.isActive,
6653+
panel2.group.api.isActive,
6654+
]).toEqual([true, true]);
6655+
expect([panel1.api.isActive, panel2.api.isActive]).toEqual([
6656+
false,
6657+
true,
6658+
]);
6659+
6660+
// merge inactive group with inactive group
6661+
6662+
reset();
6663+
panel1.group.api.moveTo({ group: panel3.group });
6664+
expect([
6665+
panel1.group.api.isActive,
6666+
panel2.group.api.isActive,
6667+
panel3.group.api.isActive,
6668+
]).toEqual([true, false, true]);
6669+
expect([
6670+
panel1.api.isActive,
6671+
panel2.api.isActive,
6672+
panel3.api.isActive,
6673+
]).toEqual([true, false, false]);
6674+
6675+
// merge inactive group with inactive group (with inactive flag)
6676+
6677+
reset();
6678+
panel1.group.api.moveTo({ group: panel3.group, inactive: true });
6679+
expect([
6680+
panel1.group.api.isActive,
6681+
panel2.group.api.isActive,
6682+
panel3.group.api.isActive,
6683+
]).toEqual([false, true, false]);
6684+
expect([
6685+
panel1.api.isActive,
6686+
panel2.api.isActive,
6687+
panel3.api.isActive,
6688+
]).toEqual([false, true, false]);
6689+
});
6690+
});
6691+
6692+
describe('movePanel', () => {
6693+
test('#1', () => {
6694+
const container = document.createElement('div');
6695+
6696+
const dockview = new DockviewComponent(container, {
6697+
createComponent(options) {
6698+
switch (options.name) {
6699+
case 'default':
6700+
return new PanelContentPartTest(
6701+
options.id,
6702+
options.name
6703+
);
6704+
default:
6705+
throw new Error(`unsupported`);
6706+
}
6707+
},
6708+
});
6709+
const api = new DockviewApi(dockview);
6710+
6711+
dockview.layout(1000, 1000);
6712+
6713+
let panel1!: IDockviewPanel;
6714+
let panel2!: IDockviewPanel;
6715+
6716+
const reset = () => {
6717+
dockview.clear();
6718+
6719+
panel1 = api.addPanel({
6720+
id: 'panel_1',
6721+
component: 'default',
6722+
});
6723+
6724+
panel2 = api.addPanel({
6725+
id: 'panel_2',
6726+
component: 'default',
6727+
position: { direction: 'right' },
6728+
});
6729+
};
6730+
6731+
// default case
6732+
//
6733+
// last panel of group to within another group
6734+
//
6735+
// panel from group of at least 2 panels to within another group
6736+
//
6737+
// last panel of group to a new group within same branch
6738+
//
6739+
// last panel of group to a new group not within same branch
6740+
//
6741+
});
6742+
});
6743+
64886744
test('that `onDidLayoutChange` only subscribes to events after initial subscription time', () => {
64896745
jest.useFakeTimers();
64906746

packages/dockview-core/src/api/dockviewGroupPanelApi.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ export interface DockviewGroupMoveParams {
1616
* The index to place the panel within a group, only applicable if the placement is within an existing group
1717
*/
1818
index?: number;
19+
inactive?: boolean;
1920
}
2021

2122
export interface DockviewGroupPanelApi extends GridviewPanelApi {
@@ -105,6 +106,7 @@ export class DockviewGroupPanelApiImpl extends GridviewPanelApiImpl {
105106
: 'center',
106107
index: options.index,
107108
},
109+
inactive: options.inactive,
108110
});
109111
}
110112

0 commit comments

Comments
 (0)