mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
fix refresh node and add sample (#16888)
This commit is contained in:
@@ -44,6 +44,10 @@
|
|||||||
{
|
{
|
||||||
"command": "sqlservices.openModelViewDashboard",
|
"command": "sqlservices.openModelViewDashboard",
|
||||||
"title": "sqlservices.openModelViewDashboard"
|
"title": "sqlservices.openModelViewDashboard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"command": "sqlservices.updateObjectExplorerNode",
|
||||||
|
"title": "sqlservices.updateObjectExplorerNode"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dashboard.tabs": [
|
"dashboard.tabs": [
|
||||||
@@ -193,8 +197,8 @@
|
|||||||
"menus": {
|
"menus": {
|
||||||
"objectExplorer/item/context": [
|
"objectExplorer/item/context": [
|
||||||
{
|
{
|
||||||
"command": "sqlservices.openDialog",
|
"command": "sqlservices.updateObjectExplorerNode",
|
||||||
"when": "nodeType =~ /^(Database|Server)$/ && connectionProvider == TESTPROVIDER"
|
"when": "connectionProvider == TESTPROVIDER"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -87,6 +87,10 @@ export default class MainController implements vscode.Disposable {
|
|||||||
dashboard.openModelViewDashboard(this.context);
|
dashboard.openModelViewDashboard(this.context);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
vscode.commands.registerCommand('sqlservices.updateObjectExplorerNode', async (context: azdata.ObjectExplorerContext) => {
|
||||||
|
await objectExplorer.updateNode(context);
|
||||||
|
});
|
||||||
|
|
||||||
return Promise.resolve(true);
|
return Promise.resolve(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import * as azdata from 'azdata';
|
|||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import { ProviderId } from './connectionProvider';
|
import { ProviderId } from './connectionProvider';
|
||||||
|
|
||||||
|
const RootNode: string = 'root';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class implements the ObjectExplorerProvider interface that is responsible for providing the connection tree view content.
|
* This class implements the ObjectExplorerProvider interface that is responsible for providing the connection tree view content.
|
||||||
*/
|
*/
|
||||||
@@ -28,7 +30,7 @@ export class ObjectExplorerProvider implements azdata.ObjectExplorerProvider {
|
|||||||
sessionId: '1',
|
sessionId: '1',
|
||||||
success: true,
|
success: true,
|
||||||
rootNode: {
|
rootNode: {
|
||||||
nodePath: 'root',
|
nodePath: RootNode,
|
||||||
nodeType: 'server',
|
nodeType: 'server',
|
||||||
label: 'abc',
|
label: 'abc',
|
||||||
isLeaf: false
|
isLeaf: false
|
||||||
@@ -55,34 +57,20 @@ export class ObjectExplorerProvider implements azdata.ObjectExplorerProvider {
|
|||||||
handler(e);
|
handler(e);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is called when a node is being expanded for the first time
|
||||||
|
*/
|
||||||
expandNode(nodeInfo: azdata.ExpandNodeInfo): Thenable<boolean> {
|
expandNode(nodeInfo: azdata.ExpandNodeInfo): Thenable<boolean> {
|
||||||
setTimeout(() => {
|
this.executeExpandNode(nodeInfo);
|
||||||
this.onExpandCompletedEmitter.fire({
|
|
||||||
sessionId: nodeInfo.sessionId,
|
|
||||||
nodePath: nodeInfo.nodePath,
|
|
||||||
nodes: [
|
|
||||||
{
|
|
||||||
nodePath: 'root/1',
|
|
||||||
nodeType: '',
|
|
||||||
icon: {
|
|
||||||
light: this.context.asAbsolutePath('images/group.svg'),
|
|
||||||
dark: this.context.asAbsolutePath('images/group_inverse.svg')
|
|
||||||
},
|
|
||||||
label: 'obj 1',
|
|
||||||
isLeaf: false
|
|
||||||
}, {
|
|
||||||
nodePath: 'root/2',
|
|
||||||
nodeType: '',
|
|
||||||
icon: azdata.SqlThemeIcon.Column,
|
|
||||||
label: 'obj 2',
|
|
||||||
isLeaf: false
|
|
||||||
}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
}, 500);
|
|
||||||
return Promise.resolve(true);
|
return Promise.resolve(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is called when a node is being refreshed, This is triggered by the 'Refresh' context menu item of the node.
|
||||||
|
*/
|
||||||
refreshNode(nodeInfo: azdata.ExpandNodeInfo): Thenable<boolean> {
|
refreshNode(nodeInfo: azdata.ExpandNodeInfo): Thenable<boolean> {
|
||||||
|
this.executeExpandNode(nodeInfo);
|
||||||
return Promise.resolve(true);
|
return Promise.resolve(true);
|
||||||
}
|
}
|
||||||
findNodes(findNodesInfo: azdata.FindNodesInfo): Thenable<azdata.ObjectExplorerFindNodesResponse> {
|
findNodes(findNodesInfo: azdata.FindNodesInfo): Thenable<azdata.ObjectExplorerFindNodesResponse> {
|
||||||
@@ -95,4 +83,37 @@ export class ObjectExplorerProvider implements azdata.ObjectExplorerProvider {
|
|||||||
}
|
}
|
||||||
handle?: number;
|
handle?: number;
|
||||||
providerId: string = ProviderId;
|
providerId: string = ProviderId;
|
||||||
|
|
||||||
|
private executeExpandNode(nodeInfo: azdata.ExpandNodeInfo): void {
|
||||||
|
setTimeout(() => {
|
||||||
|
const timestamp = new Date(Date.now()).toLocaleTimeString();
|
||||||
|
this.onExpandCompletedEmitter.fire({
|
||||||
|
sessionId: nodeInfo.sessionId,
|
||||||
|
nodePath: nodeInfo.nodePath,
|
||||||
|
nodes: [
|
||||||
|
{
|
||||||
|
nodePath: nodeInfo.nodePath + '/1',
|
||||||
|
nodeType: '',
|
||||||
|
icon: {
|
||||||
|
light: this.context.asAbsolutePath('images/group.svg'),
|
||||||
|
dark: this.context.asAbsolutePath('images/group_inverse.svg')
|
||||||
|
},
|
||||||
|
label: `obj 1 - ${timestamp}`,
|
||||||
|
isLeaf: false
|
||||||
|
}, {
|
||||||
|
nodePath: nodeInfo.nodePath + '/2',
|
||||||
|
nodeType: '',
|
||||||
|
icon: azdata.SqlThemeIcon.Column,
|
||||||
|
label: `obj 2 - ${timestamp}`,
|
||||||
|
isLeaf: false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async updateNode(node: azdata.ObjectExplorerContext): Promise<void> {
|
||||||
|
const node1 = await azdata.objectexplorer.getNode(node.connectionProfile.id, node.isConnectionNode ? RootNode : node.nodeInfo.nodePath);
|
||||||
|
await node1.refresh();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ export interface IServerTreeView {
|
|||||||
deleteObjectExplorerNodeAndRefreshTree(profile: ConnectionProfile): Promise<void>;
|
deleteObjectExplorerNodeAndRefreshTree(profile: ConnectionProfile): Promise<void>;
|
||||||
getSelection(): Array<ServerTreeElement>;
|
getSelection(): Array<ServerTreeElement>;
|
||||||
isFocused(): boolean;
|
isFocused(): boolean;
|
||||||
refreshElement(node: TreeNode): Promise<void>;
|
refreshElement(node: ServerTreeElement): Promise<void>;
|
||||||
readonly treeActionProvider: ServerTreeActionProvider;
|
readonly treeActionProvider: ServerTreeActionProvider;
|
||||||
isExpanded(node?: ServerTreeElement): boolean;
|
isExpanded(node?: ServerTreeElement): boolean;
|
||||||
reveal(node: ServerTreeElement): Promise<void>;
|
reveal(node: ServerTreeElement): Promise<void>;
|
||||||
@@ -722,7 +722,7 @@ export class ObjectExplorerService implements IObjectExplorerService {
|
|||||||
if (!treeNode) {
|
if (!treeNode) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
await this._serverTreeView?.refreshElement(treeNode);
|
await this._serverTreeView?.refreshElement(this.getTreeItem(treeNode));
|
||||||
if (treeNode?.children?.length ?? -1 > 0) {
|
if (treeNode?.children?.length ?? -1 > 0) {
|
||||||
await treeNode?.setExpandedState(TreeItemCollapsibleState.Expanded);
|
await treeNode?.setExpandedState(TreeItemCollapsibleState.Expanded);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user