diff --git a/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardModel.ts b/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardModel.ts index bd833480c3..6fa497c565 100644 --- a/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardModel.ts +++ b/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardModel.ts @@ -57,10 +57,20 @@ export class NotebookWizardModel extends ResourceTypeModel { public onCancel(): void { } - public async onGenerateScript(): Promise { - const notebook = await this.prepareNotebookAndEnvironment(); - await this.openNotebook(notebook); + /** + * Generates the notebook and returns true on successful generation + **/ + public async onGenerateScript(): Promise { + const lastPage = this.wizard.lastPage! as NotebookWizardPage; + if (lastPage.validatePage()) { + const notebook = await this.prepareNotebookAndEnvironment(); + await this.openNotebook(notebook); + return true; + } else { + return false; + } } + public async onOk(): Promise { const notebook = await this.prepareNotebookAndEnvironment(); const openedNotebook = await this.openNotebook(notebook); diff --git a/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts b/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts index 1e8f945889..26aa09d017 100644 --- a/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts +++ b/extensions/resource-deployment/src/ui/notebookWizard/notebookWizardPage.ts @@ -108,31 +108,34 @@ export class NotebookWizardPage extends ResourceTypePage { * The first condition checks that edge case. */ if (pcInfo.newPage === undefined || pcInfo.newPage > pcInfo.lastPage) { - const messages: string[] = []; - - this.validators.forEach((validator) => { - const result = validator(); - if (!result.valid) { - messages.push(result.message); - } - }); - - if (messages.length > 0) { - this.wizard.wizardObject.message = { - text: - messages.length === 1 - ? messages[0] - : localize( - "wizardPage.ValidationError", - "There are some errors on this page, click 'Show Details' to view the errors." - ), - description: messages.length === 1 ? undefined : messages.join(EOL), - level: azdata.window.MessageLevel.Error, - }; - } - return messages.length === 0; + return this.validatePage(); } return true; }); } + + public validatePage(): boolean { + const messages: string[] = []; + + this.validators.forEach((validator) => { + const result = validator(); + if (!result.valid) { + messages.push(result.message); + } + }); + + if (messages.length > 0) { + this.wizard.wizardObject.message = { + text: messages.length === 1 + ? messages[0] + : localize( + "wizardPage.ValidationError", + "There are some errors on this page, click 'Show Details' to view the errors." + ), + description: messages.length === 1 ? undefined : messages.join(EOL), + level: azdata.window.MessageLevel.Error, + }; + } + return messages.length === 0; + } } diff --git a/extensions/resource-deployment/src/ui/resourceTypeModel.ts b/extensions/resource-deployment/src/ui/resourceTypeModel.ts index 6d8e56bce8..1f66b72646 100644 --- a/extensions/resource-deployment/src/ui/resourceTypeModel.ts +++ b/extensions/resource-deployment/src/ui/resourceTypeModel.ts @@ -16,6 +16,9 @@ export abstract class ResourceTypeModel extends Model { abstract initialize(): void; abstract async onOk(): Promise; abstract onCancel(): void; - async onGenerateScript(): Promise { } + /** + * performs the script generation and returns true if script was generated successfully + **/ + async onGenerateScript(): Promise { return true; } } diff --git a/extensions/resource-deployment/src/ui/resourceTypeWizard.ts b/extensions/resource-deployment/src/ui/resourceTypeWizard.ts index f36d7b9e15..52590fc3d7 100644 --- a/extensions/resource-deployment/src/ui/resourceTypeWizard.ts +++ b/extensions/resource-deployment/src/ui/resourceTypeWizard.ts @@ -47,6 +47,10 @@ export class ResourceTypeWizard { return this._model; } + public get lastPage(): ResourceTypePage | undefined { + return this.pages.length > 0 ? this.pages[this.pages.length - 1] : undefined; + } + constructor( public resourceType: ResourceType, public _kubeService: IKubeService, @@ -93,9 +97,10 @@ export class ResourceTypeWizard { this.dispose(); })); this.toDispose.push(this.wizardObject.generateScriptButton.onClick(async () => { - await this._model.onGenerateScript(); - this.dispose(); - this.wizardObject.close(); // close the wizard. This is already hooked up into doneButton, so it is not needed for that button above. + if (await this._model.onGenerateScript()) { + this.dispose(); + this.wizardObject.close(); // close the wizard. This is already hooked up into doneButton, so it is not needed for that button above. + } })); this.toDispose.push(this.wizardObject.cancelButton.onClick(() => { this._model.onCancel();