Merge pull request #110 from mathuo/109-external-dnd-events

feat: improve dnd events
This commit is contained in:
mathuo 2022-05-21 21:10:50 +01:00 committed by GitHub
commit 2774a27eda
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 18 additions and 6 deletions

View File

@ -11,7 +11,7 @@ export enum Position {
Center = 'Center',
}
type Quadrant = 'top' | 'bottom' | 'left' | 'right';
export type Quadrant = 'top' | 'bottom' | 'left' | 'right';
export interface DroptargetEvent {
position: Position;

View File

@ -75,6 +75,7 @@ export type DockviewComponentUpdateOptions = Pick<
export interface DockviewDropEvent extends GroupviewDropEvent {
api: DockviewApi;
group: GroupPanel
}
export interface IDockviewComponent extends IBaseGrid<GroupPanel> {
@ -665,7 +666,7 @@ export class DockviewComponent
this.moveGroupOrPanel(view, groupId, itemId, target, index);
}),
view.model.onDidDrop((event) => {
this._onDidDrop.fire({ ...event, api: this._api });
this._onDidDrop.fire({ ...event, api: this._api, group: view });
}),
view.model.onDidGroupChange((event) => {
switch (event.kind) {

View File

@ -49,6 +49,12 @@ export interface ViewFactoryData {
tab?: string;
}
export interface DockviewDndOverlayEvent {
nativeEvent: DragEvent;
target: DockviewDropTargets;
group: GroupPanel;
}
export interface DockviewComponentOptions extends DockviewRenderFunctions {
watermarkComponent?: WatermarkConstructor;
watermarkFrameworkComponent?: any;
@ -56,7 +62,7 @@ export interface DockviewComponentOptions extends DockviewRenderFunctions {
tabHeight?: number;
orientation?: Orientation;
styles?: ISplitviewStyles;
showDndOverlay?: (event: DragEvent, target: DockviewDropTargets) => boolean;
showDndOverlay?: (event: DockviewDndOverlayEvent) => boolean;
}
export interface PanelOptions {

View File

@ -659,7 +659,11 @@ export class Groupview extends CompositeDisposable implements IGroupview {
canDisplayOverlay(event: DragEvent, target: DockviewDropTargets): boolean {
// custom overlay handler
if (this.accessor.options.showDndOverlay) {
return this.accessor.options.showDndOverlay(event, target);
return this.accessor.options.showDndOverlay({
nativeEvent: event,
target,
group: this.accessor.getPanel(this.id)!,
});
}
return false;
}

View File

@ -8,6 +8,7 @@ export * from './gridview/baseComponentGridview';
export * from './groupview/panel/content';
export * from './groupview/tab';
export * from './groupview/dnd';
export * from './groupview/types';
export * from './dockview/options';

View File

@ -7,6 +7,7 @@ import { ReactPanelContentPart } from './reactContentPart';
import { ReactPanelHeaderPart } from './reactHeaderPart';
import { ReactPanelDeserialzier } from '../deserializer';
import {
DockviewDndOverlayEvent,
GroupPanelFrameworkComponentFactory,
TabContextMenuEvent,
} from '../../dockview/options';
@ -17,7 +18,6 @@ import { IWatermarkPanelProps, ReactWatermarkPart } from './reactWatermarkPart';
import { PanelCollection, PanelParameters } from '../types';
import { watchElementResize } from '../../dom';
import { IContentRenderer, ITabRenderer } from '../../groupview/types';
import { DockviewDropTargets } from '../../groupview/dnd';
export interface IGroupPanelBaseProps<T extends {} = Record<string, any>>
extends PanelParameters<T> {
@ -43,7 +43,7 @@ export interface IDockviewReactProps {
tabHeight?: number;
onTabContextMenu?: (event: TabContextMenuEvent) => void;
onDidDrop?: (event: DockviewDropEvent) => void;
showDndOverlay?: (event: DragEvent, target: DockviewDropTargets) => boolean;
showDndOverlay?: (event: DockviewDndOverlayEvent) => boolean;
hideBorders?: boolean;
className?: string;
disableAutoResizing?: boolean;