Add resource type filtering to deployment wizard (#11079)

This commit is contained in:
Charles Gagnon
2020-06-24 18:07:52 -07:00
committed by GitHub
parent 8c6d77e04d
commit 2f90b56877
4 changed files with 31 additions and 16 deletions

View File

@@ -20,7 +20,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
vscode.window.registerTreeDataProvider('azureArc', treeDataProvider); vscode.window.registerTreeDataProvider('azureArc', treeDataProvider);
vscode.commands.registerCommand('arc.createController', async () => { vscode.commands.registerCommand('arc.createController', async () => {
await vscode.commands.executeCommand('azdata.resource.deploy'); await vscode.commands.executeCommand('azdata.resource.deploy', 'arc.control.create', ['arc.control.create']);
}); });
vscode.commands.registerCommand('arc.connectToController', async () => { vscode.commands.registerCommand('arc.connectToController', async () => {

View File

@@ -147,7 +147,7 @@ export class ControllerDashboardOverviewPage extends DashboardPage {
this.disposables.push( this.disposables.push(
newInstance.onDidClick(async () => { newInstance.onDidClick(async () => {
await vscode.commands.executeCommand('azdata.resource.deploy'); await vscode.commands.executeCommand('azdata.resource.deploy', 'arc.sql', ['arc.sql', 'arc.postgres']);
})); }));
// Refresh // Refresh

View File

@@ -29,12 +29,18 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
validationFailures.forEach(message => console.error(message)); validationFailures.forEach(message => console.error(message));
return; return;
} }
const openDialog = (resourceTypeName: string) => { /**
const filtered = resourceTypes.filter(resourceType => resourceType.name === resourceTypeName); * Opens a new ResourceTypePickerDialog
if (filtered.length !== 1) { * @param defaultResourceTypeName The resource type name to have selected by default
vscode.window.showErrorMessage(localize('resourceDeployment.UnknownResourceType', "The resource type: {0} is not defined", resourceTypeName)); * @param resourceTypeNameFilters Optional filters to apply to the resource types displayed. If undefined all
* resource types will be displayed
*/
const openDialog = (defaultResourceTypeName: string, resourceTypeNameFilters?: string[]) => {
const defaultResourceType = resourceTypes.find(resourceType => resourceType.name === defaultResourceTypeName);
if (!defaultResourceType) {
vscode.window.showErrorMessage(localize('resourceDeployment.UnknownResourceType', "The resource type: {0} is not defined", defaultResourceTypeName));
} else { } else {
const dialog = new ResourceTypePickerDialog(toolsService, resourceTypeService, filtered[0]); const dialog = new ResourceTypePickerDialog(toolsService, resourceTypeService, defaultResourceType, resourceTypeNameFilters);
dialog.open(); dialog.open();
} }
}; };
@@ -45,9 +51,14 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
vscode.commands.registerCommand('azdata.resource.sql-bdc.deploy', () => { vscode.commands.registerCommand('azdata.resource.sql-bdc.deploy', () => {
openDialog('sql-bdc'); openDialog('sql-bdc');
}); });
vscode.commands.registerCommand('azdata.resource.deploy', (resourceType: string) => { vscode.commands.registerCommand('azdata.resource.deploy', (defaultResourceTypeName?: string, resourceTypeNameFilters?: string[]) => {
if (typeof resourceType === 'string') { if ((resourceTypeNameFilters && !Array.isArray(resourceTypeNameFilters) ||
openDialog(resourceType); (resourceTypeNameFilters && resourceTypeNameFilters.length > 0 && typeof resourceTypeNameFilters[0] !== 'string'))) {
throw new Error('resourceTypeNameFilters must either be undefined or an array of strings');
}
if (typeof defaultResourceTypeName === 'string') {
openDialog(defaultResourceTypeName, resourceTypeNameFilters);
} else { } else {
let defaultDeploymentType: string; let defaultDeploymentType: string;
if (platformService.platform() === 'win32') { if (platformService.platform() === 'win32') {
@@ -55,7 +66,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<void>
} else { } else {
defaultDeploymentType = 'sql-image'; defaultDeploymentType = 'sql-image';
} }
openDialog(defaultDeploymentType); openDialog(defaultDeploymentType, resourceTypeNameFilters);
} }
}); });
vscode.commands.registerCommand('azdata.openNotebookInputDialog', (dialogInfo: NotebookBasedDialogInfo) => { vscode.commands.registerCommand('azdata.openNotebookInputDialog', (dialogInfo: NotebookBasedDialogInfo) => {

View File

@@ -33,9 +33,10 @@ export class ResourceTypePickerDialog extends DialogBase {
constructor( constructor(
private toolsService: IToolsService, private toolsService: IToolsService,
private resourceTypeService: IResourceTypeService, private resourceTypeService: IResourceTypeService,
resourceType: ResourceType) { defaultResourceType: ResourceType,
private _resourceTypeNameFilters?: string[]) {
super(localize('resourceTypePickerDialog.title', "Select the deployment options"), 'ResourceTypePickerDialog', true); super(localize('resourceTypePickerDialog.title', "Select the deployment options"), 'ResourceTypePickerDialog', true);
this._selectedResourceType = resourceType; this._selectedResourceType = defaultResourceType;
this._installToolButton = azdata.window.createButton(localize('deploymentDialog.InstallToolsButton', "Install tools")); this._installToolButton = azdata.window.createButton(localize('deploymentDialog.InstallToolsButton', "Install tools"));
this._toDispose.push(this._installToolButton.onClick(() => { this._toDispose.push(this._installToolButton.onClick(() => {
this.installTools().catch(error => console.log(error)); this.installTools().catch(error => console.log(error));
@@ -61,7 +62,10 @@ export class ResourceTypePickerDialog extends DialogBase {
tab.registerContent((view: azdata.ModelView) => { tab.registerContent((view: azdata.ModelView) => {
const tableWidth = 1126; const tableWidth = 1126;
this._view = view; this._view = view;
const resourceTypes = this.resourceTypeService.getResourceTypes().sort((a: ResourceType, b: ResourceType) => { const resourceTypes = this.resourceTypeService
.getResourceTypes()
.filter(rt => !this._resourceTypeNameFilters || this._resourceTypeNameFilters.find(rtn => rt.name === rtn))
.sort((a: ResourceType, b: ResourceType) => {
return (a.displayIndex || Number.MAX_VALUE) - (b.displayIndex || Number.MAX_VALUE); return (a.displayIndex || Number.MAX_VALUE) - (b.displayIndex || Number.MAX_VALUE);
}); });
this._cardGroup = view.modelBuilder.radioCardGroup().withProperties<azdata.RadioCardGroupComponentProperties>({ this._cardGroup = view.modelBuilder.radioCardGroup().withProperties<azdata.RadioCardGroupComponentProperties>({