Fixes the 'undefined' in connection tree when capabilities not loaded (#617)

* fixed the bug with loading the connection tree when capabilities not loaded
This commit is contained in:
Leila Lali
2018-02-06 13:13:48 -08:00
committed by GitHub
parent 3076390eb1
commit f5aa49ebb9
5 changed files with 38 additions and 19 deletions

View File

@@ -41,6 +41,11 @@ export class ConnectionConfig implements IConnectionConfig {
) { ) {
this._providerCapabilitiesMap = {}; this._providerCapabilitiesMap = {};
this.setCachedMetadata(cachedMetadata); this.setCachedMetadata(cachedMetadata);
if (this._capabilitiesService && this._capabilitiesService.onCapabilitiesReady()) {
this._capabilitiesService.onCapabilitiesReady().then(() => {
this.setCachedMetadata(this._capabilitiesService.getCapabilities());
});
}
} }
public setCachedMetadata(cachedMetadata: data.DataProtocolServerCapabilities[]): void { public setCachedMetadata(cachedMetadata: data.DataProtocolServerCapabilities[]): void {

View File

@@ -79,9 +79,12 @@ export class ConnectionProfileGroup implements IConnectionProfileGroup {
return false; return false;
} }
/**
* Returns true if all connections in the tree have valid options using the correct capabilities
*/
public get hasValidConnections(): boolean { public get hasValidConnections(): boolean {
if (this.connections) { if (this.connections) {
let invalidConnections = this.connections.find(c => c.serverCapabilities === undefined); let invalidConnections = this.connections.find(c => !c.isConnectionOptionsValid);
if (invalidConnections !== undefined) { if (invalidConnections !== undefined) {
return false; return false;
} else { } else {

View File

@@ -104,6 +104,23 @@ export class ProviderConnectionInfo implements data.ConnectionInfo {
this.options[name] = value; this.options[name] = value;
} }
/**
* Returns the title of the connection
*/
public get title(): string {
let databaseName = this.databaseName ? this.databaseName : '<default>';
let userName = this.userName ? this.userName : 'Windows Authentication';
let label = this.serverName + ', ' + databaseName + ' (' + userName + ')';
return label;
}
/**
* Returns true if the capabilities and options are loaded correctly
*/
public get isConnectionOptionsValid(): boolean {
return this.serverCapabilities && this.title.indexOf('undefined') < 0;
}
public isPasswordRequired(): boolean { public isPasswordRequired(): boolean {
let optionMetadata = this._serverCapabilities.connectionProvider.options.find( let optionMetadata = this._serverCapabilities.connectionProvider.options.find(
option => option.specialValueType === ConnectionOptionSpecialType.password); option => option.specialValueType === ConnectionOptionSpecialType.password);

View File

@@ -8,6 +8,7 @@ import 'vs/css!sql/media/objectTypes/objecttypes';
import 'vs/css!sql/media/icons/common-icons'; import 'vs/css!sql/media/icons/common-icons';
import * as dom from 'vs/base/browser/dom'; import * as dom from 'vs/base/browser/dom';
import { localize } from 'vs/nls';
import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup'; import { ConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
@@ -146,9 +147,10 @@ export class ServerTreeRenderer implements IRenderer {
} }
} }
let databaseName = connection.databaseName ? connection.databaseName : '<default>'; let label = connection.title;
let userName = connection.userName ? connection.userName : "Windows Authentication"; if (!connection.isConnectionOptionsValid) {
let label = connection.serverName + ', ' + databaseName + ' (' + userName + ')'; label = localize('loading', 'Loading...');
}
templateData.label.textContent = label; templateData.label.textContent = label;
templateData.root.title = label; templateData.root.title = label;

View File

@@ -59,6 +59,12 @@ export class ServerTreeView {
this); this);
this._treeSelectionHandler = this._instantiationService.createInstance(TreeSelectionHandler); this._treeSelectionHandler = this._instantiationService.createInstance(TreeSelectionHandler);
this._onSelectionOrFocusChange = new Emitter(); this._onSelectionOrFocusChange = new Emitter();
if (this._capabilitiesService) {
this._capabilitiesService.onCapabilitiesReady().then(() => {
this.refreshTree();
this._treeSelectionHandler.onTreeActionStateChange(false);
});
}
} }
/** /**
@@ -134,23 +140,9 @@ export class ServerTreeView {
self.refreshTree(); self.refreshTree();
let root = <ConnectionProfileGroup>this._tree.getInput(); let root = <ConnectionProfileGroup>this._tree.getInput();
if (root && !root.hasValidConnections) { if (root && !root.hasValidConnections) {
this._treeSelectionHandler.onTreeActionStateChange(true); this._treeSelectionHandler.onTreeActionStateChange(true);
if (this._capabilitiesService) {
this._capabilitiesService.onCapabilitiesReady().then(() => {
self.refreshTree();
this._treeSelectionHandler.onTreeActionStateChange(false);
resolve(); resolve();
}, error => {
reject(error);
});
} else { } else {
self.refreshTree();
resolve();
}
} else {
resolve(); resolve();
} }
}); });