From 9a55ca3021f088a0781bf57070993bc2198de7e0 Mon Sep 17 00:00:00 2001 From: kisantia <31145923+kisantia@users.noreply.github.com> Date: Tue, 28 May 2019 16:46:44 -0700 Subject: [PATCH] Show message to recompare when schema compare options change (#5690) * add message to recompare if options changed * changes after rebasing * Add compare button to notification * remove async * change to yes and no button --- .../src/dialogs/schemaCompareOptionsDialog.ts | 17 ++++++++++++++++- .../schema-compare/src/schemaCompareResult.ts | 4 ++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts b/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts index 956012b715..5bb702ad6a 100644 --- a/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts +++ b/extensions/schema-compare/src/dialogs/schemaCompareOptionsDialog.ts @@ -7,6 +7,7 @@ import * as nls from 'vscode-nls'; import * as azdata from 'azdata'; import * as vscode from 'vscode'; +import { SchemaCompareResult } from '../schemaCompareResult'; const localize = nls.loadMessageBundle(); @@ -14,6 +15,9 @@ export class SchemaCompareOptionsDialog { private static readonly OkButtonText: string = localize('SchemaCompareOptionsDialog.Ok', 'Ok'); private static readonly CancelButtonText: string = localize('SchemaCompareOptionsDialog.Cancel', 'Cancel'); private static readonly ResetButtonText: string = localize('SchemaCompareOptionsDialog.Reset', 'Reset'); + private static readonly YesButtonText: string = localize('SchemaCompareOptionsDialog.Yes', 'Yes'); + private static readonly NoButtonText: string = localize('SchemaCompareOptionsDialog.No', 'No'); + private static readonly OptionsChangedMessage: string = localize('schemaCompareOptions.RecompareMessage', 'Options have changed. Recompare to see the comparison?'); private static readonly OptionsLabel: string = localize('SchemaCompare.SchemaCompareOptionsDialogLabel', 'Schema Compare Options'); private static readonly GeneralOptionsLabel: string = localize('SchemaCompare.GeneralOptionsLabel', 'General Options'); private static readonly ObjectTypesOptionsLabel: string = localize('SchemaCompare.ObjectTypesOptionsLabel', 'Include Object Types'); @@ -256,6 +260,7 @@ export class SchemaCompareOptionsDialog { private disposableListeners: vscode.Disposable[] = []; private excludedObjectTypes: azdata.SchemaObjectType[] = []; + private optionsChanged: boolean = false; private optionsLabels: string[] = [ SchemaCompareOptionsDialog.IgnoreTableOptions, @@ -405,7 +410,7 @@ export class SchemaCompareOptionsDialog { SchemaCompareOptionsDialog.ServerTriggers ].sort(); - constructor(defaultOptions: azdata.DeploymentOptions) { + constructor(defaultOptions: azdata.DeploymentOptions, private schemaComparison: SchemaCompareResult) { this.deploymentOptions = defaultOptions; } @@ -440,6 +445,13 @@ export class SchemaCompareOptionsDialog { protected async execute() { this.SetDeploymentOptions(); this.SetObjectTypeOptions(); + if (this.optionsChanged) { + vscode.window.showWarningMessage(SchemaCompareOptionsDialog.OptionsChangedMessage, SchemaCompareOptionsDialog.YesButtonText, SchemaCompareOptionsDialog.NoButtonText).then((result) => { + if (result === SchemaCompareOptionsDialog.YesButtonText) { + this.schemaComparison.startCompare(); + } + }); + } this.disposeListeners(); } @@ -451,6 +463,7 @@ export class SchemaCompareOptionsDialog { let service = await azdata.dataprotocol.getProvider('MSSQL', azdata.DataProviderType.SchemaCompareServicesProvider); let result = await service.schemaCompareGetDefaultOptions(); this.deploymentOptions = result.defaultDeploymentOptions; + this.optionsChanged = true; this.updateOptionsTable(); this.optionsFlexBuilder.removeItem(this.optionsTable); @@ -495,6 +508,7 @@ export class SchemaCompareOptionsDialog { if (checkboxState && checkboxState.row !== undefined) { let label = this.optionsLabels[checkboxState.row]; this.optionsLookup[label] = checkboxState.checked; + this.optionsChanged = true; } })); @@ -526,6 +540,7 @@ export class SchemaCompareOptionsDialog { if (checkboxState && checkboxState.row !== undefined) { let label = this.objectTypeLabels[checkboxState.row]; this.objectsLookup[label] = checkboxState.checked; + this.optionsChanged = true; } })); diff --git a/extensions/schema-compare/src/schemaCompareResult.ts b/extensions/schema-compare/src/schemaCompareResult.ts index 48fde78d44..6a8289d81f 100644 --- a/extensions/schema-compare/src/schemaCompareResult.ts +++ b/extensions/schema-compare/src/schemaCompareResult.ts @@ -382,7 +382,7 @@ export class SchemaCompareResult { return script; } - private startCompare(): void { + public startCompare(): void { this.flexModel.removeItem(this.splitView); this.flexModel.removeItem(this.noDifferencesLabel); this.flexModel.removeItem(this.startText); @@ -467,7 +467,7 @@ export class SchemaCompareResult { this.deploymentOptions = this.schemaCompareOptionDialog.deploymentOptions; } // create fresh every time - this.schemaCompareOptionDialog = new SchemaCompareOptionsDialog(this.deploymentOptions); + this.schemaCompareOptionDialog = new SchemaCompareOptionsDialog(this.deploymentOptions, this); await this.schemaCompareOptionDialog.openDialog(); }); }