mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-14 01:25:37 -05:00
Disabling revert button when no changes to SQLCMD vars at publish time (#22552)
* disabling revert SQLCMD var value button when no changes to values; changing string * Updating docstring * Updating behavior to account for SQLCMD vars defined in publish profiles
This commit is contained in:
@@ -142,7 +142,7 @@ export const profileReadError = (err: any) => localize('profileReadError', "Erro
|
||||
export const sqlCmdVariables = localize('sqlCmdTableLabel', "SQLCMD Variables");
|
||||
export const sqlCmdVariableColumn = localize('sqlCmdVariableColumn', "Name");
|
||||
export const sqlCmdValueColumn = localize('sqlCmdValueColumn', "Value");
|
||||
export const loadSqlCmdVarsButtonTitle = localize('reloadValuesFromProjectButtonTitle', "Reload values from project");
|
||||
export const revertSqlCmdVarsButtonTitle = localize('revertSqlCmdVarsButtonTitle', "Revert values to project defaults");
|
||||
export const profile = localize('profile', "Profile");
|
||||
export const selectConnection = localize('selectConnection', "Select connection");
|
||||
export const server = localize('server', "Server");
|
||||
|
||||
@@ -41,7 +41,7 @@ export class PublishDatabaseDialog {
|
||||
private dataSourcesRadioButton: azdataType.RadioButtonComponent | undefined;
|
||||
private sqlCmdVariablesTable: azdataType.DeclarativeTableComponent | undefined;
|
||||
private sqlCmdVariablesFormComponentGroup: azdataType.FormComponentGroup | undefined;
|
||||
private loadSqlCmdVarsButton: azdataType.ButtonComponent | undefined;
|
||||
private revertSqlCmdVarsButton: azdataType.ButtonComponent | undefined;
|
||||
private loadProfileTextBox: azdataType.InputBoxComponent | undefined;
|
||||
private formBuilder: azdataType.FormBuilder | undefined;
|
||||
private connectionRow: azdataType.FlexContainer | undefined;
|
||||
@@ -124,13 +124,13 @@ export class PublishDatabaseDialog {
|
||||
this.dataSourcesFormComponent = this.createDataSourcesFormComponent(view);
|
||||
|
||||
this.sqlCmdVariablesTable = this.createSqlCmdTable(view);
|
||||
this.loadSqlCmdVarsButton = this.createLoadSqlCmdVarsButton(view);
|
||||
this.revertSqlCmdVarsButton = this.createRevertSqlCmdVarsButton(view);
|
||||
|
||||
this.sqlCmdVariablesFormComponentGroup = {
|
||||
components: [
|
||||
{
|
||||
title: '',
|
||||
component: this.loadSqlCmdVarsButton
|
||||
component: this.revertSqlCmdVarsButton
|
||||
},
|
||||
{
|
||||
title: '',
|
||||
@@ -430,7 +430,7 @@ export class PublishDatabaseDialog {
|
||||
private onPublishTypeChange(existingServer: boolean, view: azdataType.ModelView) {
|
||||
this.existingServerSelected = existingServer;
|
||||
this.createDatabaseRow(view);
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
if (existingServer) {
|
||||
if (this.connectionRow) {
|
||||
this.formBuilder!.insertFormItem({
|
||||
@@ -470,7 +470,7 @@ export class PublishDatabaseDialog {
|
||||
}).component();
|
||||
|
||||
this.targetConnectionTextBox.onTextChanged(() => {
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
|
||||
return this.targetConnectionTextBox;
|
||||
@@ -509,7 +509,7 @@ export class PublishDatabaseDialog {
|
||||
|
||||
this.dataSourcesDropDown.onValueChanged(() => {
|
||||
this.setDatabaseToSelectedDataSourceDatabase();
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
|
||||
return {
|
||||
@@ -574,7 +574,7 @@ export class PublishDatabaseDialog {
|
||||
}).withValidation(component => utils.validateSqlServerPortNumber(component.value)).component();
|
||||
|
||||
this.serverPortTextBox.onTextChanged(() => {
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
const serverPortRow = this.createFormRow(view, constants.serverPortNumber(name), this.serverPortTextBox);
|
||||
this.serverAdminPasswordTextBox = view.modelBuilder.inputBox().withProps({
|
||||
@@ -600,13 +600,13 @@ export class PublishDatabaseDialog {
|
||||
required: true
|
||||
}).withValidation(component => component.value === this.serverAdminPasswordTextBox?.value).component();
|
||||
this.serverAdminPasswordTextBox.onTextChanged(() => {
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
if (this.serverConfigAdminPasswordTextBox) {
|
||||
this.serverConfigAdminPasswordTextBox.value = '';
|
||||
}
|
||||
});
|
||||
this.serverConfigAdminPasswordTextBox.onTextChanged(() => {
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
const serverConfirmPasswordRow = this.createFormRow(view, constants.confirmServerPassword(name), this.serverConfigAdminPasswordTextBox);
|
||||
|
||||
@@ -636,7 +636,7 @@ export class PublishDatabaseDialog {
|
||||
}).component();
|
||||
|
||||
this.imageTagDropDown.onValueChanged(() => {
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
|
||||
const agreementInfo = baseImages[0].agreementInfo;
|
||||
@@ -648,7 +648,7 @@ export class PublishDatabaseDialog {
|
||||
required: true
|
||||
}).component();
|
||||
this.eulaCheckBox.onChanged(() => {
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
|
||||
const eulaRow = view.modelBuilder.flexContainer().withLayout({ flexFlow: 'row', alignItems: 'center' }).component();
|
||||
@@ -719,7 +719,7 @@ export class PublishDatabaseDialog {
|
||||
}).component();
|
||||
|
||||
this.targetDatabaseDropDown.onValueChanged(() => {
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -773,37 +773,52 @@ export class PublishDatabaseDialog {
|
||||
(<Record<string, string>>this.sqlCmdVars)[<string>row[0].value] = <string>row[1].value;
|
||||
});
|
||||
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.updateRevertSqlCmdVarsButtonState();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
|
||||
return table;
|
||||
}
|
||||
|
||||
private createLoadSqlCmdVarsButton(view: azdataType.ModelView): azdataType.ButtonComponent {
|
||||
private createRevertSqlCmdVarsButton(view: azdataType.ModelView): azdataType.ButtonComponent {
|
||||
let loadSqlCmdVarsButton: azdataType.ButtonComponent = view.modelBuilder.button().withProps({
|
||||
label: constants.loadSqlCmdVarsButtonTitle,
|
||||
title: constants.loadSqlCmdVarsButtonTitle,
|
||||
ariaLabel: constants.loadSqlCmdVarsButtonTitle,
|
||||
label: constants.revertSqlCmdVarsButtonTitle,
|
||||
title: constants.revertSqlCmdVarsButtonTitle,
|
||||
ariaLabel: constants.revertSqlCmdVarsButtonTitle,
|
||||
width: '210px',
|
||||
iconPath: IconPathHelper.refresh,
|
||||
height: '18px',
|
||||
CSSStyles: { 'font-size': '13px' }
|
||||
CSSStyles: { 'font-size': '13px' },
|
||||
enabled: false // start disabled because no SQLCMD variable values have been edited yet
|
||||
}).component();
|
||||
|
||||
loadSqlCmdVarsButton.onDidClick(async () => {
|
||||
this.sqlCmdVars = { ...this.project.sqlCmdVariables };
|
||||
for (const varName in this.sqlCmdVars) {
|
||||
|
||||
this.sqlCmdVars[varName] = this.getDefaultSqlCmdValue(varName);
|
||||
}
|
||||
|
||||
const data = this.convertSqlCmdVarsToTableFormat(this.sqlCmdVars!);
|
||||
await (<azdataType.DeclarativeTableComponent>this.sqlCmdVariablesTable)!.updateProperties({
|
||||
dataValues: data
|
||||
});
|
||||
|
||||
this.tryEnableGenerateScriptAndOkButtons();
|
||||
this.updateRevertSqlCmdVarsButtonState();
|
||||
this.tryEnableGenerateScriptAndPublishButtons();
|
||||
});
|
||||
|
||||
return loadSqlCmdVarsButton;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the default value of a SQLCMD variable for a project
|
||||
* @param varName
|
||||
* @returns value defined in the sqlproj file, or blank string if not defined
|
||||
*/
|
||||
private getDefaultSqlCmdValue(varName: string): string {
|
||||
return Object.keys(this.project.sqlCmdVariables).includes(varName) ? this.project.sqlCmdVariables[varName] : '';
|
||||
}
|
||||
|
||||
private createSelectConnectionButton(view: azdataType.ModelView): azdataType.Component {
|
||||
this.selectConnectionButton = view.modelBuilder.button().withProps({
|
||||
ariaLabel: constants.selectConnection,
|
||||
@@ -889,6 +904,7 @@ export class PublishDatabaseDialog {
|
||||
(<Record<string, string>>this.sqlCmdVars)[key] = result.sqlCmdVariables[key];
|
||||
}
|
||||
|
||||
this.updateRevertSqlCmdVarsButtonState();
|
||||
this.deploymentOptions = result.options;
|
||||
|
||||
const data = this.convertSqlCmdVarsToTableFormat(this.getSqlCmdVariablesForPublish());
|
||||
@@ -916,8 +932,29 @@ export class PublishDatabaseDialog {
|
||||
return data;
|
||||
}
|
||||
|
||||
// only enable Generate Script and Ok buttons if all fields are filled
|
||||
private tryEnableGenerateScriptAndOkButtons(): void {
|
||||
/**
|
||||
* Enables or disables "Revert SQLCMD variable values" button depending on whether there are changes
|
||||
* */
|
||||
private updateRevertSqlCmdVarsButtonState(): void {
|
||||
// no SQLCMD vars -> no button to update state for
|
||||
if (!this.revertSqlCmdVarsButton) {
|
||||
return;
|
||||
}
|
||||
|
||||
let revertButtonEnabled = false;
|
||||
|
||||
for (const varName in this.sqlCmdVars) {
|
||||
if (this.sqlCmdVars![varName] !== this.getDefaultSqlCmdValue(varName)) {
|
||||
revertButtonEnabled = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.revertSqlCmdVarsButton.enabled = revertButtonEnabled;
|
||||
}
|
||||
|
||||
// only enable "Generate Script" and "Publish" buttons if all fields are filled
|
||||
private tryEnableGenerateScriptAndPublishButtons(): void {
|
||||
let publishEnabled: boolean = false;
|
||||
let generateScriptEnabled: boolean = false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user