mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Make azure portal work from server area (#10699)
This commit is contained in:
@@ -238,18 +238,13 @@ export function registerAzureResourceCommands(appContext: AppContext, tree: Azur
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
appContext.apiWrapper.registerCommand('azure.resource.openInAzurePortal', async (node?: TreeNode) => {
|
appContext.apiWrapper.registerCommand('azure.resource.openInAzurePortal', async (connectionProfile: azdata.IConnectionProfile) => {
|
||||||
if (!node) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const treeItem: azdata.TreeItem = await node.getTreeItem();
|
if (
|
||||||
if (!treeItem.payload) {
|
!connectionProfile.azureResourceId ||
|
||||||
return;
|
!connectionProfile.azurePortalEndpoint ||
|
||||||
}
|
!connectionProfile.azureTenantId
|
||||||
let connectionProfile = Object.assign({}, treeItem.payload, { saveProfile: true });
|
) {
|
||||||
|
|
||||||
if (!connectionProfile.azureResourceId) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
|
|||||||
this._id = model.id;
|
this._id = model.id;
|
||||||
this.azureTenantId = model.azureTenantId;
|
this.azureTenantId = model.azureTenantId;
|
||||||
this.azureAccount = model.azureAccount;
|
this.azureAccount = model.azureAccount;
|
||||||
|
this.azureResourceId = model.azureResourceId;
|
||||||
|
this.azurePortalEndpoint = model.azurePortalEndpoint;
|
||||||
if (this.capabilitiesService && model.providerName) {
|
if (this.capabilitiesService && model.providerName) {
|
||||||
let capabilities = this.capabilitiesService.getCapabilities(model.providerName);
|
let capabilities = this.capabilitiesService.getCapabilities(model.providerName);
|
||||||
if (capabilities && capabilities.connection && capabilities.connection.connectionOptions) {
|
if (capabilities && capabilities.connection && capabilities.connection.connectionOptions) {
|
||||||
@@ -125,6 +127,22 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
|
|||||||
this.options['azureAccount'] = value;
|
this.options['azureAccount'] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get azurePortalEndpoint() {
|
||||||
|
return this.options['azurePortalEndpoint'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public set azurePortalEndpoint(value: string | undefined) {
|
||||||
|
this.options['azurePortalEndpoint'] = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get azureResourceId() {
|
||||||
|
return this.options['azureResourceId'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public set azureResourceId(value: string | undefined) {
|
||||||
|
this.options['azureResourceId'] = value;
|
||||||
|
}
|
||||||
|
|
||||||
public get registeredServerDescription(): string {
|
public get registeredServerDescription(): string {
|
||||||
return this.options['registeredServerDescription'];
|
return this.options['registeredServerDescription'];
|
||||||
}
|
}
|
||||||
@@ -210,7 +228,9 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
|
|||||||
saveProfile: this.saveProfile,
|
saveProfile: this.saveProfile,
|
||||||
id: this.id,
|
id: this.id,
|
||||||
azureTenantId: this.azureTenantId,
|
azureTenantId: this.azureTenantId,
|
||||||
azureAccount: this.azureAccount
|
azureAccount: this.azureAccount,
|
||||||
|
azurePortalEndpoint: this.azurePortalEndpoint,
|
||||||
|
azureResourceId: this.azureResourceId
|
||||||
};
|
};
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -5,14 +5,45 @@
|
|||||||
import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions';
|
import { MenuRegistry, MenuId } from 'vs/platform/actions/common/actions';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import { MssqlNodeContext } from 'sql/workbench/services/objectExplorer/browser/mssqlNodeContext';
|
import { MssqlNodeContext } from 'sql/workbench/services/objectExplorer/browser/mssqlNodeContext';
|
||||||
|
import { ConnectionContextKey } from 'sql/workbench/services/connection/common/connectionContextKey';
|
||||||
|
import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands';
|
||||||
|
import { TreeViewItemHandleArg } from 'sql/workbench/common/views';
|
||||||
|
import { ObjectExplorerActionsContext } from 'sql/workbench/services/objectExplorer/browser/objectExplorerActions';
|
||||||
|
|
||||||
|
const openInAzureDECommandId: string = 'azure.openInAzureCoreDE';
|
||||||
MenuRegistry.appendMenuItem(MenuId.DataExplorerContext, {
|
MenuRegistry.appendMenuItem(MenuId.DataExplorerContext, {
|
||||||
group: 'z-azurecore',
|
group: 'z-azurecore',
|
||||||
order: 1,
|
order: 1,
|
||||||
command: {
|
command: {
|
||||||
id: 'azure.resource.openInAzurePortal',
|
id: openInAzureDECommandId,
|
||||||
title: localize('azure.openInAzurePortal.title', "Open in Azure Portal")
|
title: localize('azure.openInAzurePortal.title', "Open in Azure Portal")
|
||||||
},
|
},
|
||||||
when: MssqlNodeContext.CanOpenInAzurePortal
|
when: MssqlNodeContext.CanOpenInAzurePortal
|
||||||
});
|
});
|
||||||
|
|
||||||
|
CommandsRegistry.registerCommand({
|
||||||
|
id: openInAzureDECommandId,
|
||||||
|
handler: (accessor, args: TreeViewItemHandleArg) => {
|
||||||
|
const commandService = accessor.get(ICommandService);
|
||||||
|
return commandService.executeCommand('azure.resource.openInAzurePortal', args.$treeItem.payload);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
const openInAzureOECommandId: string = 'azure.openInAzureCoreOE';
|
||||||
|
MenuRegistry.appendMenuItem(MenuId.ObjectExplorerItemContext, {
|
||||||
|
group: 'z-azurecore',
|
||||||
|
order: 1,
|
||||||
|
command: {
|
||||||
|
id: openInAzureOECommandId,
|
||||||
|
title: localize('azure.openInAzurePortal.title', "Open in Azure Portal")
|
||||||
|
},
|
||||||
|
when: ConnectionContextKey.CanOpenInAzurePortal
|
||||||
|
});
|
||||||
|
|
||||||
|
CommandsRegistry.registerCommand({
|
||||||
|
id: openInAzureOECommandId,
|
||||||
|
handler: (accessor, args: ObjectExplorerActionsContext) => {
|
||||||
|
const commandService = accessor.get(ICommandService);
|
||||||
|
return commandService.executeCommand('azure.resource.openInAzurePortal', args.connectionProfile);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|||||||
@@ -14,12 +14,15 @@ export class ConnectionContextKey implements IContextKey<IConnectionProfile> {
|
|||||||
static Database = new RawContextKey<string>('databaseName', undefined);
|
static Database = new RawContextKey<string>('databaseName', undefined);
|
||||||
static Connection = new RawContextKey<IConnectionProfile>('connection', undefined);
|
static Connection = new RawContextKey<IConnectionProfile>('connection', undefined);
|
||||||
static IsQueryProvider = new RawContextKey<boolean>('isQueryProvider', false);
|
static IsQueryProvider = new RawContextKey<boolean>('isQueryProvider', false);
|
||||||
|
static CanOpenInAzurePortal = new RawContextKey<boolean>('canOpenInAzurePortal', false);
|
||||||
|
|
||||||
private _providerKey: IContextKey<string>;
|
private _providerKey: IContextKey<string>;
|
||||||
private _serverKey: IContextKey<string>;
|
private _serverKey: IContextKey<string>;
|
||||||
private _databaseKey: IContextKey<string>;
|
private _databaseKey: IContextKey<string>;
|
||||||
private _connectionKey: IContextKey<IConnectionProfile>;
|
private _connectionKey: IContextKey<IConnectionProfile>;
|
||||||
private _isQueryProviderKey: IContextKey<boolean>;
|
private _isQueryProviderKey: IContextKey<boolean>;
|
||||||
|
private _canOpenInAzurePortal: IContextKey<boolean>;
|
||||||
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@IContextKeyService contextKeyService: IContextKeyService,
|
@IContextKeyService contextKeyService: IContextKeyService,
|
||||||
@@ -30,9 +33,11 @@ export class ConnectionContextKey implements IContextKey<IConnectionProfile> {
|
|||||||
this._databaseKey = ConnectionContextKey.Database.bindTo(contextKeyService);
|
this._databaseKey = ConnectionContextKey.Database.bindTo(contextKeyService);
|
||||||
this._connectionKey = ConnectionContextKey.Connection.bindTo(contextKeyService);
|
this._connectionKey = ConnectionContextKey.Connection.bindTo(contextKeyService);
|
||||||
this._isQueryProviderKey = ConnectionContextKey.IsQueryProvider.bindTo(contextKeyService);
|
this._isQueryProviderKey = ConnectionContextKey.IsQueryProvider.bindTo(contextKeyService);
|
||||||
|
this._canOpenInAzurePortal = ConnectionContextKey.CanOpenInAzurePortal.bindTo(contextKeyService);
|
||||||
}
|
}
|
||||||
|
|
||||||
set(value: IConnectionProfile) {
|
set(value: IConnectionProfile) {
|
||||||
|
this.setCanOpenInPortal(value);
|
||||||
let queryProviders = this.queryManagementService.getRegisteredProviders();
|
let queryProviders = this.queryManagementService.getRegisteredProviders();
|
||||||
this._connectionKey.set(value);
|
this._connectionKey.set(value);
|
||||||
this._providerKey.set(value && value.providerName);
|
this._providerKey.set(value && value.providerName);
|
||||||
@@ -41,12 +46,22 @@ export class ConnectionContextKey implements IContextKey<IConnectionProfile> {
|
|||||||
this._isQueryProviderKey.set(value && value.providerName && queryProviders.indexOf(value.providerName) !== -1);
|
this._isQueryProviderKey.set(value && value.providerName && queryProviders.indexOf(value.providerName) !== -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private setCanOpenInPortal(connectionProfile: IConnectionProfile): void {
|
||||||
|
if (connectionProfile &&
|
||||||
|
connectionProfile.azureResourceId &&
|
||||||
|
connectionProfile.azureTenantId &&
|
||||||
|
connectionProfile.azurePortalEndpoint) {
|
||||||
|
this._canOpenInAzurePortal.set(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
reset(): void {
|
reset(): void {
|
||||||
this._providerKey.reset();
|
this._providerKey.reset();
|
||||||
this._serverKey.reset();
|
this._serverKey.reset();
|
||||||
this._databaseKey.reset();
|
this._databaseKey.reset();
|
||||||
this._connectionKey.reset();
|
this._connectionKey.reset();
|
||||||
this._isQueryProviderKey.reset();
|
this._isQueryProviderKey.reset();
|
||||||
|
this._canOpenInAzurePortal.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public get(): IConnectionProfile {
|
public get(): IConnectionProfile {
|
||||||
|
|||||||
Reference in New Issue
Block a user