From 972ef3c8f0f8b20b9e70eabff2d2fedfb0b492df Mon Sep 17 00:00:00 2001 From: Alex Ross Date: Wed, 2 Feb 2022 14:55:18 +0100 Subject: [PATCH] Add value to TreeDataTransferItem dnd API --- src/vs/workbench/api/common/extHostTypes.ts | 4 ++-- .../api/common/shared/treeDataTransfer.ts | 3 ++- .../workbench/browser/parts/views/treeView.ts | 3 ++- src/vs/workbench/common/views.ts | 1 + .../vscode.proposed.treeViewDragAndDrop.d.ts | 19 ++++--------------- 5 files changed, 11 insertions(+), 19 deletions(-) diff --git a/src/vs/workbench/api/common/extHostTypes.ts b/src/vs/workbench/api/common/extHostTypes.ts index 175814660be3..9328e7729c13 100644 --- a/src/vs/workbench/api/common/extHostTypes.ts +++ b/src/vs/workbench/api/common/extHostTypes.ts @@ -2315,10 +2315,10 @@ export enum TreeItemCollapsibleState { @es5ClassCompat export class TreeDataTransferItem { async asString(): Promise { - return JSON.stringify(this._value); + return JSON.stringify(this.value); } - constructor(private readonly _value: any) { } + constructor(public readonly value: any) { } } @es5ClassCompat diff --git a/src/vs/workbench/api/common/shared/treeDataTransfer.ts b/src/vs/workbench/api/common/shared/treeDataTransfer.ts index fb0f9acb536b..18936dca2f38 100644 --- a/src/vs/workbench/api/common/shared/treeDataTransfer.ts +++ b/src/vs/workbench/api/common/shared/treeDataTransfer.ts @@ -19,7 +19,8 @@ export namespace TreeDataTransferConverter { const newDataTransfer: ITreeDataTransfer = new Map(); value.types.forEach((type, index) => { newDataTransfer.set(type, { - asString: async () => value.items[index].asString + asString: async () => value.items[index].asString, + value: undefined }); }); return newDataTransfer; diff --git a/src/vs/workbench/browser/parts/views/treeView.ts b/src/vs/workbench/browser/parts/views/treeView.ts index 2b6ffe76b8f8..24086214b3a6 100644 --- a/src/vs/workbench/browser/parts/views/treeView.ts +++ b/src/vs/workbench/browser/parts/views/treeView.ts @@ -1382,7 +1382,8 @@ export class CustomTreeViewDragAndDrop implements ITreeDragAndDrop { willDropUuid = dataValue; } else { treeDataTransfer.set(type, { - asString: () => Promise.resolve(dataValue) + asString: () => Promise.resolve(dataValue), + value: undefined }); } decrementStringCount(); diff --git a/src/vs/workbench/common/views.ts b/src/vs/workbench/common/views.ts index 9e543371dc06..dd2a97af53d5 100644 --- a/src/vs/workbench/common/views.ts +++ b/src/vs/workbench/common/views.ts @@ -637,6 +637,7 @@ export interface IViewDescriptorService { export interface ITreeDataTransferItem { asString(): Thenable; + value: any; } export type ITreeDataTransfer = Map; diff --git a/src/vscode-dts/vscode.proposed.treeViewDragAndDrop.d.ts b/src/vscode-dts/vscode.proposed.treeViewDragAndDrop.d.ts index 1cee90767050..3d80146b6c63 100644 --- a/src/vscode-dts/vscode.proposed.treeViewDragAndDrop.d.ts +++ b/src/vscode-dts/vscode.proposed.treeViewDragAndDrop.d.ts @@ -29,24 +29,13 @@ declare module 'vscode' { /** * A class for encapsulating data transferred during a tree drag and drop event. * - * If your `DragAndDropController` implements `handleDrag`, you can extend `TreeDataTransferItem` and return - * an instance of your new class for easy access to the source tree items. - * - * ```ts - * class TestViewObjectTransferItem extends vscode.TreeDataTransferItem { - * constructor(private _nodes: Node[]) { - * super(_nodes); - * } - * - * asObject(): Node[] { - * return this._nodes; - * } - * } - * ``` + * If your `DragAndDropController` implements `handleDrag`, you can use the `value` of the `TreeDataTransferItem` + * to get back the object you put into it so long as the extension that created the `TreeDataTransferItem` runs in the same + * extension host. */ export class TreeDataTransferItem { asString(): Thenable; - + readonly value: any; constructor(value: any); }