Initial implementation of drag and drop api (#122239)

This commit is contained in:
Barbara Valdez
2021-05-04 05:01:46 -07:00
committed by GitHub
parent 2209664991
commit 39d180d662
7 changed files with 113 additions and 6 deletions

View File

@@ -84,7 +84,7 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
if (!options || !options.treeDataProvider) {
throw new Error('Options with treeDataProvider is mandatory');
}
const registerPromise = this._proxy.$registerTreeViewDataProvider(viewId, { showCollapseAll: !!options.showCollapseAll, canSelectMany: !!options.canSelectMany });
const registerPromise = this._proxy.$registerTreeViewDataProvider(viewId, { showCollapseAll: !!options.showCollapseAll, canSelectMany: !!options.canSelectMany, canDragAndDrop: !!options.canDragAndDrop });
const treeView = this.createExtHostTreeView(viewId, options, extension);
return {
get onDidCollapseElement() { return treeView.onDidCollapseElement; },
@@ -127,6 +127,14 @@ export class ExtHostTreeViews implements ExtHostTreeViewsShape {
return treeView.getChildren(treeItemHandle);
}
$setParent(treeViewId: string, treeItemHandles: string[], newParentItemHandle: string): Promise<void> {
const treeView = this.treeViews.get(treeViewId);
if (!treeView) {
return Promise.reject(new Error(localize('treeView.notRegistered', 'No tree view with id \'{0}\' registered.', treeViewId)));
}
return treeView.setParent(treeItemHandles, newParentItemHandle);
}
async $hasResolve(treeViewId: string): Promise<boolean> {
const treeView = this.treeViews.get(treeViewId);
if (!treeView) {
@@ -369,6 +377,15 @@ class ExtHostTreeView<T> extends Disposable {
}
}
setParent(treeItemHandleOrNodes: TreeItemHandle[], newParentHandleOrNode: TreeItemHandle): Promise<void> {
const elements = <T[]>treeItemHandleOrNodes.map(item => this.getExtensionElement(item)).filter(element => !isUndefinedOrNull(element));
const newParentElement = this.getExtensionElement(newParentHandleOrNode);
if (this.dataProvider.setParent && elements && newParentElement) {
return asPromise(() => this.dataProvider.setParent!(elements, newParentElement));
}
return Promise.resolve(undefined);
}
get hasResolve(): boolean {
return !!this.dataProvider.resolveTreeItem;
}