mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
Adding help text for resourceTypes (#14166)
* Adding help text to arc resource deployment. * Fixing null help text and agreement logic * Made some types optional Fixed a language specific link
This commit is contained in:
@@ -21,10 +21,11 @@ export interface ResourceType {
|
||||
agreements?: AgreementInfo[];
|
||||
displayIndex?: number;
|
||||
okButtonText?: OkButtonTextValue[];
|
||||
helpTexts: HelpText[];
|
||||
getOkButtonText(selectedOptions: { option: string, value: string }[]): string | undefined;
|
||||
getProvider(selectedOptions: { option: string, value: string }[]): DeploymentProvider | undefined;
|
||||
getAgreementInfo(selectedOptions: { option: string, value: string }[]): AgreementInfo | undefined;
|
||||
getHelpText(selectedOption: { option: string, value: string }[]): string | undefined;
|
||||
getHelpText(selectedOption: { option: string, value: string }[]): HelpText | undefined;
|
||||
tags?: string[];
|
||||
}
|
||||
|
||||
@@ -41,12 +42,19 @@ export interface ResourceSubType {
|
||||
provider: DeploymentProvider;
|
||||
okButtonText?: OkButtonTextValue;
|
||||
agreement?: AgreementInfo;
|
||||
helpText?: HelpText;
|
||||
}
|
||||
|
||||
export interface HelpText {
|
||||
template: string;
|
||||
links?: azdata.LinkArea[];
|
||||
when?: string;
|
||||
}
|
||||
|
||||
export interface AgreementInfo {
|
||||
template: string;
|
||||
links: azdata.LinkArea[];
|
||||
when: string;
|
||||
links?: azdata.LinkArea[];
|
||||
when?: string;
|
||||
}
|
||||
|
||||
export interface ResourceTypeOption {
|
||||
|
||||
@@ -9,7 +9,7 @@ import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
import * as vscode from 'vscode';
|
||||
import * as nls from 'vscode-nls';
|
||||
import { DeploymentProvider, instanceOfAzureSQLVMDeploymentProvider, instanceOfAzureSQLDBDeploymentProvider, instanceOfCommandDeploymentProvider, instanceOfDialogDeploymentProvider, instanceOfDownloadDeploymentProvider, instanceOfNotebookBasedDialogInfo, instanceOfNotebookDeploymentProvider, instanceOfNotebookWizardDeploymentProvider, instanceOfWebPageDeploymentProvider, instanceOfWizardDeploymentProvider, NotebookInfo, NotebookPathInfo, ResourceType, ResourceTypeOption, ResourceSubType, AgreementInfo } from '../interfaces';
|
||||
import { DeploymentProvider, instanceOfAzureSQLVMDeploymentProvider, instanceOfAzureSQLDBDeploymentProvider, instanceOfCommandDeploymentProvider, instanceOfDialogDeploymentProvider, instanceOfDownloadDeploymentProvider, instanceOfNotebookBasedDialogInfo, instanceOfNotebookDeploymentProvider, instanceOfNotebookWizardDeploymentProvider, instanceOfWebPageDeploymentProvider, instanceOfWizardDeploymentProvider, NotebookInfo, NotebookPathInfo, ResourceType, ResourceTypeOption, ResourceSubType, AgreementInfo, HelpText } from '../interfaces';
|
||||
import { AzdataService } from './azdataService';
|
||||
import { KubeService } from './kubeService';
|
||||
import { INotebookService } from './notebookService';
|
||||
@@ -56,6 +56,7 @@ export class ResourceTypeService implements IResourceTypeService {
|
||||
resourceType.getProvider = (selectedOptions) => { return this.getProvider(resourceType, selectedOptions); };
|
||||
resourceType.getOkButtonText = (selectedOptions) => { return this.getOkButtonText(resourceType, selectedOptions); };
|
||||
resourceType.getAgreementInfo = (selectedOptions) => { return this.getAgreementInfo(resourceType, selectedOptions); };
|
||||
resourceType.getHelpText = (selectedOptions) => { return this.getHelpText(resourceType, selectedOptions); };
|
||||
this.getResourceSubTypes(resourceType);
|
||||
this._resourceTypes.push(resourceType);
|
||||
});
|
||||
@@ -153,6 +154,9 @@ export class ResourceTypeService implements IResourceTypeService {
|
||||
if (resourceSubType.agreement) {
|
||||
resourceType.agreements?.push(resourceSubType.agreement!);
|
||||
}
|
||||
if (resourceSubType.helpText) {
|
||||
resourceType.helpTexts.push(resourceSubType.helpText);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -307,6 +311,17 @@ export class ResourceTypeService implements IResourceTypeService {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
private getHelpText(resourceType: ResourceType, selectedOptions: { option: string, value: string }[]): HelpText | undefined {
|
||||
if (resourceType.helpTexts) {
|
||||
for (const possibleOption of resourceType.helpTexts) {
|
||||
if (processWhenClause(possibleOption.when, selectedOptions)) {
|
||||
return possibleOption;
|
||||
}
|
||||
}
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
public startDeployment(resourceType: ResourceType, optionValuesFilter?: OptionValuesFilter): void {
|
||||
const wizard = new ResourceTypeWizard(resourceType, new KubeService(), new AzdataService(this.platformService), this.notebookService, this.toolsService, this.platformService, this, optionValuesFilter);
|
||||
wizard.open();
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
import * as azdata from 'azdata';
|
||||
import { EOL } from 'os';
|
||||
import * as nls from 'vscode-nls';
|
||||
import { AgreementInfo, DeploymentProvider, ITool, ResourceType, ResourceTypeOptionValue, ToolRequirementInfo, ToolStatus } from '../interfaces';
|
||||
import { AgreementInfo, DeploymentProvider, HelpText, ITool, ResourceType, ResourceTypeOptionValue, ToolRequirementInfo, ToolStatus } from '../interfaces';
|
||||
import { createFlexContainer } from './modelViewUtils';
|
||||
import * as loc from '../localizedConstants';
|
||||
import { IToolsService } from '../services/toolsService';
|
||||
@@ -26,6 +26,7 @@ export class ToolsAndEulaPage extends ResourceTypePage {
|
||||
private _optionDropDownMap: Map<string, azdata.DropDownComponent> = new Map();
|
||||
private _toolsLoadingComponent!: azdata.LoadingComponent;
|
||||
private _agreementContainer!: azdata.DivContainer;
|
||||
private _helpTextContainer!: azdata.DivContainer;
|
||||
private _agreementCheckBox!: azdata.CheckBoxComponent;
|
||||
private _installToolButton!: azdata.ButtonComponent;
|
||||
private _installationInProgress: boolean = false;
|
||||
@@ -94,6 +95,7 @@ export class ToolsAndEulaPage extends ResourceTypePage {
|
||||
const tableWidth = 1060;
|
||||
this._optionsContainer = view.modelBuilder.flexContainer().withLayout({ flexFlow: 'column' }).component();
|
||||
this._agreementContainer = view.modelBuilder.divContainer().component();
|
||||
this._helpTextContainer = view.modelBuilder.divContainer().component();
|
||||
const toolColumn: azdata.TableColumn = {
|
||||
value: loc.toolText,
|
||||
width: 105
|
||||
@@ -149,6 +151,8 @@ export class ToolsAndEulaPage extends ResourceTypePage {
|
||||
this.form = view.modelBuilder.formContainer().withFormItems(
|
||||
[
|
||||
{
|
||||
component: this._helpTextContainer,
|
||||
}, {
|
||||
component: this._optionsContainer,
|
||||
}, {
|
||||
component: this._agreementContainer,
|
||||
@@ -234,9 +238,16 @@ export class ToolsAndEulaPage extends ResourceTypePage {
|
||||
});
|
||||
}
|
||||
|
||||
if (this._resourceType.agreements) {
|
||||
this._agreementContainer.addItem(this.createAgreementCheckbox());
|
||||
const agreementInfo = this._resourceType.getAgreementInfo(this.getSelectedOptions());
|
||||
if (agreementInfo) {
|
||||
this._agreementContainer.addItem(this.createAgreementCheckbox(agreementInfo));
|
||||
}
|
||||
|
||||
const helpText = this._resourceType.getHelpText(this.getSelectedOptions());
|
||||
if (helpText) {
|
||||
this._helpTextContainer.addItem(this.createHelpText(helpText));
|
||||
}
|
||||
|
||||
this.updateOkButtonText();
|
||||
this.updateToolsDisplayTable();
|
||||
});
|
||||
@@ -245,8 +256,7 @@ export class ToolsAndEulaPage extends ResourceTypePage {
|
||||
}
|
||||
|
||||
|
||||
private createAgreementCheckbox(): azdata.FlexContainer {
|
||||
const agreementInfo = this._resourceType.getAgreementInfo(this.getSelectedOptions())!;
|
||||
private createAgreementCheckbox(agreementInfo: AgreementInfo): azdata.FlexContainer {
|
||||
this._agreementCheckBox = this.view.modelBuilder.checkBox().withProperties<azdata.CheckBoxProperties>({
|
||||
ariaLabel: this.getAgreementDisplayText(agreementInfo),
|
||||
required: true
|
||||
@@ -259,12 +269,20 @@ export class ToolsAndEulaPage extends ResourceTypePage {
|
||||
return createFlexContainer(this.view, [this._agreementCheckBox, text]);
|
||||
}
|
||||
|
||||
private createHelpText(helpText: HelpText): azdata.FlexContainer {
|
||||
const helpTextComponent = this.view.modelBuilder.text().withProps({
|
||||
value: helpText.template,
|
||||
links: helpText.links,
|
||||
}).component();
|
||||
return createFlexContainer(this.view, [helpTextComponent]);
|
||||
}
|
||||
|
||||
private getAgreementDisplayText(agreementInfo: AgreementInfo): string {
|
||||
// the agreement template will have {index} as placeholder for hyperlinks
|
||||
// this method will get the display text after replacing the placeholders
|
||||
let text = agreementInfo.template;
|
||||
for (let i: number = 0; i < agreementInfo.links.length; i++) {
|
||||
text = text.replace(`{${i}}`, agreementInfo.links[i].text);
|
||||
for (let i: number = 0; i < agreementInfo.links!.length; i++) {
|
||||
text = text.replace(`{${i}}`, agreementInfo.links![i].text);
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user