diff --git a/extensions/agent/src/dialogs/jobStepDialog.ts b/extensions/agent/src/dialogs/jobStepDialog.ts index 78b4605960..62e01f4880 100644 --- a/extensions/agent/src/dialogs/jobStepDialog.ts +++ b/extensions/agent/src/dialogs/jobStepDialog.ts @@ -30,6 +30,7 @@ export class JobStepDialog { private readonly PreviousButtonText: string = localize('jobStepDialog.previous','Previous'); private readonly SuccessfulParseText: string = localize('jobStepDialog.successParse', 'The command was successfully parsed.'); private readonly FailureParseText: string = localize('jobStepDialog.failParse', 'The command failed.'); + private readonly BlankStepNameErrorText: string = localize('jobStepDialog.blankStepName', 'The step name cannot be left blank'); // General Control Titles private readonly StepNameLabelString: string = localize('jobStepDialog.stepNameLabel', 'Step Name'); @@ -139,12 +140,15 @@ export class JobStepDialog { this.openButton = view.modelBuilder.button() .withProperties({ label: this.OpenCommandText, - width: '80px' + width: '80px', + isFile: true }).component(); + this.openButton.enabled = false; this.parseButton = view.modelBuilder.button() .withProperties({ label: this.ParseCommandText, - width: '80px' + width: '80px', + isFile: false }).component(); this.parseButton.onDidClick(e => { if (this.commandTextBox.value) { @@ -185,6 +189,12 @@ export class JobStepDialog { .withProperties({ }).component(); this.nameTextBox.required = true; + this.nameTextBox.onTextChanged(() => { + if (this.nameTextBox.value.length > 0) { + this.dialog.message = null; + } + }); + this.typeDropdown = view.modelBuilder.dropDown() .withProperties({ value: this.TSQLScript, @@ -465,7 +475,12 @@ export class JobStepDialog { return outputFileForm; } - private async execute() { + protected execute() { + this.model.stepName = this.nameTextBox.value; + if (!this.model.stepName || this.model.stepName.length === 0) { + this.dialog.message = this.dialog.message = { text: this.BlankStepNameErrorText }; + return; + } this.model.jobName = this.jobName; this.model.id = this.stepId; this.model.server = this.server; @@ -479,7 +494,6 @@ export class JobStepDialog { this.model.failureAction = this.failureActionDropdown.value as string; this.model.outputFileName = this.outputFileNameBox.value; this.model.appendToLogFile = this.appendToExistingFileCheckbox.checked; - await this.model.save(); } public async openNewStepDialog() { diff --git a/extensions/mssql/package.json b/extensions/mssql/package.json index 7bab9fc6f0..d81d03b080 100644 --- a/extensions/mssql/package.json +++ b/extensions/mssql/package.json @@ -658,7 +658,7 @@ } }, "dependencies": { - "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.1.9", + "dataprotocol-client": "github:Microsoft/sqlops-dataprotocolclient#0.2.0", "opener": "^1.4.3", "service-downloader": "github:anthonydresser/service-downloader#0.1.2", "vscode-extension-telemetry": "^0.0.15" diff --git a/src/sql/parts/modelComponents/button.component.ts b/src/sql/parts/modelComponents/button.component.ts index 034bca52e2..d9cc233c21 100644 --- a/src/sql/parts/modelComponents/button.component.ts +++ b/src/sql/parts/modelComponents/button.component.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import 'vs/css!./button'; import { - Component, Input, Inject, ChangeDetectorRef, forwardRef, ComponentFactoryResolver, - ViewChild, ViewChildren, ElementRef, Injector, OnDestroy, QueryList, AfterViewInit + Component, Input, Inject, ChangeDetectorRef, forwardRef, + ViewChild, ElementRef, OnDestroy, AfterViewInit } from '@angular/core'; import * as sqlops from 'sqlops'; @@ -24,7 +24,13 @@ import { Color } from 'vs/base/common/color'; @Component({ selector: 'modelview-button', template: ` -
+
+ +
` }) export default class ButtonComponent extends ComponentWithIconBase implements IComponent, OnDestroy, AfterViewInit { @@ -119,9 +125,19 @@ export default class ButtonComponent extends ComponentWithIconBase implements IC this.setPropertyFromUI(this.setValueProperties, newValue); } + private get isFile(): boolean { + return this.getPropertyOrDefault((props) => props.isFile, false); + } + private set isFile(newValue: boolean) { + this.setPropertyFromUI(this.setFileProperties, newValue); + } private setValueProperties(properties: sqlops.ButtonProperties, label: string): void { properties.label = label; } + + private setFileProperties(properties: sqlops.ButtonProperties, isFile: boolean): void { + properties.isFile = isFile; + } } diff --git a/src/sql/parts/modelComponents/dropdown.component.ts b/src/sql/parts/modelComponents/dropdown.component.ts index 1a96f3d834..0173a3e431 100644 --- a/src/sql/parts/modelComponents/dropdown.component.ts +++ b/src/sql/parts/modelComponents/dropdown.component.ts @@ -25,7 +25,7 @@ import { IContextViewService } from 'vs/platform/contextview/browser/contextView template: `
-
+
` @@ -79,7 +79,6 @@ export default class DropDownComponent extends ComponentBase implements ICompone this._selectBox = new SelectBox(this.getValues(), this.getSelectedValue(), this.contextViewService, this._dropDownContainer.nativeElement); this._selectBox.render(this._dropDownContainer.nativeElement); this._register(this._selectBox); - this._register(attachSelectBoxStyler(this._selectBox, this.themeService)); this._register(this._selectBox.onDidSelect(e => { if (!this.editable) { diff --git a/src/sql/parts/modelComponents/inputbox.component.ts b/src/sql/parts/modelComponents/inputbox.component.ts index 91a0075bde..69d43b56ac 100644 --- a/src/sql/parts/modelComponents/inputbox.component.ts +++ b/src/sql/parts/modelComponents/inputbox.component.ts @@ -4,8 +4,8 @@ *--------------------------------------------------------------------------------------------*/ import { - Component, Input, Inject, ChangeDetectorRef, forwardRef, ComponentFactoryResolver, - ViewChild, ViewChildren, ElementRef, Injector, OnDestroy, QueryList, AfterViewInit + Component, Input, Inject, ChangeDetectorRef, forwardRef, + ViewChild, ElementRef, OnDestroy, AfterViewInit } from '@angular/core'; import * as sqlops from 'sqlops'; diff --git a/src/sql/sqlops.proposed.d.ts b/src/sql/sqlops.proposed.d.ts index f34b83a131..727992b838 100644 --- a/src/sql/sqlops.proposed.d.ts +++ b/src/sql/sqlops.proposed.d.ts @@ -436,6 +436,7 @@ declare module 'sqlops' { export interface ButtonProperties extends ComponentProperties, ComponentWithIcon { label?: string; + isFile?: boolean; } export interface LoadingComponentProperties {