-
Notifications
You must be signed in to change notification settings - Fork 75
Open
Description
- I've registered a command for the tree element node
registerCommandWithTreeNodeUnwrapping('azureDatabases.refresh', refreshTreeElement);
export async function refreshTreeElement(
context: IActionContext,
node: AzExtTreeItem | TreeElementWithId,
): Promise<void> {
...
branchDataProvider.refresh(node); // calls refresh
...
}Into BranchDataProvider I register each child in TreeElementStateManager
export class BranchDataProvider
extends vscode.Disposable
implements BranchDataProvider<CosmosDBResource, TreeElementWithId>
{
private readonly onDidChangeTreeDataEmitter = new vscode.EventEmitter<TreeElementWithId| undefined>();
constructor() {
super(() => this.onDidChangeTreeDataEmitter.dispose());
}
get onDidChangeTreeData(): vscode.Event<TreeElementWithId| undefined> {
return this.onDidChangeTreeDataEmitter.event;
}
async getChildren(element: TreeElementWithId): Promise<TreeElementWithId[]> {
try {
const result = await callWithTelemetryAndErrorHandling(
'',
async (context: IActionContext) => {
const children = (await element.getChildren?.()) ?? [];
return children.map((child) => {
return ext.state.wrapItemInStateHandling(child, (child: TreeElementWithId) =>
this.refresh(child),
) as TreeElementWithId; // THIS FUNCTION CREATES WRAPPED OBJECT with branchItem
});
},
);
return result ?? [];
} catch (error) {
}
}
async getResourceItem(resource: CosmosDBResource): Promise<TreeElementWithId> {
}
async getTreeItem(element: TreeElementWithId): Promise<vscode.TreeItem> {
return element.getTreeItem();
}
refresh(element?: TreeElementWithId): void {
this.onDidChangeTreeDataEmitter.fire(element);
}
}- When I call a command
azureDatabases.refreshthe methodregisterCommandtries to takecontextValue. However, due to wrapped object which does not containcontextValuethegetTreeItem()calls even if branchItem (real node instance) has this property
- Then the method
refreshTreeElementcalls refreshing the node andgetTreeItemcalls again (twice)
Metadata
Metadata
Assignees
Labels
No labels
