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

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

View File

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

View File

@@ -174,7 +174,7 @@ export class ExtHostDataProtocol extends ExtHostDataProtocolShape {
}
$registerDataGridProvider(provider: azdata.DataGridProvider): vscode.Disposable {
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;
}
$registerCapabilitiesServiceProvider(provider: azdata.CapabilitiesProvider): vscode.Disposable {

View File

@@ -583,7 +583,7 @@ export interface MainThreadDataProtocolShape extends IDisposable {
$registerAgentServicesProvider(providerId: string, handle: number): Promise<any>;
$registerSerializationProvider(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>;
$onConnectionComplete(handle: number, connectionInfoSummary: azdata.ConnectionInfoSummary): 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 { Event, Emitter } from 'vs/base/common/event';
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 { ButtonColumn } from 'sql/base/browser/ui/table/plugins/buttonColumn.plugin';
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 {
public static ID: string = 'workbench.editorInput.resourceViewerInput';
private _dataGridProvider: DataGridProvider;
private _data: azdata.DataGridItem[] = [];
private _columns: ColumnDefinition[] = [];
private _loading: boolean = true;
@@ -36,8 +38,9 @@ export class ResourceViewerInput extends EditorInput {
public onDataChanged: Event<void> = this._onDataChanged.event;
constructor(private _providerId: string,
@IDataGridProviderService private _dataGridProviderService: IDataGridProviderService) {
@IDataGridProviderService dataGridProviderService: IDataGridProviderService) {
super();
this._dataGridProvider = dataGridProviderService.getDataGridProvider(this._providerId);
this.actionsColumn = new ButtonColumn<azdata.DataGridItem>({
id: 'actions',
iconCssClass: 'toggle-more',
@@ -52,7 +55,7 @@ export class ResourceViewerInput extends EditorInput {
}
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[] {
@@ -95,8 +98,12 @@ export class ResourceViewerInput extends EditorInput {
return this._loading;
}
public get title(): string {
return this._dataGridProvider.title;
}
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 => {
return {
name: col.name,
@@ -119,7 +126,7 @@ export class ResourceViewerInput extends EditorInput {
}
private async fetchItems(): Promise<void> {
const items = await this._dataGridProviderService.getDataGridItems(this._providerId);
const items = await this._dataGridProvider.getDataGridItems();
this._data = items;
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> {
await super.setInput(input, options, context, token);
this._resourceViewerTable.title = input.title;
this._inputDisposables.clear();
input.plugins.forEach(plugin => {

View File

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

View File

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

View File

@@ -9,6 +9,8 @@ import { createDecorator } from 'vs/platform/instantiation/common/instantiation'
export const SERVICE_ID = 'dataGridProviderService';
export const IDataGridProviderService = createDecorator<IDataGridProviderService>(SERVICE_ID);
export interface DataGridProvider extends azdata.DataGridProvider { }
export interface IDataGridProviderService {
_serviceBrand: undefined;
@@ -23,12 +25,9 @@ export interface IDataGridProviderService {
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[]>;
}