diff --git a/extensions/sql-database-projects/src/common/constants.ts b/extensions/sql-database-projects/src/common/constants.ts index 89d5dc630e..252a026148 100644 --- a/extensions/sql-database-projects/src/common/constants.ts +++ b/extensions/sql-database-projects/src/common/constants.ts @@ -166,6 +166,7 @@ export const newText = localize('new', "New"); export const selectDatabase = localize('selectDatabase', "Select database"); export const done = localize('done', "Done"); export const nameMustNotBeEmpty = localize('nameMustNotBeEmpty', "Name must not be empty"); +export const versionMustNotBeEmpty = localize('versionMustNotBeEmpty', "Version must not be empty"); //#endregion diff --git a/extensions/sql-database-projects/src/dialogs/addDatabaseReferenceQuickpick.ts b/extensions/sql-database-projects/src/dialogs/addDatabaseReferenceQuickpick.ts index e1584a88ca..a3de317303 100644 --- a/extensions/sql-database-projects/src/dialogs/addDatabaseReferenceQuickpick.ts +++ b/extensions/sql-database-projects/src/dialogs/addDatabaseReferenceQuickpick.ts @@ -9,10 +9,11 @@ import * as constants from '../common/constants'; import { getSqlProjectsInWorkspace, getSystemDatabase, validateSqlCmdVariableName } from '../common/utils'; import { DbServerValues, populateResultWithVars } from './utils'; import { AddDatabaseReferenceSettings } from '../controllers/projectController'; -import { IDacpacReferenceSettings, IProjectReferenceSettings, ISystemDatabaseReferenceSettings } from '../models/IDatabaseReferenceSettings'; +import { IDacpacReferenceSettings, INugetPackageReferenceSettings, IProjectReferenceSettings, ISystemDatabaseReferenceSettings } from '../models/IDatabaseReferenceSettings'; import { Project } from '../models/project'; import { getSystemDbOptions, promptDacpacLocation } from './addDatabaseReferenceDialog'; import { TelemetryActions, TelemetryReporter, TelemetryViews } from '../common/telemetry'; +import { ProjectType } from 'mssql'; @@ -29,6 +30,11 @@ export async function addDatabaseReferenceQuickpick(project: Project): Promise { + // (steps continued from addDatabaseReferenceQuickpick) + // 2. Prompt for location + const location = await promptLocation(); + if (!location) { + // User cancelled + return undefined; + } + + // 3. Prompt for NuGet package name + const nupkgName = await vscode.window.showInputBox( + { + title: constants.nupkgText, + placeHolder: constants.nupkgNamePlaceholder, + validateInput: (value) => { + return value ? undefined : constants.nameMustNotBeEmpty; + }, + ignoreFocusOut: true + }); + + if (!nupkgName) { + // User cancelled + return undefined; + } + + // 4. Prompt for NuGet package version + const nupkgVersion = await vscode.window.showInputBox( + { + title: constants.version, + placeHolder: constants.versionPlaceholder, + validateInput: (value) => { + return value ? undefined : constants.versionMustNotBeEmpty; + }, + ignoreFocusOut: true + }); + + if (!nupkgVersion) { + // User cancelled + return undefined; + } + + + // 5. Prompt for db/server values + const dbServerValues = await promptDbServerValues(location, path.parse(nupkgName).name); + if (!dbServerValues) { + // User cancelled + return; + } + + // 6. Prompt suppress unresolved ref errors + const suppressErrors = await promptSuppressUnresolvedRefErrors(); + + // 7. Construct result + + const referenceSettings: INugetPackageReferenceSettings = { + packageName: nupkgName, + packageVersion: nupkgVersion, + suppressMissingDependenciesErrors: suppressErrors + }; + + populateResultWithVars(referenceSettings, dbServerValues); + + TelemetryReporter.createActionEvent(TelemetryViews.ProjectTree, TelemetryActions.addDatabaseReference) + .withAdditionalProperties({ referenceType: constants.nupkgText }) + .send(); + + return referenceSettings; +} + async function promptLocation(): Promise { return vscode.window.showQuickPick( constants.locationDropdownValues,