cutover cancel migration command state management (#16613)

This commit is contained in:
brian-harris
2021-08-06 23:28:43 -07:00
committed by GitHub
parent f1b9931116
commit a4bccb6e6c

View File

@@ -21,6 +21,15 @@ const statusImageSize: number = 14;
const imageCellStyles: azdata.CssStyles = { 'margin': '3px 3px 0 0', 'padding': '0' }; const imageCellStyles: azdata.CssStyles = { 'margin': '3px 3px 0 0', 'padding': '0' };
const statusCellStyles: azdata.CssStyles = { 'margin': '0', 'padding': '0' }; const statusCellStyles: azdata.CssStyles = { 'margin': '0', 'padding': '0' };
const MenuCommands = {
Cutover: 'sqlmigration.cutover',
ViewDatabase: 'sqlmigration.view.database',
ViewTarget: 'sqlmigration.view.target',
ViewService: 'sqlmigration.view.service',
CopyMigration: 'sqlmigration.copy.migration',
CancelMigration: 'sqlmigration.cancel.migration',
};
export class MigrationStatusDialog { export class MigrationStatusDialog {
private _model: MigrationStatusDialogModel; private _model: MigrationStatusDialogModel;
private _dialogObject!: azdata.window.Dialog; private _dialogObject!: azdata.window.Dialog;
@@ -181,7 +190,7 @@ export class MigrationStatusDialog {
private registerCommands(): void { private registerCommands(): void {
this._disposables.push(vscode.commands.registerCommand( this._disposables.push(vscode.commands.registerCommand(
'sqlmigration.cutover', MenuCommands.Cutover,
async (migrationId: string) => { async (migrationId: string) => {
try { try {
clearDialogMessage(this._dialogObject); clearDialogMessage(this._dialogObject);
@@ -206,7 +215,7 @@ export class MigrationStatusDialog {
})); }));
this._disposables.push(vscode.commands.registerCommand( this._disposables.push(vscode.commands.registerCommand(
'sqlmigration.view.database', MenuCommands.ViewDatabase,
async (migrationId: string) => { async (migrationId: string) => {
try { try {
const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId); const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId);
@@ -218,7 +227,7 @@ export class MigrationStatusDialog {
})); }));
this._disposables.push(vscode.commands.registerCommand( this._disposables.push(vscode.commands.registerCommand(
'sqlmigration.view.target', MenuCommands.ViewTarget,
async (migrationId: string) => { async (migrationId: string) => {
try { try {
const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId); const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId);
@@ -230,7 +239,7 @@ export class MigrationStatusDialog {
})); }));
this._disposables.push(vscode.commands.registerCommand( this._disposables.push(vscode.commands.registerCommand(
'sqlmigration.view.service', MenuCommands.ViewService,
async (migrationId: string) => { async (migrationId: string) => {
try { try {
const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId); const migration = this._model._migrations.find(migration => migration.migrationContext.id === migrationId);
@@ -242,7 +251,7 @@ export class MigrationStatusDialog {
})); }));
this._disposables.push(vscode.commands.registerCommand( this._disposables.push(vscode.commands.registerCommand(
'sqlmigration.copy.migration', MenuCommands.CopyMigration,
async (migrationId: string) => { async (migrationId: string) => {
try { try {
clearDialogMessage(this._dialogObject); clearDialogMessage(this._dialogObject);
@@ -271,7 +280,7 @@ export class MigrationStatusDialog {
})); }));
this._disposables.push(vscode.commands.registerCommand( this._disposables.push(vscode.commands.registerCommand(
'sqlmigration.cancel.migration', MenuCommands.CancelMigration,
async (migrationId: string) => { async (migrationId: string) => {
try { try {
clearDialogMessage(this._dialogObject); clearDialogMessage(this._dialogObject);
@@ -406,16 +415,24 @@ export class MigrationStatusDialog {
} }
private _getMenuCommands(migration: MigrationContext): string[] { private _getMenuCommands(migration: MigrationContext): string[] {
let menuCommands = [ const menuCommands: string[] = [];
'sqlmigration.view.database', const migrationStatus = migration?.migrationContext?.properties?.migrationStatus;
'sqlmigration.view.target',
'sqlmigration.view.service', if (this._getMigrationMode(migration) === loc.ONLINE &&
'sqlmigration.copy.migration', this.canCutoverMigration(migrationStatus)) {
'sqlmigration.cancel.migration', menuCommands.push(MenuCommands.Cutover);
];
if (this._getMigrationMode(migration) === loc.ONLINE) {
menuCommands.unshift('sqlmigration.cutover');
} }
menuCommands.push(...[
MenuCommands.ViewDatabase,
MenuCommands.ViewTarget,
MenuCommands.ViewService,
MenuCommands.CopyMigration]);
if (this.canCancelMigration(migrationStatus)) {
menuCommands.push(MenuCommands.CancelMigration);
}
return menuCommands; return menuCommands;
} }