mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-18 17:22:45 -05:00
Fix ModelView tree components to keep custom state (#11239)
* Fix ModelView tree components to keep custom state * override postGetChildren * deepClone
This commit is contained in:
@@ -11,6 +11,24 @@ import { IModelViewTreeViewDataProvider, ITreeComponentItem } from 'sql/workbenc
|
||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||
// eslint-disable-next-line code-import-patterns
|
||||
import * as vsTreeView from 'vs/workbench/api/browser/mainThreadTreeViews';
|
||||
import { ResolvableTreeItem } from 'vs/workbench/common/views';
|
||||
import { deepClone } from 'vs/base/common/objects';
|
||||
|
||||
export class ResolvableTreeComponentItem extends ResolvableTreeItem implements ITreeComponentItem {
|
||||
|
||||
checked?: boolean;
|
||||
enabled?: boolean;
|
||||
onCheckedChanged?: (checked: boolean) => void;
|
||||
children?: ITreeComponentItem[];
|
||||
|
||||
constructor(treeItem: ITreeComponentItem, resolve?: (() => Promise<ITreeComponentItem | undefined>)) {
|
||||
super(treeItem, resolve);
|
||||
this.checked = treeItem.checked;
|
||||
this.enabled = treeItem.enabled;
|
||||
this.onCheckedChanged = treeItem.onCheckedChanged;
|
||||
this.children = deepClone(treeItem.children);
|
||||
}
|
||||
}
|
||||
|
||||
export class TreeViewDataProvider extends vsTreeView.TreeViewDataProvider implements IModelViewTreeViewDataProvider {
|
||||
constructor(handle: number, treeViewId: string,
|
||||
@@ -32,4 +50,24 @@ export class TreeViewDataProvider extends vsTreeView.TreeViewDataProvider implem
|
||||
|
||||
refresh(itemsToRefreshByHandle: { [treeItemHandle: string]: ITreeComponentItem }) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the set of mapped ResolvableTreeComponentItems
|
||||
* @override
|
||||
* @param elements The elements to map
|
||||
*/
|
||||
protected async postGetChildren(elements: ITreeComponentItem[]): Promise<ResolvableTreeComponentItem[]> {
|
||||
const result: ResolvableTreeComponentItem[] = [];
|
||||
const hasResolve = await this.hasResolve;
|
||||
if (elements) {
|
||||
for (const element of elements) {
|
||||
const resolvable = new ResolvableTreeComponentItem(element, hasResolve ? () => {
|
||||
return this._proxy.$resolve(this.treeViewId, element.handle);
|
||||
} : undefined);
|
||||
this.itemsMap.set(element.handle, resolvable);
|
||||
result.push(resolvable);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user