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( 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);

View File

@ -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;

View File

@ -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);
}, },
}; };
} }