Skip to content

Commit cc50199

Browse files
authored
Merge pull request #522 from mathuo/395-showdndoverlay-is-not-called-always-2
feat: simplify event
2 parents fd24604 + 8533a18 commit cc50199

File tree

4 files changed

+63
-21
lines changed

4 files changed

+63
-21
lines changed

packages/dockview-core/src/dockview/components/titlebar/tabsContainer.ts

+17-15
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import { toggleClass } from '../../../dom';
1111
import { DockviewPanel, IDockviewPanel } from '../../dockviewPanel';
1212
import { DockviewComponent } from '../../dockviewComponent';
1313
import { WillShowOverlayEvent } from '../../../dnd/droptarget';
14-
import { DockviewGroupDropLocation } from '../../dockviewGroupPanelModel';
14+
import {
15+
DockviewGroupDropLocation,
16+
WillShowOverlayLocationEvent,
17+
} from '../../dockviewGroupPanelModel';
1518

1619
export interface TabDropIndexEvent {
1720
readonly event: DragEvent;
@@ -35,10 +38,7 @@ export interface ITabsContainer extends IDisposable {
3538
readonly onDrop: Event<TabDropIndexEvent>;
3639
readonly onTabDragStart: Event<TabDragEvent>;
3740
readonly onGroupDragStart: Event<GroupDragEvent>;
38-
readonly onWillShowOverlay: Event<{
39-
event: WillShowOverlayEvent;
40-
kind: DockviewGroupDropLocation;
41-
}>;
41+
readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
4242
hidden: boolean;
4343
delete(id: string): void;
4444
indexOf(id: string): number;
@@ -83,14 +83,10 @@ export class TabsContainer
8383
readonly onGroupDragStart: Event<GroupDragEvent> =
8484
this._onGroupDragStart.event;
8585

86-
private readonly _onWillShowOverlay = new Emitter<{
87-
event: WillShowOverlayEvent;
88-
kind: DockviewGroupDropLocation;
89-
}>();
90-
readonly onWillShowOverlay: Event<{
91-
event: WillShowOverlayEvent;
92-
kind: DockviewGroupDropLocation;
93-
}> = this._onWillShowOverlay.event;
86+
private readonly _onWillShowOverlay =
87+
new Emitter<WillShowOverlayLocationEvent>();
88+
readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent> =
89+
this._onWillShowOverlay.event;
9490

9591
get panels(): string[] {
9692
return this.tabs.map((_) => _.value.panel.id);
@@ -248,7 +244,11 @@ export class TabsContainer
248244
});
249245
}),
250246
this.voidContainer.onWillShowOverlay((event) => {
251-
this._onWillShowOverlay.fire({ event, kind: 'header_space' });
247+
this._onWillShowOverlay.fire(
248+
new WillShowOverlayLocationEvent(event, {
249+
kind: 'header_space',
250+
})
251+
);
252252
}),
253253
addDisposableListener(
254254
this.voidContainer.element,
@@ -407,7 +407,9 @@ export class TabsContainer
407407
});
408408
}),
409409
tab.onWillShowOverlay((event) => {
410-
this._onWillShowOverlay.fire({ event, kind: 'tab' });
410+
this._onWillShowOverlay.fire(
411+
new WillShowOverlayLocationEvent(event, { kind: 'tab' })
412+
);
411413
})
412414
);
413415

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -2134,7 +2134,7 @@ export class DockviewComponent
21342134
}),
21352135
view.model.onWillShowOverlay((event) => {
21362136
if (this.options.disableDnd) {
2137-
event.event.preventDefault();
2137+
event.preventDefault();
21382138
return;
21392139
}
21402140

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

+39-4
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
DockviewEvent,
99
Emitter,
1010
Event,
11+
IDockviewEvent,
1112
} from '../events';
1213
import { IViewSize } from '../gridview/gridview';
1314
import { CompositeDisposable } from '../lifecycle';
@@ -179,9 +180,39 @@ export type DockviewGroupLocation =
179180
| { type: 'floating' }
180181
| { type: 'popout'; getWindow: () => Window };
181182

182-
export interface WillShowOverlayLocationEvent {
183-
event: WillShowOverlayEvent;
184-
kind: DockviewGroupDropLocation;
183+
type A = typeof WillShowOverlayEvent;
184+
185+
export class WillShowOverlayLocationEvent implements IDockviewEvent {
186+
private _kind: DockviewGroupDropLocation;
187+
188+
get kind(): DockviewGroupDropLocation {
189+
return this._kind;
190+
}
191+
192+
get nativeEvent(): DragEvent {
193+
return this.event.nativeEvent;
194+
}
195+
196+
get position(): Position {
197+
return this.event.position;
198+
}
199+
200+
get defaultPrevented(): boolean {
201+
return this.event.defaultPrevented;
202+
}
203+
204+
preventDefault(): void {
205+
this.event.preventDefault();
206+
}
207+
208+
constructor(
209+
private readonly event: WillShowOverlayEvent,
210+
options: {
211+
kind: DockviewGroupDropLocation;
212+
}
213+
) {
214+
this._kind = options.kind;
215+
}
185216
}
186217

187218
export class DockviewGroupPanelModel
@@ -411,7 +442,11 @@ export class DockviewGroupPanelModel
411442
this._onWillShowOverlay.fire(event);
412443
}),
413444
this.contentContainer.dropTarget.onWillShowOverlay((event) => {
414-
this._onWillShowOverlay.fire({ event, kind: 'content' });
445+
this._onWillShowOverlay.fire(
446+
new WillShowOverlayLocationEvent(event, {
447+
kind: 'content',
448+
})
449+
);
415450
}),
416451
this._onMove,
417452
this._onDidChange,

packages/dockview-core/src/events.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,12 @@ export namespace Event {
2424
};
2525
}
2626

27-
export class DockviewEvent {
27+
export interface IDockviewEvent {
28+
readonly defaultPrevented: boolean;
29+
preventDefault(): void;
30+
}
31+
32+
export class DockviewEvent implements IDockviewEvent {
2833
private _defaultPrevented = false;
2934

3035
get defaultPrevented(): boolean {

0 commit comments

Comments
 (0)