diff --git a/extensions/import/src/controllers/controllerBase.ts b/extensions/import/src/controllers/controllerBase.ts index df8045dfb1..fb4a2e8920 100644 --- a/extensions/import/src/controllers/controllerBase.ts +++ b/extensions/import/src/controllers/controllerBase.ts @@ -11,7 +11,7 @@ import * as vscode from 'vscode'; export default abstract class ControllerBase implements vscode.Disposable { protected _context: vscode.ExtensionContext; - public constructor(context: vscode.ExtensionContext) { + protected constructor(context: vscode.ExtensionContext) { this._context = context; } diff --git a/extensions/import/src/controllers/mainController.ts b/extensions/import/src/controllers/mainController.ts index 01e9013397..0038e0538e 100644 --- a/extensions/import/src/controllers/mainController.ts +++ b/extensions/import/src/controllers/mainController.ts @@ -19,6 +19,9 @@ import { FlatFileProvider } from '../services/contracts'; */ export default class MainController extends ControllerBase { + public constructor(context: vscode.ExtensionContext) { + super(context); + } /** */ public deactivate(): void { @@ -36,6 +39,6 @@ export default class MainController extends ControllerBase { } private initializeFlatFileProvider(provider: FlatFileProvider) { - sqlops.tasks.registerTask('flatFileImport.start', () => new FlatFileWizard(provider).start()); + sqlops.tasks.registerTask('flatFileImport.start', (profile: sqlops.IConnectionProfile, ...args: any[]) => new FlatFileWizard(provider).start(profile, args)); } } diff --git a/extensions/import/src/wizard/api/models.ts b/extensions/import/src/wizard/api/models.ts index c3058e2738..81a8bc7f0c 100644 --- a/extensions/import/src/wizard/api/models.ts +++ b/extensions/import/src/wizard/api/models.ts @@ -14,6 +14,7 @@ export interface ImportDataModel { proseColumns: ColumnMetadata[]; proseDataPreview: string[][]; server: sqlops.connection.Connection; + serverId: string; database: string; table: string; schema: string; diff --git a/extensions/import/src/wizard/flatFileWizard.ts b/extensions/import/src/wizard/flatFileWizard.ts index 120fbf8096..baab7f3c91 100644 --- a/extensions/import/src/wizard/flatFileWizard.ts +++ b/extensions/import/src/wizard/flatFileWizard.ts @@ -28,8 +28,15 @@ export class FlatFileWizard { this.provider = provider; } - public async start() { + public async start(p: any, ...args: any[]) { let model = {}; + + let profile = p.connectionProfile; + if (profile) { + model.serverId = profile.id; + model.database = profile.databaseName; + } + let pages: Map = new Map(); @@ -46,6 +53,7 @@ export class FlatFileWizard { let page4 = sqlops.window.modelviewdialog.createWizardPage(localize('flatFileImport.page4Name', 'Summary')); let fileConfigPage: FileConfigPage; + page1.registerContent(async (view) => { fileConfigPage = new FileConfigPage(this, page1, model, view, this.provider); pages.set(0, fileConfigPage); diff --git a/extensions/import/src/wizard/pages/fileConfigPage.ts b/extensions/import/src/wizard/pages/fileConfigPage.ts index 14355f4ddd..482c2ae2c2 100644 --- a/extensions/import/src/wizard/pages/fileConfigPage.ts +++ b/extensions/import/src/wizard/pages/fileConfigPage.ts @@ -55,13 +55,14 @@ export class FileConfigPage extends ImportPage { } async onPageEnter(): Promise { - await this.populateServerDropdown(); - await this.populateDatabaseDropdown(); - await this.populateSchemaDropdown(); - return true; + let r1 = await this.populateServerDropdown(); + let r2 = await this.populateDatabaseDropdown(); + let r3 = await this.populateSchemaDropdown(); + return r1 && r2 && r3; } async onPageLeave(): Promise { + delete this.model.serverId; return true; } @@ -109,11 +110,16 @@ export class FileConfigPage extends ImportPage { let count = -1; let idx = -1; + let values = cons.map(c => { // Handle the code to remember what the user's choice was from before count++; - if (this.model.server && c.connectionId === this.model.server.connectionId) { - idx = count; + if (idx === -1) { + if (this.model.server && c.connectionId === this.model.server.connectionId) { + idx = count; + } else if (this.model.serverId && c.connectionId === this.model.serverId) { + idx = count; + } } let db = c.options.databaseDisplayName; @@ -136,12 +142,13 @@ export class FileConfigPage extends ImportPage { }; }); - if (idx > 0) { + if (idx >= 0) { let tmp = values[0]; values[0] = values[idx]; values[idx] = tmp; } else { delete this.model.server; + delete this.model.serverId; delete this.model.database; delete this.model.schema; } @@ -192,13 +199,14 @@ export class FileConfigPage extends ImportPage { if (this.model.database && db === this.model.database) { idx = count; } + return { displayName: db, name: db }; }); - if (idx > 0) { + if (idx >= 0) { let tmp = values[0]; values[0] = values[idx]; values[idx] = tmp; @@ -316,7 +324,7 @@ export class FileConfigPage extends ImportPage { } - private async populateSchemaDropdown(): Promise { + private async populateSchemaDropdown(): Promise { this.schemaLoader.loading = true; let connectionUri = await sqlops.connection.getUriForConnection(this.model.server.connectionId); let queryProvider = sqlops.dataprotocol.getProvider(this.model.server.providerName, sqlops.DataProviderType.QueryProvider); @@ -342,7 +350,7 @@ export class FileConfigPage extends ImportPage { }; }); - if (idx > 0) { + if (idx >= 0) { let tmp = values[0]; values[0] = values[idx]; values[idx] = tmp;