Skip to content

Commit 1d7ab22

Browse files
committed
Merge branch 'master' of https://github.com/mathuo/dockview into 460-locked-mode-prevent-all-mouse-resizing
2 parents e1849f7 + 5fc8a6a commit 1d7ab22

File tree

17 files changed

+561
-236
lines changed

17 files changed

+561
-236
lines changed

.github/workflows/deploy-docs.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ name: Deploy Docs
22

33
on:
44
workflow_dispatch:
5-
schedule:
6-
- cron: '0 3 * * *' # every day at 3 am UTC
75

86
jobs:
97
deploy-nightly-demo-app:
@@ -14,7 +12,7 @@ jobs:
1412
- name: Use Node.js
1513
uses: actions/setup-node@v3
1614
with:
17-
node-version: '18.x'
15+
node-version: '20.x'
1816

1917
- uses: actions/cache@v3
2018
with:

.github/workflows/main.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ jobs:
1414
- name: Use Node.js
1515
uses: actions/setup-node@v3
1616
with:
17-
node-version: '18.x'
17+
node-version: '20.x'
1818

1919
- uses: actions/cache@v3
2020
with:

.github/workflows/publish.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
- uses: actions/checkout@v4
1919
- uses: actions/setup-node@v3
2020
with:
21-
node-version: '18.x'
21+
node-version: '20.x'
2222
registry-url: 'https://registry.npmjs.org'
2323

2424
- uses: actions/cache@v3
@@ -46,7 +46,7 @@ jobs:
4646
- uses: actions/checkout@v4
4747
- uses: actions/setup-node@v3
4848
with:
49-
node-version: '18.x'
49+
node-version: '20.x'
5050
registry-url: 'https://registry.npmjs.org'
5151

5252
- uses: actions/cache@v3

packages/dockview-core/src/__tests__/dockview/components/panel/content.spec.ts

+23-16
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,19 @@ describe('contentContainer', () => {
6262

6363
const disposable = new CompositeDisposable();
6464

65-
const dockviewComponent = jest.fn<DockviewComponent, []>(() => {
66-
return {
67-
renderer: 'onlyWhenVisibile',
68-
overlayRenderContainer: new OverlayRenderContainer(
69-
document.createElement('div')
70-
),
71-
} as DockviewComponent;
72-
});
65+
const overlayRenderContainer = new OverlayRenderContainer(
66+
document.createElement('div')
67+
);
7368

74-
const cut = new ContentContainer(dockviewComponent(), jest.fn() as any);
69+
const cut = new ContentContainer(
70+
fromPartial<DockviewComponent>({
71+
renderer: 'onlyWhenVisibile',
72+
overlayRenderContainer,
73+
}),
74+
fromPartial<DockviewGroupPanelModel>({
75+
renderContainer: overlayRenderContainer,
76+
})
77+
);
7578

7679
disposable.addDisposables(
7780
cut.onDidFocus(() => {
@@ -84,12 +87,12 @@ describe('contentContainer', () => {
8487

8588
const contentRenderer = new TestContentRenderer('id-1');
8689

87-
const panel = {
90+
const panel = fromPartial<IDockviewPanel>({
8891
view: {
8992
content: contentRenderer,
90-
} as Partial<IDockviewPanelModel>,
93+
},
9194
api: { renderer: 'onlyWhenVisibile' },
92-
} as Partial<IDockviewPanel>;
95+
});
9396

9497
cut.openPanel(panel as IDockviewPanel);
9598

@@ -151,13 +154,17 @@ describe('contentContainer', () => {
151154
});
152155

153156
test("that panels renderered as 'onlyWhenVisibile' are removed when closed", () => {
157+
const overlayRenderContainer = fromPartial<OverlayRenderContainer>({
158+
detatch: jest.fn(),
159+
});
160+
154161
const cut = new ContentContainer(
155162
fromPartial<DockviewComponent>({
156-
overlayRenderContainer: {
157-
detatch: jest.fn(),
158-
},
163+
overlayRenderContainer,
159164
}),
160-
fromPartial<DockviewGroupPanelModel>({})
165+
fromPartial<DockviewGroupPanelModel>({
166+
renderContainer: overlayRenderContainer,
167+
})
161168
);
162169

163170
const panel1 = fromPartial<IDockviewPanel>({

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

+28-28
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { DockviewComponent } from '../../dockview/dockviewComponent';
22
import {
3-
DockviewDropTargets,
43
GroupPanelPartInitParameters,
54
IContentRenderer,
65
ITabRenderer,
@@ -2974,7 +2973,7 @@ describe('dockviewComponent', () => {
29742973
expect(showDndOverlay).toHaveBeenCalledWith({
29752974
nativeEvent: eventLeft,
29762975
position: 'left',
2977-
target: DockviewDropTargets.Edge,
2976+
target: 'edge',
29782977
getData: getPanelData,
29792978
});
29802979
expect(showDndOverlay).toBeCalledTimes(1);
@@ -2993,7 +2992,7 @@ describe('dockviewComponent', () => {
29932992
expect(showDndOverlay).toHaveBeenCalledWith({
29942993
nativeEvent: eventRight,
29952994
position: 'right',
2996-
target: DockviewDropTargets.Edge,
2995+
target: 'edge',
29972996
getData: getPanelData,
29982997
});
29992998
expect(showDndOverlay).toBeCalledTimes(2);
@@ -3012,7 +3011,7 @@ describe('dockviewComponent', () => {
30123011
expect(showDndOverlay).toHaveBeenCalledWith({
30133012
nativeEvent: eventTop,
30143013
position: 'top',
3015-
target: DockviewDropTargets.Edge,
3014+
target: 'edge',
30163015
getData: getPanelData,
30173016
});
30183017
expect(showDndOverlay).toBeCalledTimes(3);
@@ -3031,7 +3030,7 @@ describe('dockviewComponent', () => {
30313030
expect(showDndOverlay).toHaveBeenCalledWith({
30323031
nativeEvent: eventBottom,
30333032
position: 'bottom',
3034-
target: DockviewDropTargets.Edge,
3033+
target: 'edge',
30353034
getData: getPanelData,
30363035
});
30373036
expect(showDndOverlay).toBeCalledTimes(4);
@@ -3067,7 +3066,7 @@ describe('dockviewComponent', () => {
30673066
expect(showDndOverlay).toHaveBeenCalledWith({
30683067
nativeEvent: eventTop,
30693068
position: 'center',
3070-
target: DockviewDropTargets.Edge,
3069+
target: 'edge',
30713070
getData: getPanelData,
30723071
});
30733072
expect(showDndOverlay).toBeCalledTimes(5);
@@ -4435,12 +4434,13 @@ describe('dockviewComponent', () => {
44354434
cb();
44364435
}
44374436
}),
4437+
removeEventListener: jest.fn(),
44384438
close: jest.fn(),
44394439
})
44404440
);
44414441
});
44424442

4443-
test('that can remove a popout group', async () => {
4443+
test('add a popout group', async () => {
44444444
const container = document.createElement('div');
44454445

44464446
const dockview = new DockviewComponent({
@@ -4461,19 +4461,25 @@ describe('dockviewComponent', () => {
44614461
component: 'default',
44624462
});
44634463

4464-
await dockview.addPopoutGroup(panel1);
4464+
const panel2 = dockview.addPanel({
4465+
id: 'panel_2',
4466+
component: 'default',
4467+
});
44654468

4466-
expect(dockview.panels.length).toBe(1);
4467-
expect(dockview.groups.length).toBe(2);
4468-
expect(panel1.api.group.api.location.type).toBe('popout');
4469+
expect(panel1.group.api.location.type).toBe('grid');
4470+
expect(panel2.group.api.location.type).toBe('grid');
4471+
expect(dockview.groups.length).toBe(1);
4472+
expect(dockview.panels.length).toBe(2);
44694473

4470-
dockview.removePanel(panel1);
4474+
await dockview.addPopoutGroup(panel2.group);
44714475

4472-
expect(dockview.panels.length).toBe(0);
4473-
expect(dockview.groups.length).toBe(0);
4476+
expect(panel1.group.api.location.type).toBe('popout');
4477+
expect(panel2.group.api.location.type).toBe('popout');
4478+
expect(dockview.groups.length).toBe(2);
4479+
expect(dockview.panels.length).toBe(2);
44744480
});
44754481

4476-
test('add a popout group', async () => {
4482+
test('that can remove a popout group', async () => {
44774483
const container = document.createElement('div');
44784484

44794485
const dockview = new DockviewComponent({
@@ -4494,22 +4500,16 @@ describe('dockviewComponent', () => {
44944500
component: 'default',
44954501
});
44964502

4497-
const panel2 = dockview.addPanel({
4498-
id: 'panel_2',
4499-
component: 'default',
4500-
});
4503+
await dockview.addPopoutGroup(panel1);
45014504

4502-
expect(panel1.group.api.location.type).toBe('grid');
4503-
expect(panel2.group.api.location.type).toBe('grid');
4504-
expect(dockview.groups.length).toBe(1);
4505-
expect(dockview.panels.length).toBe(2);
4505+
expect(dockview.panels.length).toBe(1);
4506+
expect(dockview.groups.length).toBe(2);
4507+
expect(panel1.api.group.api.location.type).toBe('popout');
45064508

4507-
await dockview.addPopoutGroup(panel2.group);
4509+
dockview.removePanel(panel1);
45084510

4509-
expect(panel1.group.api.location.type).toBe('popout');
4510-
expect(panel2.group.api.location.type).toBe('popout');
4511-
expect(dockview.groups.length).toBe(2);
4512-
expect(dockview.panels.length).toBe(2);
4511+
expect(dockview.panels.length).toBe(0);
4512+
expect(dockview.groups.length).toBe(0);
45134513
});
45144514

45154515
test('move from fixed to popout group and back', async () => {

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

+23-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import {
2-
DockviewDropEvent,
32
IDockviewComponent,
43
SerializedDockview,
54
} from '../dockview/dockviewComponent';
@@ -43,6 +42,11 @@ import {
4342
TabDragEvent,
4443
} from '../dockview/components/titlebar/tabsContainer';
4544
import { Box } from '../types';
45+
import {
46+
DockviewDidDropEvent,
47+
DockviewWillDropEvent,
48+
WillShowOverlayLocationEvent,
49+
} from '../dockview/dockviewGroupPanelModel';
4650

4751
export interface CommonApi<T = any> {
4852
readonly height: number;
@@ -648,10 +652,27 @@ export class DockviewApi implements CommonApi<SerializedDockview> {
648652
/**
649653
* Invoked when a Drag'n'Drop event occurs that the component was unable to handle. Exposed for custom Drag'n'Drop functionality.
650654
*/
651-
get onDidDrop(): Event<DockviewDropEvent> {
655+
get onDidDrop(): Event<DockviewDidDropEvent> {
652656
return this.component.onDidDrop;
653657
}
654658

659+
/**
660+
* Invoked when a Drag'n'Drop event occurs but before dockview handles it giving the user an opportunity to intecept and
661+
* prevent the event from occuring using the standard `preventDefault()` syntax.
662+
*
663+
* Preventing certain events may causes unexpected behaviours, use carefully.
664+
*/
665+
get onWillDrop(): Event<DockviewWillDropEvent> {
666+
return this.component.onWillDrop;
667+
}
668+
669+
/**
670+
*
671+
*/
672+
get onWillShowOverlay(): Event<WillShowOverlayLocationEvent> {
673+
return this.component.onWillShowOverlay;
674+
}
675+
655676
/**
656677
* Invoked before a group is dragged. Exposed for custom Drag'n'Drop functionality.
657678
*/

0 commit comments

Comments
 (0)