diff --git a/src/sql/parts/dashboard/common/dashboardPage.component.html b/src/sql/parts/dashboard/common/dashboardPage.component.html index ed17c62847..6b828a5c04 100644 --- a/src/sql/parts/dashboard/common/dashboardPage.component.html +++ b/src/sql/parts/dashboard/common/dashboardPage.component.html @@ -12,14 +12,14 @@ - - - - - - - - + + + + + + + + diff --git a/src/sql/parts/dashboard/common/dashboardPage.component.ts b/src/sql/parts/dashboard/common/dashboardPage.component.ts index 9c8633e38a..58078fadad 100644 --- a/src/sql/parts/dashboard/common/dashboardPage.component.ts +++ b/src/sql/parts/dashboard/common/dashboardPage.component.ts @@ -3,15 +3,15 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./dashboardPage'; -import './dashboardPanelStyles'; +import 'vs/css!sql/parts/dashboard/common/dashboardPage'; +import 'sql/parts/dashboard/common/dashboardPanelStyles'; import { Component, Inject, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef } from '@angular/core'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { WidgetConfig, TabConfig, PinConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry'; -import { DashboardWidgetWrapper } from 'sql/parts/dashboard/common/dashboardWidgetWrapper.component'; +import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { IPropertiesConfig } from 'sql/parts/dashboard/pages/serverDashboardPage.contribution'; import { PanelComponent } from 'sql/base/browser/ui/panel/panel.component'; import { IDashboardRegistry, Extensions as DashboardExtensions, IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry'; @@ -22,8 +22,8 @@ import { AngularEventType } from 'sql/services/angularEventing/angularEventingSe import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { error } from 'sql/base/common/log'; import * as widgetHelper from 'sql/parts/dashboard/common/dashboardWidgetHelper'; -import { WIDGETS_TAB } from 'sql/parts/dashboard/tabs/dashboardWidgetTab.contribution'; -import { GRID_TAB } from 'sql/parts/dashboard/tabs/dashboardGridTab.contribution'; +import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; +import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; import { Registry } from 'vs/platform/registry/common/platform'; import * as types from 'vs/base/common/types'; @@ -179,7 +179,7 @@ export abstract class DashboardPage extends Disposable implements OnDestroy { id: 'homeTab', publisher: undefined, title: this.homeTabTitle, - content: { 'widgets-tab': homeWidgets }, + container: { 'widgets-container': homeWidgets }, context: this.context, originalConfig: this._originalConfig, editable: true, @@ -242,24 +242,24 @@ export abstract class DashboardPage extends Disposable implements OnDestroy { if (dashboardTabs && dashboardTabs.length > 0) { let selectedTabs = dashboardTabs.map(v => { - if (Object.keys(v.content).length !== 1) { + if (Object.keys(v.container).length !== 1) { error('Exactly 1 content must be defined per space'); } - let key = Object.keys(v.content)[0]; - if (key === WIDGETS_TAB || key === GRID_TAB) { - let configs = Object.values(v.content)[0]; + let key = Object.keys(v.container)[0]; + if (key === WIDGETS_CONTAINER || key === GRID_CONTAINER) { + let configs = Object.values(v.container)[0]; this._configModifiers.forEach(cb => { configs = cb.apply(this, [configs, this.dashboardService, this.context]); }); this._gridModifiers.forEach(cb => { configs = cb.apply(this, [configs, this._originalConfig]); }); - if (key === WIDGETS_TAB) { - return { id: v.id, title: v.title, content: { 'widgets-tab': configs }, alwaysShow: v.alwaysShow }; + if (key === WIDGETS_CONTAINER) { + return { id: v.id, title: v.title, container: { 'widgets-container': configs }, alwaysShow: v.alwaysShow }; } else { - return { id: v.id, title: v.title, content: { 'grid-tab': configs }, alwaysShow: v.alwaysShow }; + return { id: v.id, title: v.title, container: { 'grid-container': configs }, alwaysShow: v.alwaysShow }; } } return v; @@ -288,7 +288,7 @@ export abstract class DashboardPage extends Disposable implements OnDestroy { private getContentType(tab: TabConfig): string { - return tab.content ? Object.keys(tab.content)[0] : ''; + return tab.container ? Object.keys(tab.container)[0] : ''; } private addNewTab(tab: TabConfig): void { diff --git a/src/sql/parts/dashboard/common/dashboardTab.contribution.ts b/src/sql/parts/dashboard/common/dashboardTab.contribution.ts index 0368dc5b76..7b4486ac90 100644 --- a/src/sql/parts/dashboard/common/dashboardTab.contribution.ts +++ b/src/sql/parts/dashboard/common/dashboardTab.contribution.ts @@ -11,7 +11,7 @@ import { registerTab, generateTabContentSchemaProperties } from 'sql/platform/da export interface IDashboardTabContrib { id: string; title: string; - content: object; + container: object; description?: string; provider?: string | string[]; edition?: number | number[]; @@ -61,8 +61,8 @@ const tabSchema: IJSONSchema = { } ] }, - content: { - description: localize('sqlops.extension.contributes.dashboard.tab.content', "The content that will be displayed in this tab."), + container: { + description: localize('sqlops.extension.contributes.dashboard.tab.container', "The container that will be displayed in this tab."), type: 'object', properties: generateTabContentSchemaProperties() }, @@ -87,7 +87,7 @@ const tabContributionSchema: IJSONSchema = { ExtensionsRegistry.registerExtensionPoint('dashboard.tabs', [], tabContributionSchema).setHandler(extensions => { function handleCommand(tab: IDashboardTabContrib, extension: IExtensionPointUser) { - let { description, content, title, edition, provider, id, alwaysShow } = tab; + let { description, container, title, edition, provider, id, alwaysShow } = tab; alwaysShow = alwaysShow || false; let publisher = extension.description.publisher; if (!title) { @@ -97,10 +97,10 @@ ExtensionsRegistry.registerExtensionPoint('dashboard.innertabs', [], innerTabContributionSchema).setHandler(extensions => { +ExtensionsRegistry.registerExtensionPoint('dashboard.containers', [], containerContributionSchema).setHandler(extensions => { - function handleCommand(innerTab: IDashboardInnerTabContrib, extension: IExtensionPointUser) { - let { title, id, content, icon } = innerTab; + function handleCommand(dashboardContainer: IDashboardContainerContrib, extension: IExtensionPointUser) { + let { title, id, container, icon } = dashboardContainer; if (!title) { extension.collector.error('No title specified for extension.'); return; } - if (!content) { - extension.collector.warn('No content specified to show.'); + if (!container) { + extension.collector.warn('No container specified to show.'); } let iconClass: string; @@ -95,12 +95,12 @@ ExtensionsRegistry.registerExtensionPoint(value)) { + if (Array.isArray(value)) { for (let command of value) { handleCommand(command, extension); } diff --git a/src/sql/parts/dashboard/tabs/dashboardGridTab.component.html b/src/sql/parts/dashboard/containers/dashboardGridContainer.component.html similarity index 100% rename from src/sql/parts/dashboard/tabs/dashboardGridTab.component.html rename to src/sql/parts/dashboard/containers/dashboardGridContainer.component.html diff --git a/src/sql/parts/dashboard/tabs/dashboardGridTab.component.ts b/src/sql/parts/dashboard/containers/dashboardGridContainer.component.ts similarity index 90% rename from src/sql/parts/dashboard/tabs/dashboardGridTab.component.ts rename to src/sql/parts/dashboard/containers/dashboardGridContainer.component.ts index 3d995e4be0..3e1857a07a 100644 --- a/src/sql/parts/dashboard/tabs/dashboardGridTab.component.ts +++ b/src/sql/parts/dashboard/containers/dashboardGridContainer.component.ts @@ -3,14 +3,14 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./dashboardGridTab'; +import 'vs/css!./dashboardGridContainer'; import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, EventEmitter, OnChanges } from '@angular/core'; import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; -import { DashboardWidgetWrapper } from 'sql/parts/dashboard/common/dashboardWidgetWrapper.component'; +import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { subscriptionToDisposable } from 'sql/base/common/lifecycle'; import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; @@ -38,11 +38,11 @@ export interface GridWebviewConfig extends GridCellConfig { } @Component({ - selector: 'dashboard-grid-tab', - templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/tabs/dashboardGridTab.component.html')), - providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardGridTab) }] + selector: 'dashboard-grid-container', + templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/containers/dashboardGridContainer.component.html')), + providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardGridContainer) }] }) -export class DashboardGridTab extends DashboardTab implements OnDestroy, OnChanges { +export class DashboardGridContainer extends DashboardTab implements OnDestroy, OnChanges { @Input() private tab: TabConfig; private _contents: GridCellConfig[]; private _onResize = new Emitter(); @@ -130,8 +130,8 @@ export class DashboardGridTab extends DashboardTab implements OnDestroy, OnChang } ngOnChanges() { - if (this.tab.content) { - this._contents = Object.values(this.tab.content)[0]; + if (this.tab.container) { + this._contents = Object.values(this.tab.container)[0]; this._contents.forEach(widget => { if (!widget.row) { widget.row = 0; diff --git a/src/sql/parts/dashboard/tabs/dashboardGridTab.contribution.ts b/src/sql/parts/dashboard/containers/dashboardGridContainer.contribution.ts similarity index 85% rename from src/sql/parts/dashboard/tabs/dashboardGridTab.contribution.ts rename to src/sql/parts/dashboard/containers/dashboardGridContainer.contribution.ts index c2715468e4..31bba326b4 100644 --- a/src/sql/parts/dashboard/tabs/dashboardGridTab.contribution.ts +++ b/src/sql/parts/dashboard/containers/dashboardGridContainer.contribution.ts @@ -8,12 +8,12 @@ import * as nls from 'vs/nls'; import { generateDashboardGridLayoutSchema } from 'sql/parts/dashboard/pages/dashboardPageContribution'; import { registerTabContent } from 'sql/platform/dashboard/common/dashboardRegistry'; -export const GRID_TAB = 'grid-tab'; +export const GRID_CONTAINER = 'grid-container'; -let gridContentsSchema: IJSONSchema = { +let gridContainersSchema: IJSONSchema = { type: 'array', description: nls.localize('dashboard.gridtab.content.items', "The list of widgets or webviews that will be displayed in this tab."), items: generateDashboardGridLayoutSchema(undefined, true) }; -registerTabContent(GRID_TAB, gridContentsSchema); +registerTabContent(GRID_CONTAINER, gridContainersSchema); diff --git a/src/sql/parts/dashboard/tabs/dashboardGridTab.css b/src/sql/parts/dashboard/containers/dashboardGridContainer.css similarity index 100% rename from src/sql/parts/dashboard/tabs/dashboardGridTab.css rename to src/sql/parts/dashboard/containers/dashboardGridContainer.css diff --git a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.component.html b/src/sql/parts/dashboard/containers/dashboardNavSection.component.html similarity index 70% rename from src/sql/parts/dashboard/tabs/dashboardLeftNavBar.component.html rename to src/sql/parts/dashboard/containers/dashboardNavSection.component.html index b1214c0585..0e074009c0 100644 --- a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.component.html +++ b/src/sql/parts/dashboard/containers/dashboardNavSection.component.html @@ -6,10 +6,9 @@ --> - - - - + + + + - - + \ No newline at end of file diff --git a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.component.ts b/src/sql/parts/dashboard/containers/dashboardNavSection.component.ts similarity index 78% rename from src/sql/parts/dashboard/tabs/dashboardLeftNavBar.component.ts rename to src/sql/parts/dashboard/containers/dashboardNavSection.component.ts index 1b45c37b09..5c28a403dc 100644 --- a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.component.ts +++ b/src/sql/parts/dashboard/containers/dashboardNavSection.component.ts @@ -3,31 +3,31 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./dashboardLeftNavBar'; +import 'vs/css!./dashboardNavSection'; import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, EventEmitter, OnChanges, AfterContentInit } from '@angular/core'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { WidgetConfig, TabConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { PanelComponent, IPanelOptions, NavigationBarLayout } from 'sql/base/browser/ui/panel/panel.component'; -import { IDashboardInnerTabRegistry, Extensions as InnerTabExtensions, IDashboardInnerTab } from 'sql/platform/dashboard/common/innerTabRegistry'; +import { IDashboardContainerRegistry, Extensions as InnerTabExtensions, IDashboardContainer } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; import { TabComponent } from 'sql/base/browser/ui/panel/tab.component'; import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { error } from 'sql/base/common/log'; -import { WIDGETS_TAB } from 'sql/parts/dashboard/tabs/dashboardWidgetTab.contribution'; +import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; import * as widgetHelper from 'sql/parts/dashboard/common/dashboardWidgetHelper'; import { Registry } from 'vs/platform/registry/common/platform'; import Event, { Emitter } from 'vs/base/common/event'; -const innerTabRegistry = Registry.as(InnerTabExtensions.InnerTabContributions); +const innerTabRegistry = Registry.as(InnerTabExtensions.dashboardContainerContributions); @Component({ - selector: 'dashboard-left-nav-bar', - providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardLeftNavBar) }], - templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/tabs/dashboardLeftNavBar.component.html')) + selector: 'dashboard-nav-section', + providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardNavSection) }], + templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/containers/dashboardNavSection.component.html')) }) -export class DashboardLeftNavBar extends DashboardTab implements OnDestroy, OnChanges, AfterContentInit { +export class DashboardNavSection extends DashboardTab implements OnDestroy, OnChanges, AfterContentInit { @Input() private tab: TabConfig; protected tabs: Array = []; private _onResize = new Emitter(); @@ -64,10 +64,10 @@ export class DashboardLeftNavBar extends DashboardTab implements OnDestroy, OnCh ngOnChanges() { this.tabs = []; let innerTabIds = []; - let allPosibleInnerTab = innerTabRegistry.innerTabs; - let filteredTabs: IDashboardInnerTab[] = []; - if (this.tab.content) { - innerTabIds = Object.values(this.tab.content)[0]; + let allPosibleInnerTab = innerTabRegistry.containers; + let filteredTabs: IDashboardContainer[] = []; + if (this.tab.container) { + innerTabIds = Object.values(this.tab.container)[0]; if (innerTabIds && innerTabIds.length > 0) { innerTabIds.forEach(tabId => { let tab = allPosibleInnerTab.find(i => i.id === tabId); @@ -93,26 +93,26 @@ export class DashboardLeftNavBar extends DashboardTab implements OnDestroy, OnCh this.dispose(); } - private loadNewTabs(dashboardTabs: IDashboardInnerTab[]) { + private loadNewTabs(dashboardTabs: IDashboardContainer[]) { if (dashboardTabs && dashboardTabs.length > 0) { let selectedTabs = dashboardTabs.map(v => { - if (Object.keys(v.content).length !== 1) { + if (Object.keys(v.container).length !== 1) { error('Exactly 1 content must be defined per space'); } - let key = Object.keys(v.content)[0]; - if (key === WIDGETS_TAB) { - let configs = Object.values(v.content)[0]; + let key = Object.keys(v.container)[0]; + if (key === WIDGETS_CONTAINER) { + let configs = Object.values(v.container)[0]; this._configModifiers.forEach(cb => { configs = cb.apply(this, [configs, this.dashboardService, this.tab.context]); }); this._gridModifiers.forEach(cb => { configs = cb.apply(this, [configs]); }); - return { id: v.id, title: v.title, content: { 'widgets-tab': configs } }; + return { id: v.id, title: v.title, container: { 'widgets-container': configs } }; } - return { id: v.id, title: v.title, content: v.content }; + return { id: v.id, title: v.title, container: v.container }; }).map(v => { let config = v as TabConfig; config.context = this.tab.context; @@ -138,7 +138,7 @@ export class DashboardLeftNavBar extends DashboardTab implements OnDestroy, OnCh } private getContentType(tab: TabConfig): string { - return tab.content ? Object.keys(tab.content)[0] : ''; + return tab.container ? Object.keys(tab.container)[0] : ''; } public get id(): string { diff --git a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.contribution.ts b/src/sql/parts/dashboard/containers/dashboardNavSection.contribution.ts similarity index 84% rename from src/sql/parts/dashboard/tabs/dashboardLeftNavBar.contribution.ts rename to src/sql/parts/dashboard/containers/dashboardNavSection.contribution.ts index 13c5d2b315..adc9afad2d 100644 --- a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.contribution.ts +++ b/src/sql/parts/dashboard/containers/dashboardNavSection.contribution.ts @@ -7,9 +7,9 @@ import * as nls from 'vs/nls'; import { registerTabContent } from 'sql/platform/dashboard/common/dashboardRegistry'; -export const LEFT_NAV_TAB = 'left-nav-bar'; +export const NAV_SECTION = 'nav-section'; -let leftNavSchema: IJSONSchema = { +let NavSectionSchema: IJSONSchema = { type: 'array', description: nls.localize('dashboard.tab.content.left-nav-bar', "The list of inner tabs IDs that will be displayed in this vertical navigation bar."), items: { @@ -17,4 +17,4 @@ let leftNavSchema: IJSONSchema = { } }; -registerTabContent(LEFT_NAV_TAB, leftNavSchema); \ No newline at end of file +registerTabContent(NAV_SECTION, NavSectionSchema); \ No newline at end of file diff --git a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.css b/src/sql/parts/dashboard/containers/dashboardNavSection.css similarity index 93% rename from src/sql/parts/dashboard/tabs/dashboardLeftNavBar.css rename to src/sql/parts/dashboard/containers/dashboardNavSection.css index 35dda77722..51e9e4d5ea 100644 --- a/src/sql/parts/dashboard/tabs/dashboardLeftNavBar.css +++ b/src/sql/parts/dashboard/containers/dashboardNavSection.css @@ -3,7 +3,7 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -dashboard-left-nav-bar { +dashboard-nav-section { height: 100%; width: 100%; display: block; diff --git a/src/sql/parts/dashboard/tabs/dashboardWebviewTab.component.ts b/src/sql/parts/dashboard/containers/dashboardWebviewContainer.component.ts similarity index 87% rename from src/sql/parts/dashboard/tabs/dashboardWebviewTab.component.ts rename to src/sql/parts/dashboard/containers/dashboardWebviewContainer.component.ts index 4c28fcabc2..cef04911f0 100644 --- a/src/sql/parts/dashboard/tabs/dashboardWebviewTab.component.ts +++ b/src/sql/parts/dashboard/containers/dashboardWebviewContainer.component.ts @@ -2,7 +2,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./dashboardWebviewTab'; +import 'vs/css!./dashboardWebviewContainer'; import { Component, forwardRef, Input, AfterContentInit, ViewChild } from '@angular/core'; @@ -13,14 +13,14 @@ import { TabConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WebviewContent } from 'sql/parts/dashboard/contents/webviewContent.component'; @Component({ - selector: 'dashboard-webview-tab', - providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardWebviewTab) }], + selector: 'dashboard-webview-container', + providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardWebviewContainer) }], template: ` ` }) -export class DashboardWebviewTab extends DashboardTab implements AfterContentInit { +export class DashboardWebviewContainer extends DashboardTab implements AfterContentInit { @Input() private tab: TabConfig; private _onResize = new Emitter(); diff --git a/src/sql/parts/dashboard/tabs/dashboardWebviewTab.contribution.ts b/src/sql/parts/dashboard/containers/dashboardWebviewContainer.contribution.ts similarity index 73% rename from src/sql/parts/dashboard/tabs/dashboardWebviewTab.contribution.ts rename to src/sql/parts/dashboard/containers/dashboardWebviewContainer.contribution.ts index 6ef9e69eca..18dc05fa80 100644 --- a/src/sql/parts/dashboard/tabs/dashboardWebviewTab.contribution.ts +++ b/src/sql/parts/dashboard/containers/dashboardWebviewContainer.contribution.ts @@ -6,9 +6,9 @@ import { IJSONSchema } from 'vs/base/common/jsonSchema'; import * as nls from 'vs/nls'; import { registerTabContent } from 'sql/platform/dashboard/common/dashboardRegistry'; -import { registerInnerTabContent } from 'sql/platform/dashboard/common/innerTabRegistry'; +import { registerContainerType } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; -export const WEBVIEW_TAB = 'webview-tab'; +export const WEBVIEW_CONTAINER = 'webview-container'; let webviewSchema: IJSONSchema = { type: 'null', @@ -16,5 +16,5 @@ let webviewSchema: IJSONSchema = { default: null }; -registerTabContent(WEBVIEW_TAB, webviewSchema); -registerInnerTabContent(WEBVIEW_TAB, webviewSchema); \ No newline at end of file +registerTabContent(WEBVIEW_CONTAINER, webviewSchema); +registerContainerType(WEBVIEW_CONTAINER, webviewSchema); \ No newline at end of file diff --git a/src/sql/parts/dashboard/tabs/dashboardWebviewTab.css b/src/sql/parts/dashboard/containers/dashboardWebviewContainer.css similarity index 93% rename from src/sql/parts/dashboard/tabs/dashboardWebviewTab.css rename to src/sql/parts/dashboard/containers/dashboardWebviewContainer.css index 53fd33163f..9842f2810a 100644 --- a/src/sql/parts/dashboard/tabs/dashboardWebviewTab.css +++ b/src/sql/parts/dashboard/containers/dashboardWebviewContainer.css @@ -3,7 +3,7 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -dashboard-webview-tab { +dashboard-webview-container { height: 100%; width : 100%; display: block; diff --git a/src/sql/parts/dashboard/tabs/dashboardWidgetTab.component.ts b/src/sql/parts/dashboard/containers/dashboardWidgetContainer.component.ts similarity index 85% rename from src/sql/parts/dashboard/tabs/dashboardWidgetTab.component.ts rename to src/sql/parts/dashboard/containers/dashboardWidgetContainer.component.ts index 9c9ffed83a..bbcf1fde7d 100644 --- a/src/sql/parts/dashboard/tabs/dashboardWidgetTab.component.ts +++ b/src/sql/parts/dashboard/containers/dashboardWidgetContainer.component.ts @@ -3,14 +3,14 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import 'vs/css!./dashboardWidgetTab'; +import 'vs/css!./dashboardWidgetContainer'; import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, EventEmitter, OnChanges, AfterContentInit } from '@angular/core'; import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; -import { DashboardWidgetWrapper } from 'sql/parts/dashboard/common/dashboardWidgetWrapper.component'; +import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { subscriptionToDisposable } from 'sql/base/common/lifecycle'; import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { WidgetContent } from 'sql/parts/dashboard/contents/widgetContent.component'; @@ -21,14 +21,14 @@ import * as objects from 'vs/base/common/objects'; import Event, { Emitter } from 'vs/base/common/event'; @Component({ - selector: 'dashboard-widget-tab', - providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardWidgetTab) }], + selector: 'dashboard-widget-container', + providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardWidgetContainer) }], template: ` ` }) -export class DashboardWidgetTab extends DashboardTab implements OnDestroy, OnChanges, AfterContentInit { +export class DashboardWidgetContainer extends DashboardTab implements OnDestroy, OnChanges, AfterContentInit { @Input() private tab: TabConfig; private widgets: WidgetConfig[]; private _onResize = new Emitter(); @@ -42,8 +42,8 @@ export class DashboardWidgetTab extends DashboardTab implements OnDestroy, OnCha } ngOnChanges() { - if (this.tab.content) { - this.widgets = Object.values(this.tab.content)[0]; + if (this.tab.container) { + this.widgets = Object.values(this.tab.container)[0]; this._cd.detectChanges(); } } diff --git a/src/sql/parts/dashboard/tabs/dashboardWidgetTab.contribution.ts b/src/sql/parts/dashboard/containers/dashboardWidgetContainer.contribution.ts similarity index 76% rename from src/sql/parts/dashboard/tabs/dashboardWidgetTab.contribution.ts rename to src/sql/parts/dashboard/containers/dashboardWidgetContainer.contribution.ts index d0210f6e78..8a1930893b 100644 --- a/src/sql/parts/dashboard/tabs/dashboardWidgetTab.contribution.ts +++ b/src/sql/parts/dashboard/containers/dashboardWidgetContainer.contribution.ts @@ -7,9 +7,9 @@ import * as nls from 'vs/nls'; import { generateDashboardWidgetSchema } from 'sql/parts/dashboard/pages/dashboardPageContribution'; import { registerTabContent } from 'sql/platform/dashboard/common/dashboardRegistry'; -import { registerInnerTabContent } from 'sql/platform/dashboard/common/innerTabRegistry'; +import { registerContainerType } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; -export const WIDGETS_TAB = 'widgets-tab'; +export const WIDGETS_CONTAINER = 'widgets-container'; let widgetsSchema: IJSONSchema = { type: 'array', @@ -17,5 +17,5 @@ let widgetsSchema: IJSONSchema = { items: generateDashboardWidgetSchema(undefined, true) }; -registerTabContent(WIDGETS_TAB, widgetsSchema); -registerInnerTabContent(WIDGETS_TAB, widgetsSchema); +registerTabContent(WIDGETS_CONTAINER, widgetsSchema); +registerContainerType(WIDGETS_CONTAINER, widgetsSchema); diff --git a/src/sql/parts/dashboard/tabs/dashboardWidgetTab.css b/src/sql/parts/dashboard/containers/dashboardWidgetContainer.css similarity index 92% rename from src/sql/parts/dashboard/tabs/dashboardWidgetTab.css rename to src/sql/parts/dashboard/containers/dashboardWidgetContainer.css index e46ab8f01a..1cfc687275 100644 --- a/src/sql/parts/dashboard/tabs/dashboardWidgetTab.css +++ b/src/sql/parts/dashboard/containers/dashboardWidgetContainer.css @@ -3,7 +3,7 @@ * Licensed under the Source EULA. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -dashboard-widget-tab { +dashboard-widget-container { height: 100%; width: 100%; } \ No newline at end of file diff --git a/src/sql/parts/dashboard/common/dashboardWidgetWrapper.component.html b/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.html similarity index 100% rename from src/sql/parts/dashboard/common/dashboardWidgetWrapper.component.html rename to src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.html diff --git a/src/sql/parts/dashboard/common/dashboardWidgetWrapper.component.ts b/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.ts similarity index 95% rename from src/sql/parts/dashboard/common/dashboardWidgetWrapper.component.ts rename to src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.ts index aee2efd7ed..7a5aff66cd 100644 --- a/src/sql/parts/dashboard/common/dashboardWidgetWrapper.component.ts +++ b/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.component.ts @@ -10,11 +10,11 @@ import { ElementRef, OnInit, ChangeDetectorRef, OnDestroy, ReflectiveInjector, Injector, Type, ComponentRef } from '@angular/core'; -import { ComponentHostDirective } from './componentHost.directive'; -import { WidgetConfig, WIDGET_CONFIG, IDashboardWidget } from './dashboardWidget'; +import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; +import { WidgetConfig, WIDGET_CONFIG, IDashboardWidget } from 'sql/parts/dashboard/common/dashboardWidget'; import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry'; import { error } from 'sql/base/common/log'; -import { RefreshWidgetAction, ToggleMoreWidgetAction, DeleteWidgetAction } from './actions'; +import { RefreshWidgetAction, ToggleMoreWidgetAction, DeleteWidgetAction } from 'sql/parts/dashboard/common/actions'; /* Widgets */ import { PropertiesWidgetComponent } from 'sql/parts/dashboard/widgets/properties/propertiesWidget.component'; @@ -43,7 +43,7 @@ const componentMap: { [x: string]: Type } = { @Component({ selector: 'dashboard-widget-wrapper', - templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/common/dashboardWidgetWrapper.component.html')) + templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/contents/dashboardWidgetWrapper.component.html')) }) export class DashboardWidgetWrapper implements AfterContentInit, OnInit, OnDestroy { @Input() private _config: WidgetConfig; diff --git a/src/sql/parts/dashboard/common/dashboardWidgetWrapper.css b/src/sql/parts/dashboard/contents/dashboardWidgetWrapper.css similarity index 100% rename from src/sql/parts/dashboard/common/dashboardWidgetWrapper.css rename to src/sql/parts/dashboard/contents/dashboardWidgetWrapper.css diff --git a/src/sql/parts/dashboard/contents/widgetContent.component.ts b/src/sql/parts/dashboard/contents/widgetContent.component.ts index 2e5891b32d..34b18de51b 100644 --- a/src/sql/parts/dashboard/contents/widgetContent.component.ts +++ b/src/sql/parts/dashboard/contents/widgetContent.component.ts @@ -10,7 +10,7 @@ import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; -import { DashboardWidgetWrapper } from 'sql/parts/dashboard/common/dashboardWidgetWrapper.component'; +import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { subscriptionToDisposable } from 'sql/base/common/lifecycle'; import { Disposable, IDisposable } from 'vs/base/common/lifecycle'; diff --git a/src/sql/parts/dashboard/dashboard.module.ts b/src/sql/parts/dashboard/dashboard.module.ts index 388a1e342b..913571d918 100644 --- a/src/sql/parts/dashboard/dashboard.module.ts +++ b/src/sql/parts/dashboard/dashboard.module.ts @@ -26,16 +26,16 @@ import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost /* Base Components */ import { DashboardComponent, DASHBOARD_SELECTOR } from 'sql/parts/dashboard/dashboard.component'; -import { DashboardWidgetWrapper } from 'sql/parts/dashboard/common/dashboardWidgetWrapper.component'; -import { DashboardWidgetTab } from 'sql/parts/dashboard/tabs/dashboardWidgetTab.component'; -import { DashboardGridTab } from 'sql/parts/dashboard/tabs/dashboardGridTab.component'; -import { DashboardWebviewTab } from 'sql/parts/dashboard/tabs/dashboardWebviewTab.component'; -import { DashboardLeftNavBar } from 'sql/parts/dashboard/tabs/dashboardLeftNavBar.component'; +import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; +import { DashboardWidgetContainer } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.component'; +import { DashboardGridContainer } from 'sql/parts/dashboard/containers/dashboardGridContainer.component'; +import { DashboardWebviewContainer } from 'sql/parts/dashboard/containers/dashboardWebviewContainer.component'; +import { DashboardNavSection } from 'sql/parts/dashboard/containers/dashboardNavSection.component'; import { WidgetContent } from 'sql/parts/dashboard/contents/widgetContent.component'; import { WebviewContent } from 'sql/parts/dashboard/contents/webviewContent.component'; import { BreadcrumbComponent } from 'sql/base/browser/ui/breadcrumb/breadcrumb.component'; import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces'; -let baseComponents = [DashboardComponent, DashboardWidgetWrapper, DashboardWebviewTab, DashboardWidgetTab, DashboardGridTab, DashboardLeftNavBar, WidgetContent, WebviewContent, ComponentHostDirective, BreadcrumbComponent]; +let baseComponents = [DashboardComponent, DashboardWidgetWrapper, DashboardWebviewContainer, DashboardWidgetContainer, DashboardGridContainer, DashboardNavSection, WidgetContent, WebviewContent, ComponentHostDirective, BreadcrumbComponent]; /* Panel */ import { PanelModule } from 'sql/base/browser/ui/panel/panel.module'; diff --git a/src/sql/platform/dashboard/common/dashboardContainerRegistry.ts b/src/sql/platform/dashboard/common/dashboardContainerRegistry.ts new file mode 100644 index 0000000000..f073f82fd5 --- /dev/null +++ b/src/sql/platform/dashboard/common/dashboardContainerRegistry.ts @@ -0,0 +1,70 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import { Registry } from 'vs/platform/registry/common/platform'; +import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema'; +import { Extensions as ConfigurationExtension } from 'vs/platform/configuration/common/configurationRegistry'; +import { deepClone } from 'vs/base/common/objects'; + +import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; + +export const Extensions = { + dashboardContainerContributions: 'dashboard.contributions.container' +}; + +export interface IDashboardContainer { + id: string; + title: string; + hasIcon: boolean; + container?: object; +} + +export interface IDashboardContainerRegistry { + registerContainer(tab: IDashboardContainer): void; + registerContainerType(id: string, schema: IJSONSchema): void; + containers: Array; + containerTypeSchemaProperties: IJSONSchemaMap; +} + +class DashboardContainerRegistry implements IDashboardContainerRegistry { + private _containers = new Array(); + private _dashboardContainerTypeSchemaProperties: IJSONSchemaMap = {}; + + public registerContainer(tab: IDashboardContainer): void { + this._containers.push(tab); + } + + public get containers(): Array { + return this._containers; + } + + /** + * Register a dashboard widget + * @param id id of the widget + * @param schema config schema of the widget + */ + public registerContainerType(id: string, schema: IJSONSchema): void { + this._dashboardContainerTypeSchemaProperties[id] = schema; + } + + public get containerTypeSchemaProperties(): IJSONSchemaMap { + return deepClone(this._dashboardContainerTypeSchemaProperties); + } +} + +const dashboardContainerRegistry = new DashboardContainerRegistry(); +Registry.add(Extensions.dashboardContainerContributions, dashboardContainerRegistry); + +export function registerContainer(innerTab: IDashboardContainer): void { + dashboardContainerRegistry.registerContainer(innerTab); +} + +export function registerContainerType(id: string, schema: IJSONSchema): void { + dashboardContainerRegistry.registerContainerType(id, schema); +} + +export function generateContainerTypeSchemaProperties(): IJSONSchemaMap { + return dashboardContainerRegistry.containerTypeSchemaProperties; +} \ No newline at end of file diff --git a/src/sql/platform/dashboard/common/dashboardRegistry.ts b/src/sql/platform/dashboard/common/dashboardRegistry.ts index b4ca4c7ec7..39d0856926 100644 --- a/src/sql/platform/dashboard/common/dashboardRegistry.ts +++ b/src/sql/platform/dashboard/common/dashboardRegistry.ts @@ -24,7 +24,7 @@ export interface IDashboardTab { title: string; publisher: string; description?: string; - content?: object; + container?: object; provider?: string | string[]; edition?: number | number[]; alwaysShow?: boolean; diff --git a/src/sql/platform/dashboard/common/innerTabRegistry.ts b/src/sql/platform/dashboard/common/innerTabRegistry.ts deleted file mode 100644 index 2e409963ad..0000000000 --- a/src/sql/platform/dashboard/common/innerTabRegistry.ts +++ /dev/null @@ -1,70 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the Source EULA. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ - -import { Registry } from 'vs/platform/registry/common/platform'; -import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema'; -import { Extensions as ConfigurationExtension } from 'vs/platform/configuration/common/configurationRegistry'; -import { deepClone } from 'vs/base/common/objects'; - -import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; - -export const Extensions = { - InnerTabContributions: 'dashboard.contributions.innerTabs' -}; - -export interface IDashboardInnerTab { - id: string; - title: string; - hasIcon: boolean; - content?: object; -} - -export interface IDashboardInnerTabRegistry { - registerInnerTab(tab: IDashboardInnerTab): void; - registerInnerTabContent(id: string, schema: IJSONSchema): void; - innerTabs: Array; - innerTabContentSchemaProperties: IJSONSchemaMap; -} - -class DashboardInnerTabRegistry implements IDashboardInnerTabRegistry { - private _innertabs = new Array(); - private _dashboardInnerTabContentSchemaProperties: IJSONSchemaMap = {}; - - public registerInnerTab(tab: IDashboardInnerTab): void { - this._innertabs.push(tab); - } - - public get innerTabs(): Array { - return this._innertabs; - } - - /** - * Register a dashboard widget - * @param id id of the widget - * @param schema config schema of the widget - */ - public registerInnerTabContent(id: string, schema: IJSONSchema): void { - this._dashboardInnerTabContentSchemaProperties[id] = schema; - } - - public get innerTabContentSchemaProperties(): IJSONSchemaMap { - return deepClone(this._dashboardInnerTabContentSchemaProperties); - } -} - -const dashboardInnerTabRegistry = new DashboardInnerTabRegistry(); -Registry.add(Extensions.InnerTabContributions, dashboardInnerTabRegistry); - -export function registerInnerTab(innerTab: IDashboardInnerTab): void { - dashboardInnerTabRegistry.registerInnerTab(innerTab); -} - -export function registerInnerTabContent(id: string, schema: IJSONSchema): void { - dashboardInnerTabRegistry.registerInnerTabContent(id, schema); -} - -export function generateInnerTabContentSchemaProperties(): IJSONSchemaMap { - return dashboardInnerTabRegistry.innerTabContentSchemaProperties; -} \ No newline at end of file diff --git a/src/vs/workbench/workbench.main.ts b/src/vs/workbench/workbench.main.ts index 01720aebde..13f29ea3c6 100644 --- a/src/vs/workbench/workbench.main.ts +++ b/src/vs/workbench/workbench.main.ts @@ -159,12 +159,12 @@ import 'sql/parts/dashboard/widgets/explorer/explorerWidget.contribution'; import 'sql/parts/dashboard/widgets/tasks/tasksWidget.contribution'; import 'sql/parts/dashboard/widgets/webview/webviewWidget.contribution'; import 'sql/parts/dashboard/dashboardConfig.contribution'; -/* Tabs */ -import 'sql/parts/dashboard/tabs/dashboardLeftNavBar.contribution'; -import 'sql/parts/dashboard/tabs/dashboardWebviewTab.contribution'; -import 'sql/parts/dashboard/tabs/dashboardGridTab.contribution'; -import 'sql/parts/dashboard/tabs/dashboardWidgetTab.contribution'; -import 'sql/parts/dashboard/tabs/dashboardInnerTab.contribution'; +/* Containers */ +import 'sql/parts/dashboard/containers/dashboardNavSection.contribution'; +import 'sql/parts/dashboard/containers/dashboardWebviewContainer.contribution'; +import 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; +import 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; +import 'sql/parts/dashboard/containers/dashboardContainer.contribution'; import 'sql/parts/dashboard/common/dashboardTab.contribution'; /* Tasks */ import 'sql/workbench/common/actions.contribution';