diff --git a/extensions/notebook/src/book/bookTreeView.ts b/extensions/notebook/src/book/bookTreeView.ts index 6630908200..1f3729a380 100644 --- a/extensions/notebook/src/book/bookTreeView.ts +++ b/extensions/notebook/src/book/bookTreeView.ts @@ -44,7 +44,8 @@ export class BookTreeViewProvider implements vscode.TreeDataProvider { - // if (target.contextValue === BookTreeItemType.savedBook || target.contextValue === BookTreeItemType.section) { - // sendNotebookActionEvent(NbTelemetryView.Book, NbTelemetryAction.DragAndDrop); - // // gets the tree items that are dragged and dropped - // let treeItems = JSON.parse(await sources.items.get(this.supportedTypes[0])!.asString()) as BookTreeItem[]; - // let rootItems = this.getLocalRoots(treeItems); - // rootItems = rootItems.filter(item => item.resourceUri !== target.resourceUri); - // if (rootItems && target) { - // let sourcesByBook = this.groupTreeItemsByBookModel(rootItems); - // const targetBook = this.books.find(book => book.bookPath === target.book.root); - // for (let [book, items] of sourcesByBook) { - // this.bookTocManager = new BookTocManager(book, targetBook); - // this.bookTocManager.enableDnd = true; - // await this.bookTocManager.updateBook(items, target); - // } - // } - // } - // } - - // new dnd interface - readonly dropMimeTypes: readonly string[]; - readonly dragMimeTypes: readonly string[]; handleDrag(treeItems: readonly BookTreeItem[], dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Thenable | void { - return undefined; // not implemented + dataTransfer.set('application/vnd.code.tree.BookTreeViewProvider', new vscode.DataTransferItem(treeItems)); } - handleDrop(target: BookTreeItem | undefined, dataTransfer: vscode.DataTransfer, token: vscode.CancellationToken): Thenable | void { + + async handleDrop(target: BookTreeItem | undefined, sources: vscode.DataTransfer, token: vscode.CancellationToken): Promise { + const transferItem = sources.get('application/vnd.code.tree.BookTreeViewProvider'); + if (!transferItem) { + return; + } + if (target.contextValue === BookTreeItemType.savedBook || target.contextValue === BookTreeItemType.section) { + sendNotebookActionEvent(NbTelemetryView.Book, NbTelemetryAction.DragAndDrop); + // gets the tree items that are dragged and dropped + const treeItems: BookTreeItem[] = transferItem.value; + let rootItems = this.getLocalRoots(treeItems); + rootItems = rootItems.filter(item => item.resourceUri !== target.resourceUri); + if (rootItems && target) { + let sourcesByBook = this.groupTreeItemsByBookModel(rootItems); + const targetBook = this.books.find(book => book.bookPath === target.book.root); + for (let [book, items] of sourcesByBook) { + this.bookTocManager = new BookTocManager(book, targetBook); + this.bookTocManager.enableDnd = true; + await this.bookTocManager.updateBook(items, target); + } + } + } } /** diff --git a/src/vs/workbench/api/common/extHostTreeViews.ts b/src/vs/workbench/api/common/extHostTreeViews.ts index 33b6045a60..73a5f7db96 100644 --- a/src/vs/workbench/api/common/extHostTreeViews.ts +++ b/src/vs/workbench/api/common/extHostTreeViews.ts @@ -311,14 +311,15 @@ export class ExtHostTreeView extends Disposable { this.dataProvider = options.treeDataProvider; this.dndController = options.dragAndDropController; - // {{SQL CARBON MERGE TODO}} // {{SQL CARBON EDIT}} + const dropMimeTypes = options.dragAndDropController?.dropMimeTypes ?? []; + const dragMimeTypes = options.dragAndDropController?.dragMimeTypes ?? []; + const hasHandleDrag = !!options.dragAndDropController?.handleDrag; + const hasHandleDrop = !!options.dragAndDropController?.handleDrop; + if (this.proxy) { this.proxy.$registerTreeViewDataProvider(viewId, { - showCollapseAll: !!options.showCollapseAll, canSelectMany: !!options.canSelectMany, - dropMimeTypes: undefined, dragMimeTypes: undefined, - hasHandleDrag: options.dragAndDropController !== undefined, - hasHandleDrop: options.dragAndDropController !== undefined + showCollapseAll: !!options.showCollapseAll, canSelectMany: !!options.canSelectMany, dropMimeTypes, dragMimeTypes, hasHandleDrag, hasHandleDrop }); } this.dndController = options.dragAndDropController;