Files
azuredatastudio/extensions/schema-compare/src/models/schemaCompareOptionsModel.ts
Sai Avishkar Sreerama 54d4098f85 Include Object Types logic refactored and options fetching from DacFx (#20031)
* Include Object Types logic refactored and options fetching from DacFx

* Removed localized object types constants

* Prop name updated and references and tests updated

* updated comments

* STS vBump

* updating the test file to pass the PR Validations
2022-08-08 12:12:59 -05:00

133 lines
4.9 KiB
TypeScript

/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as loc from '../localizedConstants';
import * as mssql from 'mssql';
import * as vscode from 'vscode';
export class SchemaCompareOptionsModel {
// key is the option display name and values are checkboxValue and optionName
private optionsValueNameLookup: { [key: string]: mssql.IOptionWithValue } = {};
private includeObjectTypesLookup: { [key: string]: mssql.IOptionWithValue } = {};
constructor(public deploymentOptions: mssql.DeploymentOptions) {
this.setOptionsToValueNameLookup();
this.setIncludeObjectTypesLookup();
}
/*
* Sets deployment option's checkbox values and property name to the optionsValueNameLookup map
*/
public setOptionsToValueNameLookup(): void {
Object.entries(this.deploymentOptions.booleanOptionsDictionary).forEach(option => {
const optionValue: mssql.IOptionWithValue = {
optionName: option[0],
checked: option[1].value
};
this.optionsValueNameLookup[option[1].displayName] = optionValue;
});
}
/*
* Initialize options data from deployment options for table component
* Returns data as [booleanValue, optionName]
*/
public getOptionsData(): any[][] {
let data: any[][] = [];
Object.entries(this.deploymentOptions.booleanOptionsDictionary).forEach(option => {
// option[1] holds checkedbox value and displayName
data.push([option[1].value, option[1].displayName]);
});
return data.sort((a, b) => a[1].localeCompare(b[1]));
}
/*
* Sets the selected option checkbox value to the deployment options
*/
public setDeploymentOptions(): void {
Object.entries(this.optionsValueNameLookup).forEach(option => {
// option[1] holds checkedbox value and optionName
this.deploymentOptions.booleanOptionsDictionary[option[1].optionName].value = option[1].checked;
});
}
/*
* Sets the checkbox value to the optionsValueNameLookup map
*/
public setOptionValue(displayName: string, checked: boolean): void {
this.optionsValueNameLookup[displayName].checked = checked;
}
/*
* Gets the description of the selected option by getting the option name from the optionsValueNameLookup
*/
public getOptionDescription(displayName: string): string {
const optionName = this.optionsValueNameLookup[displayName];
if (optionName === undefined) {
void vscode.window.showWarningMessage(loc.OptionNotFoundWarningMessage(displayName));
}
return optionName !== undefined ? this.deploymentOptions.booleanOptionsDictionary[optionName.optionName].description : '';
}
/*
* Sets include object types option's checkbox values and property name to the includeObjectTypesLookup map
*/
public setIncludeObjectTypesLookup(): void {
Object.entries(this.deploymentOptions.objectTypesDictionary).forEach(option => {
const optionValue: mssql.IOptionWithValue = {
optionName: option[0],
checked: this.getIncludeObjectTypeOptionCheckStatus(option[0])
};
this.includeObjectTypesLookup[option[1]] = optionValue;
});
}
/*
* Initialize options data from include objects options for table component
* Returns data as [booleanValue, optionName]
*/
public getIncludeObjectTypesOptionsData(): any[][] {
let data: any[][] = [];
Object.entries(this.deploymentOptions.objectTypesDictionary).forEach(option => {
// option[1] is the display name and option[0] is the optionName
data.push([this.getIncludeObjectTypeOptionCheckStatus(option[0]), option[1]]);
});
return data.sort((a, b) => a[1].localeCompare(b[1]));
}
/*
* Gets the selected/default value of the object type option
* return false for the deploymentOptions.excludeObjectTypes option, if it is in ObjectTypesDictionary
*/
public getIncludeObjectTypeOptionCheckStatus(optionName: string): boolean {
return (this.deploymentOptions.excludeObjectTypes.value?.find(x => x.toLowerCase() === optionName.toLowerCase())) !== undefined ? false : true;
}
/*
* Sets the checkbox value to the includeObjectTypesLookup map
*/
public setIncludeObjectTypesOptionValue(displayName: string, checked: boolean): void {
this.includeObjectTypesLookup[displayName].checked = checked;
}
/*
* Sets the selected option checkbox value to the deployment options
*/
public setIncludeObjectTypesToDeploymentOptions(): void {
let finalExcludedObjectTypes: string[] = [];
Object.entries(this.includeObjectTypesLookup).forEach(option => {
// option[1] holds checkedbox value and optionName
// sending the unchecked(false) options only to the excludeObjectTypes
if (!option[1].checked) {
finalExcludedObjectTypes.push(option[1].optionName);
}
});
this.deploymentOptions.excludeObjectTypes.value = finalExcludedObjectTypes;
}
}