mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-09 01:32:34 -05:00
[Sql Migration] Stabilize save and close logic and fix related ux bugs (#18579)
* add loadSavedInfo function in stateMachine; only open wizard if didLoadSavedInfo * * add loadSavedInfo function in stateMachine; only open wizard if didLoadSavedInfo * replaced savedInfo.miggrationServiceId string with sqlMigrationServer object * selectDatbasesFromList helper function to check previously selected dbs in dbSelectorPage and sqlDatabaseTree * * remove savedInfo references from targetSelectionPage, migrationModePage * add selectDefaultDropdownValue helper to stateMachine to handle unify savedInfo selection logic * add updateDropdownLoadingStatus to targetSelectionPage * check if values exist before making api calls in statemachine * removed savedInfo references from databaseBackupPage, integrationRuntimePage * databaseBackupPage - targetDatabaseNames, networkShares, blobs need to rely on savedInfo as user may update the list of migrationdbs during the retry/saveAndClose * re-add serverAssessments to savedInfo; only getAssessments if it does not exist or needs to be updated; fix networkShare type savedInfo * rename _assessmentDbs to _databasesForAssessment; _migrationDbs to _databasesForMigration * load blobs/networkshares savedinfo; move selectDefaultDropdownValue to utils * fix selectDefaultDropdownValue; refreshDatabaseBackupPage when user changes target subscription or location
This commit is contained in:
@@ -6,11 +6,12 @@
|
||||
import * as azdata from 'azdata';
|
||||
import * as vscode from 'vscode';
|
||||
import { MigrationWizardPage } from '../models/migrationWizardPage';
|
||||
import { MigrationStateModel, Page, StateChangeEvent } from '../models/stateMachine';
|
||||
import { MigrationStateModel, StateChangeEvent } from '../models/stateMachine';
|
||||
import * as constants from '../constants/strings';
|
||||
import { IconPath, IconPathHelper } from '../constants/iconPathHelper';
|
||||
import { debounce } from '../api/utils';
|
||||
import * as styles from '../constants/styles';
|
||||
import { selectDatabasesFromList } from '../constants/helper';
|
||||
|
||||
const styleLeft: azdata.CssStyles = {
|
||||
'border': 'none',
|
||||
@@ -89,12 +90,14 @@ export class DatabaseSelectorPage extends MigrationWizardPage {
|
||||
}
|
||||
|
||||
public async onPageLeave(): Promise<void> {
|
||||
const assessedDatabases = this.migrationStateModel._databaseAssessment ?? [];
|
||||
const selectedDatabases = this.selectedDbs();
|
||||
const assessedDatabases = this.migrationStateModel._assessedDatabaseList ?? [];
|
||||
const selectedDatabases = this.migrationStateModel._databasesForAssessment;
|
||||
// run assessment if
|
||||
// * no prior assessment
|
||||
// * the prior assessment had an error or
|
||||
// * the assessed databases list is different from the selected databases list
|
||||
this.migrationStateModel._runAssessments = !!this.migrationStateModel._assessmentResults?.assessmentError
|
||||
this.migrationStateModel._runAssessments = !this.migrationStateModel._assessmentResults
|
||||
|| !!this.migrationStateModel._assessmentResults?.assessmentError
|
||||
|| assessedDatabases.length === 0
|
||||
|| assessedDatabases.length !== selectedDatabases.length
|
||||
|| assessedDatabases.some(db => selectedDatabases.indexOf(db) < 0);
|
||||
@@ -268,20 +271,8 @@ export class DatabaseSelectorPage extends MigrationWizardPage {
|
||||
}
|
||||
).component();
|
||||
|
||||
if (this.migrationStateModel.resumeAssessment && this.migrationStateModel.savedInfo.closedPage >= Page.DatabaseSelector) {
|
||||
await this._databaseSelectorTable.setDataValues(this.migrationStateModel.savedInfo.selectedDatabases);
|
||||
} else {
|
||||
if (this.migrationStateModel.retryMigration) {
|
||||
const sourceDatabaseName = this.migrationStateModel.savedInfo.databaseList[0];
|
||||
this._databaseTableValues.forEach((row, index) => {
|
||||
const dbName = row[1].value as string;
|
||||
if (dbName?.toLowerCase() === sourceDatabaseName?.toLowerCase()) {
|
||||
row[0].value = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
await this._databaseSelectorTable.setDataValues(this._databaseTableValues);
|
||||
}
|
||||
this._databaseTableValues = selectDatabasesFromList(this.migrationStateModel._databasesForAssessment, this._databaseTableValues);
|
||||
await this._databaseSelectorTable.setDataValues(this._databaseTableValues);
|
||||
await this.updateValuesOnSelection();
|
||||
|
||||
this._disposables.push(this._databaseSelectorTable.onDataChanged(async () => {
|
||||
@@ -300,7 +291,6 @@ export class DatabaseSelectorPage extends MigrationWizardPage {
|
||||
flex.addItem(this._dbCount, { flex: '0 0 auto' });
|
||||
flex.addItem(this._databaseSelectorTable);
|
||||
return flex;
|
||||
// insert names of databases into table
|
||||
}
|
||||
|
||||
public selectedDbs(): string[] {
|
||||
@@ -317,8 +307,7 @@ export class DatabaseSelectorPage extends MigrationWizardPage {
|
||||
await this._dbCount.updateProperties({
|
||||
'value': constants.DATABASES_SELECTED(this.selectedDbs().length, this._databaseTableValues.length)
|
||||
});
|
||||
this.migrationStateModel._databaseAssessment = this.selectedDbs();
|
||||
this.migrationStateModel.databaseSelectorTableValues = <azdata.DeclarativeTableCellValue[][]>this._databaseSelectorTable.dataValues;
|
||||
this.migrationStateModel._databasesForAssessment = this.selectedDbs();
|
||||
}
|
||||
|
||||
// undo when bug #16445 is fixed
|
||||
|
||||
Reference in New Issue
Block a user