diff --git a/extensions/sql-database-projects/src/common/constants.ts b/extensions/sql-database-projects/src/common/constants.ts index d7fb363715..79ac226339 100644 --- a/extensions/sql-database-projects/src/common/constants.ts +++ b/extensions/sql-database-projects/src/common/constants.ts @@ -269,6 +269,8 @@ export const WorkspaceFileExtension = '.code-workspace'; export const browseEllipsisWithIcon = `$(folder) ${localize('browseEllipsis', "Browse...")}`; export const selectProjectLocation = localize('selectProjectLocation', "Select project location"); export const sdkStyleProject = localize('sdkStyleProject', 'SDK-style project (Preview)'); +export const YesRecommended = localize('yesRecommended', "Yes (Recommended)"); +export const SdkLearnMorePlaceholder = localize('sdkLearnMorePlaceholder', "Click \"Learn More\" button for more information about SDK-style projects"); export const ProjectParentDirectoryNotExistError = (location: string): string => { return localize('dataworkspace.projectParentDirectoryNotExistError', "The selected project location '{0}' does not exist or is not a directory.", location); }; export const ProjectDirectoryAlreadyExistError = (projectName: string, location: string): string => { return localize('dataworkspace.projectDirectoryAlreadyExistError', "There is already a directory named '{0}' in the selected location: '{1}'.", projectName, location); }; diff --git a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts index 66ca21d7db..120691f651 100644 --- a/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts +++ b/extensions/sql-database-projects/src/dialogs/createProjectFromDatabaseQuickpick.ts @@ -133,6 +133,48 @@ export async function createNewProjectFromDatabaseWithQuickpick(connectionInfo?: return undefined; } + // 5. SDK-style project or not + let sdkStyle; + const sdkLearnMoreButton: vscode.QuickInputButton = { + iconPath: new vscode.ThemeIcon('link-external'), + tooltip: constants.learnMore + }; + const quickPick = vscode.window.createQuickPick(); + quickPick.items = [{ label: constants.YesRecommended }, { label: constants.noString }]; + quickPick.title = constants.sdkStyleProject; + quickPick.ignoreFocusOut = true; + const disposables: vscode.Disposable[] = []; + + try { + quickPick.buttons = [sdkLearnMoreButton]; + quickPick.placeholder = constants.SdkLearnMorePlaceholder; + + const sdkStylePromise = new Promise((resolve) => { + disposables.push( + quickPick.onDidHide(() => { + resolve(undefined); + }), + quickPick.onDidChangeSelection((item) => { + resolve(item[0].label === constants.YesRecommended); + })); + + disposables.push(quickPick.onDidTriggerButton(async () => { + await vscode.env.openExternal(vscode.Uri.parse(constants.sdkLearnMoreUrl!)); + })); + }); + + quickPick.show(); + sdkStyle = await sdkStylePromise; + quickPick.hide(); + } finally { + disposables.forEach(d => d.dispose()); + } + + if (sdkStyle === undefined) { + // User cancelled + return; + } + return { connectionUri: connectionUri, database: selectedDatabase, @@ -140,6 +182,6 @@ export async function createNewProjectFromDatabaseWithQuickpick(connectionInfo?: filePath: projectLocation, version: '1.0.0.0', extractTarget: mapExtractTargetEnum(folderStructure), - sdkStyle: false // todo: add sdkstyle option to quickpick + sdkStyle: sdkStyle }; }