refactor: reduce code duplication

This commit is contained in:
mathuo 2023-02-01 22:00:34 +07:00
parent 5e4d2cb506
commit edaf3cb067
No known key found for this signature in database
GPG Key ID: C6EEDEFD6CA07281
3 changed files with 23 additions and 45 deletions

View File

@ -8,16 +8,7 @@ export class PanelTransfer extends TransferObject {
constructor(
public readonly viewId: string,
public readonly groupId: string,
public readonly panelId: string
) {
super();
}
}
export class GroupTransfer extends TransferObject {
constructor(
public readonly viewId: string,
public readonly groupId: string
public readonly panelId: string | null
) {
super();
}
@ -87,17 +78,6 @@ export function getPanelData(): PanelTransfer | undefined {
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 {
const paneTransfer = LocalSelectionTransfer.getInstance<PaneTransfer>();
const isPanelEvent = paneTransfer.hasData(PaneTransfer.prototype);

View File

@ -1,5 +1,5 @@
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 { DockviewComponent } from '../dockview/dockviewComponent';
import { isAncestor, toggleClass } from '../dom';
@ -245,18 +245,18 @@ export class Groupview extends CompositeDisposable implements IGroupview {
return false;
}
const group = getGroupData();
const data = getPanelData();
if (
group &&
group.viewId === this.accessor.id &&
group.groupId !== this.id
data &&
data.panelId === null &&
data.viewId === this.accessor.id &&
data.groupId !== this.id
) {
// prevent dropping on self for group dnd
return true;
}
const data = getPanelData();
if (data && data.viewId === this.accessor.id) {
const groupHasOnePanelAndIsActiveDragElement =
this._panels.length === 1 && data.groupId === this.id;
@ -695,21 +695,19 @@ export class Groupview extends CompositeDisposable implements IGroupview {
position: Position,
index?: number
): void {
const groupData = getGroupData();
if (groupData) {
const { groupId } = groupData;
this._onMove.fire({
target: position,
groupId: groupId,
index,
});
return;
}
const data = getPanelData();
if (data) {
if (data.panelId === null) {
const { groupId } = data;
this._onMove.fire({
target: position,
groupId: groupId,
index,
});
return;
}
const fromSameGroup =
this.tabsContainer.indexOf(data.panelId) !== -1;

View File

@ -2,8 +2,8 @@ import { last } from '../../array';
import { DragHandler } from '../../dnd/abstractDragHandler';
import {
getPanelData,
GroupTransfer,
LocalSelectionTransfer,
PanelTransfer,
} from '../../dnd/dataTransfer';
import { Droptarget, DroptargetEvent } from '../../dnd/droptarget';
import { addGhostImage } from '../../dnd/ghost';
@ -15,7 +15,7 @@ import { GroupPanel } from '../groupviewPanel';
class CustomDragHandler extends DragHandler {
private readonly panelTransfer =
LocalSelectionTransfer.getInstance<GroupTransfer>();
LocalSelectionTransfer.getInstance<PanelTransfer>();
constructor(
element: HTMLElement,
@ -27,8 +27,8 @@ class CustomDragHandler extends DragHandler {
getData(dataTransfer: DataTransfer | null): IDisposable {
this.panelTransfer.setData(
[new GroupTransfer(this.accessorId, this.group.id)],
GroupTransfer.prototype
[new PanelTransfer(this.accessorId, this.group.id, null)],
PanelTransfer.prototype
);
const style = window.getComputedStyle(this.el);
@ -58,7 +58,7 @@ class CustomDragHandler extends DragHandler {
return {
dispose: () => {
this.panelTransfer.clearData(GroupTransfer.prototype);
this.panelTransfer.clearData(PanelTransfer.prototype);
},
};
}