From 534bbe9b9a426d0b6b31c5cd83de5f6dcc555926 Mon Sep 17 00:00:00 2001 From: Abbie Petchtes Date: Wed, 5 Sep 2018 14:07:52 -0700 Subject: [PATCH] add create webview event and fix fire event in model view (#2405) --- src/sql/parts/modelComponents/button.component.ts | 6 +++--- src/sql/parts/modelComponents/card.component.ts | 4 ++-- src/sql/parts/modelComponents/checkbox.component.ts | 2 +- src/sql/parts/modelComponents/componentBase.ts | 2 +- .../modelComponents/declarativeTable.component.ts | 2 +- src/sql/parts/modelComponents/dropdown.component.ts | 4 ++-- src/sql/parts/modelComponents/editor.component.ts | 10 ++++++++-- .../parts/modelComponents/fileBrowserTree.component.ts | 2 +- src/sql/parts/modelComponents/inputbox.component.ts | 2 +- src/sql/parts/modelComponents/interfaces.ts | 3 ++- src/sql/parts/modelComponents/listbox.component.ts | 2 +- src/sql/parts/modelComponents/radioButton.component.ts | 2 +- src/sql/parts/modelComponents/table.component.ts | 2 +- src/sql/parts/modelComponents/webview.component.ts | 2 +- src/sql/sqlops.proposed.d.ts | 5 +++++ src/sql/workbench/api/common/sqlExtHostTypes.ts | 3 ++- src/sql/workbench/api/node/extHostModelView.ts | 6 ++++++ 17 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/sql/parts/modelComponents/button.component.ts b/src/sql/parts/modelComponents/button.component.ts index 08bba4ffe1..968cf7f5de 100644 --- a/src/sql/parts/modelComponents/button.component.ts +++ b/src/sql/parts/modelComponents/button.component.ts @@ -67,8 +67,8 @@ export default class ButtonComponent extends ComponentWithIconBase implements IC let reader = new FileReader(); reader.onload = (e) => { let text = (e.target).result; - self.fileContent = text; - self._onEventEmitter.fire({ + self.fileContent = text.toString(); + self.fireEvent({ eventType: ComponentEventType.onDidClick, args: self.fileContent }); @@ -76,7 +76,7 @@ export default class ButtonComponent extends ComponentWithIconBase implements IC reader.readAsText(file); }; } else { - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidClick, args: e }); diff --git a/src/sql/parts/modelComponents/card.component.ts b/src/sql/parts/modelComponents/card.component.ts index 945ac0e275..bcc5046630 100644 --- a/src/sql/parts/modelComponents/card.component.ts +++ b/src/sql/parts/modelComponents/card.component.ts @@ -53,7 +53,7 @@ export default class CardComponent extends ComponentWithIconBase implements ICom if (this.selectable) { this.selected = !this.selected; this._changeRef.detectChanges(); - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidClick, args: this.selected }); @@ -158,7 +158,7 @@ export default class CardComponent extends ComponentWithIconBase implements ICom } private onDidActionClick(action: ActionDescriptor): void { - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidClick, args: action }); diff --git a/src/sql/parts/modelComponents/checkbox.component.ts b/src/sql/parts/modelComponents/checkbox.component.ts index c52f2e8b0e..6ae0332c41 100644 --- a/src/sql/parts/modelComponents/checkbox.component.ts +++ b/src/sql/parts/modelComponents/checkbox.component.ts @@ -49,7 +49,7 @@ export default class CheckBoxComponent extends ComponentBase implements ICompone this._register(this._input); this._register(this._input.onChange(e => { this.checked = this._input.checked; - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidChange, args: e }); diff --git a/src/sql/parts/modelComponents/componentBase.ts b/src/sql/parts/modelComponents/componentBase.ts index 4b58d82dd7..621f4cbd1f 100644 --- a/src/sql/parts/modelComponents/componentBase.ts +++ b/src/sql/parts/modelComponents/componentBase.ts @@ -195,7 +195,7 @@ export abstract class ComponentBase extends Disposable implements IComponent, On return this._onEventEmitter.event(handler); } - private fireEvent(event: IComponentEventArgs) { + protected fireEvent(event: IComponentEventArgs) { this._onEventEmitter.fire(event); if (this._eventQueue) { this._eventQueue.push(event); diff --git a/src/sql/parts/modelComponents/declarativeTable.component.ts b/src/sql/parts/modelComponents/declarativeTable.component.ts index c889e938d1..af18f93f5e 100644 --- a/src/sql/parts/modelComponents/declarativeTable.component.ts +++ b/src/sql/parts/modelComponents/declarativeTable.component.ts @@ -139,7 +139,7 @@ export default class DeclarativeTableComponent extends ComponentBase implements column: cell, value: newValue }; - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidChange, args: newCellData }); diff --git a/src/sql/parts/modelComponents/dropdown.component.ts b/src/sql/parts/modelComponents/dropdown.component.ts index 57bbd7e53e..3a7bde8275 100644 --- a/src/sql/parts/modelComponents/dropdown.component.ts +++ b/src/sql/parts/modelComponents/dropdown.component.ts @@ -68,7 +68,7 @@ export default class DropDownComponent extends ComponentBase implements ICompone this._register(this._editableDropdown.onValueChange(e => { if (this.editable) { this.setSelectedValue(this._editableDropdown.value); - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidChange, args: e }); @@ -83,7 +83,7 @@ export default class DropDownComponent extends ComponentBase implements ICompone this._register(this._selectBox.onDidSelect(e => { if (!this.editable) { this.setSelectedValue(this._selectBox.value); - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidChange, args: e }); diff --git a/src/sql/parts/modelComponents/editor.component.ts b/src/sql/parts/modelComponents/editor.component.ts index 18c72ff9ce..d962f448b1 100644 --- a/src/sql/parts/modelComponents/editor.component.ts +++ b/src/sql/parts/modelComponents/editor.component.ts @@ -65,7 +65,13 @@ export default class EditorComponent extends ComponentBase implements IComponent let uri = this.createUri(); this._editorInput = instantiationService.createInstance(UntitledEditorInput, uri, false, 'sql', '', ''); this._editor.setInput(this._editorInput, undefined); - this._editorInput.resolve().then(model => this._editorModel = model.textEditorModel); + this._editorInput.resolve().then(model => { + this._editorModel = model.textEditorModel; + this.fireEvent({ + eventType: ComponentEventType.onComponentCreated, + args: this._uri + }); + }); this._register(this._editor); this._register(this._editorInput); @@ -73,7 +79,7 @@ export default class EditorComponent extends ComponentBase implements IComponent this.content = this._editorModel.getValue(); // Notify via an event so that extensions can detect and propagate changes - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidChange, args: e }); diff --git a/src/sql/parts/modelComponents/fileBrowserTree.component.ts b/src/sql/parts/modelComponents/fileBrowserTree.component.ts index 6a6264e7f2..835c2ab2fb 100644 --- a/src/sql/parts/modelComponents/fileBrowserTree.component.ts +++ b/src/sql/parts/modelComponents/fileBrowserTree.component.ts @@ -60,7 +60,7 @@ export default class FileBrowserTreeComponent extends ComponentBase implements I } private onClicked(selectedNode: FileNode) { - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidChange, args: { fullPath: selectedNode.fullPath, isFile: selectedNode.isFile } }); diff --git a/src/sql/parts/modelComponents/inputbox.component.ts b/src/sql/parts/modelComponents/inputbox.component.ts index edbd651b53..1e10d8f3ae 100644 --- a/src/sql/parts/modelComponents/inputbox.component.ts +++ b/src/sql/parts/modelComponents/inputbox.component.ts @@ -121,7 +121,7 @@ export default class InputBoxComponent extends ComponentBase implements ICompone if (input.hideErrors) { input.hideErrors = false; } - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidChange, args: e }); diff --git a/src/sql/parts/modelComponents/interfaces.ts b/src/sql/parts/modelComponents/interfaces.ts index 17a42b1bb5..67fe11f11c 100644 --- a/src/sql/parts/modelComponents/interfaces.ts +++ b/src/sql/parts/modelComponents/interfaces.ts @@ -69,7 +69,8 @@ export enum ComponentEventType { onDidClick, validityChanged, onMessage, - onSelectedRowChanged + onSelectedRowChanged, + onComponentCreated } export interface IModelStore { diff --git a/src/sql/parts/modelComponents/listbox.component.ts b/src/sql/parts/modelComponents/listbox.component.ts index c375173024..7ddb50bbf4 100644 --- a/src/sql/parts/modelComponents/listbox.component.ts +++ b/src/sql/parts/modelComponents/listbox.component.ts @@ -56,7 +56,7 @@ export default class ListBoxComponent extends ComponentBase implements IComponen this._register(attachListBoxStyler(this._input, this.themeService)); this._register(this._input.onDidSelect(e => { this.selectedRow = e.index; - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onSelectedRowChanged, args: e }); diff --git a/src/sql/parts/modelComponents/radioButton.component.ts b/src/sql/parts/modelComponents/radioButton.component.ts index 9b0cf3e661..13572531b0 100644 --- a/src/sql/parts/modelComponents/radioButton.component.ts +++ b/src/sql/parts/modelComponents/radioButton.component.ts @@ -51,7 +51,7 @@ export default class RadioButtonComponent extends ComponentBase implements IComp this._register(this._input); this._register(this._input.onClicked(e => { this.checked = this._input.checked; - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onDidClick, args: e }); diff --git a/src/sql/parts/modelComponents/table.component.ts b/src/sql/parts/modelComponents/table.component.ts index 6845c8c0c2..936554229b 100644 --- a/src/sql/parts/modelComponents/table.component.ts +++ b/src/sql/parts/modelComponents/table.component.ts @@ -109,7 +109,7 @@ export default class TableComponent extends ComponentBase implements IComponent, this._register(attachTableStyler(this._table, this.themeService)); this._register(this._table.onSelectedRowsChanged((e, data) => { this.selectedRows = data.rows; - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onSelectedRowChanged, args: e }); diff --git a/src/sql/parts/modelComponents/webview.component.ts b/src/sql/parts/modelComponents/webview.component.ts index 632fdca276..0f19c05f7b 100644 --- a/src/sql/parts/modelComponents/webview.component.ts +++ b/src/sql/parts/modelComponents/webview.component.ts @@ -82,7 +82,7 @@ export default class WebViewComponent extends ComponentBase implements IComponen this._register(this._webview.onDidClickLink(link => this.onDidClickLink(link))); this._register(this._webview.onMessage(e => { - this._onEventEmitter.fire({ + this.fireEvent({ eventType: ComponentEventType.onMessage, args: e }); diff --git a/src/sql/sqlops.proposed.d.ts b/src/sql/sqlops.proposed.d.ts index 69ad80cfef..d095f5feee 100644 --- a/src/sql/sqlops.proposed.d.ts +++ b/src/sql/sqlops.proposed.d.ts @@ -641,6 +641,11 @@ declare module 'sqlops' { */ readonly onContentChanged: vscode.Event; + /** + * An event called when the editor is created + */ + readonly onEditorCreated: vscode.Event; + } export interface ButtonComponent extends Component, ButtonProperties { diff --git a/src/sql/workbench/api/common/sqlExtHostTypes.ts b/src/sql/workbench/api/common/sqlExtHostTypes.ts index b4fd0b0045..a593e8a7d0 100644 --- a/src/sql/workbench/api/common/sqlExtHostTypes.ts +++ b/src/sql/workbench/api/common/sqlExtHostTypes.ts @@ -173,7 +173,8 @@ export enum ComponentEventType { onDidClick, validityChanged, onMessage, - onSelectedRowChanged + onSelectedRowChanged, + onComponentCreated } export interface IComponentEventArgs { diff --git a/src/sql/workbench/api/node/extHostModelView.ts b/src/sql/workbench/api/node/extHostModelView.ts index fe79f5b0f4..970af7e029 100644 --- a/src/sql/workbench/api/node/extHostModelView.ts +++ b/src/sql/workbench/api/node/extHostModelView.ts @@ -850,6 +850,7 @@ class EditorWrapper extends ComponentWrapper implements sqlops.EditorComponent { super(proxy, handle, ModelComponentTypes.Editor, id); this.properties = {}; this._emitterMap.set(ComponentEventType.onDidChange, new Emitter()); + this._emitterMap.set(ComponentEventType.onComponentCreated, new Emitter()); } public get content(): string { @@ -874,6 +875,11 @@ class EditorWrapper extends ComponentWrapper implements sqlops.EditorComponent { let emitter = this._emitterMap.get(ComponentEventType.onDidChange); return emitter && emitter.event; } + + public get onEditorCreated(): vscode.Event { + let emitter = this._emitterMap.get(ComponentEventType.onComponentCreated); + return emitter && emitter.event; + } } class RadioButtonWrapper extends ComponentWrapper implements sqlops.RadioButtonComponent {