diff --git a/extensions/agent/src/dialogs/jobStepDialog.ts b/extensions/agent/src/dialogs/jobStepDialog.ts
index 62e01f4880..a7be6423ab 100644
--- a/extensions/agent/src/dialogs/jobStepDialog.ts
+++ b/extensions/agent/src/dialogs/jobStepDialog.ts
@@ -143,13 +143,16 @@ export class JobStepDialog {
width: '80px',
isFile: true
}).component();
- this.openButton.enabled = false;
this.parseButton = view.modelBuilder.button()
.withProperties({
label: this.ParseCommandText,
width: '80px',
isFile: false
}).component();
+ this.openButton.onDidClick(e => {
+ let queryContent = e;
+ this.commandTextBox.value = queryContent;
+ });
this.parseButton.onDidClick(e => {
if (this.commandTextBox.value) {
queryProvider.parseSyntax(this.ownerUri, this.commandTextBox.value).then(result => {
diff --git a/src/sql/parts/modelComponents/button.component.ts b/src/sql/parts/modelComponents/button.component.ts
index d9cc233c21..3438023b33 100644
--- a/src/sql/parts/modelComponents/button.component.ts
+++ b/src/sql/parts/modelComponents/button.component.ts
@@ -27,7 +27,7 @@ import { Color } from 'vs/base/common/color';
@@ -39,17 +39,16 @@ export default class ButtonComponent extends ComponentWithIconBase implements IC
private _button: Button;
@ViewChild('input', { read: ElementRef }) private _inputContainer: ElementRef;
+ @ViewChild('fileInput', { read: ElementRef }) private _fileInputContainer: ElementRef;
constructor(
@Inject(forwardRef(() => ChangeDetectorRef)) changeRef: ChangeDetectorRef,
@Inject(IWorkbenchThemeService) private themeService: IWorkbenchThemeService
) {
super(changeRef);
-
}
ngOnInit(): void {
this.baseInit();
-
}
ngAfterViewInit(): void {
@@ -61,10 +60,27 @@ export default class ButtonComponent extends ComponentWithIconBase implements IC
buttonBackground: SIDE_BAR_BACKGROUND, buttonHoverBackground: SIDE_BAR_BACKGROUND, buttonForeground: SIDE_BAR_TITLE_FOREGROUND
}));
this._register(this._button.onDidClick(e => {
- this._onEventEmitter.fire({
- eventType: ComponentEventType.onDidClick,
- args: e
- });
+ if (this._fileInputContainer) {
+ const self = this;
+ this._fileInputContainer.nativeElement.onchange = () => {
+ let file = self._fileInputContainer.nativeElement.files[0];
+ let reader = new FileReader();
+ reader.onload = (e) => {
+ let text = (e.target).result;
+ self.fileContent = text;
+ self._onEventEmitter.fire({
+ eventType: ComponentEventType.onDidClick,
+ args: self.fileContent
+ });
+ };
+ reader.readAsText(file);
+ };
+ } else {
+ this._onEventEmitter.fire({
+ eventType: ComponentEventType.onDidClick,
+ args: e
+ });
+ }
}));
}
}
@@ -133,6 +149,18 @@ export default class ButtonComponent extends ComponentWithIconBase implements IC
this.setPropertyFromUI(this.setFileProperties, newValue);
}
+ private get fileContent(): string {
+ return this.getPropertyOrDefault((props) => props.fileContent, '');
+ }
+
+ private set fileContent(newValue: string) {
+ this.setPropertyFromUI(this.setFileContentProperties, newValue);
+ }
+
+ private setFileContentProperties(properties: sqlops.ButtonProperties, fileContent: string) : void {
+ properties.fileContent = fileContent;
+ }
+
private setValueProperties(properties: sqlops.ButtonProperties, label: string): void {
properties.label = label;
}
diff --git a/src/sql/sqlops.proposed.d.ts b/src/sql/sqlops.proposed.d.ts
index 5557ebd910..b47e48743a 100644
--- a/src/sql/sqlops.proposed.d.ts
+++ b/src/sql/sqlops.proposed.d.ts
@@ -454,6 +454,7 @@ declare module 'sqlops' {
export interface ButtonProperties extends ComponentProperties, ComponentWithIcon {
label?: string;
isFile?: boolean;
+ fileContent?: string;
}
export interface LoadingComponentProperties {
@@ -533,7 +534,7 @@ declare module 'sqlops' {
languageMode: string;
}
- export interface ButtonComponent extends Component {
+ export interface ButtonComponent extends Component, ButtonProperties {
label: string;
iconPath: string | vscode.Uri | { light: string | vscode.Uri; dark: string | vscode.Uri };
onDidClick: vscode.Event;