feat: simplify event

This commit is contained in:
mathuo 2024-02-24 21:19:17 +00:00
parent fd2460416a
commit 8533a18fea
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
4 changed files with 63 additions and 21 deletions

View File

@ -11,7 +11,10 @@ import { toggleClass } from '../../../dom';
import { DockviewPanel, IDockviewPanel } from '../../dockviewPanel'; import { DockviewPanel, IDockviewPanel } from '../../dockviewPanel';
import { DockviewComponent } from '../../dockviewComponent'; import { DockviewComponent } from '../../dockviewComponent';
import { WillShowOverlayEvent } from '../../../dnd/droptarget'; import { WillShowOverlayEvent } from '../../../dnd/droptarget';
import { DockviewGroupDropLocation } from '../../dockviewGroupPanelModel'; import {
DockviewGroupDropLocation,
WillShowOverlayLocationEvent,
} from '../../dockviewGroupPanelModel';
export interface TabDropIndexEvent { export interface TabDropIndexEvent {
readonly event: DragEvent; readonly event: DragEvent;
@ -35,10 +38,7 @@ export interface ITabsContainer extends IDisposable {
readonly onDrop: Event<TabDropIndexEvent>; readonly onDrop: Event<TabDropIndexEvent>;
readonly onTabDragStart: Event<TabDragEvent>; readonly onTabDragStart: Event<TabDragEvent>;
readonly onGroupDragStart: Event<GroupDragEvent>; readonly onGroupDragStart: Event<GroupDragEvent>;
readonly onWillShowOverlay: Event<{ readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent>;
event: WillShowOverlayEvent;
kind: DockviewGroupDropLocation;
}>;
hidden: boolean; hidden: boolean;
delete(id: string): void; delete(id: string): void;
indexOf(id: string): number; indexOf(id: string): number;
@ -83,14 +83,10 @@ export class TabsContainer
readonly onGroupDragStart: Event<GroupDragEvent> = readonly onGroupDragStart: Event<GroupDragEvent> =
this._onGroupDragStart.event; this._onGroupDragStart.event;
private readonly _onWillShowOverlay = new Emitter<{ private readonly _onWillShowOverlay =
event: WillShowOverlayEvent; new Emitter<WillShowOverlayLocationEvent>();
kind: DockviewGroupDropLocation; readonly onWillShowOverlay: Event<WillShowOverlayLocationEvent> =
}>(); this._onWillShowOverlay.event;
readonly onWillShowOverlay: Event<{
event: WillShowOverlayEvent;
kind: DockviewGroupDropLocation;
}> = this._onWillShowOverlay.event;
get panels(): string[] { get panels(): string[] {
return this.tabs.map((_) => _.value.panel.id); return this.tabs.map((_) => _.value.panel.id);
@ -248,7 +244,11 @@ export class TabsContainer
}); });
}), }),
this.voidContainer.onWillShowOverlay((event) => { this.voidContainer.onWillShowOverlay((event) => {
this._onWillShowOverlay.fire({ event, kind: 'header_space' }); this._onWillShowOverlay.fire(
new WillShowOverlayLocationEvent(event, {
kind: 'header_space',
})
);
}), }),
addDisposableListener( addDisposableListener(
this.voidContainer.element, this.voidContainer.element,
@ -407,7 +407,9 @@ export class TabsContainer
}); });
}), }),
tab.onWillShowOverlay((event) => { tab.onWillShowOverlay((event) => {
this._onWillShowOverlay.fire({ event, kind: 'tab' }); this._onWillShowOverlay.fire(
new WillShowOverlayLocationEvent(event, { kind: 'tab' })
);
}) })
); );

View File

@ -2134,7 +2134,7 @@ export class DockviewComponent
}), }),
view.model.onWillShowOverlay((event) => { view.model.onWillShowOverlay((event) => {
if (this.options.disableDnd) { if (this.options.disableDnd) {
event.event.preventDefault(); event.preventDefault();
return; return;
} }

View File

@ -8,6 +8,7 @@ import {
DockviewEvent, DockviewEvent,
Emitter, Emitter,
Event, Event,
IDockviewEvent,
} from '../events'; } from '../events';
import { IViewSize } from '../gridview/gridview'; import { IViewSize } from '../gridview/gridview';
import { CompositeDisposable } from '../lifecycle'; import { CompositeDisposable } from '../lifecycle';
@ -179,9 +180,39 @@ export type DockviewGroupLocation =
| { type: 'floating' } | { type: 'floating' }
| { type: 'popout'; getWindow: () => Window }; | { type: 'popout'; getWindow: () => Window };
export interface WillShowOverlayLocationEvent { type A = typeof WillShowOverlayEvent;
event: WillShowOverlayEvent;
export class WillShowOverlayLocationEvent implements IDockviewEvent {
private _kind: DockviewGroupDropLocation;
get kind(): DockviewGroupDropLocation {
return this._kind;
}
get nativeEvent(): DragEvent {
return this.event.nativeEvent;
}
get position(): Position {
return this.event.position;
}
get defaultPrevented(): boolean {
return this.event.defaultPrevented;
}
preventDefault(): void {
this.event.preventDefault();
}
constructor(
private readonly event: WillShowOverlayEvent,
options: {
kind: DockviewGroupDropLocation; kind: DockviewGroupDropLocation;
}
) {
this._kind = options.kind;
}
} }
export class DockviewGroupPanelModel export class DockviewGroupPanelModel
@ -411,7 +442,11 @@ export class DockviewGroupPanelModel
this._onWillShowOverlay.fire(event); this._onWillShowOverlay.fire(event);
}), }),
this.contentContainer.dropTarget.onWillShowOverlay((event) => { this.contentContainer.dropTarget.onWillShowOverlay((event) => {
this._onWillShowOverlay.fire({ event, kind: 'content' }); this._onWillShowOverlay.fire(
new WillShowOverlayLocationEvent(event, {
kind: 'content',
})
);
}), }),
this._onMove, this._onMove,
this._onDidChange, this._onDidChange,

View File

@ -24,7 +24,12 @@ export namespace Event {
}; };
} }
export class DockviewEvent { export interface IDockviewEvent {
readonly defaultPrevented: boolean;
preventDefault(): void;
}
export class DockviewEvent implements IDockviewEvent {
private _defaultPrevented = false; private _defaultPrevented = false;
get defaultPrevented(): boolean { get defaultPrevented(): boolean {