From 4c49e1cd411b256caf714bb6a498d6df503d86c7 Mon Sep 17 00:00:00 2001 From: Alan Ren Date: Fri, 4 Feb 2022 09:32:07 -0800 Subject: [PATCH] refresh the table designer after publishing (#18220) --- extensions/mssql/config.json | 2 +- extensions/mssql/src/tableDesigner/tableDesigner.ts | 2 +- src/sql/azdata.proposed.d.ts | 4 ++++ src/sql/workbench/browser/designer/designer.ts | 8 ++++++++ src/sql/workbench/browser/designer/interfaces.ts | 5 +++++ .../tableDesigner/browser/tableDesignerComponentInput.ts | 6 +++++- 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/extensions/mssql/config.json b/extensions/mssql/config.json index e5ab7ec0f4..0700ec940d 100644 --- a/extensions/mssql/config.json +++ b/extensions/mssql/config.json @@ -1,6 +1,6 @@ { "downloadUrl": "https://github.com/Microsoft/sqltoolsservice/releases/download/v{#version#}/microsoft.sqltools.servicelayer-{#fileName#}", - "version": "3.0.0-release.193", + "version": "3.0.0-release.195", "downloadFileNames": { "Windows_86": "win-x86-net6.0.zip", "Windows_64": "win-x64-net6.0.zip", diff --git a/extensions/mssql/src/tableDesigner/tableDesigner.ts b/extensions/mssql/src/tableDesigner/tableDesigner.ts index df909c040b..2248024a56 100644 --- a/extensions/mssql/src/tableDesigner/tableDesigner.ts +++ b/extensions/mssql/src/tableDesigner/tableDesigner.ts @@ -40,7 +40,7 @@ export function registerTableDesignerCommands(appContext: AppContext) { isNewTable: false, name: name, schema: schema, - id: `${connectionString}|${database}|${schema}|${name}`, + id: `${sqlProviderName}|${server}|${database}|${schema}|${name}`, connectionString: connectionString }, telemetryInfo); })); diff --git a/src/sql/azdata.proposed.d.ts b/src/sql/azdata.proposed.d.ts index fb34ceb08e..e156c56b9f 100644 --- a/src/sql/azdata.proposed.d.ts +++ b/src/sql/azdata.proposed.d.ts @@ -1436,6 +1436,10 @@ declare module 'azdata' { * The new table information after the changes are published. */ newTableInfo: TableInfo; + /** + * The new view model. + */ + viewModel: DesignerViewModel; } } diff --git a/src/sql/workbench/browser/designer/designer.ts b/src/sql/workbench/browser/designer/designer.ts index b4568d9b8c..4e59c03415 100644 --- a/src/sql/workbench/browser/designer/designer.ts +++ b/src/sql/workbench/browser/designer/designer.ts @@ -262,6 +262,9 @@ export class Designer extends Disposable implements IThemable { this._inputDisposable.add(this._input.onStateChange((args) => { this.handleInputStateChangedEvent(args); })); + this._inputDisposable.add(this._input.onRefreshRequested(() => { + this.refresh(); + })); if (this._input.view === undefined) { this._input.initialize(); @@ -369,6 +372,11 @@ export class Designer extends Disposable implements IThemable { } } + private refresh() { + this.updateComponentValues(); + this.updatePropertiesPane(this._propertiesPane.objectPath); + } + private layoutTabbedPanel() { this._tabbedPanel.layout(new DOM.Dimension(this._tabbedPanelContainer.clientWidth, this._tabbedPanelContainer.clientHeight)); } diff --git a/src/sql/workbench/browser/designer/interfaces.ts b/src/sql/workbench/browser/designer/interfaces.ts index c9cda32c4b..da30165968 100644 --- a/src/sql/workbench/browser/designer/interfaces.ts +++ b/src/sql/workbench/browser/designer/interfaces.ts @@ -23,6 +23,11 @@ export interface DesignerComponentInput { */ readonly onEditProcessed: Event; + /** + * The event that is triggerd when a refresh of the UI is requested. + */ + readonly onRefreshRequested: Event; + /** * Gets the object type display name. */ diff --git a/src/sql/workbench/services/tableDesigner/browser/tableDesignerComponentInput.ts b/src/sql/workbench/services/tableDesigner/browser/tableDesignerComponentInput.ts index 6526d4d681..ecd8b7499e 100644 --- a/src/sql/workbench/services/tableDesigner/browser/tableDesignerComponentInput.ts +++ b/src/sql/workbench/services/tableDesigner/browser/tableDesignerComponentInput.ts @@ -27,11 +27,13 @@ export class TableDesignerComponentInput implements DesignerComponentInput { private _onStateChange = new Emitter(); private _onInitialized = new Emitter(); private _onEditProcessed = new Emitter(); + private _onRefreshRequested = new Emitter(); private _originalViewModel: DesignerViewModel; public readonly onInitialized: Event = this._onInitialized.event; public readonly onEditProcessed: Event = this._onEditProcessed.event; public readonly onStateChange: Event = this._onStateChange.event; + public readonly onRefreshRequested: Event = this._onRefreshRequested.event; private readonly designerEditTypeDisplayValue: { [key: number]: string } = { 0: 'Add', 1: 'Remove', 2: 'Update' @@ -140,10 +142,12 @@ export class TableDesignerComponentInput implements DesignerComponentInput { try { this.updateState(this.valid, this.dirty, 'publish'); const result = await this._provider.publishChanges(this.tableInfo); - this._originalViewModel = this._viewModel; + this._viewModel = result.viewModel; + this._originalViewModel = result.viewModel; saveNotificationHandle.updateMessage(localize('tableDesigner.publishChangeSuccess', "The changes have been successfully published.")); this.tableInfo = result.newTableInfo; this.updateState(true, false); + this._onRefreshRequested.fire(); publishEvent.withAdditionalMeasurements({ 'elapsedTimeMs': new Date().getTime() - startTime }).send();