diff --git a/packages/dockview/src/groupview/groupview.ts b/packages/dockview/src/groupview/groupview.ts index 354befc95..3dafe9871 100644 --- a/packages/dockview/src/groupview/groupview.ts +++ b/packages/dockview/src/groupview/groupview.ts @@ -247,17 +247,12 @@ export class Groupview extends CompositeDisposable implements IGroupview { const data = getPanelData(); - if ( - data && - data.panelId === null && - data.viewId === this.accessor.id && - data.groupId !== this.id - ) { - // prevent dropping on self for group dnd - return true; - } - if (data && data.viewId === this.accessor.id) { + if (data.panelId === null && data.groupId === this.id) { + // don't allow group move to drop on self + return false; + } + const groupHasOnePanelAndIsActiveDragElement = this._panels.length === 1 && data.groupId === this.id; diff --git a/packages/dockview/src/groupview/tab.ts b/packages/dockview/src/groupview/tab.ts index 7854bd770..499aa9cdd 100644 --- a/packages/dockview/src/groupview/tab.ts +++ b/packages/dockview/src/groupview/tab.ts @@ -106,6 +106,14 @@ export class Tab extends CompositeDisposable implements ITab { const data = getPanelData(); if (data && this.accessor.id === data.viewId) { + if ( + data.panelId === null && + data.groupId === this.group.id + ) { + // don't allow group move to drop on self + return false; + } + return this.panelId !== data.panelId; } diff --git a/packages/dockview/src/groupview/titlebar/voidContainer.ts b/packages/dockview/src/groupview/titlebar/voidContainer.ts index eebf9ebf8..302029333 100644 --- a/packages/dockview/src/groupview/titlebar/voidContainer.ts +++ b/packages/dockview/src/groupview/titlebar/voidContainer.ts @@ -46,6 +46,14 @@ export class VoidContainer extends CompositeDisposable { const data = getPanelData(); if (data && this.accessor.id === data.viewId) { + if ( + data.panelId === null && + data.groupId === this.group.id + ) { + // don't allow group move to drop on self + return false; + } + // don't show the overlay if the tab being dragged is the last panel of this group return last(this.group.panels)?.id !== data.panelId; }