mirror of
https://github.com/mathuo/dockview
synced 2025-05-04 10:38:24 +00:00
refactor: reduce code duplication
This commit is contained in:
parent
5e4d2cb506
commit
edaf3cb067
@ -8,16 +8,7 @@ export class PanelTransfer extends TransferObject {
|
|||||||
constructor(
|
constructor(
|
||||||
public readonly viewId: string,
|
public readonly viewId: string,
|
||||||
public readonly groupId: string,
|
public readonly groupId: string,
|
||||||
public readonly panelId: string
|
public readonly panelId: string | null
|
||||||
) {
|
|
||||||
super();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class GroupTransfer extends TransferObject {
|
|
||||||
constructor(
|
|
||||||
public readonly viewId: string,
|
|
||||||
public readonly groupId: string
|
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
@ -87,17 +78,6 @@ export function getPanelData(): PanelTransfer | undefined {
|
|||||||
return panelTransfer.getData(PanelTransfer.prototype)![0];
|
return panelTransfer.getData(PanelTransfer.prototype)![0];
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getGroupData(): GroupTransfer | undefined {
|
|
||||||
const panelTransfer = LocalSelectionTransfer.getInstance<GroupTransfer>();
|
|
||||||
const isPanelEvent = panelTransfer.hasData(GroupTransfer.prototype);
|
|
||||||
|
|
||||||
if (!isPanelEvent) {
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
return panelTransfer.getData(GroupTransfer.prototype)![0];
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getPaneData(): PaneTransfer | undefined {
|
export function getPaneData(): PaneTransfer | undefined {
|
||||||
const paneTransfer = LocalSelectionTransfer.getInstance<PaneTransfer>();
|
const paneTransfer = LocalSelectionTransfer.getInstance<PaneTransfer>();
|
||||||
const isPanelEvent = paneTransfer.hasData(PaneTransfer.prototype);
|
const isPanelEvent = paneTransfer.hasData(PaneTransfer.prototype);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { DockviewApi } from '../api/component.api';
|
import { DockviewApi } from '../api/component.api';
|
||||||
import { getGroupData, getPanelData, PanelTransfer } from '../dnd/dataTransfer';
|
import { getPanelData, PanelTransfer } from '../dnd/dataTransfer';
|
||||||
import { Droptarget, Position } from '../dnd/droptarget';
|
import { Droptarget, Position } from '../dnd/droptarget';
|
||||||
import { DockviewComponent } from '../dockview/dockviewComponent';
|
import { DockviewComponent } from '../dockview/dockviewComponent';
|
||||||
import { isAncestor, toggleClass } from '../dom';
|
import { isAncestor, toggleClass } from '../dom';
|
||||||
@ -245,18 +245,18 @@ export class Groupview extends CompositeDisposable implements IGroupview {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
const group = getGroupData();
|
const data = getPanelData();
|
||||||
|
|
||||||
if (
|
if (
|
||||||
group &&
|
data &&
|
||||||
group.viewId === this.accessor.id &&
|
data.panelId === null &&
|
||||||
group.groupId !== this.id
|
data.viewId === this.accessor.id &&
|
||||||
|
data.groupId !== this.id
|
||||||
) {
|
) {
|
||||||
|
// prevent dropping on self for group dnd
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const data = getPanelData();
|
|
||||||
|
|
||||||
if (data && data.viewId === this.accessor.id) {
|
if (data && data.viewId === this.accessor.id) {
|
||||||
const groupHasOnePanelAndIsActiveDragElement =
|
const groupHasOnePanelAndIsActiveDragElement =
|
||||||
this._panels.length === 1 && data.groupId === this.id;
|
this._panels.length === 1 && data.groupId === this.id;
|
||||||
@ -695,21 +695,19 @@ export class Groupview extends CompositeDisposable implements IGroupview {
|
|||||||
position: Position,
|
position: Position,
|
||||||
index?: number
|
index?: number
|
||||||
): void {
|
): void {
|
||||||
const groupData = getGroupData();
|
|
||||||
|
|
||||||
if (groupData) {
|
|
||||||
const { groupId } = groupData;
|
|
||||||
this._onMove.fire({
|
|
||||||
target: position,
|
|
||||||
groupId: groupId,
|
|
||||||
index,
|
|
||||||
});
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const data = getPanelData();
|
const data = getPanelData();
|
||||||
|
|
||||||
if (data) {
|
if (data) {
|
||||||
|
if (data.panelId === null) {
|
||||||
|
const { groupId } = data;
|
||||||
|
this._onMove.fire({
|
||||||
|
target: position,
|
||||||
|
groupId: groupId,
|
||||||
|
index,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const fromSameGroup =
|
const fromSameGroup =
|
||||||
this.tabsContainer.indexOf(data.panelId) !== -1;
|
this.tabsContainer.indexOf(data.panelId) !== -1;
|
||||||
|
|
||||||
|
@ -2,8 +2,8 @@ import { last } from '../../array';
|
|||||||
import { DragHandler } from '../../dnd/abstractDragHandler';
|
import { DragHandler } from '../../dnd/abstractDragHandler';
|
||||||
import {
|
import {
|
||||||
getPanelData,
|
getPanelData,
|
||||||
GroupTransfer,
|
|
||||||
LocalSelectionTransfer,
|
LocalSelectionTransfer,
|
||||||
|
PanelTransfer,
|
||||||
} from '../../dnd/dataTransfer';
|
} from '../../dnd/dataTransfer';
|
||||||
import { Droptarget, DroptargetEvent } from '../../dnd/droptarget';
|
import { Droptarget, DroptargetEvent } from '../../dnd/droptarget';
|
||||||
import { addGhostImage } from '../../dnd/ghost';
|
import { addGhostImage } from '../../dnd/ghost';
|
||||||
@ -15,7 +15,7 @@ import { GroupPanel } from '../groupviewPanel';
|
|||||||
|
|
||||||
class CustomDragHandler extends DragHandler {
|
class CustomDragHandler extends DragHandler {
|
||||||
private readonly panelTransfer =
|
private readonly panelTransfer =
|
||||||
LocalSelectionTransfer.getInstance<GroupTransfer>();
|
LocalSelectionTransfer.getInstance<PanelTransfer>();
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
element: HTMLElement,
|
element: HTMLElement,
|
||||||
@ -27,8 +27,8 @@ class CustomDragHandler extends DragHandler {
|
|||||||
|
|
||||||
getData(dataTransfer: DataTransfer | null): IDisposable {
|
getData(dataTransfer: DataTransfer | null): IDisposable {
|
||||||
this.panelTransfer.setData(
|
this.panelTransfer.setData(
|
||||||
[new GroupTransfer(this.accessorId, this.group.id)],
|
[new PanelTransfer(this.accessorId, this.group.id, null)],
|
||||||
GroupTransfer.prototype
|
PanelTransfer.prototype
|
||||||
);
|
);
|
||||||
|
|
||||||
const style = window.getComputedStyle(this.el);
|
const style = window.getComputedStyle(this.el);
|
||||||
@ -58,7 +58,7 @@ class CustomDragHandler extends DragHandler {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
dispose: () => {
|
dispose: () => {
|
||||||
this.panelTransfer.clearData(GroupTransfer.prototype);
|
this.panelTransfer.clearData(PanelTransfer.prototype);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user