Add title property for data grid providers (#13155)

This commit is contained in:
Charles Gagnon
2020-10-30 15:37:11 -07:00
committed by GitHub
parent 341f7aa7ad
commit 3015845093
11 changed files with 51 additions and 40 deletions

View File

@@ -28,6 +28,8 @@ export class AzureDataGridProvider implements azdata.DataGridProvider {
constructor(private _appContext: AppContext) { } constructor(private _appContext: AppContext) { }
public providerId = constants.dataGridProviderId; public providerId = constants.dataGridProviderId;
public title = loc.azureResourcesGridTitle;
public async getDataGridItems() { public async getDataGridItems() {
const accounts = await azdata.accounts.getAllAccounts(); const accounts = await azdata.accounts.getAllAccounts();
const items: any[] = []; const items: any[] = [];

View File

@@ -73,3 +73,4 @@ export const sqlServerArc = localize('azurecore.sqlServerArc', "SQL Server - Azu
export const azureArcPostgresServer = localize('azurecore.azureArcPostgres', "Azure Arc enabled PostgreSQL Hyperscale"); export const azureArcPostgresServer = localize('azurecore.azureArcPostgres', "Azure Arc enabled PostgreSQL Hyperscale");
export const unableToOpenAzureLink = localize('azure.unableToOpenAzureLink', "Unable to open link, missing required values"); export const unableToOpenAzureLink = localize('azure.unableToOpenAzureLink', "Unable to open link, missing required values");
export const azureResourcesGridTitle = localize('azure.azureResourcesGridTitle', "Azure Resources");

View File

@@ -257,6 +257,11 @@ declare module 'azdata' {
* Gets the list of data grid columns for this provider * Gets the list of data grid columns for this provider
*/ */
getDataGridColumns(): Thenable<DataGridColumn[]>; getDataGridColumns(): Thenable<DataGridColumn[]>;
/**
* The user visible string to use for the title of the grid
*/
title: string;
} }
export interface HyperlinkComponent { export interface HyperlinkComponent {

View File

@@ -29,6 +29,8 @@ import { assign } from 'vs/base/common/objects';
import { serializableToMap } from 'sql/base/common/map'; import { serializableToMap } from 'sql/base/common/map';
import { IAssessmentService } from 'sql/workbench/services/assessment/common/interfaces'; import { IAssessmentService } from 'sql/workbench/services/assessment/common/interfaces';
import { IDataGridProviderService } from 'sql/workbench/services/dataGridProvider/common/dataGridProviderService'; import { IDataGridProviderService } from 'sql/workbench/services/dataGridProvider/common/dataGridProviderService';
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry';
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
/** /**
* Main thread class for handling data protocol management registration. * Main thread class for handling data protocol management registration.
@@ -57,7 +59,8 @@ export class MainThreadDataProtocol extends Disposable implements MainThreadData
@ISerializationService private _serializationService: ISerializationService, @ISerializationService private _serializationService: ISerializationService,
@IFileBrowserService private _fileBrowserService: IFileBrowserService, @IFileBrowserService private _fileBrowserService: IFileBrowserService,
@IAssessmentService private _assessmentService: IAssessmentService, @IAssessmentService private _assessmentService: IAssessmentService,
@IDataGridProviderService private _dataGridProviderService: IDataGridProviderService @IDataGridProviderService private _dataGridProviderService: IDataGridProviderService,
@IAdsTelemetryService private _telemetryService: IAdsTelemetryService
) { ) {
super(); super();
if (extHostContext) { if (extHostContext) {
@@ -469,14 +472,23 @@ export class MainThreadDataProtocol extends Disposable implements MainThreadData
return undefined; return undefined;
} }
public $registerDataGridProvider(providerId: string, handle: number): void { public $registerDataGridProvider(providerId: string, title: string, handle: number): void {
const self = this; const self = this;
this._dataGridProviderService.registerProvider(providerId, <azdata.DataGridProvider>{ this._dataGridProviderService.registerProvider(providerId, <azdata.DataGridProvider>{
providerId: providerId, providerId: providerId,
title: title,
getDataGridItems(): Thenable<azdata.DataGridItem[]> { getDataGridItems(): Thenable<azdata.DataGridItem[]> {
self._telemetryService.createActionEvent(TelemetryKeys.TelemetryView.Shell, TelemetryKeys.GetDataGridItems)
.withAdditionalProperties({
provider: providerId
}).send();
return self._proxy.$getDataGridItems(handle); return self._proxy.$getDataGridItems(handle);
}, },
getDataGridColumns(): Thenable<azdata.DataGridColumn[]> { getDataGridColumns(): Thenable<azdata.DataGridColumn[]> {
self._telemetryService.createActionEvent(TelemetryKeys.TelemetryView.Shell, TelemetryKeys.GetDataGridColumns)
.withAdditionalProperties({
provider: providerId
}).send();
return self._proxy.$getDataGridColumns(handle); return self._proxy.$getDataGridColumns(handle);
} }
}); });

View File

@@ -174,7 +174,7 @@ export class ExtHostDataProtocol extends ExtHostDataProtocolShape {
} }
$registerDataGridProvider(provider: azdata.DataGridProvider): vscode.Disposable { $registerDataGridProvider(provider: azdata.DataGridProvider): vscode.Disposable {
let rt = this.registerProvider(provider, DataProviderType.DataGridProvider); let rt = this.registerProvider(provider, DataProviderType.DataGridProvider);
this._proxy.$registerDataGridProvider(provider.providerId, provider.handle); this._proxy.$registerDataGridProvider(provider.providerId, provider.title, provider.handle);
return rt; return rt;
} }
$registerCapabilitiesServiceProvider(provider: azdata.CapabilitiesProvider): vscode.Disposable { $registerCapabilitiesServiceProvider(provider: azdata.CapabilitiesProvider): vscode.Disposable {

View File

@@ -583,7 +583,7 @@ export interface MainThreadDataProtocolShape extends IDisposable {
$registerAgentServicesProvider(providerId: string, handle: number): Promise<any>; $registerAgentServicesProvider(providerId: string, handle: number): Promise<any>;
$registerSerializationProvider(providerId: string, handle: number): Promise<any>; $registerSerializationProvider(providerId: string, handle: number): Promise<any>;
$registerSqlAssessmentServicesProvider(providerId: string, handle: number): Promise<any>; $registerSqlAssessmentServicesProvider(providerId: string, handle: number): Promise<any>;
$registerDataGridProvider(providerId: string, handle: number): void; $registerDataGridProvider(providerId: string, title: string, handle: number): void;
$unregisterProvider(handle: number): Promise<any>; $unregisterProvider(handle: number): Promise<any>;
$onConnectionComplete(handle: number, connectionInfoSummary: azdata.ConnectionInfoSummary): void; $onConnectionComplete(handle: number, connectionInfoSummary: azdata.ConnectionInfoSummary): void;
$onIntelliSenseCacheComplete(handle: number, connectionUri: string): void; $onIntelliSenseCacheComplete(handle: number, connectionUri: string): void;

View File

@@ -8,7 +8,7 @@ import * as nls from 'vs/nls';
import { EditorInput } from 'vs/workbench/common/editor'; import { EditorInput } from 'vs/workbench/common/editor';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { IDataGridProviderService } from 'sql/workbench/services/dataGridProvider/common/dataGridProviderService'; import { DataGridProvider, IDataGridProviderService } from 'sql/workbench/services/dataGridProvider/common/dataGridProviderService';
import { onUnexpectedError } from 'vs/base/common/errors'; import { onUnexpectedError } from 'vs/base/common/errors';
import { ButtonColumn } from 'sql/base/browser/ui/table/plugins/buttonColumn.plugin'; import { ButtonColumn } from 'sql/base/browser/ui/table/plugins/buttonColumn.plugin';
import { getDataGridFormatter } from 'sql/workbench/services/dataGridProvider/browser/dataGridProviderUtils'; import { getDataGridFormatter } from 'sql/workbench/services/dataGridProvider/browser/dataGridProviderUtils';
@@ -23,6 +23,8 @@ export interface ColumnDefinition extends Slick.Column<azdata.DataGridItem> {
export class ResourceViewerInput extends EditorInput { export class ResourceViewerInput extends EditorInput {
public static ID: string = 'workbench.editorInput.resourceViewerInput'; public static ID: string = 'workbench.editorInput.resourceViewerInput';
private _dataGridProvider: DataGridProvider;
private _data: azdata.DataGridItem[] = []; private _data: azdata.DataGridItem[] = [];
private _columns: ColumnDefinition[] = []; private _columns: ColumnDefinition[] = [];
private _loading: boolean = true; private _loading: boolean = true;
@@ -36,8 +38,9 @@ export class ResourceViewerInput extends EditorInput {
public onDataChanged: Event<void> = this._onDataChanged.event; public onDataChanged: Event<void> = this._onDataChanged.event;
constructor(private _providerId: string, constructor(private _providerId: string,
@IDataGridProviderService private _dataGridProviderService: IDataGridProviderService) { @IDataGridProviderService dataGridProviderService: IDataGridProviderService) {
super(); super();
this._dataGridProvider = dataGridProviderService.getDataGridProvider(this._providerId);
this.actionsColumn = new ButtonColumn<azdata.DataGridItem>({ this.actionsColumn = new ButtonColumn<azdata.DataGridItem>({
id: 'actions', id: 'actions',
iconCssClass: 'toggle-more', iconCssClass: 'toggle-more',
@@ -52,7 +55,7 @@ export class ResourceViewerInput extends EditorInput {
} }
public getName(): string { public getName(): string {
return nls.localize('resourceViewerInput.resourceViewer', "Resource Viewer"); return this._dataGridProvider.title || nls.localize('resourceViewerInput.resourceViewer', "Resource Viewer");
} }
public get data(): azdata.DataGridItem[] { public get data(): azdata.DataGridItem[] {
@@ -95,8 +98,12 @@ export class ResourceViewerInput extends EditorInput {
return this._loading; return this._loading;
} }
public get title(): string {
return this._dataGridProvider.title;
}
private async fetchColumns(): Promise<void> { private async fetchColumns(): Promise<void> {
const columns = await this._dataGridProviderService.getDataGridColumns(this._providerId); const columns = await this._dataGridProvider.getDataGridColumns();
const columnDefinitions: ColumnDefinition[] = columns.map(col => { const columnDefinitions: ColumnDefinition[] = columns.map(col => {
return { return {
name: col.name, name: col.name,
@@ -119,7 +126,7 @@ export class ResourceViewerInput extends EditorInput {
} }
private async fetchItems(): Promise<void> { private async fetchItems(): Promise<void> {
const items = await this._dataGridProviderService.getDataGridItems(this._providerId); const items = await this._dataGridProvider.getDataGridItems();
this._data = items; this._data = items;
this._onDataChanged.fire(); this._onDataChanged.fire();
} }

View File

@@ -94,6 +94,8 @@ export class ResourceViewerEditor extends EditorPane {
async setInput(input: ResourceViewerInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise<void> { async setInput(input: ResourceViewerInput, options: EditorOptions | undefined, context: IEditorOpenContext, token: CancellationToken): Promise<void> {
await super.setInput(input, options, context, token); await super.setInput(input, options, context, token);
this._resourceViewerTable.title = input.title;
this._inputDisposables.clear(); this._inputDisposables.clear();
input.plugins.forEach(plugin => { input.plugins.forEach(plugin => {

View File

@@ -52,6 +52,7 @@ export class ResourceViewerTable extends Disposable {
dataItemColumnValueExtractor: dataGridColumnValueExtractor, dataItemColumnValueExtractor: dataGridColumnValueExtractor,
forceFitColumns: true forceFitColumns: true
})); }));
this._resourceViewerTable.setSelectionModel(new RowSelectionModel()); this._resourceViewerTable.setSelectionModel(new RowSelectionModel());
let filterPlugin = new HeaderFilter<azdata.DataGridItem>(); let filterPlugin = new HeaderFilter<azdata.DataGridItem>();
this._register(attachButtonStyler(filterPlugin, this._themeService)); this._register(attachButtonStyler(filterPlugin, this._themeService));
@@ -100,6 +101,10 @@ export class ResourceViewerTable extends Disposable {
this._loadingSpinnerPlugin.loading = isLoading; this._loadingSpinnerPlugin.loading = isLoading;
} }
public set title(title: string) {
this._resourceViewerTable.setTableTitle(title);
}
public registerPlugin(plugin: Slick.Plugin<azdata.DataGridItem>): void { public registerPlugin(plugin: Slick.Plugin<azdata.DataGridItem>): void {
this._resourceViewerTable.registerPlugin(plugin); this._resourceViewerTable.registerPlugin(plugin);
} }

View File

@@ -4,20 +4,14 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata'; import * as azdata from 'azdata';
import { IAdsTelemetryService } from 'sql/platform/telemetry/common/telemetry'; import { DataGridProvider, IDataGridProviderService } from 'sql/workbench/services/dataGridProvider/common/dataGridProviderService';
import { IDataGridProviderService } from 'sql/workbench/services/dataGridProvider/common/dataGridProviderService';
import { invalidProvider } from 'sql/base/common/errors'; import { invalidProvider } from 'sql/base/common/errors';
import * as TelemetryKeys from 'sql/platform/telemetry/common/telemetryKeys';
export class DataGridProviderService implements IDataGridProviderService { export class DataGridProviderService implements IDataGridProviderService {
public _serviceBrand: undefined; public _serviceBrand: undefined;
private _providers = new Map<string, azdata.DataGridProvider>(); private _providers = new Map<string, azdata.DataGridProvider>();
constructor(
@IAdsTelemetryService private _telemetryService: IAdsTelemetryService
) { }
/** /**
* Register a data grid provider * Register a data grid provider
*/ */
@@ -32,26 +26,10 @@ export class DataGridProviderService implements IDataGridProviderService {
this._providers.delete(providerId); this._providers.delete(providerId);
} }
public async getDataGridItems(providerId: string): Promise<azdata.DataGridItem[]> { public getDataGridProvider(providerId: string): DataGridProvider {
const provider = this._providers.get(providerId); const provider = this._providers.get(providerId);
if (provider) { if (provider) {
this._telemetryService.createActionEvent(TelemetryKeys.TelemetryView.Shell, TelemetryKeys.GetDataGridItems) return provider;
.withAdditionalProperties({
provider: providerId
}).send();
return provider.getDataGridItems();
}
throw invalidProvider(providerId);
}
public async getDataGridColumns(providerId: string): Promise<azdata.DataGridColumn[]> {
const provider = this._providers.get(providerId);
if (provider) {
this._telemetryService.createActionEvent(TelemetryKeys.TelemetryView.Shell, TelemetryKeys.GetDataGridColumns)
.withAdditionalProperties({
provider: providerId
}).send();
return provider.getDataGridColumns();
} }
throw invalidProvider(providerId); throw invalidProvider(providerId);
} }

View File

@@ -9,6 +9,8 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
export const SERVICE_ID = 'dataGridProviderService'; export const SERVICE_ID = 'dataGridProviderService';
export const IDataGridProviderService = createDecorator<IDataGridProviderService>(SERVICE_ID); export const IDataGridProviderService = createDecorator<IDataGridProviderService>(SERVICE_ID);
export interface DataGridProvider extends azdata.DataGridProvider { }
export interface IDataGridProviderService { export interface IDataGridProviderService {
_serviceBrand: undefined; _serviceBrand: undefined;
@@ -23,12 +25,9 @@ export interface IDataGridProviderService {
unregisterProvider(providerId: string): void; unregisterProvider(providerId: string): void;
/** /**
* Gets a list of data grid items from the specified provider * Gets a registered data grid provider, throwing if none are registered with the specified ID
* @param providerId The id of the registered provider
*/ */
getDataGridItems(providerId: string): Promise<azdata.DataGridItem[]>; getDataGridProvider(providerId: string): DataGridProvider;
/**
* Gets a list of data grid columns from the specified provider
*/
getDataGridColumns(providerId: string): Promise<azdata.DataGridColumn[]>;
} }