Files
azuredatastudio/extensions/sql-migration/src/wizard/wizardController.ts
Amir Omidi bcce80094d Azure Subscription Page and another azdata change (#11877)
* Azure subscription page

* .
2020-08-20 10:23:48 -07:00

63 lines
2.5 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata';
import * as vscode from 'vscode';
import { MigrationStateModel } from '../models/stateMachine';
import { SourceConfigurationPage } from './sourceConfigurationPage';
import { WIZARD_TITLE } from '../models/strings';
import { MigrationWizardPage } from '../models/migrationWizardPage';
import { SKURecommendationPage } from './skuRecommendationPage';
import { SubscriptionSelectionPage } from './subscriptionSelectionPage';
export class WizardController {
constructor(private readonly extensionContext: vscode.ExtensionContext) {
}
public async openWizard(profile: azdata.connection.Connection): Promise<void> {
const stateModel = new MigrationStateModel(profile);
this.extensionContext.subscriptions.push(stateModel);
this.createWizard(stateModel);
}
private async createWizard(stateModel: MigrationStateModel): Promise<void> {
const wizard = azdata.window.createWizard(WIZARD_TITLE, 'wide');
wizard.generateScriptButton.enabled = false;
const sourceConfigurationPage = new SourceConfigurationPage(wizard, stateModel);
const skuRecommendationPage = new SKURecommendationPage(wizard, stateModel);
const subscriptionSelectionPage = new SubscriptionSelectionPage(wizard, stateModel);
const pages: MigrationWizardPage[] = [sourceConfigurationPage, skuRecommendationPage, subscriptionSelectionPage];
wizard.pages = pages.map(p => p.getwizardPage());
const wizardSetupPromises: Thenable<void>[] = [];
wizardSetupPromises.push(...pages.map(p => p.registerWizardContent()));
wizardSetupPromises.push(wizard.open());
wizard.onPageChanged(async (pageChangeInfo: azdata.window.WizardPageChangeInfo) => {
const newPage = pageChangeInfo.newPage;
const lastPage = pageChangeInfo.lastPage;
await pages[lastPage]?.onPageLeave();
await pages[newPage]?.onPageEnter();
});
wizard.registerNavigationValidator(async validator => {
const lastPage = validator.lastPage;
const canLeave = await pages[lastPage]?.canLeave() ?? true;
const canEnter = await pages[lastPage]?.canEnter() ?? true;
return canEnter && canLeave;
// return true;
});
await Promise.all(wizardSetupPromises);
await pages[0].onPageEnter();
}
}