mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
cutover cancel migration command state management (#16613)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user