Code Layering dashboard (#4883)

* move dashboard to workbench

* revert xlf file changes

* 💄

* 💄

* add back removed functions
This commit is contained in:
Anthony Dresser
2019-04-09 00:26:57 -07:00
committed by GitHub
parent 9e9164c4ee
commit 8bdcc3267a
145 changed files with 543 additions and 535 deletions

View File

@@ -101,7 +101,7 @@ const vscodeResources = [
'out-build/sql/parts/admin/**/*.html', 'out-build/sql/parts/admin/**/*.html',
'out-build/sql/parts/connection/connectionDialog/media/*.{gif,png,svg}', 'out-build/sql/parts/connection/connectionDialog/media/*.{gif,png,svg}',
'out-build/sql/parts/common/dblist/**/*.html', 'out-build/sql/parts/common/dblist/**/*.html',
'out-build/sql/parts/dashboard/**/*.html', 'out-build/sql/workbench/parts/dashboard/**/*.html',
'out-build/sql/parts/disasterRecovery/**/*.html', 'out-build/sql/parts/disasterRecovery/**/*.html',
'out-build/sql/parts/common/modal/media/**', 'out-build/sql/parts/common/modal/media/**',
'out-build/sql/parts/grid/load/lib/**', 'out-build/sql/parts/grid/load/lib/**',

View File

@@ -7,8 +7,8 @@ import { EditorDescriptor, IEditorRegistry, Extensions as EditorExtensions } fro
import { IConfigurationRegistry, Extensions as ConfigExtensions } from 'vs/platform/configuration/common/configurationRegistry'; import { IConfigurationRegistry, Extensions as ConfigExtensions } from 'vs/platform/configuration/common/configurationRegistry';
import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors'; import { SyncDescriptor } from 'vs/platform/instantiation/common/descriptors';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { DashboardEditor } from 'sql/parts/dashboard/dashboardEditor'; import { DashboardEditor } from 'sql/workbench/parts/dashboard/dashboardEditor';
import { DashboardInput } from 'sql/parts/dashboard/dashboardInput'; import { DashboardInput } from 'sql/workbench/parts/dashboard/dashboardInput';
import { AddServerGroupAction, AddServerAction } from 'sql/parts/objectExplorer/viewlet/connectionTreeAction'; import { AddServerGroupAction, AddServerAction } from 'sql/parts/objectExplorer/viewlet/connectionTreeAction';
import { ClearRecentConnectionsAction, GetCurrentConnectionStringAction } from 'sql/parts/connection/common/connectionActions'; import { ClearRecentConnectionsAction, GetCurrentConnectionStringAction } from 'sql/parts/connection/common/connectionActions';

View File

@@ -14,7 +14,7 @@ import { IDialogService, IConfirmation, IConfirmationResult } from 'vs/platform/
import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
import { QueryInput } from 'sql/parts/query/common/queryInput'; import { QueryInput } from 'sql/parts/query/common/queryInput';
import { EditDataInput } from 'sql/parts/editData/common/editDataInput'; import { EditDataInput } from 'sql/parts/editData/common/editDataInput';
import { DashboardInput } from 'sql/parts/dashboard/dashboardInput'; import { DashboardInput } from 'sql/workbench/parts/dashboard/dashboardInput';
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput'; import { IQuickInputService } from 'vs/platform/quickinput/common/quickInput';
import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/common/objectExplorerService';

View File

@@ -1,25 +0,0 @@
<!--
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-->
<div >
<table class="grid-table">
<tr *ngFor="let row of rows" class="grid-table-row">
<ng-container *ngFor="let col of cols">
<ng-container *ngIf="getContent(row,col) !== undefined">
<td class="table-cell" [colSpan]=getColspan(row,col) [rowSpan]=getRowspan(row,col) [width]="getWidgetWidth(row,col)" [height]="getWidgetHeight(row,col)">
<dashboard-widget-wrapper *ngIf="isWidget(row,col)" [_config]="getWidgetContent(row,col)" style="position:absolute;" [style.width]="getWidgetWidth(row,col)" [style.height]="getWidgetHeight(row,col)">
</dashboard-widget-wrapper>
<webview-content *ngIf="isWebview(row,col)" [webviewId]="getWebviewId(row,col)">
</webview-content>
</td>
</ng-container>
</ng-container>
</tr>
</table>
</div>

View File

@@ -6,8 +6,8 @@
'use strict'; 'use strict';
import { append, $ } from 'vs/base/browser/dom'; import { append, $ } from 'vs/base/browser/dom';
import { IInsightTypeContrib } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightTypeContrib } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { IDashboardTabContrib } from 'sql/parts/dashboard/common/dashboardTab.contribution'; import { IDashboardTabContrib } from 'sql/workbench/parts/dashboard/common/dashboardTab.contribution';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { IExtensionManifest } from 'vs/platform/extensions/common/extensions'; import { IExtensionManifest } from 'vs/platform/extensions/common/extensions';

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!../common/media/jobs'; import 'vs/css!../common/media/jobs';
import 'sql/parts/dashboard/common/dashboardPanelStyles'; import 'sql/workbench/parts/dashboard/common/dashboardPanelStyles';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import { Component, Inject, forwardRef, ChangeDetectorRef, ViewChild, Injectable } from '@angular/core'; import { Component, Inject, forwardRef, ChangeDetectorRef, ViewChild, Injectable } from '@angular/core';

View File

@@ -15,7 +15,7 @@ import { ITheme, ICssStyleCollector } from 'vs/platform/theme/common/themeServic
import * as colors from 'vs/platform/theme/common/colorRegistry'; import * as colors from 'vs/platform/theme/common/colorRegistry';
import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { ComponentWithIconBase } from 'sql/parts/modelComponents/componentWithIconBase'; import { ComponentWithIconBase } from 'sql/parts/modelComponents/componentWithIconBase';
import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces'; import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces';
import { StatusIndicator, CardProperties, ActionDescriptor } from 'sql/workbench/api/common/sqlExtHostTypes'; import { StatusIndicator, CardProperties, ActionDescriptor } from 'sql/workbench/api/common/sqlExtHostTypes';

View File

@@ -12,7 +12,7 @@ import {
import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces'; import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces';
import * as azdata from 'azdata'; import * as azdata from 'azdata';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { ContainerBase } from 'sql/parts/modelComponents/componentBase'; import { ContainerBase } from 'sql/parts/modelComponents/componentBase';
import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component'; import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component';

View File

@@ -12,7 +12,7 @@ import {
import { IComponent, IComponentDescriptor, IModelStore } from 'sql/parts/modelComponents/interfaces'; import { IComponent, IComponentDescriptor, IModelStore } from 'sql/parts/modelComponents/interfaces';
import { FlexLayout, FlexItemLayout } from 'azdata'; import { FlexLayout, FlexItemLayout } from 'azdata';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { ContainerBase } from 'sql/parts/modelComponents/componentBase'; import { ContainerBase } from 'sql/parts/modelComponents/componentBase';
import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component'; import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component';

View File

@@ -13,7 +13,7 @@ import {
import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces'; import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces';
import { FormLayout, FormItemLayout } from 'azdata'; import { FormLayout, FormItemLayout } from 'azdata';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { ContainerBase } from 'sql/parts/modelComponents/componentBase'; import { ContainerBase } from 'sql/parts/modelComponents/componentBase';
import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component'; import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';

View File

@@ -12,7 +12,7 @@ import {
import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces'; import { IComponent, IComponentDescriptor, IModelStore, ComponentEventType } from 'sql/parts/modelComponents/interfaces';
import { GroupLayout, GroupItemLayout } from 'azdata'; import { GroupLayout, GroupItemLayout } from 'azdata';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { ContainerBase } from 'sql/parts/modelComponents/componentBase'; import { ContainerBase } from 'sql/parts/modelComponents/componentBase';
import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component'; import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';

View File

@@ -9,7 +9,7 @@ import {
ElementRef, OnInit, ChangeDetectorRef, ReflectiveInjector, Injector, ComponentRef ElementRef, OnInit, ChangeDetectorRef, ReflectiveInjector, Injector, ComponentRef
} from '@angular/core'; } from '@angular/core';
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; import { ComponentHostDirective } from 'sql/workbench/parts/dashboard/common/componentHost.directive';
import { error } from 'sql/base/common/log'; import { error } from 'sql/base/common/log';
import { AngularDisposable } from 'sql/base/node/lifecycle'; import { AngularDisposable } from 'sql/base/node/lifecycle';
import { IComponent, IComponentConfig, IComponentDescriptor, IModelStore, COMPONENT_CONFIG } from './interfaces'; import { IComponent, IComponentConfig, IComponentDescriptor, IModelStore, COMPONENT_CONFIG } from './interfaces';

View File

@@ -15,7 +15,7 @@ import * as DOM from 'vs/base/browser/dom';
import { ICellModel } from 'sql/parts/notebook/models/modelInterfaces'; import { ICellModel } from 'sql/parts/notebook/models/modelInterfaces';
import { CellContext, CellActionBase } from 'sql/parts/notebook/cellViews/codeActions'; import { CellContext, CellActionBase } from 'sql/parts/notebook/cellViews/codeActions';
import { NotebookModel } from 'sql/parts/notebook/models/notebookModel'; import { NotebookModel } from 'sql/parts/notebook/models/notebookModel';
import { ToggleMoreWidgetAction } from 'sql/parts/dashboard/common/actions'; import { ToggleMoreWidgetAction } from 'sql/workbench/parts/dashboard/common/actions';
import { CellTypes, CellType } from 'sql/parts/notebook/models/contracts'; import { CellTypes, CellType } from 'sql/parts/notebook/models/contracts';
import { CellModel } from 'sql/parts/notebook/models/cell'; import { CellModel } from 'sql/parts/notebook/models/cell';

View File

@@ -11,7 +11,7 @@ import { CommonModule, APP_BASE_HREF } from '@angular/common';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; import { ComponentHostDirective } from 'sql/workbench/parts/dashboard/common/componentHost.directive';
import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService'; import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox.component'; import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox.component';

View File

@@ -9,7 +9,7 @@ import { IInsightOptions, IInsight } from './insights/interfaces';
import { Graph } from './insights/graphInsight'; import { Graph } from './insights/graphInsight';
import { QueryEditor } from 'sql/parts/query/editor/queryEditor'; import { QueryEditor } from 'sql/parts/query/editor/queryEditor';
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService'; import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
import { IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightsConfig } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { resolveCurrentDirectory, getRootPath } from 'sql/platform/node/pathUtilities'; import { resolveCurrentDirectory, getRootPath } from 'sql/platform/node/pathUtilities';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';

View File

@@ -10,7 +10,7 @@ import { Registry } from 'vs/platform/registry/common/platform';
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry'; import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
import { InsightType, IInsightOptions } from './insights/interfaces'; import { InsightType, IInsightOptions } from './insights/interfaces';
import { DataDirection, ChartType, LegendPosition, DataType } from 'sql/parts/dashboard/widgets/insights/views/charts/interfaces'; import { DataDirection, ChartType, LegendPosition, DataType } from 'sql/workbench/parts/dashboard/widgets/insights/views/charts/interfaces';
const insightRegistry = Registry.as<IInsightRegistry>(Extensions.InsightContribution); const insightRegistry = Registry.as<IInsightRegistry>(Extensions.InsightContribution);

View File

@@ -10,14 +10,14 @@ import 'vs/css!./chartView';
import { IPanelView } from 'sql/base/browser/ui/panel/panel'; import { IPanelView } from 'sql/base/browser/ui/panel/panel';
import { Insight } from './insights/insight'; import { Insight } from './insights/insight';
import QueryRunner from 'sql/platform/query/common/queryRunner'; import QueryRunner from 'sql/platform/query/common/queryRunner';
import { IInsightData } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightData } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { ChartOptions, IChartOption, ControlType } from './chartOptions'; import { ChartOptions, IChartOption, ControlType } from './chartOptions';
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry'; import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox'; import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
import { IInsightOptions } from './insights/interfaces'; import { IInsightOptions } from './insights/interfaces';
import { CopyAction, SaveImageAction, CreateInsightAction, IChartActionContext } from './actions'; import { CopyAction, SaveImageAction, CreateInsightAction, IChartActionContext } from './actions';
import { Taskbar } from 'sql/base/browser/ui/taskbar/taskbar'; import { Taskbar } from 'sql/base/browser/ui/taskbar/taskbar';
import { ChartType } from 'sql/parts/dashboard/widgets/insights/views/charts/interfaces'; import { ChartType } from 'sql/workbench/parts/dashboard/widgets/insights/views/charts/interfaces';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import * as DOM from 'vs/base/browser/dom'; import * as DOM from 'vs/base/browser/dom';
import { SelectBox } from 'vs/base/browser/ui/selectBox/selectBox'; import { SelectBox } from 'vs/base/browser/ui/selectBox/selectBox';

View File

@@ -6,7 +6,7 @@
import 'vs/css!./countInsight'; import 'vs/css!./countInsight';
import { IInsight, InsightType } from './interfaces'; import { IInsight, InsightType } from './interfaces';
import { IInsightData } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightData } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { $, clearNode } from 'vs/base/browser/dom'; import { $, clearNode } from 'vs/base/browser/dom';

View File

@@ -13,9 +13,9 @@ import * as colors from 'vs/platform/theme/common/colorRegistry';
import { editorLineNumbers } from 'vs/editor/common/view/editorColorRegistry'; import { editorLineNumbers } from 'vs/editor/common/view/editorColorRegistry';
import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService'; import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';
import { IInsightData } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightData } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { IInsightOptions, IInsight } from './interfaces'; import { IInsightOptions, IInsight } from './interfaces';
import { ChartType, DataDirection, LegendPosition, DataType, IPointDataSet, customMixin } from 'sql/parts/dashboard/widgets/insights/views/charts/interfaces'; import { ChartType, DataDirection, LegendPosition, DataType, IPointDataSet, customMixin } from 'sql/workbench/parts/dashboard/widgets/insights/views/charts/interfaces';
const noneLineGraphs = [ChartType.Doughnut, ChartType.Pie]; const noneLineGraphs = [ChartType.Doughnut, ChartType.Pie];

View File

@@ -4,7 +4,7 @@
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IInsight, IInsightOptions, InsightType } from './interfaces'; import { IInsight, IInsightOptions, InsightType } from './interfaces';
import { IInsightData } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightData } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { $ } from 'vs/base/browser/dom'; import { $ } from 'vs/base/browser/dom';
import { mixin } from 'vs/base/common/objects'; import { mixin } from 'vs/base/common/objects';

View File

@@ -6,8 +6,8 @@
'use strict'; 'use strict';
import { Graph } from './graphInsight'; import { Graph } from './graphInsight';
import { IInsightData } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightData } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { DataDirection, ChartType } from 'sql/parts/dashboard/widgets/insights/views/charts/interfaces'; import { DataDirection, ChartType } from 'sql/workbench/parts/dashboard/widgets/insights/views/charts/interfaces';
import { ImageInsight } from './imageInsight'; import { ImageInsight } from './imageInsight';
import { TableInsight } from './tableInsight'; import { TableInsight } from './tableInsight';
import { IInsightOptions, IInsight, InsightType, IInsightCtor } from './interfaces'; import { IInsightOptions, IInsight, InsightType, IInsightCtor } from './interfaces';

View File

@@ -6,8 +6,8 @@
'use strict'; 'use strict';
import { Dimension } from 'vs/base/browser/dom'; import { Dimension } from 'vs/base/browser/dom';
import { IInsightData } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightData } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { DataDirection, ChartType, LegendPosition, DataType } from 'sql/parts/dashboard/widgets/insights/views/charts/interfaces'; import { DataDirection, ChartType, LegendPosition, DataType } from 'sql/workbench/parts/dashboard/widgets/insights/views/charts/interfaces';
export interface IInsightOptions { export interface IInsightOptions {
type: InsightType | ChartType; type: InsightType | ChartType;

View File

@@ -6,7 +6,7 @@
'use strict'; 'use strict';
import { IInsight, InsightType } from './interfaces'; import { IInsight, InsightType } from './interfaces';
import { IInsightData } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightData } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView'; import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
import { Table } from 'sql/base/browser/ui/table/table'; import { Table } from 'sql/base/browser/ui/table/table';
import { attachTableStyler } from 'sql/platform/theme/common/styler'; import { attachTableStyler } from 'sql/platform/theme/common/styler';

View File

@@ -15,7 +15,7 @@ import { WizardNavigation } from 'sql/platform/dialog/wizardNavigation.component
import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry'; import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component'; import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component';
import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component'; import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component';
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; import { ComponentHostDirective } from 'sql/workbench/parts/dashboard/common/componentHost.directive';
import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService'; import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox.component'; import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox.component';

View File

@@ -20,7 +20,7 @@ import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilit
import { ICredentialsService } from 'sql/platform/credentials/common/credentialsService'; import { ICredentialsService } from 'sql/platform/credentials/common/credentialsService';
import * as ConnectionContracts from 'sql/parts/connection/common/connection'; import * as ConnectionContracts from 'sql/parts/connection/common/connection';
import { ConnectionStatusManager } from 'sql/platform/connection/common/connectionStatusManager'; import { ConnectionStatusManager } from 'sql/platform/connection/common/connectionStatusManager';
import { DashboardInput } from 'sql/parts/dashboard/dashboardInput'; import { DashboardInput } from 'sql/workbench/parts/dashboard/dashboardInput';
import { ConnectionGlobalStatus } from 'sql/parts/connection/common/connectionGlobalStatus'; import { ConnectionGlobalStatus } from 'sql/parts/connection/common/connectionGlobalStatus';
import { ConnectionStatusbarItem } from 'sql/parts/connection/common/connectionStatus'; import { ConnectionStatusbarItem } from 'sql/parts/connection/common/connectionStatus';
import * as TelemetryKeys from 'sql/common/telemetryKeys'; import * as TelemetryKeys from 'sql/common/telemetryKeys';

View File

@@ -8,7 +8,7 @@ import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema';
import { Extensions as ConfigurationExtension } from 'vs/platform/configuration/common/configurationRegistry'; import { Extensions as ConfigurationExtension } from 'vs/platform/configuration/common/configurationRegistry';
import { deepClone } from 'vs/base/common/objects'; import { deepClone } from 'vs/base/common/objects';
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
export const Extensions = { export const Extensions = {
dashboardContainerContributions: 'dashboard.contributions.container' dashboardContainerContributions: 'dashboard.contributions.container'

View File

@@ -9,10 +9,10 @@ import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import { IExtensionPointUser, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { IExtensionPointUser, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { ProviderProperties } from 'sql/parts/dashboard/widgets/properties/propertiesWidget.component'; import { ProviderProperties } from 'sql/workbench/parts/dashboard/widgets/properties/propertiesWidget.component';
import { DATABASE_DASHBOARD_TABS } from 'sql/parts/dashboard/pages/databaseDashboardPage.contribution'; import { DATABASE_DASHBOARD_TABS } from 'sql/workbench/parts/dashboard/pages/databaseDashboardPage.contribution';
import { SERVER_DASHBOARD_TABS, SERVER_DASHBOARD_PROPERTIES } from 'sql/parts/dashboard/pages/serverDashboardPage.contribution'; import { SERVER_DASHBOARD_TABS, SERVER_DASHBOARD_PROPERTIES } from 'sql/workbench/parts/dashboard/pages/serverDashboardPage.contribution';
import { DASHBOARD_CONFIG_ID, DASHBOARD_TABS_KEY_PROPERTY } from 'sql/parts/dashboard/pages/dashboardPageContribution'; import { DASHBOARD_CONFIG_ID, DASHBOARD_TABS_KEY_PROPERTY } from 'sql/workbench/parts/dashboard/pages/dashboardPageContribution';
export const Extensions = { export const Extensions = {
DashboardContributions: 'dashboard.contributions' DashboardContributions: 'dashboard.contributions'

View File

@@ -3,7 +3,7 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Type } from '@angular/core'; import { Type } from '@angular/core';
import { IInsightsConfig, IInsightsView } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightsConfig, IInsightsView } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import * as platform from 'vs/platform/registry/common/platform'; import * as platform from 'vs/platform/registry/common/platform';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';

View File

@@ -2,7 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightsConfig } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import * as platform from 'vs/platform/registry/common/platform'; import * as platform from 'vs/platform/registry/common/platform';
import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema'; import { IJSONSchema, IJSONSchemaMap } from 'vs/base/common/jsonSchema';

View File

@@ -17,7 +17,7 @@ import { WizardNavigation } from 'sql/platform/dialog/wizardNavigation.component
import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry'; import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component'; import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component';
import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component'; import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component';
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; import { ComponentHostDirective } from 'sql/workbench/parts/dashboard/common/componentHost.directive';
import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService'; import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox.component'; import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox.component';

View File

@@ -7,7 +7,7 @@ import { IConnectionManagementService } from 'sql/platform/connection/common/con
import * as TaskUtilities from 'sql/workbench/common/taskUtilities'; import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService'; import { IQueryEditorService } from 'sql/workbench/services/queryEditor/common/queryEditorService';
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces'; import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
import { IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightsConfig } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { IScriptingService } from 'sql/platform/scripting/common/scriptingService'; import { IScriptingService } from 'sql/platform/scripting/common/scriptingService';
import { IRestoreDialogController } from 'sql/platform/restore/common/restoreService'; import { IRestoreDialogController } from 'sql/platform/restore/common/restoreService';
import { IAngularEventingService, AngularEventType } from 'sql/platform/angularEventing/common/angularEventingService'; import { IAngularEventingService, AngularEventType } from 'sql/platform/angularEventing/common/angularEventingService';

View File

@@ -17,12 +17,12 @@ import { IScriptingService } from 'sql/platform/scripting/common/scriptingServic
import { EditDataInput } from 'sql/parts/editData/common/editDataInput'; import { EditDataInput } from 'sql/parts/editData/common/editDataInput';
import { IAdminService } from 'sql/workbench/services/admin/common/adminService'; import { IAdminService } from 'sql/workbench/services/admin/common/adminService';
import { IRestoreDialogController } from 'sql/platform/restore/common/restoreService'; import { IRestoreDialogController } from 'sql/platform/restore/common/restoreService';
import { IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces'; import { IInsightsConfig } from 'sql/workbench/parts/dashboard/widgets/insights/interfaces';
import { IInsightsDialogService } from 'sql/workbench/services/insights/common/insightsDialogService'; import { IInsightsDialogService } from 'sql/workbench/services/insights/common/insightsDialogService';
import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo'; import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo';
import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/common/objectExplorerService'; import { IObjectExplorerService } from 'sql/workbench/services/objectExplorer/common/objectExplorerService';
import { QueryInput } from 'sql/parts/query/common/queryInput'; import { QueryInput } from 'sql/parts/query/common/queryInput';
import { DashboardInput } from 'sql/parts/dashboard/dashboardInput'; import { DashboardInput } from 'sql/workbench/parts/dashboard/dashboardInput';
import { ProfilerInput } from 'sql/parts/profiler/editor/profilerInput'; import { ProfilerInput } from 'sql/parts/profiler/editor/profilerInput';
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService'; import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
import { IBackupUiService } from 'sql/workbench/services/backup/common/backupUiService'; import { IBackupUiService } from 'sql/workbench/services/backup/common/backupUiService';

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Action, IAction } from 'vs/base/common/actions'; import { Action, IAction } from 'vs/base/common/actions';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView'; import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
@@ -182,16 +183,16 @@ export class AddFeatureTabAction extends Action {
private handleDashboardEvent(event: IAngularEvent): void { private handleDashboardEvent(event: IAngularEvent): void {
switch (event.event) { switch (event.event) {
case AngularEventType.NEW_TABS: case AngularEventType.NEW_TABS:
let openedTabs = <IDashboardTab[]>event.payload.dashboardTabs; const openedTabs = <IDashboardTab[]>event.payload.dashboardTabs;
openedTabs.forEach(tab => { openedTabs.forEach(tab => {
let existedTab = this._openedTabs.find(i => i === tab); const existedTab = this._openedTabs.find(i => i === tab);
if (!existedTab) { if (!existedTab) {
this._openedTabs.push(tab); this._openedTabs.push(tab);
} }
}); });
break; break;
case AngularEventType.CLOSE_TAB: case AngularEventType.CLOSE_TAB:
let index = this._openedTabs.findIndex(i => i.id === event.payload.id); const index = this._openedTabs.findIndex(i => i.id === event.payload.id);
this._openedTabs.splice(index, 1); this._openedTabs.splice(index, 1);
break; break;
} }

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import * as types from 'vs/base/common/types'; import * as types from 'vs/base/common/types';
import { generateUuid } from 'vs/base/common/uuid'; import { generateUuid } from 'vs/base/common/uuid';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
@@ -9,16 +10,16 @@ import * as nls from 'vs/nls';
import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
import { error } from 'sql/base/common/log'; import { error } from 'sql/base/common/log';
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry'; import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo'; import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; import { WIDGETS_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; import { GRID_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardGridContainer.contribution';
import { WEBVIEW_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWebviewContainer.contribution'; import { WEBVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardWebviewContainer.contribution';
import { MODELVIEW_CONTAINER } from 'sql/parts/dashboard/containers/dashboardModelViewContainer.contribution'; import { MODELVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardModelViewContainer.contribution';
import { CONTROLHOST_CONTAINER } from 'sql/parts/dashboard/containers/dashboardControlHostContainer.contribution'; import { CONTROLHOST_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardControlHostContainer.contribution';
import { NAV_SECTION } from 'sql/parts/dashboard/containers/dashboardNavSection.contribution'; import { NAV_SECTION } from 'sql/workbench/parts/dashboard/containers/dashboardNavSection.contribution';
import { IDashboardContainerRegistry, Extensions as DashboardContainerExtensions } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; import { IDashboardContainerRegistry, Extensions as DashboardContainerExtensions } from 'sql/platform/dashboard/common/dashboardContainerRegistry';
import { SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service'; import { SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
import * as Constants from 'sql/platform/connection/common/constants'; import * as Constants from 'sql/platform/connection/common/constants';
@@ -33,31 +34,6 @@ const containerTypes = [
NAV_SECTION NAV_SECTION
]; ];
/**
* @returns whether the provided parameter is a JavaScript Array and each element in the array is a number.
*/
function isNumberArray(value: any): value is number[] {
return types.isArray(value) && (<any[]>value).every(elem => types.isNumber(elem));
}
/**
* Does a compare against the val passed in and the compare string
* @param val string or array of strings to compare the compare value to; if array, it will compare each val in the array
* @param compare value to compare to
*/
function stringOrStringArrayCompare(val: string | Array<string>, compare: string): boolean {
if (types.isUndefinedOrNull(val)) {
return true;
} else if (types.isString(val)) {
return val === compare;
} else if (types.isStringArray(val)) {
return val.some(item => item === compare);
} else {
return false;
}
}
/** /**
* Validates configs to make sure nothing will error out and returns the modified widgets * Validates configs to make sure nothing will error out and returns the modified widgets
* @param config Array of widgets to validate * @param config Array of widgets to validate
@@ -88,11 +64,11 @@ export function validateGridConfig(config: WidgetConfig[], originalConfig: Widge
} }
export function initExtensionConfigs(configurations: WidgetConfig[]): Array<WidgetConfig> { export function initExtensionConfigs(configurations: WidgetConfig[]): Array<WidgetConfig> {
let widgetRegistry = <IInsightRegistry>Registry.as(Extensions.InsightContribution); const widgetRegistry = <IInsightRegistry>Registry.as(Extensions.InsightContribution);
return configurations.map((config) => { return configurations.map((config) => {
if (config.widget && Object.keys(config.widget).length === 1) { if (config.widget && Object.keys(config.widget).length === 1) {
let key = Object.keys(config.widget)[0]; const key = Object.keys(config.widget)[0];
let insightConfig = widgetRegistry.getRegisteredExtensionInsights(key); const insightConfig = widgetRegistry.getRegisteredExtensionInsights(key);
if (insightConfig !== undefined) { if (insightConfig !== undefined) {
// Setup the default properties for this extension if needed // Setup the default properties for this extension if needed
if (!config.when && insightConfig.when) { if (!config.when && insightConfig.when) {
@@ -121,7 +97,7 @@ export function initExtensionConfigs(configurations: WidgetConfig[]): Array<Widg
* @param widgets Array of widgets to add provider onto * @param widgets Array of widgets to add provider onto
*/ */
export function addProvider<T extends { connectionManagementService: SingleConnectionManagementService }>(config: WidgetConfig[], collection: T): Array<WidgetConfig> { export function addProvider<T extends { connectionManagementService: SingleConnectionManagementService }>(config: WidgetConfig[], collection: T): Array<WidgetConfig> {
let provider = collection.connectionManagementService.connectionInfo.providerId; const provider = collection.connectionManagementService.connectionInfo.providerId;
return config.map((item) => { return config.map((item) => {
if (item.provider === undefined) { if (item.provider === undefined) {
item.provider = provider; item.provider = provider;
@@ -135,9 +111,9 @@ export function addProvider<T extends { connectionManagementService: SingleConne
* @param widgets Array of widgets to add edition onto * @param widgets Array of widgets to add edition onto
*/ */
export function addEdition<T extends { connectionManagementService: SingleConnectionManagementService }>(config: WidgetConfig[], collection: DashboardServiceInterface): Array<WidgetConfig> { export function addEdition<T extends { connectionManagementService: SingleConnectionManagementService }>(config: WidgetConfig[], collection: DashboardServiceInterface): Array<WidgetConfig> {
let connectionInfo: ConnectionManagementInfo = collection.connectionManagementService.connectionInfo; const connectionInfo: ConnectionManagementInfo = collection.connectionManagementService.connectionInfo;
if (connectionInfo.serverInfo) { if (connectionInfo.serverInfo) {
let edition = connectionInfo.serverInfo.engineEditionId; const edition = connectionInfo.serverInfo.engineEditionId;
return config.map((item) => { return config.map((item) => {
if (item.edition === undefined) { if (item.edition === undefined) {
item.edition = edition; item.edition = edition;
@@ -184,10 +160,10 @@ export function filterConfigs<T extends { provider?: string | string[], when?: s
*/ */
function hasCompatibleProvider(provider: string | string[], contextKeyService: IContextKeyService): boolean { function hasCompatibleProvider(provider: string | string[], contextKeyService: IContextKeyService): boolean {
let isCompatible = true; let isCompatible = true;
let connectionProvider = contextKeyService.getContextKeyValue<string>(Constants.connectionProviderContextKey); const connectionProvider = contextKeyService.getContextKeyValue<string>(Constants.connectionProviderContextKey);
if (connectionProvider) { if (connectionProvider) {
let providers = (provider instanceof Array) ? provider : [provider]; const providers = (provider instanceof Array) ? provider : [provider];
let matchingProvider = providers.find((p) => p === connectionProvider || p === Constants.anyProviderName); const matchingProvider = providers.find((p) => p === connectionProvider || p === Constants.anyProviderName);
isCompatible = (matchingProvider !== undefined); isCompatible = (matchingProvider !== undefined);
} // Else there's no connection context so skip the check } // Else there's no connection context so skip the check
return isCompatible; return isCompatible;
@@ -198,17 +174,17 @@ function hasCompatibleProvider(provider: string | string[], contextKeyService: I
* @param container dashboard container * @param container dashboard container
*/ */
export function getDashboardContainer(container: object): { result: boolean, message: string, container: object } { export function getDashboardContainer(container: object): { result: boolean, message: string, container: object } {
let key = Object.keys(container)[0]; const key = Object.keys(container)[0];
let containerTypeFound = containerTypes.find(c => (c === key)); const containerTypeFound = containerTypes.find(c => (c === key));
if (!containerTypeFound) { if (!containerTypeFound) {
let dashboardContainer = dashboardcontainerRegistry.getRegisteredContainer(key); const dashboardContainer = dashboardcontainerRegistry.getRegisteredContainer(key);
if (!dashboardContainer) { if (!dashboardContainer) {
let errorMessage = nls.localize('unknownDashboardContainerError', '{0} is an unknown container.', key); const errorMessage = nls.localize('unknownDashboardContainerError', '{0} is an unknown container.', key);
error(errorMessage); error(errorMessage);
return { result: false, message: errorMessage, container: null }; return { result: false, message: errorMessage, container: undefined };
} else { } else {
container = dashboardContainer.container; container = dashboardContainer.container;
} }
} }
return { result: true, message: null, container: container }; return { result: true, message: undefined, container: container };
} }

View File

@@ -4,10 +4,13 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
--> -->
<panel class="dashboard-panel" (onTabChange)="handleTabChange($event)" (onTabClose)="handleTabClose($event)" [actions]="panelActions"> <panel class="dashboard-panel" (onTabChange)="handleTabChange($event)" (onTabClose)="handleTabClose($event)"
<tab [visibilityType]="'visibility'" *ngFor="let tab of tabs" [title]="tab.title" class="fullsize" [identifier]="tab.id" [canClose]="tab.canClose" [actions]="tab.actions"> [actions]="panelActions">
<tab [visibilityType]="'visibility'" *ngFor="let tab of tabs" [title]="tab.title" class="fullsize"
[identifier]="tab.id" [canClose]="tab.canClose" [actions]="tab.actions">
<ng-template> <ng-template>
<dashboard-home-container *ngIf="tab.id === 'homeTab'; else not_home" [properties]="propertiesWidget" [tab]="tab"> <dashboard-home-container *ngIf="tab.id === 'homeTab'; else not_home" [properties]="propertiesWidget"
[tab]="tab">
</dashboard-home-container> </dashboard-home-container>
<ng-template #not_home> <ng-template #not_home>
<dashboard-webview-container *ngIf="getContentType(tab) === 'webview-container'" [tab]="tab"> <dashboard-webview-container *ngIf="getContentType(tab) === 'webview-container'" [tab]="tab">

View File

@@ -3,24 +3,24 @@
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!sql/parts/dashboard/common/dashboardPage'; import 'vs/css!sql/workbench/parts/dashboard/common/dashboardPage';
import 'sql/parts/dashboard/common/dashboardPanelStyles'; import 'sql/workbench/parts/dashboard/common/dashboardPanelStyles';
import { Component, Inject, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, ChangeDetectorRef } from '@angular/core'; import { Component, Inject, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, ChangeDetectorRef } from '@angular/core';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { CommonServiceInterface, SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface, SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
import { WidgetConfig, TabConfig, TabSettingConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig, TabConfig, TabSettingConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { IPropertiesConfig } from 'sql/parts/dashboard/pages/serverDashboardPage.contribution'; import { IPropertiesConfig } from 'sql/workbench/parts/dashboard/pages/serverDashboardPage.contribution';
import { PanelComponent } from 'sql/base/browser/ui/panel/panel.component'; import { PanelComponent } from 'sql/base/browser/ui/panel/panel.component';
import { IDashboardRegistry, Extensions as DashboardExtensions, IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry'; import { IDashboardRegistry, Extensions as DashboardExtensions, IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry';
import { PinUnpinTabAction, AddFeatureTabAction } from './actions'; import { PinUnpinTabAction, AddFeatureTabAction } from './actions';
import { TabComponent, TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabComponent, TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { AngularEventType, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService'; import { AngularEventType, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
import { DashboardTab, IConfigModifierCollection } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab, IConfigModifierCollection } from 'sql/workbench/parts/dashboard/common/interfaces';
import * as dashboardHelper from 'sql/parts/dashboard/common/dashboardHelper'; import * as dashboardHelper from 'sql/workbench/parts/dashboard/common/dashboardHelper';
import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; import { WIDGETS_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; import { GRID_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardGridContainer.contribution';
import { AngularDisposable } from 'sql/base/node/lifecycle'; import { AngularDisposable } from 'sql/base/node/lifecycle';
import * as Constants from 'sql/platform/connection/common/constants'; import * as Constants from 'sql/platform/connection/common/constants';
@@ -41,7 +41,7 @@ const dashboardRegistry = Registry.as<IDashboardRegistry>(DashboardExtensions.Da
@Component({ @Component({
selector: 'dashboard-page', selector: 'dashboard-page',
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/common/dashboardPage.component.html')) templateUrl: decodeURI(require.toUrl('sql/workbench/parts/dashboard/common/dashboardPage.component.html'))
}) })
export abstract class DashboardPage extends AngularDisposable implements IConfigModifierCollection { export abstract class DashboardPage extends AngularDisposable implements IConfigModifierCollection {
@@ -140,7 +140,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
allTabs = this.setAndRemoveHomeTab(allTabs, homeWidgets); allTabs = this.setAndRemoveHomeTab(allTabs, homeWidgets);
// If preview features are disabled only show the home tab // If preview features are disabled only show the home tab
let extensionTabsEnabled = this.configurationService.getValue('workbench')['enablePreviewFeatures']; const extensionTabsEnabled = this.configurationService.getValue('workbench')['enablePreviewFeatures'];
if (!extensionTabsEnabled) { if (!extensionTabsEnabled) {
allTabs = []; allTabs = [];
} }
@@ -148,18 +148,18 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
// Load tab setting configs // Load tab setting configs
this._tabSettingConfigs = this.dashboardService.getSettings<Array<TabSettingConfig>>([this.context, 'tabs'].join('.')); this._tabSettingConfigs = this.dashboardService.getSettings<Array<TabSettingConfig>>([this.context, 'tabs'].join('.'));
let pinnedDashboardTabs: IDashboardTab[] = []; const pinnedDashboardTabs: IDashboardTab[] = [];
let alwaysShowTabs = allTabs.filter(tab => tab.alwaysShow); const alwaysShowTabs = allTabs.filter(tab => tab.alwaysShow);
this._tabSettingConfigs.forEach(config => { this._tabSettingConfigs.forEach(config => {
if (config.tabId && types.isBoolean(config.isPinned)) { if (config.tabId && types.isBoolean(config.isPinned)) {
let tab = allTabs.find(i => i.id === config.tabId); const tab = allTabs.find(i => i.id === config.tabId);
if (tab) { if (tab) {
if (config.isPinned) { if (config.isPinned) {
pinnedDashboardTabs.push(tab); pinnedDashboardTabs.push(tab);
} else { } else {
// overwrite always show if specify in user settings // overwrite always show if specify in user settings
let index = alwaysShowTabs.findIndex(i => i.id === tab.id); const index = alwaysShowTabs.findIndex(i => i.id === tab.id);
alwaysShowTabs.splice(index, 1); alwaysShowTabs.splice(index, 1);
} }
} }
@@ -170,9 +170,9 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
this.loadNewTabs(alwaysShowTabs); this.loadNewTabs(alwaysShowTabs);
// Set panel actions // Set panel actions
let openedTabs = [...pinnedDashboardTabs, ...alwaysShowTabs]; const openedTabs = [...pinnedDashboardTabs, ...alwaysShowTabs];
if (extensionTabsEnabled) { if (extensionTabsEnabled) {
let addNewTabAction = this.instantiationService.createInstance(AddFeatureTabAction, allTabs, openedTabs, this.dashboardService.getUnderlyingUri()); const addNewTabAction = this.instantiationService.createInstance(AddFeatureTabAction, allTabs, openedTabs, this.dashboardService.getUnderlyingUri());
this._tabsDispose.push(addNewTabAction); this._tabsDispose.push(addNewTabAction);
this.panelActions = [addNewTabAction]; this.panelActions = [addNewTabAction];
} else { } else {
@@ -181,7 +181,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
this._cd.detectChanges(); this._cd.detectChanges();
this._tabsDispose.push(this.dashboardService.onPinUnpinTab(e => { this._tabsDispose.push(this.dashboardService.onPinUnpinTab(e => {
let tabConfig = this._tabSettingConfigs.find(i => i.tabId === e.tabId); const tabConfig = this._tabSettingConfigs.find(i => i.tabId === e.tabId);
if (tabConfig) { if (tabConfig) {
tabConfig.isPinned = e.isPinned; tabConfig.isPinned = e.isPinned;
} else { } else {
@@ -196,7 +196,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
} }
private setAndRemoveHomeTab(allTabs: IDashboardTab[], homeWidgets: WidgetConfig[]): IDashboardTab[] { private setAndRemoveHomeTab(allTabs: IDashboardTab[], homeWidgets: WidgetConfig[]): IDashboardTab[] {
let homeTabConfig: TabConfig = { const homeTabConfig: TabConfig = {
id: 'homeTab', id: 'homeTab',
provider: Constants.anyProviderName, provider: Constants.anyProviderName,
publisher: undefined, publisher: undefined,
@@ -209,11 +209,11 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
actions: [] actions: []
}; };
let homeTabIndex = allTabs.findIndex((tab) => tab.isHomeTab === true); const homeTabIndex = allTabs.findIndex((tab) => tab.isHomeTab === true);
if (homeTabIndex !== undefined && homeTabIndex > -1) { if (homeTabIndex !== undefined && homeTabIndex > -1) {
// Have a tab: get its information and copy over to the home tab definition // Have a tab: get its information and copy over to the home tab definition
let homeTab = allTabs.splice(homeTabIndex, 1)[0]; const homeTab = allTabs.splice(homeTabIndex, 1)[0];
let tabConfig = this.initTabComponents(homeTab); const tabConfig = this.initTabComponents(homeTab);
homeTabConfig.id = tabConfig.id; homeTabConfig.id = tabConfig.id;
homeTabConfig.container = tabConfig.container; homeTabConfig.container = tabConfig.container;
} }
@@ -222,17 +222,17 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
} }
private rewriteConfig(): void { private rewriteConfig(): void {
let writeableConfig = objects.deepClone(this._tabSettingConfigs); const writeableConfig = objects.deepClone(this._tabSettingConfigs);
let target: ConfigurationTarget = ConfigurationTarget.USER; const target: ConfigurationTarget = ConfigurationTarget.USER;
this.dashboardService.writeSettings([this.context, 'tabs'].join('.'), writeableConfig, target); this.dashboardService.writeSettings([this.context, 'tabs'].join('.'), writeableConfig, target);
} }
private loadNewTabs(dashboardTabs: IDashboardTab[], openLastTab: boolean = false) { private loadNewTabs(dashboardTabs: IDashboardTab[], openLastTab: boolean = false) {
if (dashboardTabs && dashboardTabs.length > 0) { if (dashboardTabs && dashboardTabs.length > 0) {
let selectedTabs = dashboardTabs.map(v => this.initTabComponents(v)).map(v => { const selectedTabs = dashboardTabs.map(v => this.initTabComponents(v)).map(v => {
let actions = []; const actions = [];
let tabSettingConfig = this._tabSettingConfigs.find(i => i.tabId === v.id); const tabSettingConfig = this._tabSettingConfigs.find(i => i.tabId === v.id);
let isPinned = false; let isPinned = false;
if (tabSettingConfig) { if (tabSettingConfig) {
isPinned = tabSettingConfig.isPinned; isPinned = tabSettingConfig.isPinned;
@@ -241,7 +241,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
} }
actions.push(this.instantiationService.createInstance(PinUnpinTabAction, v.id, this.dashboardService.getUnderlyingUri(), isPinned)); actions.push(this.instantiationService.createInstance(PinUnpinTabAction, v.id, this.dashboardService.getUnderlyingUri(), isPinned));
let config = v as TabConfig; const config = v as TabConfig;
config.context = this.context; config.context = this.context;
config.editable = false; config.editable = false;
config.canClose = true; config.canClose = true;
@@ -253,7 +253,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
if (openLastTab) { if (openLastTab) {
// put this immediately on the stack so that is ran *after* the tab is rendered // put this immediately on the stack so that is ran *after* the tab is rendered
setTimeout(() => { setTimeout(() => {
let selectedLastTab = selectedTabs.pop(); const selectedLastTab = selectedTabs.pop();
this._panel.selectTab(selectedLastTab.id); this._panel.selectTab(selectedLastTab.id);
}); });
} }
@@ -261,11 +261,11 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
} }
private initTabComponents(value: IDashboardTab): { id: string; title: string; container: object; alwaysShow: boolean; } { private initTabComponents(value: IDashboardTab): { id: string; title: string; container: object; alwaysShow: boolean; } {
let containerResult = dashboardHelper.getDashboardContainer(value.container); const containerResult = dashboardHelper.getDashboardContainer(value.container);
if (!containerResult.result) { if (!containerResult.result) {
return { id: value.id, title: value.title, container: { 'error-container': undefined }, alwaysShow: value.alwaysShow }; return { id: value.id, title: value.title, container: { 'error-container': undefined }, alwaysShow: value.alwaysShow };
} }
let key = Object.keys(containerResult.container)[0]; const key = Object.keys(containerResult.container)[0];
if (key === WIDGETS_CONTAINER || key === GRID_CONTAINER) { if (key === WIDGETS_CONTAINER || key === GRID_CONTAINER) {
let configs = <WidgetConfig[]>Object.values(containerResult.container)[0]; let configs = <WidgetConfig[]>Object.values(containerResult.container)[0];
this._configModifiers.forEach(cb => { this._configModifiers.forEach(cb => {
@@ -284,12 +284,12 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
return { id: value.id, title: value.title, container: containerResult.container, alwaysShow: value.alwaysShow }; return { id: value.id, title: value.title, container: containerResult.container, alwaysShow: value.alwaysShow };
} }
private getContentType(tab: TabConfig): string { protected getContentType(tab: TabConfig): string {
return tab.container ? Object.keys(tab.container)[0] : ''; return tab.container ? Object.keys(tab.container)[0] : '';
} }
private addNewTab(tab: TabConfig): void { private addNewTab(tab: TabConfig): void {
let existedTab = this.tabs.find(i => i.id === tab.id); const existedTab = this.tabs.find(i => i.id === tab.id);
if (!existedTab) { if (!existedTab) {
this.tabs.push(tab); this.tabs.push(tab);
this._cd.detectChanges(); this._cd.detectChanges();
@@ -297,7 +297,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
} }
private getProperties(): Array<WidgetConfig> { private getProperties(): Array<WidgetConfig> {
let properties = this.dashboardService.getSettings<IPropertiesConfig[] | string | boolean>([this.context, 'properties'].join('.')); const properties = this.dashboardService.getSettings<IPropertiesConfig[] | string | boolean>([this.context, 'properties'].join('.'));
this._propertiesConfigLocation = 'default'; this._propertiesConfigLocation = 'default';
if (types.isUndefinedOrNull(properties)) { if (types.isUndefinedOrNull(properties)) {
return [this.propertiesWidget]; return [this.propertiesWidget];
@@ -307,7 +307,7 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
return [this.propertiesWidget]; return [this.propertiesWidget];
} else if (types.isArray(properties)) { } else if (types.isArray(properties)) {
return properties.map((item) => { return properties.map((item) => {
let retVal = Object.assign({}, this.propertiesWidget); const retVal = Object.assign({}, this.propertiesWidget);
retVal.edition = item.edition; retVal.edition = item.edition;
retVal.provider = item.provider; retVal.provider = item.provider;
retVal.widget = { 'properties-widget': { properties: item.properties } }; retVal.widget = { 'properties-widget': { properties: item.properties } };
@@ -340,13 +340,13 @@ export abstract class DashboardPage extends AngularDisposable implements IConfig
public handleTabChange(tab: TabComponent): void { public handleTabChange(tab: TabComponent): void {
this._cd.detectChanges(); this._cd.detectChanges();
let localtab = this._tabs.find(i => i.id === tab.identifier); const localtab = this._tabs.find(i => i.id === tab.identifier);
this._editEnabled.fire(localtab.editable); this._editEnabled.fire(localtab.editable);
this._cd.detectChanges(); this._cd.detectChanges();
} }
public handleTabClose(tab: TabComponent): void { public handleTabClose(tab: TabComponent): void {
let index = this.tabs.findIndex(i => i.id === tab.identifier); const index = this.tabs.findIndex(i => i.id === tab.identifier);
this.tabs.splice(index, 1); this.tabs.splice(index, 1);
this.angularEventingService.sendAngularEvent(this.dashboardService.getUnderlyingUri(), AngularEventType.CLOSE_TAB, { id: tab.identifier }); this.angularEventingService.sendAngularEvent(this.dashboardService.getUnderlyingUri(), AngularEventType.CLOSE_TAB, { id: tab.identifier });
} }

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!./dashboardPanel'; import 'vs/css!./dashboardPanel';
import { registerThemingParticipant, ITheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService'; import { registerThemingParticipant, ITheme, ICssStyleCollector } from 'vs/platform/theme/common/themeService';

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IExtensionPointUser, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { IExtensionPointUser, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
@@ -10,9 +11,9 @@ import * as types from 'vs/base/common/types';
import * as Constants from 'sql/platform/connection/common/constants'; import * as Constants from 'sql/platform/connection/common/constants';
import { registerTab } from 'sql/platform/dashboard/common/dashboardRegistry'; import { registerTab } from 'sql/platform/dashboard/common/dashboardRegistry';
import { generateContainerTypeSchemaProperties } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; import { generateContainerTypeSchemaProperties } from 'sql/platform/dashboard/common/dashboardContainerRegistry';
import { NAV_SECTION, validateNavSectionContributionAndRegisterIcon } from 'sql/parts/dashboard/containers/dashboardNavSection.contribution'; import { NAV_SECTION, validateNavSectionContributionAndRegisterIcon } from 'sql/workbench/parts/dashboard/containers/dashboardNavSection.contribution';
import { WIDGETS_CONTAINER, validateWidgetContainerContribution } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; import { WIDGETS_CONTAINER, validateWidgetContainerContribution } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER, validateGridContainerContribution } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; import { GRID_CONTAINER, validateGridContainerContribution } from 'sql/workbench/parts/dashboard/containers/dashboardGridContainer.contribution';
export interface IDashboardTabContrib { export interface IDashboardTabContrib {
id: string; id: string;
@@ -85,7 +86,7 @@ ExtensionsRegistry.registerExtensionPoint<IDashboardTabContrib | IDashboardTabCo
if (!types.isBoolean(alwaysShow)) { if (!types.isBoolean(alwaysShow)) {
alwaysShow = true; alwaysShow = true;
} }
let publisher = extension.description.publisher; const publisher = extension.description.publisher;
if (!title) { if (!title) {
extension.collector.error(localize('dashboardTab.contribution.noTitleError', 'No title specified for extension.')); extension.collector.error(localize('dashboardTab.contribution.noTitleError', 'No title specified for extension.'));
return; return;
@@ -113,8 +114,8 @@ ExtensionsRegistry.registerExtensionPoint<IDashboardTabContrib | IDashboardTabCo
} }
let result = true; let result = true;
let containerkey = Object.keys(container)[0]; const containerkey = Object.keys(container)[0];
let containerValue = Object.values(container)[0]; const containerValue = Object.values(container)[0];
switch (containerkey) { switch (containerkey) {
case WIDGETS_CONTAINER: case WIDGETS_CONTAINER:
@@ -133,10 +134,10 @@ ExtensionsRegistry.registerExtensionPoint<IDashboardTabContrib | IDashboardTabCo
} }
} }
for (let extension of extensions) { for (const extension of extensions) {
const { value } = extension; const { value } = extension;
if (Array.isArray<IDashboardTabContrib>(value)) { if (Array.isArray<IDashboardTabContrib>(value)) {
for (let command of value) { for (const command of value) {
handleCommand(command, extension); handleCommand(command, extension);
} }
} else { } else {

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { InjectionToken, OnDestroy } from '@angular/core'; import { InjectionToken, OnDestroy } from '@angular/core';
import { NgGridItemConfig } from 'angular2-grid'; import { NgGridItemConfig } from 'angular2-grid';
import { Action } from 'vs/base/common/actions'; import { Action } from 'vs/base/common/actions';

View File

@@ -2,18 +2,16 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IExtensionPointUser, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { IExtensionPointUser, ExtensionsRegistry } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { localize } from 'vs/nls'; import { localize } from 'vs/nls';
import { join } from 'path';
import { createCSSRule } from 'vs/base/browser/dom';
import { URI } from 'vs/base/common/uri';
import { registerContainer, generateContainerTypeSchemaProperties } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; import { registerContainer, generateContainerTypeSchemaProperties } from 'sql/platform/dashboard/common/dashboardContainerRegistry';
import { NAV_SECTION, validateNavSectionContributionAndRegisterIcon } from 'sql/parts/dashboard/containers/dashboardNavSection.contribution'; import { NAV_SECTION, validateNavSectionContributionAndRegisterIcon } from 'sql/workbench/parts/dashboard/containers/dashboardNavSection.contribution';
import { WIDGETS_CONTAINER, validateWidgetContainerContribution } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; import { WIDGETS_CONTAINER, validateWidgetContainerContribution } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER, validateGridContainerContribution } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; import { GRID_CONTAINER, validateGridContainerContribution } from 'sql/workbench/parts/dashboard/containers/dashboardGridContainer.contribution';
import { WEBVIEW_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWebviewContainer.contribution'; import { WEBVIEW_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardWebviewContainer.contribution';
const containerTypes = [ const containerTypes = [
WIDGETS_CONTAINER, WIDGETS_CONTAINER,
@@ -58,7 +56,7 @@ const containerContributionSchema: IJSONSchema = {
ExtensionsRegistry.registerExtensionPoint<IDashboardContainerContrib | IDashboardContainerContrib[]>({ extensionPoint: 'dashboard.containers', jsonSchema: containerContributionSchema }).setHandler(extensions => { ExtensionsRegistry.registerExtensionPoint<IDashboardContainerContrib | IDashboardContainerContrib[]>({ extensionPoint: 'dashboard.containers', jsonSchema: containerContributionSchema }).setHandler(extensions => {
function handleCommand(dashboardContainer: IDashboardContainerContrib, extension: IExtensionPointUser<any>) { function handleCommand(dashboardContainer: IDashboardContainerContrib, extension: IExtensionPointUser<any>) {
let { id, container } = dashboardContainer; const { id, container } = dashboardContainer;
if (!id) { if (!id) {
extension.collector.error(localize('dashboardContainer.contribution.noIdError', 'No id in dashboard container specified for extension.')); extension.collector.error(localize('dashboardContainer.contribution.noIdError', 'No id in dashboard container specified for extension.'));
return; return;
@@ -74,10 +72,10 @@ ExtensionsRegistry.registerExtensionPoint<IDashboardContainerContrib | IDashboar
} }
let result = true; let result = true;
let containerkey = Object.keys(container)[0]; const containerkey = Object.keys(container)[0];
let containerValue = Object.values(container)[0]; const containerValue = Object.values(container)[0];
let containerTypeFound = containerTypes.find(c => (c === containerkey)); const containerTypeFound = containerTypes.find(c => (c === containerkey));
if (!containerTypeFound) { if (!containerTypeFound) {
extension.collector.error(localize('dashboardTab.contribution.unKnownContainerType', 'Unknown container type defines in dashboard container for extension.')); extension.collector.error(localize('dashboardTab.contribution.unKnownContainerType', 'Unknown container type defines in dashboard container for extension.'));
return; return;
@@ -100,10 +98,10 @@ ExtensionsRegistry.registerExtensionPoint<IDashboardContainerContrib | IDashboar
} }
} }
for (let extension of extensions) { for (const extension of extensions) {
const { value } = extension; const { value } = extension;
if (Array.isArray<IDashboardContainerContrib>(value)) { if (Array.isArray<IDashboardContainerContrib>(value)) {
for (let command of value) { for (const command of value) {
handleCommand(command, extension); handleCommand(command, extension);
} }
} else { } else {

View File

@@ -2,15 +2,16 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!./dashboardControlHostContainer'; import 'vs/css!./dashboardControlHostContainer';
import { Component, forwardRef, Input, AfterContentInit, ViewChild, OnChanges } from '@angular/core'; import { Component, forwardRef, Input, AfterContentInit, ViewChild, OnChanges } from '@angular/core';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab } from 'sql/workbench/parts/dashboard/common/interfaces';
import { TabConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { TabConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { ControlHostContent } from 'sql/parts/dashboard/contents/controlHostContent.component'; import { ControlHostContent } from 'sql/workbench/parts/dashboard/contents/controlHostContent.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
@Component({ @Component({
@@ -38,7 +39,7 @@ export class DashboardControlHostContainer extends DashboardTab implements After
this._onResize.fire(); this._onResize.fire();
})); }));
let container = <any>this.tab.container; const container = <any>this.tab.container;
if (container['controlhost-container'] && container['controlhost-container'].type) { if (container['controlhost-container'] && container['controlhost-container'].type) {
this._hostContent.setControlType(container['controlhost-container'].type); this._hostContent.setControlType(container['controlhost-container'].type);
} }

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';

View File

@@ -7,8 +7,8 @@ import 'vs/css!./dashboardErrorContainer';
import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core'; import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core';
import { TabConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { TabConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab } from 'sql/workbench/parts/dashboard/common/interfaces';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
@@ -39,7 +39,7 @@ export class DashboardErrorContainer extends DashboardTab implements AfterViewIn
} }
ngAfterViewInit() { ngAfterViewInit() {
let errorMessage = this._errorMessageContainer.nativeElement as HTMLElement; const errorMessage = this._errorMessageContainer.nativeElement as HTMLElement;
errorMessage.innerText = nls.localize('dashboardNavSection_loadTabError', 'The "{0}" section has invalid content. Please contact extension owner.', this.tab.title); errorMessage.innerText = nls.localize('dashboardNavSection_loadTabError', 'The "{0}" section has invalid content. Please contact extension owner.', this.tab.title);
} }

View File

@@ -0,0 +1,28 @@
<!--
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-->
<div>
<table class="grid-table">
<tr *ngFor="let row of rows" class="grid-table-row">
<ng-container *ngFor="let col of cols">
<ng-container *ngIf="getContent(row,col) !== undefined">
<td class="table-cell" [colSpan]=getColspan(row,col) [rowSpan]=getRowspan(row,col)
[width]="getWidgetWidth(row,col)" [height]="getWidgetHeight(row,col)">
<dashboard-widget-wrapper *ngIf="isWidget(row,col)" [_config]="getWidgetContent(row,col)"
style="position:absolute;" [style.width]="getWidgetWidth(row,col)"
[style.height]="getWidgetHeight(row,col)">
</dashboard-widget-wrapper>
<webview-content *ngIf="isWebview(row,col)" [webviewId]="getWebviewId(row,col)">
</webview-content>
</td>
</ng-container>
</ng-container>
</tr>
</table>
</div>

View File

@@ -8,10 +8,10 @@ import 'vs/css!./dashboardGridContainer';
import { Component, Inject, Input, forwardRef, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef } from '@angular/core'; import { Component, Inject, Input, forwardRef, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { TabConfig, WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { DashboardWidgetWrapper } from 'sql/workbench/parts/dashboard/contents/dashboardWidgetWrapper.component';
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab } from 'sql/workbench/parts/dashboard/common/interfaces';
import { WebviewContent } from 'sql/parts/dashboard/contents/webviewContent.component'; import { WebviewContent } from 'sql/workbench/parts/dashboard/contents/webviewContent.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
@@ -35,7 +35,7 @@ export interface GridWebviewConfig extends GridCellConfig {
@Component({ @Component({
selector: 'dashboard-grid-container', selector: 'dashboard-grid-container',
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/containers/dashboardGridContainer.component.html')), templateUrl: decodeURI(require.toUrl('sql/workbench/parts/dashboard/containers/dashboardGridContainer.component.html')),
providers: [{ provide: TabChild, useExisting: forwardRef(() => DashboardGridContainer) }] providers: [{ provide: TabChild, useExisting: forwardRef(() => DashboardGridContainer) }]
}) })
export class DashboardGridContainer extends DashboardTab implements OnDestroy { export class DashboardGridContainer extends DashboardTab implements OnDestroy {
@@ -52,14 +52,14 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy {
protected cols: number[]; protected cols: number[];
protected getContent(row: number, col: number): GridCellConfig { protected getContent(row: number, col: number): GridCellConfig {
let widget = this._contents.filter(w => w.row === row && w.col === col); const widget = this._contents.filter(w => w.row === row && w.col === col);
return widget ? widget[0] : undefined; return widget ? widget[0] : undefined;
} }
protected getWidgetContent(row: number, col: number): GridWidgetConfig { protected getWidgetContent(row: number, col: number): GridWidgetConfig {
let content = this.getContent(row, col); const content = this.getContent(row, col);
if (content) { if (content) {
let widgetConfig = <GridWidgetConfig>content; const widgetConfig = <GridWidgetConfig>content;
if (widgetConfig && widgetConfig.widget) { if (widgetConfig && widgetConfig.widget) {
return widgetConfig; return widgetConfig;
} }
@@ -68,9 +68,9 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy {
} }
protected getWebviewContent(row: number, col: number): GridWebviewConfig { protected getWebviewContent(row: number, col: number): GridWebviewConfig {
let content = this.getContent(row, col); const content = this.getContent(row, col);
if (content) { if (content) {
let webviewConfig = <GridWebviewConfig>content; const webviewConfig = <GridWebviewConfig>content;
if (webviewConfig && webviewConfig.webview) { if (webviewConfig && webviewConfig.webview) {
return webviewConfig; return webviewConfig;
} }
@@ -80,17 +80,17 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy {
protected isWidget(row: number, col: number): boolean { protected isWidget(row: number, col: number): boolean {
let widgetConfig = this.getWidgetContent(row, col); const widgetConfig = this.getWidgetContent(row, col);
return widgetConfig !== undefined; return widgetConfig !== undefined;
} }
protected isWebview(row: number, col: number): boolean { protected isWebview(row: number, col: number): boolean {
let webview = this.getWebviewContent(row, col); const webview = this.getWebviewContent(row, col);
return webview !== undefined; return webview !== undefined;
} }
protected getWebviewId(row: number, col: number): string { protected getWebviewId(row: number, col: number): string {
let widgetConfig = this.getWebviewContent(row, col); const widgetConfig = this.getWebviewContent(row, col);
if (widgetConfig && widgetConfig.webview) { if (widgetConfig && widgetConfig.webview) {
return widgetConfig.webview.id; return widgetConfig.webview.id;
} }
@@ -98,7 +98,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy {
} }
protected getColspan(row: number, col: number): string { protected getColspan(row: number, col: number): string {
let content = this.getContent(row, col); const content = this.getContent(row, col);
let colspan: string = '1'; let colspan: string = '1';
if (content && content.colspan) { if (content && content.colspan) {
colspan = this.convertToNumber(content.colspan, this.cols.length).toString(); colspan = this.convertToNumber(content.colspan, this.cols.length).toString();
@@ -107,7 +107,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy {
} }
protected getRowspan(row: number, col: number): string { protected getRowspan(row: number, col: number): string {
let content = this.getContent(row, col); const content = this.getContent(row, col);
if (content && (content.rowspan)) { if (content && (content.rowspan)) {
return this.convertToNumber(content.rowspan, this.rows.length).toString(); return this.convertToNumber(content.rowspan, this.rows.length).toString();
} else { } else {
@@ -116,17 +116,15 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy {
} }
protected getWidgetWidth(row: number, col: number): string { protected getWidgetWidth(row: number, col: number): string {
let content = this.getContent(row, col); const colspan = this.getColspan(row, col);
let colspan = this.getColspan(row, col); const columnCount = this.convertToNumber(colspan, this.cols.length);
let columnCount = this.convertToNumber(colspan, this.cols.length);
return columnCount * this.cellWidth + 'px'; return columnCount * this.cellWidth + 'px';
} }
protected getWidgetHeight(row: number, col: number): string { protected getWidgetHeight(row: number, col: number): string {
let content = this.getContent(row, col); const rowspan = this.getRowspan(row, col);
let rowspan = this.getRowspan(row, col); const rowCount = this.convertToNumber(rowspan, this.rows.length);
let rowCount = this.convertToNumber(rowspan, this.rows.length);
return rowCount * this.cellHeight + 'px'; return rowCount * this.cellHeight + 'px';
} }
@@ -181,7 +179,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy {
} }
private createIndexes(indexes: number[]) { private createIndexes(indexes: number[]) {
let max = Math.max(...indexes) + 1; const max = Math.max(...indexes) + 1;
return Array(max).fill(0).map((x, i) => i); return Array(max).fill(0).map((x, i) => i);
} }

View File

@@ -2,11 +2,12 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import { generateDashboardGridLayoutSchema } from 'sql/parts/dashboard/pages/dashboardPageContribution'; import { generateDashboardGridLayoutSchema } from 'sql/workbench/parts/dashboard/pages/dashboardPageContribution';
import { registerContainerType, registerNavSectionContainerType } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; import { registerContainerType, registerNavSectionContainerType } from 'sql/platform/dashboard/common/dashboardContainerRegistry';
export const GRID_CONTAINER = 'grid-container'; export const GRID_CONTAINER = 'grid-container';
@@ -23,8 +24,8 @@ registerNavSectionContainerType(GRID_CONTAINER, gridContainersSchema);
export function validateGridContainerContribution(extension: IExtensionPointUser<any>, gridConfigs: object[]): boolean { export function validateGridContainerContribution(extension: IExtensionPointUser<any>, gridConfigs: object[]): boolean {
let result = true; let result = true;
gridConfigs.forEach(widgetConfig => { gridConfigs.forEach(widgetConfig => {
let allKeys = Object.keys(widgetConfig); const allKeys = Object.keys(widgetConfig);
let widgetOrWebviewKey = allKeys.find(key => key === 'widget' || key === 'webview'); const widgetOrWebviewKey = allKeys.find(key => key === 'widget' || key === 'webview');
if (!widgetOrWebviewKey) { if (!widgetOrWebviewKey) {
result = false; result = false;
extension.collector.error(nls.localize('gridContainer.invalidInputs', 'widgets or webviews are expected inside widgets-container for extension.')); extension.collector.error(nls.localize('gridContainer.invalidInputs', 'widgets or webviews are expected inside widgets-container for extension.'));

View File

@@ -7,12 +7,12 @@ import 'vs/css!./dashboardHomeContainer';
import { Component, forwardRef, Input, ChangeDetectorRef, Inject, ViewChild, ContentChild } from '@angular/core'; import { Component, forwardRef, Input, ChangeDetectorRef, Inject, ViewChild, ContentChild } from '@angular/core';
import { DashboardWidgetContainer } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.component'; import { DashboardWidgetContainer } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.component';
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { AngularEventType, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService'; import { AngularEventType, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { DashboardWidgetWrapper } from 'sql/workbench/parts/dashboard/contents/dashboardWidgetWrapper.component';
import { ScrollableDirective } from 'sql/base/browser/ui/scrollable/scrollable.directive'; import { ScrollableDirective } from 'sql/base/browser/ui/scrollable/scrollable.directive';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
@@ -51,7 +51,7 @@ export class DashboardHomeContainer extends DashboardWidgetContainer {
} }
ngAfterContentInit() { ngAfterContentInit() {
let collapsedVal = this.dashboardService.getSettings<string>(`${this.properties.context}.properties`); const collapsedVal = this.dashboardService.getSettings<string>(`${this.properties.context}.properties`);
if (collapsedVal === 'collapsed') { if (collapsedVal === 'collapsed') {
this._propertiesClass.collapsed = true; this._propertiesClass.collapsed = true;
} }

View File

@@ -2,14 +2,15 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!./dashboardWebviewContainer'; import 'vs/css!./dashboardWebviewContainer';
import { Component, forwardRef, Input, AfterContentInit, ViewChild } from '@angular/core'; import { Component, forwardRef, Input, AfterContentInit, ViewChild } from '@angular/core';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab } from 'sql/workbench/parts/dashboard/common/interfaces';
import { TabConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { TabConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component'; import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';

View File

@@ -8,22 +8,21 @@ import 'vs/css!./dashboardNavSection';
import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, OnChanges, AfterContentInit } from '@angular/core'; import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, OnChanges, AfterContentInit } from '@angular/core';
import { CommonServiceInterface, SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface, SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
import { WidgetConfig, TabConfig, NavSectionConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig, TabConfig, NavSectionConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { PanelComponent, IPanelOptions, NavigationBarLayout } from 'sql/base/browser/ui/panel/panel.component'; import { PanelComponent, IPanelOptions, NavigationBarLayout } from 'sql/base/browser/ui/panel/panel.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { DashboardTab, IConfigModifierCollection } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab, IConfigModifierCollection } from 'sql/workbench/parts/dashboard/common/interfaces';
import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; import { WIDGETS_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; import { GRID_CONTAINER } from 'sql/workbench/parts/dashboard/containers/dashboardGridContainer.contribution';
import * as dashboardHelper from 'sql/parts/dashboard/common/dashboardHelper'; import * as dashboardHelper from 'sql/workbench/parts/dashboard/common/dashboardHelper';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
import * as nls from 'vs/nls';
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey'; import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
@Component({ @Component({
selector: 'dashboard-nav-section', selector: 'dashboard-nav-section',
providers: [{ provide: TabChild, useExisting: forwardRef(() => DashboardNavSection) }], providers: [{ provide: TabChild, useExisting: forwardRef(() => DashboardNavSection) }],
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/containers/dashboardNavSection.component.html')) templateUrl: decodeURI(require.toUrl('sql/workbench/parts/dashboard/containers/dashboardNavSection.component.html'))
}) })
export class DashboardNavSection extends DashboardTab implements OnDestroy, OnChanges, AfterContentInit, IConfigModifierCollection { export class DashboardNavSection extends DashboardTab implements OnDestroy, OnChanges, AfterContentInit, IConfigModifierCollection {
@Input() private tab: TabConfig; @Input() private tab: TabConfig;
@@ -91,14 +90,13 @@ export class DashboardNavSection extends DashboardTab implements OnDestroy, OnCh
private loadNewTabs(dashboardTabs: NavSectionConfig[]) { private loadNewTabs(dashboardTabs: NavSectionConfig[]) {
if (dashboardTabs && dashboardTabs.length > 0) { if (dashboardTabs && dashboardTabs.length > 0) {
let selectedTabs = dashboardTabs.map(v => { dashboardTabs.map(v => {
const containerResult = dashboardHelper.getDashboardContainer(v.container);
let containerResult = dashboardHelper.getDashboardContainer(v.container);
if (!containerResult.result) { if (!containerResult.result) {
return { id: v.id, title: v.title, container: { 'error-container': undefined } }; return { id: v.id, title: v.title, container: { 'error-container': undefined } };
} }
let key = Object.keys(containerResult.container)[0]; const key = Object.keys(containerResult.container)[0];
if (key === WIDGETS_CONTAINER || key === GRID_CONTAINER) { if (key === WIDGETS_CONTAINER || key === GRID_CONTAINER) {
let configs = <WidgetConfig[]>Object.values(containerResult.container)[0]; let configs = <WidgetConfig[]>Object.values(containerResult.container)[0];
this._configModifiers.forEach(cb => { this._configModifiers.forEach(cb => {
@@ -116,7 +114,7 @@ export class DashboardNavSection extends DashboardTab implements OnDestroy, OnCh
} }
return { id: v.id, title: v.title, container: containerResult.container, iconClass: v.iconClass }; return { id: v.id, title: v.title, container: containerResult.container, iconClass: v.iconClass };
}).map(v => { }).map(v => {
let config = v as TabConfig; const config = v as TabConfig;
config.context = this.tab.context; config.context = this.tab.context;
config.editable = false; config.editable = false;
config.canClose = false; config.canClose = false;
@@ -127,14 +125,14 @@ export class DashboardNavSection extends DashboardTab implements OnDestroy, OnCh
} }
private addNewTab(tab: TabConfig): void { private addNewTab(tab: TabConfig): void {
let existedTab = this.tabs.find(i => i.id === tab.id); const existedTab = this.tabs.find(i => i.id === tab.id);
if (!existedTab) { if (!existedTab) {
this.tabs.push(tab); this.tabs.push(tab);
this._cd.detectChanges(); this._cd.detectChanges();
} }
} }
private getContentType(tab: TabConfig): string { protected getContentType(tab: TabConfig): string {
return tab.container ? Object.keys(tab.container)[0] : ''; return tab.container ? Object.keys(tab.container)[0] : '';
} }
@@ -147,8 +145,8 @@ export class DashboardNavSection extends DashboardTab implements OnDestroy, OnCh
} }
public layout() { public layout() {
let activeTabId = this._panel.getActiveTab; const activeTabId = this._panel.getActiveTab;
let localtab = this._tabs.find(i => i.id === activeTabId); const localtab = this._tabs.find(i => i.id === activeTabId);
this._cd.detectChanges(); this._cd.detectChanges();
localtab.layout(); localtab.layout();
} }

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
@@ -10,10 +11,10 @@ import { createCSSRule } from 'vs/base/browser/dom';
import { URI } from 'vs/base/common/uri'; import { URI } from 'vs/base/common/uri';
import { IdGenerator } from 'vs/base/common/idGenerator'; import { IdGenerator } from 'vs/base/common/idGenerator';
import { NavSectionConfig, IUserFriendlyIcon } from 'sql/parts/dashboard/common/dashboardWidget'; import { NavSectionConfig, IUserFriendlyIcon } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { registerContainerType, generateNavSectionContainerTypeSchemaProperties } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; import { registerContainerType, generateNavSectionContainerTypeSchemaProperties } from 'sql/platform/dashboard/common/dashboardContainerRegistry';
import { WIDGETS_CONTAINER, validateWidgetContainerContribution } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution'; import { WIDGETS_CONTAINER, validateWidgetContainerContribution } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.contribution';
import { GRID_CONTAINER, validateGridContainerContribution } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution'; import { GRID_CONTAINER, validateGridContainerContribution } from 'sql/workbench/parts/dashboard/containers/dashboardGridContainer.contribution';
export const NAV_SECTION = 'nav-section'; export const NAV_SECTION = 'nav-section';
@@ -55,7 +56,7 @@ const navSectionContainerSchema: IJSONSchema = {
} }
}; };
let NavSectionSchema: IJSONSchema = { const NavSectionSchema: IJSONSchema = {
type: 'array', type: 'array',
description: nls.localize('dashboard.container.left-nav-bar', "The list of dashboard containers that will be displayed in this navigation section."), description: nls.localize('dashboard.container.left-nav-bar', "The list of dashboard containers that will be displayed in this navigation section."),
items: navSectionContainerSchema items: navSectionContainerSchema
@@ -117,8 +118,8 @@ export function validateNavSectionContributionAndRegisterIcon(extension: IExtens
section.iconClass = createCSSRuleForIcon(section.icon, extension); section.iconClass = createCSSRuleForIcon(section.icon, extension);
} }
let containerKey = Object.keys(section.container)[0]; const containerKey = Object.keys(section.container)[0];
let containerValue = Object.values(section.container)[0]; const containerValue = Object.values(section.container)[0];
switch (containerKey) { switch (containerKey) {
case WIDGETS_CONTAINER: case WIDGETS_CONTAINER:

View File

@@ -2,15 +2,16 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!./dashboardWebviewContainer'; import 'vs/css!./dashboardWebviewContainer';
import { Component, forwardRef, Input, AfterContentInit, ViewChild } from '@angular/core'; import { Component, forwardRef, Input, AfterContentInit, ViewChild } from '@angular/core';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab } from 'sql/workbench/parts/dashboard/common/interfaces';
import { TabConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { TabConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { WebviewContent } from 'sql/parts/dashboard/contents/webviewContent.component'; import { WebviewContent } from 'sql/workbench/parts/dashboard/contents/webviewContent.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
@Component({ @Component({

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';

View File

@@ -7,9 +7,9 @@ import 'vs/css!./dashboardWidgetContainer';
import { Component, Inject, Input, forwardRef, ViewChild, OnDestroy, ChangeDetectorRef, AfterContentInit } from '@angular/core'; import { Component, Inject, Input, forwardRef, ViewChild, OnDestroy, ChangeDetectorRef, AfterContentInit } from '@angular/core';
import { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { TabConfig, WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces'; import { DashboardTab } from 'sql/workbench/parts/dashboard/common/interfaces';
import { WidgetContent } from 'sql/parts/dashboard/contents/widgetContent.component'; import { WidgetContent } from 'sql/workbench/parts/dashboard/contents/widgetContent.component';
import { TabChild } from 'sql/base/browser/ui/panel/tab.component'; import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
import { Event, Emitter } from 'vs/base/common/event'; import { Event, Emitter } from 'vs/base/common/event';

View File

@@ -2,13 +2,13 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry'; import { IExtensionPointUser } from 'vs/workbench/services/extensions/common/extensionsRegistry';
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import { generateDashboardWidgetSchema } from 'sql/parts/dashboard/pages/dashboardPageContribution'; import { generateDashboardWidgetSchema } from 'sql/workbench/parts/dashboard/pages/dashboardPageContribution';
import { registerContainerType, registerNavSectionContainerType } from 'sql/platform/dashboard/common/dashboardContainerRegistry'; import { registerContainerType, registerNavSectionContainerType } from 'sql/platform/dashboard/common/dashboardContainerRegistry';
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
export const WIDGETS_CONTAINER = 'widgets-container'; export const WIDGETS_CONTAINER = 'widgets-container';
@@ -24,8 +24,8 @@ registerNavSectionContainerType(WIDGETS_CONTAINER, widgetsSchema);
export function validateWidgetContainerContribution(extension: IExtensionPointUser<any>, WidgetConfigs: object[]): boolean { export function validateWidgetContainerContribution(extension: IExtensionPointUser<any>, WidgetConfigs: object[]): boolean {
let result = true; let result = true;
WidgetConfigs.forEach(widgetConfig => { WidgetConfigs.forEach(widgetConfig => {
let allKeys = Object.keys(widgetConfig); const allKeys = Object.keys(widgetConfig);
let widgetKey = allKeys.find(key => key === 'widget'); const widgetKey = allKeys.find(key => key === 'widget');
if (!widgetKey) { if (!widgetKey) {
result = false; result = false;
extension.collector.error(nls.localize('widgetContainer.invalidInputs', 'The list of widgets is expected inside widgets-container for extension.')); extension.collector.error(nls.localize('widgetContainer.invalidInputs', 'The list of widgets is expected inside widgets-container for extension.'));

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!./controlHostContent'; import 'vs/css!./controlHostContent';
import { Component, forwardRef, Input, OnInit, Inject, ChangeDetectorRef, ElementRef, ViewChild } from '@angular/core'; import { Component, forwardRef, Input, OnInit, Inject, ChangeDetectorRef, ElementRef, ViewChild } from '@angular/core';
@@ -12,10 +13,10 @@ import { CommonServiceInterface } from 'sql/services/common/commonServiceInterfa
import * as azdata from 'azdata'; import * as azdata from 'azdata';
import { memoize } from 'vs/base/common/decorators'; import { memoize } from 'vs/base/common/decorators';
import { AgentViewComponent } from '../../jobManagement/agent/agentView.component'; import { AgentViewComponent } from '../../../../parts/jobManagement/agent/agentView.component';
@Component({ @Component({
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/contents/controlHostContent.component.html')), templateUrl: decodeURI(require.toUrl('sql/workbench/parts/dashboard/contents/controlHostContent.component.html')),
selector: 'controlhost-content' selector: 'controlhost-content'
}) })
export class ControlHostContent { export class ControlHostContent {
@@ -49,8 +50,8 @@ export class ControlHostContent {
@memoize @memoize
public get connection(): azdata.connection.Connection { public get connection(): azdata.connection.Connection {
let currentConnection = this._dashboardService.connectionManagementService.connectionInfo.connectionProfile; const currentConnection = this._dashboardService.connectionManagementService.connectionInfo.connectionProfile;
let connection: azdata.connection.Connection = { const connection: azdata.connection.Connection = {
providerName: currentConnection.providerName, providerName: currentConnection.providerName,
connectionId: currentConnection.id, connectionId: currentConnection.id,
options: currentConnection.options options: currentConnection.options

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!sql/media/icons/common-icons'; import 'vs/css!sql/media/icons/common-icons';
import 'vs/css!./dashboardWidgetWrapper'; import 'vs/css!./dashboardWidgetWrapper';
@@ -10,19 +11,19 @@ import {
ElementRef, OnInit, ChangeDetectorRef, ReflectiveInjector, Injector, Type, ComponentRef ElementRef, OnInit, ChangeDetectorRef, ReflectiveInjector, Injector, Type, ComponentRef
} from '@angular/core'; } from '@angular/core';
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; import { ComponentHostDirective } from 'sql/workbench/parts/dashboard/common/componentHost.directive';
import { WidgetConfig, WIDGET_CONFIG, IDashboardWidget } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig, WIDGET_CONFIG, IDashboardWidget } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry'; import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
import { error } from 'sql/base/common/log'; import { error } from 'sql/base/common/log';
import { RefreshWidgetAction, ToggleMoreWidgetAction, DeleteWidgetAction, CollapseWidgetAction } from 'sql/parts/dashboard/common/actions'; import { RefreshWidgetAction, ToggleMoreWidgetAction, DeleteWidgetAction, CollapseWidgetAction } from 'sql/workbench/parts/dashboard/common/actions';
import { AngularDisposable } from 'sql/base/node/lifecycle'; import { AngularDisposable } from 'sql/base/node/lifecycle';
/* Widgets */ /* Widgets */
import { PropertiesWidgetComponent } from 'sql/parts/dashboard/widgets/properties/propertiesWidget.component'; import { PropertiesWidgetComponent } from 'sql/workbench/parts/dashboard/widgets/properties/propertiesWidget.component';
import { ExplorerWidget } from 'sql/parts/dashboard/widgets/explorer/explorerWidget.component'; import { ExplorerWidget } from 'sql/workbench/parts/dashboard/widgets/explorer/explorerWidget.component';
import { TasksWidget } from 'sql/parts/dashboard/widgets/tasks/tasksWidget.component'; import { TasksWidget } from 'sql/workbench/parts/dashboard/widgets/tasks/tasksWidget.component';
import { InsightsWidget } from 'sql/parts/dashboard/widgets/insights/insightsWidget.component'; import { InsightsWidget } from 'sql/workbench/parts/dashboard/widgets/insights/insightsWidget.component';
import { WebviewWidget } from 'sql/parts/dashboard/widgets/webview/webviewWidget.component'; import { WebviewWidget } from 'sql/workbench/parts/dashboard/widgets/webview/webviewWidget.component';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
@@ -46,7 +47,7 @@ const componentMap: { [x: string]: Type<IDashboardWidget> } = {
@Component({ @Component({
selector: 'dashboard-widget-wrapper', selector: 'dashboard-widget-wrapper',
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/contents/dashboardWidgetWrapper.component.html')) templateUrl: decodeURI(require.toUrl('sql/workbench/parts/dashboard/contents/dashboardWidgetWrapper.component.html'))
}) })
export class DashboardWidgetWrapper extends AngularDisposable implements OnInit { export class DashboardWidgetWrapper extends AngularDisposable implements OnInit {
@Input() private _config: WidgetConfig; @Input() private _config: WidgetConfig;
@@ -97,9 +98,8 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
} }
ngOnInit() { ngOnInit() {
let self = this; this._register(this.themeService.onDidColorThemeChange((event: IColorTheme) => {
this._register(self.themeService.onDidColorThemeChange((event: IColorTheme) => { this.updateTheme(event);
self.updateTheme(event);
})); }));
} }
@@ -149,8 +149,8 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
error('Exactly 1 widget must be defined per space'); error('Exactly 1 widget must be defined per space');
return; return;
} }
let key = Object.keys(this._config.widget)[0]; const key = Object.keys(this._config.widget)[0];
let selector = this.getOrCreateSelector(key); const selector = this.getOrCreateSelector(key);
if (selector === undefined) { if (selector === undefined) {
error('Could not find selector', key); error('Could not find selector', key);
return; return;
@@ -158,23 +158,23 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
// If _config.name is not set, set it to _config.widget.name // If _config.name is not set, set it to _config.widget.name
if (!this._config.name) { if (!this._config.name) {
let widget = Object.values(this._config.widget)[0]; const widget = Object.values(this._config.widget)[0];
if (widget.name) { if (widget.name) {
this._config.name = widget.name; this._config.name = widget.name;
} }
} }
let componentFactory = this._componentFactoryResolver.resolveComponentFactory(selector); const componentFactory = this._componentFactoryResolver.resolveComponentFactory(selector);
let viewContainerRef = this.componentHost.viewContainerRef; const viewContainerRef = this.componentHost.viewContainerRef;
viewContainerRef.clear(); viewContainerRef.clear();
let injector = ReflectiveInjector.resolveAndCreate([{ provide: WIDGET_CONFIG, useValue: this._config }], this._injector); const injector = ReflectiveInjector.resolveAndCreate([{ provide: WIDGET_CONFIG, useValue: this._config }], this._injector);
let componentRef: ComponentRef<IDashboardWidget>; let componentRef: ComponentRef<IDashboardWidget>;
try { try {
componentRef = viewContainerRef.createComponent(componentFactory, 0, injector); componentRef = viewContainerRef.createComponent(componentFactory, 0, injector);
this._component = componentRef.instance; this._component = componentRef.instance;
let actions = componentRef.instance.actions; const actions = componentRef.instance.actions;
if (componentRef.instance.refresh) { if (componentRef.instance.refresh) {
actions.push(new RefreshWidgetAction(this.refresh, this)); actions.push(new RefreshWidgetAction(this.refresh, this));
} }
@@ -186,7 +186,7 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
error('Error rendering widget', key, e); error('Error rendering widget', key, e);
return; return;
} }
let el = <HTMLElement>componentRef.location.nativeElement; const el = <HTMLElement>componentRef.location.nativeElement;
// set widget styles to conform to its box // set widget styles to conform to its box
el.style.overflow = 'hidden'; el.style.overflow = 'hidden';
@@ -207,8 +207,8 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
let selector = componentMap[key]; let selector = componentMap[key];
if (selector === undefined) { if (selector === undefined) {
// Load the widget from the registry // Load the widget from the registry
let widgetRegistry = <IInsightRegistry>Registry.as(Extensions.InsightContribution); const widgetRegistry = <IInsightRegistry>Registry.as(Extensions.InsightContribution);
let insightConfig = widgetRegistry.getRegisteredExtensionInsights(key); const insightConfig = widgetRegistry.getRegisteredExtensionInsights(key);
if (insightConfig === undefined) { if (insightConfig === undefined) {
return undefined; return undefined;
} }
@@ -221,12 +221,12 @@ export class DashboardWidgetWrapper extends AngularDisposable implements OnInit
} }
private updateTheme(theme: IColorTheme): void { private updateTheme(theme: IColorTheme): void {
let el = <HTMLElement>this._ref.nativeElement; const el = <HTMLElement>this._ref.nativeElement;
let headerEl: HTMLElement = this.header.nativeElement; const headerEl: HTMLElement = this.header.nativeElement;
let borderColor = theme.getColor(themeColors.SIDE_BAR_BACKGROUND, true); let borderColor = theme.getColor(themeColors.SIDE_BAR_BACKGROUND, true);
let backgroundColor = theme.getColor(colors.editorBackground, true); let backgroundColor = theme.getColor(colors.editorBackground, true);
let foregroundColor = theme.getColor(themeColors.SIDE_BAR_FOREGROUND, true); const foregroundColor = theme.getColor(themeColors.SIDE_BAR_FOREGROUND, true);
let border = theme.getColor(colors.contrastBorder, true); const border = theme.getColor(colors.contrastBorder, true);
if (this._config.background_color) { if (this._config.background_color) {
backgroundColor = theme.getColor(this._config.background_color); backgroundColor = theme.getColor(this._config.background_color);

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import 'vs/css!./webviewContent'; import 'vs/css!./webviewContent';
import { Component, forwardRef, Input, OnInit, Inject, ElementRef } from '@angular/core'; import { Component, forwardRef, Input, OnInit, Inject, ElementRef } from '@angular/core';
@@ -11,16 +12,13 @@ import { IDisposable } from 'vs/base/common/lifecycle';
import { addDisposableListener, EventType } from 'vs/base/browser/dom'; import { addDisposableListener, EventType } from 'vs/base/browser/dom';
import { memoize } from 'vs/base/common/decorators'; import { memoize } from 'vs/base/common/decorators';
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
import { IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { IEnvironmentService } from 'vs/platform/environment/common/environment';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { IDashboardWebview, IDashboardViewService } from 'sql/platform/dashboard/common/dashboardViewService'; import { IDashboardWebview, IDashboardViewService } from 'sql/platform/dashboard/common/dashboardViewService';
import { AngularDisposable } from 'sql/base/node/lifecycle'; import { AngularDisposable } from 'sql/base/node/lifecycle';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import * as azdata from 'azdata'; import * as azdata from 'azdata';
import { IContextKey } from 'vs/platform/contextkey/common/contextkey';
import { WebviewElement } from 'vs/workbench/contrib/webview/electron-browser/webviewElement'; import { WebviewElement } from 'vs/workbench/contrib/webview/electron-browser/webviewElement';
import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService'; import { IWorkbenchLayoutService, Parts } from 'vs/workbench/services/layout/browser/layoutService';
@@ -69,8 +67,8 @@ export class WebviewContent extends AngularDisposable implements OnInit, IDashbo
@memoize @memoize
public get connection(): azdata.connection.Connection { public get connection(): azdata.connection.Connection {
let currentConnection = this._dashboardService.connectionManagementService.connectionInfo.connectionProfile; const currentConnection = this._dashboardService.connectionManagementService.connectionInfo.connectionProfile;
let connection: azdata.connection.Connection = { const connection: azdata.connection.Connection = {
providerName: currentConnection.providerName, providerName: currentConnection.providerName,
connectionId: currentConnection.id, connectionId: currentConnection.id,
options: currentConnection.options options: currentConnection.options

View File

@@ -8,10 +8,10 @@ import 'vs/css!./widgetContent';
import { Component, Inject, Input, forwardRef, ViewChild, ViewChildren, QueryList, ChangeDetectorRef, ElementRef, AfterViewInit } from '@angular/core'; import { Component, Inject, Input, forwardRef, ViewChild, ViewChildren, QueryList, ChangeDetectorRef, ElementRef, AfterViewInit } from '@angular/core';
import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid'; import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { DashboardWidgetWrapper } from 'sql/workbench/parts/dashboard/contents/dashboardWidgetWrapper.component';
import { subscriptionToDisposable, AngularDisposable } from 'sql/base/node/lifecycle'; import { subscriptionToDisposable, AngularDisposable } from 'sql/base/node/lifecycle';
import { IDisposable } from 'vs/base/common/lifecycle'; import { IDisposable } from 'vs/base/common/lifecycle';
@@ -69,7 +69,7 @@ function configSorter(a, b): number {
@Component({ @Component({
selector: 'widget-content', selector: 'widget-content',
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/contents/widgetContent.component.html')) templateUrl: decodeURI(require.toUrl('sql/workbench/parts/dashboard/contents/widgetContent.component.html'))
}) })
export class WidgetContent extends AngularDisposable implements AfterViewInit { export class WidgetContent extends AngularDisposable implements AfterViewInit {
@Input() private widgets: WidgetConfig[]; @Input() private widgets: WidgetConfig[];
@@ -125,8 +125,8 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
ngAfterViewInit() { ngAfterViewInit() {
if (this.scrollContent) { if (this.scrollContent) {
let container = this._scrollContainer.nativeElement as HTMLElement; const container = this._scrollContainer.nativeElement as HTMLElement;
let scrollable = this._scrollable.nativeElement as HTMLElement; const scrollable = this._scrollable.nativeElement as HTMLElement;
container.removeChild(scrollable); container.removeChild(scrollable);
this._scrollableElement = new ScrollableElement(scrollable, { this._scrollableElement = new ScrollableElement(scrollable, {
@@ -140,7 +140,7 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
}); });
container.appendChild(this._scrollableElement.getDomNode()); container.appendChild(this._scrollableElement.getDomNode());
let initalHeight = getContentHeight(scrollable); const initalHeight = getContentHeight(scrollable);
this._scrollableElement.setScrollDimensions({ this._scrollableElement.setScrollDimensions({
scrollHeight: getContentHeight(scrollable), scrollHeight: getContentHeight(scrollable),
height: getContentHeight(container) height: getContentHeight(container)
@@ -152,7 +152,7 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
// unforunately because of angular rendering behavior we need to do a double check to make sure nothing changed after this point // unforunately because of angular rendering behavior we need to do a double check to make sure nothing changed after this point
setTimeout(() => { setTimeout(() => {
let currentheight = getContentHeight(scrollable); const currentheight = getContentHeight(scrollable);
if (initalHeight !== currentheight) { if (initalHeight !== currentheight) {
this._scrollableElement.setScrollDimensions({ this._scrollableElement.setScrollDimensions({
scrollHeight: currentheight, scrollHeight: currentheight,
@@ -176,8 +176,8 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
} }
private resetScrollDimensions() { private resetScrollDimensions() {
let container = this._scrollContainer.nativeElement as HTMLElement; const container = this._scrollContainer.nativeElement as HTMLElement;
let scrollable = this._scrollable.nativeElement as HTMLElement; const scrollable = this._scrollable.nativeElement as HTMLElement;
this._scrollableElement.setScrollDimensions({ this._scrollableElement.setScrollDimensions({
scrollHeight: getContentHeight(scrollable), scrollHeight: getContentHeight(scrollable),
@@ -219,8 +219,8 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
})); }));
this._editDispose.push(subscriptionToDisposable(this._grid.onResizeStop.subscribe((e: NgGridItem) => { this._editDispose.push(subscriptionToDisposable(this._grid.onResizeStop.subscribe((e: NgGridItem) => {
this._onResize.fire(); this._onResize.fire();
let event = e.getEventOutput(); const event = e.getEventOutput();
let config = this.originalConfig.find(i => i.id === event.payload.id); const config = this.originalConfig.find(i => i.id === event.payload.id);
if (!config.gridItemConfig) { if (!config.gridItemConfig) {
config.gridItemConfig = {}; config.gridItemConfig = {};
@@ -228,7 +228,7 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
config.gridItemConfig.sizex = e.sizex; config.gridItemConfig.sizex = e.sizex;
config.gridItemConfig.sizey = e.sizey; config.gridItemConfig.sizey = e.sizey;
let component = this._widgets.find(i => i.id === event.payload.id); const component = this._widgets.find(i => i.id === event.payload.id);
component.layout(); component.layout();
this._rewriteConfig(); this._rewriteConfig();
@@ -236,9 +236,9 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
}))); })));
this._editDispose.push(subscriptionToDisposable(this._grid.onDragStop.subscribe((e: NgGridItem) => { this._editDispose.push(subscriptionToDisposable(this._grid.onDragStop.subscribe((e: NgGridItem) => {
this._onResize.fire(); this._onResize.fire();
let event = e.getEventOutput(); const event = e.getEventOutput();
this._items.forEach(i => { this._items.forEach(i => {
let config = this.originalConfig.find(j => j.id === i.getEventOutput().payload.id); const config = this.originalConfig.find(j => j.id === i.getEventOutput().payload.id);
if ((config.gridItemConfig && config.gridItemConfig.col) || config.id === event.payload.id) { if ((config.gridItemConfig && config.gridItemConfig.col) || config.id === event.payload.id) {
if (!config.gridItemConfig) { if (!config.gridItemConfig) {
config.gridItemConfig = {}; config.gridItemConfig = {};
@@ -261,12 +261,12 @@ export class WidgetContent extends AngularDisposable implements AfterViewInit {
} }
private _rewriteConfig(): void { private _rewriteConfig(): void {
let writeableConfig = objects.deepClone(this.originalConfig); const writeableConfig = objects.deepClone(this.originalConfig);
writeableConfig.forEach(i => { writeableConfig.forEach(i => {
delete i.id; delete i.id;
}); });
let target: ConfigurationTarget = ConfigurationTarget.USER; const target: ConfigurationTarget = ConfigurationTarget.USER;
this.dashboardService.writeSettings([this.context, 'widgets'].join('.'), writeableConfig, target); this.dashboardService.writeSettings([this.context, 'widgets'].join('.'), writeableConfig, target);
} }
} }

View File

@@ -11,8 +11,8 @@ import { Router } from '@angular/router';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces'; import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
import * as Utils from 'sql/platform/connection/common/utils'; import * as Utils from 'sql/platform/connection/common/utils';
import { RefreshWidgetAction, EditDashboardAction } from 'sql/parts/dashboard/common/actions'; import { RefreshWidgetAction, EditDashboardAction } from 'sql/workbench/parts/dashboard/common/actions';
import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component'; import { DashboardPage } from 'sql/workbench/parts/dashboard/common/dashboardPage.component';
import { AngularDisposable } from 'sql/base/node/lifecycle'; import { AngularDisposable } from 'sql/base/node/lifecycle';
import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService'; import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
@@ -47,7 +47,7 @@ export class DashboardComponent extends AngularDisposable implements OnInit {
ngOnInit() { ngOnInit() {
this._register(this.themeService.onDidColorThemeChange(this.updateTheme, this)); this._register(this.themeService.onDidColorThemeChange(this.updateTheme, this));
this.updateTheme(this.themeService.getColorTheme()); this.updateTheme(this.themeService.getColorTheme());
let profile: IConnectionProfile = this._bootstrapService.getOriginalConnectionProfile(); const profile: IConnectionProfile = this._bootstrapService.getOriginalConnectionProfile();
this.actionbar = new ActionBar(this.actionbarContainer.nativeElement); this.actionbar = new ActionBar(this.actionbarContainer.nativeElement);
this.actionbar.push(new RefreshWidgetAction(this.refresh, this), { this.actionbar.push(new RefreshWidgetAction(this.refresh, this), {
icon: true, icon: true,
@@ -65,7 +65,7 @@ export class DashboardComponent extends AngularDisposable implements OnInit {
} }
private updateTheme(theme: IColorTheme): void { private updateTheme(theme: IColorTheme): void {
let headerEl = <HTMLElement>this.header.nativeElement; const headerEl = <HTMLElement>this.header.nativeElement;
headerEl.style.borderBottomColor = theme.getColor(themeColors.SIDE_BAR_BACKGROUND, true).toString(); headerEl.style.borderBottomColor = theme.getColor(themeColors.SIDE_BAR_BACKGROUND, true).toString();
headerEl.style.borderBottomWidth = '1px'; headerEl.style.borderBottomWidth = '1px';
headerEl.style.borderBottomStyle = 'solid'; headerEl.style.borderBottomStyle = 'solid';

View File

@@ -24,31 +24,31 @@ import * as TelemetryUtils from 'sql/common/telemetryUtilities';
import * as TelemetryKeys from 'sql/common/telemetryKeys'; import * as TelemetryKeys from 'sql/common/telemetryKeys';
/* Services */ /* Services */
import { BreadcrumbService } from 'sql/parts/dashboard/services/breadcrumb.service'; import { BreadcrumbService } from 'sql/workbench/parts/dashboard/services/breadcrumb.service';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
/* Directives */ /* Directives */
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; import { ComponentHostDirective } from 'sql/workbench/parts/dashboard/common/componentHost.directive';
/* Base Components */ /* Base Components */
import { DashboardComponent } from 'sql/parts/dashboard/dashboard.component'; import { DashboardComponent } from 'sql/workbench/parts/dashboard/dashboard.component';
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component'; import { DashboardWidgetWrapper } from 'sql/workbench/parts/dashboard/contents/dashboardWidgetWrapper.component';
import { DashboardWidgetContainer } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.component'; import { DashboardWidgetContainer } from 'sql/workbench/parts/dashboard/containers/dashboardWidgetContainer.component';
import { DashboardGridContainer } from 'sql/parts/dashboard/containers/dashboardGridContainer.component'; import { DashboardGridContainer } from 'sql/workbench/parts/dashboard/containers/dashboardGridContainer.component';
import { DashboardWebviewContainer } from 'sql/parts/dashboard/containers/dashboardWebviewContainer.component'; import { DashboardWebviewContainer } from 'sql/workbench/parts/dashboard/containers/dashboardWebviewContainer.component';
import { DashboardModelViewContainer } from 'sql/parts/dashboard/containers/dashboardModelViewContainer.component'; import { DashboardModelViewContainer } from 'sql/workbench/parts/dashboard/containers/dashboardModelViewContainer.component';
import { DashboardErrorContainer } from 'sql/parts/dashboard/containers/dashboardErrorContainer.component'; import { DashboardErrorContainer } from 'sql/workbench/parts/dashboard/containers/dashboardErrorContainer.component';
import { DashboardNavSection } from 'sql/parts/dashboard/containers/dashboardNavSection.component'; import { DashboardNavSection } from 'sql/workbench/parts/dashboard/containers/dashboardNavSection.component';
import { WidgetContent } from 'sql/parts/dashboard/contents/widgetContent.component'; import { WidgetContent } from 'sql/workbench/parts/dashboard/contents/widgetContent.component';
import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component'; import { ModelViewContent } from 'sql/parts/modelComponents/modelViewContent.component';
import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component'; import { ModelComponentWrapper } from 'sql/parts/modelComponents/modelComponentWrapper.component';
import { WebviewContent } from 'sql/parts/dashboard/contents/webviewContent.component'; import { WebviewContent } from 'sql/workbench/parts/dashboard/contents/webviewContent.component';
import { BreadcrumbComponent } from 'sql/base/browser/ui/breadcrumb/breadcrumb.component'; import { BreadcrumbComponent } from 'sql/base/browser/ui/breadcrumb/breadcrumb.component';
import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces'; import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
import { DashboardHomeContainer } from 'sql/parts/dashboard/containers/dashboardHomeContainer.component'; import { DashboardHomeContainer } from 'sql/workbench/parts/dashboard/containers/dashboardHomeContainer.component';
import { ControlHostContent } from 'sql/parts/dashboard/contents/controlHostContent.component'; import { ControlHostContent } from 'sql/workbench/parts/dashboard/contents/controlHostContent.component';
import { DashboardControlHostContainer } from 'sql/parts/dashboard/containers/dashboardControlHostContainer.component'; import { DashboardControlHostContainer } from 'sql/workbench/parts/dashboard/containers/dashboardControlHostContainer.component';
import { JobsViewComponent } from 'sql/parts/jobManagement/views/jobsView.component'; import { JobsViewComponent } from 'sql/parts/jobManagement/views/jobsView.component';
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component'; import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
import { AlertsViewComponent } from 'sql/parts/jobManagement/views/alertsView.component'; import { AlertsViewComponent } from 'sql/parts/jobManagement/views/alertsView.component';
@@ -61,7 +61,7 @@ import { EditableDropDown } from 'sql/base/browser/ui/editableDropdown/editableD
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox.component'; import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox.component';
import LoadingSpinner from 'sql/parts/modelComponents/loadingSpinner.component'; import LoadingSpinner from 'sql/parts/modelComponents/loadingSpinner.component';
let baseComponents = [DashboardHomeContainer, DashboardComponent, DashboardWidgetWrapper, DashboardWebviewContainer, const baseComponents = [DashboardHomeContainer, DashboardComponent, DashboardWidgetWrapper, DashboardWebviewContainer,
DashboardWidgetContainer, DashboardGridContainer, DashboardErrorContainer, DashboardNavSection, ModelViewContent, WebviewContent, WidgetContent, DashboardWidgetContainer, DashboardGridContainer, DashboardErrorContainer, DashboardNavSection, ModelViewContent, WebviewContent, WidgetContent,
ComponentHostDirective, BreadcrumbComponent, ControlHostContent, DashboardControlHostContainer, ComponentHostDirective, BreadcrumbComponent, ControlHostContent, DashboardControlHostContainer,
JobsViewComponent, AgentViewComponent, JobHistoryComponent, JobStepsViewComponent, AlertsViewComponent, ProxiesViewComponent, OperatorsViewComponent, JobsViewComponent, AgentViewComponent, JobHistoryComponent, JobStepsViewComponent, AlertsViewComponent, ProxiesViewComponent, OperatorsViewComponent,
@@ -73,21 +73,21 @@ import { PanelModule } from 'sql/base/browser/ui/panel/panel.module';
import { ScrollableModule } from 'sql/base/browser/ui/scrollable/scrollable.module'; import { ScrollableModule } from 'sql/base/browser/ui/scrollable/scrollable.module';
/* Pages */ /* Pages */
import { ServerDashboardPage } from 'sql/parts/dashboard/pages/serverDashboardPage.component'; import { ServerDashboardPage } from 'sql/workbench/parts/dashboard/pages/serverDashboardPage.component';
import { DatabaseDashboardPage } from 'sql/parts/dashboard/pages/databaseDashboardPage.component'; import { DatabaseDashboardPage } from 'sql/workbench/parts/dashboard/pages/databaseDashboardPage.component';
let pageComponents = [ServerDashboardPage, DatabaseDashboardPage]; const pageComponents = [ServerDashboardPage, DatabaseDashboardPage];
/* Widget Components */ /* Widget Components */
import { PropertiesWidgetComponent } from 'sql/parts/dashboard/widgets/properties/propertiesWidget.component'; import { PropertiesWidgetComponent } from 'sql/workbench/parts/dashboard/widgets/properties/propertiesWidget.component';
import { ExplorerWidget } from 'sql/parts/dashboard/widgets/explorer/explorerWidget.component'; import { ExplorerWidget } from 'sql/workbench/parts/dashboard/widgets/explorer/explorerWidget.component';
import { TasksWidget } from 'sql/parts/dashboard/widgets/tasks/tasksWidget.component'; import { TasksWidget } from 'sql/workbench/parts/dashboard/widgets/tasks/tasksWidget.component';
import { InsightsWidget } from 'sql/parts/dashboard/widgets/insights/insightsWidget.component'; import { InsightsWidget } from 'sql/workbench/parts/dashboard/widgets/insights/insightsWidget.component';
import { WebviewWidget } from 'sql/parts/dashboard/widgets/webview/webviewWidget.component'; import { WebviewWidget } from 'sql/workbench/parts/dashboard/widgets/webview/webviewWidget.component';
import { JobStepsViewComponent } from 'sql/parts/jobManagement/views/jobStepsView.component'; import { JobStepsViewComponent } from 'sql/parts/jobManagement/views/jobStepsView.component';
import { IInstantiationService, _util } from 'vs/platform/instantiation/common/instantiation'; import { IInstantiationService, _util } from 'vs/platform/instantiation/common/instantiation';
let widgetComponents = [ const widgetComponents = [
PropertiesWidgetComponent, PropertiesWidgetComponent,
ExplorerWidget, ExplorerWidget,
TasksWidget, TasksWidget,
@@ -96,10 +96,10 @@ let widgetComponents = [
]; ];
/* Insights */ /* Insights */
let insightComponents = Registry.as<IInsightRegistry>(Extensions.InsightContribution).getAllCtors(); const insightComponents = Registry.as<IInsightRegistry>(Extensions.InsightContribution).getAllCtors();
/* Model-backed components */ /* Model-backed components */
let extensionComponents = Registry.as<IComponentRegistry>(ComponentExtensions.ComponentContribution).getAllCtors(); const extensionComponents = Registry.as<IComponentRegistry>(ComponentExtensions.ComponentContribution).getAllCtors();
// Setup routes for various child components // Setup routes for various child components
const appRoutes: Routes = [ const appRoutes: Routes = [

View File

@@ -2,11 +2,12 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
import { IConfigurationRegistry, Extensions, IConfigurationNode } from 'vs/platform/configuration/common/configurationRegistry'; import { IConfigurationRegistry, Extensions, IConfigurationNode } from 'vs/platform/configuration/common/configurationRegistry';
import { DASHBOARD_CONFIG_ID } from 'sql/parts/dashboard/pages/dashboardPageContribution'; import { DASHBOARD_CONFIG_ID } from 'sql/workbench/parts/dashboard/pages/dashboardPageContribution';
import { DATABASE_DASHBOARD_SETTING, DATABASE_DASHBOARD_PROPERTIES, DATABASE_DASHBOARD_TABS, databaseDashboardSettingSchema, databaseDashboardPropertiesSchema, databaseDashboardTabsSchema } from 'sql/parts/dashboard/pages/databaseDashboardPage.contribution'; import { DATABASE_DASHBOARD_SETTING, DATABASE_DASHBOARD_PROPERTIES, DATABASE_DASHBOARD_TABS, databaseDashboardSettingSchema, databaseDashboardPropertiesSchema, databaseDashboardTabsSchema } from 'sql/workbench/parts/dashboard/pages/databaseDashboardPage.contribution';
import { SERVER_DASHBOARD_SETTING, SERVER_DASHBOARD_PROPERTIES, SERVER_DASHBOARD_TABS, serverDashboardSettingSchema, serverDashboardPropertiesSchema, serverDashboardTabsSchema } from 'sql/parts/dashboard/pages/serverDashboardPage.contribution'; import { SERVER_DASHBOARD_SETTING, SERVER_DASHBOARD_PROPERTIES, SERVER_DASHBOARD_TABS, serverDashboardSettingSchema, serverDashboardPropertiesSchema, serverDashboardTabsSchema } from 'sql/workbench/parts/dashboard/pages/serverDashboardPage.contribution';
const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration); const configurationRegistry = Registry.as<IConfigurationRegistry>(Extensions.Configuration);
const dashboardConfig: IConfigurationNode = { const dashboardConfig: IConfigurationNode = {

View File

@@ -15,7 +15,7 @@ import { DashboardInput } from './dashboardInput';
import { DashboardModule } from './dashboard.module'; import { DashboardModule } from './dashboard.module';
import { bootstrapAngular } from 'sql/services/bootstrap/bootstrapService'; import { bootstrapAngular } from 'sql/services/bootstrap/bootstrapService';
import { IDashboardComponentParams } from 'sql/services/bootstrap/bootstrapParams'; import { IDashboardComponentParams } from 'sql/services/bootstrap/bootstrapParams';
import { DASHBOARD_SELECTOR } from 'sql/parts/dashboard/dashboard.component'; import { DASHBOARD_SELECTOR } from 'sql/workbench/parts/dashboard/dashboard.component';
import { ConnectionContextKey } from 'sql/parts/connection/common/connectionContextKey'; import { ConnectionContextKey } from 'sql/parts/connection/common/connectionContextKey';
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService'; import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile'; import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
@@ -64,7 +64,7 @@ export class DashboardEditor extends BaseEditor {
} else { } else {
profile = this.input.connectionProfile; profile = this.input.connectionProfile;
} }
let serverInfo = this._connMan.getConnectionInfo(this.input.uri).serverInfo; const serverInfo = this._connMan.getConnectionInfo(this.input.uri).serverInfo;
this._dashboardService.changeToDashboard({ profile, serverInfo }); this._dashboardService.changeToDashboard({ profile, serverInfo });
} }
@@ -88,7 +88,7 @@ export class DashboardEditor extends BaseEditor {
$(parentElement).clearChildren(); $(parentElement).clearChildren();
if (!input.hasBootstrapped) { if (!input.hasBootstrapped) {
let container = DOM.$<HTMLElement>('.dashboardEditor'); const container = DOM.$<HTMLElement>('.dashboardEditor');
container.style.height = '100%'; container.style.height = '100%';
this._dashboardContainer = DOM.append(parentElement, container); this._dashboardContainer = DOM.append(parentElement, container);
this.input.container = this._dashboardContainer; this.input.container = this._dashboardContainer;
@@ -110,13 +110,13 @@ export class DashboardEditor extends BaseEditor {
} else { } else {
profile = this.input.connectionProfile; profile = this.input.connectionProfile;
} }
let serverInfo = this._connMan.getConnectionInfo(this.input.uri).serverInfo; const serverInfo = this._connMan.getConnectionInfo(this.input.uri).serverInfo;
this._dashboardService.changeToDashboard({ profile, serverInfo }); this._dashboardService.changeToDashboard({ profile, serverInfo });
let scopedContextService = this._contextKeyService.createScoped(input.container); const scopedContextService = this._contextKeyService.createScoped(input.container);
let connectionContextKey = new ConnectionContextKey(scopedContextService); const connectionContextKey = new ConnectionContextKey(scopedContextService);
connectionContextKey.set(input.connectionProfile); connectionContextKey.set(input.connectionProfile);
let params: IDashboardComponentParams = { const params: IDashboardComponentParams = {
connection: input.connectionProfile, connection: input.connectionProfile,
ownerUri: input.uri, ownerUri: input.uri,
scopedContextService, scopedContextService,
@@ -125,7 +125,7 @@ export class DashboardEditor extends BaseEditor {
input.hasBootstrapped = true; input.hasBootstrapped = true;
let uniqueSelector = bootstrapAngular(this.instantiationService, const uniqueSelector = bootstrapAngular(this.instantiationService,
DashboardModule, DashboardModule,
this._dashboardContainer, this._dashboardContainer,
DASHBOARD_SELECTOR, DASHBOARD_SELECTOR,

View File

@@ -51,7 +51,7 @@ export class DashboardInput extends EditorInput {
this._initializedPromise = _connectionService.connectIfNotConnected(_connectionProfile, 'dashboard').then( this._initializedPromise = _connectionService.connectIfNotConnected(_connectionProfile, 'dashboard').then(
u => { u => {
this._uri = u; this._uri = u;
let info = this._connectionService.getConnectionInfo(u); const info = this._connectionService.getConnectionInfo(u);
if (info) { if (info) {
this._onConnectionChanged = this._connectionService.onConnectionChanged(e => { this._onConnectionChanged = this._connectionService.onConnectionChanged(e => {
if (e.connectionUri === u) { if (e.connectionUri === u) {
@@ -115,7 +115,7 @@ export class DashboardInput extends EditorInput {
return; return;
} }
let parentNode = this._parentContainer.parentNode; const parentNode = this._parentContainer.parentNode;
if (parentNode) { if (parentNode) {
parentNode.removeChild(this._parentContainer); parentNode.removeChild(this._parentContainer);
this._parentContainer = null; this._parentContainer = null;

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Extensions, IDashboardWidgetRegistry } from 'sql/platform/dashboard/common/widgetRegistry'; import { Extensions, IDashboardWidgetRegistry } from 'sql/platform/dashboard/common/widgetRegistry';
import { Registry } from 'vs/platform/registry/common/platform'; import { Registry } from 'vs/platform/registry/common/platform';
@@ -14,7 +15,7 @@ let widgetRegistry = <IDashboardWidgetRegistry>Registry.as(Extensions.DashboardW
export function generateDashboardWidgetSchema(type?: 'database' | 'server', extension?: boolean): IJSONSchema { export function generateDashboardWidgetSchema(type?: 'database' | 'server', extension?: boolean): IJSONSchema {
let schemas; let schemas;
if (extension) { if (extension) {
let extensionSchemas = type === 'server' ? widgetRegistry.serverWidgetSchema.extensionProperties : type === 'database' ? widgetRegistry.databaseWidgetSchema.extensionProperties : widgetRegistry.allSchema.extensionProperties; const extensionSchemas = type === 'server' ? widgetRegistry.serverWidgetSchema.extensionProperties : type === 'database' ? widgetRegistry.databaseWidgetSchema.extensionProperties : widgetRegistry.allSchema.extensionProperties;
schemas = type === 'server' ? widgetRegistry.serverWidgetSchema.properties : type === 'database' ? widgetRegistry.databaseWidgetSchema.properties : widgetRegistry.allSchema.properties; schemas = type === 'server' ? widgetRegistry.serverWidgetSchema.properties : type === 'database' ? widgetRegistry.databaseWidgetSchema.properties : widgetRegistry.allSchema.properties;
schemas = mixin(schemas, extensionSchemas, true); schemas = mixin(schemas, extensionSchemas, true);
} else { } else {
@@ -64,7 +65,7 @@ export function generateDashboardWidgetSchema(type?: 'database' | 'server', exte
export function generateDashboardGridLayoutSchema(type?: 'database' | 'server', extension?: boolean): IJSONSchema { export function generateDashboardGridLayoutSchema(type?: 'database' | 'server', extension?: boolean): IJSONSchema {
let schemas; let schemas;
if (extension) { if (extension) {
let extensionSchemas = type === 'server' ? widgetRegistry.serverWidgetSchema.extensionProperties : type === 'database' ? widgetRegistry.databaseWidgetSchema.extensionProperties : widgetRegistry.allSchema.extensionProperties; const extensionSchemas = type === 'server' ? widgetRegistry.serverWidgetSchema.extensionProperties : type === 'database' ? widgetRegistry.databaseWidgetSchema.extensionProperties : widgetRegistry.allSchema.extensionProperties;
schemas = type === 'server' ? widgetRegistry.serverWidgetSchema.properties : type === 'database' ? widgetRegistry.databaseWidgetSchema.properties : widgetRegistry.allSchema.properties; schemas = type === 'server' ? widgetRegistry.serverWidgetSchema.properties : type === 'database' ? widgetRegistry.databaseWidgetSchema.properties : widgetRegistry.allSchema.properties;
schemas = mixin(schemas, extensionSchemas, true); schemas = mixin(schemas, extensionSchemas, true);
} else { } else {

View File

@@ -5,11 +5,11 @@
import { OnInit, Inject, forwardRef, ChangeDetectorRef, ElementRef } from '@angular/core'; import { OnInit, Inject, forwardRef, ChangeDetectorRef, ElementRef } from '@angular/core';
import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component'; import { DashboardPage } from 'sql/workbench/parts/dashboard/common/dashboardPage.component';
import { BreadcrumbClass } from 'sql/parts/dashboard/services/breadcrumb.service'; import { BreadcrumbClass } from 'sql/workbench/parts/dashboard/services/breadcrumb.service';
import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces'; import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService'; import { IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';

View File

@@ -5,11 +5,11 @@
import { OnInit, Inject, forwardRef, ChangeDetectorRef, ElementRef } from '@angular/core'; import { OnInit, Inject, forwardRef, ChangeDetectorRef, ElementRef } from '@angular/core';
import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component'; import { DashboardPage } from 'sql/workbench/parts/dashboard/common/dashboardPage.component';
import { BreadcrumbClass } from 'sql/parts/dashboard/services/breadcrumb.service'; import { BreadcrumbClass } from 'sql/workbench/parts/dashboard/services/breadcrumb.service';
import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces'; import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/workbench/parts/dashboard/services/dashboardServiceInterface.service';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService'; import { IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
@@ -50,7 +50,7 @@ export class ServerDashboardPage extends DashboardPage implements OnInit {
super(dashboardService, el, _cd, instantiationService, notificationService, angularEventingService, configurationService); super(dashboardService, el, _cd, instantiationService, notificationService, angularEventingService, configurationService);
// special-case handling for MSSQL data provider // special-case handling for MSSQL data provider
let connInfo = this.dashboardService.connectionManagementService.connectionInfo; const connInfo = this.dashboardService.connectionManagementService.connectionInfo;
if (connInfo && connInfo.providerId === 'MSSQL') { if (connInfo && connInfo.providerId === 'MSSQL') {
// revert back to default database // revert back to default database
this._letDashboardPromise = this.dashboardService.connectionManagementService.changeDatabase('master').then(); this._letDashboardPromise = this.dashboardService.connectionManagementService.changeDatabase('master').then();

View File

@@ -2,9 +2,10 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';
import { generateDashboardWidgetSchema, generateDashboardTabSchema } from 'sql/parts/dashboard/pages/dashboardPageContribution'; import { generateDashboardWidgetSchema, generateDashboardTabSchema } from 'sql/workbench/parts/dashboard/pages/dashboardPageContribution';
export interface IPropertiesConfig { export interface IPropertiesConfig {
edition: number | Array<number>; edition: number | Array<number>;
@@ -73,7 +74,7 @@ export const serverDashboardPropertiesSchema: IJSONSchema = {
] ]
}; };
let defaultVal = [ const defaultVal = [
{ {
name: 'Tasks', name: 'Tasks',
widget: { widget: {

View File

@@ -34,13 +34,13 @@ export class BreadcrumbService implements IBreadcrumbService {
public setBreadcrumbs(page: BreadcrumbClass) { public setBreadcrumbs(page: BreadcrumbClass) {
this._currentPage = page; this._currentPage = page;
this.itemBreadcrums = []; this.itemBreadcrums = [];
let refList: MenuItem[] = this.getBreadcrumbsLink(page); const refList: MenuItem[] = this.getBreadcrumbsLink(page);
this.breadcrumbItem.next(refList); this.breadcrumbItem.next(refList);
} }
private getBreadcrumbsLink(page: BreadcrumbClass): MenuItem[] { private getBreadcrumbsLink(page: BreadcrumbClass): MenuItem[] {
this.itemBreadcrums = []; this.itemBreadcrums = [];
let profile = this.commonService.connectionManagementService.connectionInfo.connectionProfile; const profile = this.commonService.connectionManagementService.connectionInfo.connectionProfile;
this.itemBreadcrums.push({ label: nls.localize('homeCrumb', 'Home') }); this.itemBreadcrums.push({ label: nls.localize('homeCrumb', 'Home') });
switch (page) { switch (page) {
case BreadcrumbClass.DatabasePage: case BreadcrumbClass.DatabasePage:

View File

@@ -17,7 +17,7 @@ import { IQueryManagementService } from 'sql/platform/query/common/queryManageme
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils'; import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
import { AngularEventType, IAngularEvent, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService'; import { AngularEventType, IAngularEvent, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
import { IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry'; import { IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry';
import { TabSettingConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { TabSettingConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
/* VS imports */ /* VS imports */

View File

@@ -79,7 +79,7 @@ export class ObjectMetadataWrapper implements ObjectMetadata {
// otherwise compare the schema // otherwise compare the schema
} else { } else {
let schemaCompare: number = metadata1.schema && metadata2.schema const schemaCompare: number = metadata1.schema && metadata2.schema
? metadata1.schema.localeCompare(metadata2.schema) ? metadata1.schema.localeCompare(metadata2.schema)
// schemas are not expected to be undefined, but if they are then compare using object names // schemas are not expected to be undefined, but if they are then compare using object names
: 0; : 0;
@@ -172,7 +172,7 @@ export class ExplorerController extends TreeDefaults.DefaultController {
} }
protected onEnter(tree: tree.ITree, event: IKeyboardEvent): boolean { protected onEnter(tree: tree.ITree, event: IKeyboardEvent): boolean {
let result = super.onEnter(tree, event); const result = super.onEnter(tree, event);
if (result) { if (result) {
const focus = tree.getFocus(); const focus = tree.getFocus();
if (focus && !(focus instanceof ObjectMetadataWrapper)) { if (focus && !(focus instanceof ObjectMetadataWrapper)) {
@@ -251,8 +251,8 @@ export class ExplorerRenderer implements tree.IRenderer {
} }
public renderTemplate(tree: tree.ITree, templateId: string, container: HTMLElement): IListTemplate { public renderTemplate(tree: tree.ITree, templateId: string, container: HTMLElement): IListTemplate {
let row = $('.list-row'); const row = $('.list-row');
let label = $('.label'); const label = $('.label');
let icon: HTMLElement; let icon: HTMLElement;
if (templateId === TEMPLATEIDS.object) { if (templateId === TEMPLATEIDS.object) {
@@ -313,7 +313,7 @@ export class ExplorerFilter implements tree.IFilter {
if (!this._filterString) { if (!this._filterString) {
return true; return true;
} }
let filterString = this._filterString.trim().toLowerCase(); const filterString = this._filterString.trim().toLowerCase();
return element.databaseName.toLowerCase().includes(filterString); return element.databaseName.toLowerCase().includes(filterString);
} }
@@ -330,7 +330,7 @@ export class ExplorerFilter implements tree.IFilter {
let metadataType: MetadataType; let metadataType: MetadataType;
if (filterString.includes(':')) { if (filterString.includes(':')) {
let filterArray = filterString.split(':'); const filterArray = filterString.split(':');
if (filterArray.length > 2) { if (filterArray.length > 2) {
filterString = filterArray.slice(1, filterArray.length - 1).join(':'); filterString = filterArray.slice(1, filterArray.length - 1).join(':');
@@ -371,7 +371,7 @@ export class ExplorerFilter implements tree.IFilter {
} }
function getExplorerActions(element: TreeResource, instantiationService: IInstantiationService, capabilitiesService: ICapabilitiesService, info: ConnectionManagementInfo): IAction[] { function getExplorerActions(element: TreeResource, instantiationService: IInstantiationService, capabilitiesService: ICapabilitiesService, info: ConnectionManagementInfo): IAction[] {
let actions: IAction[] = []; const actions: IAction[] = [];
if (element instanceof ObjectMetadataWrapper) { if (element instanceof ObjectMetadataWrapper) {
if (element.metadataType === MetadataType.View || element.metadataType === MetadataType.Table) { if (element.metadataType === MetadataType.View || element.metadataType === MetadataType.Table) {
@@ -430,7 +430,7 @@ class ExplorerScriptSelectAction extends ScriptSelectAction {
} }
public run(actionContext: BaseActionContext): Promise<boolean> { public run(actionContext: BaseActionContext): Promise<boolean> {
let promise = super.run(actionContext); const promise = super.run(actionContext);
this.progressService.showWhile(promise); this.progressService.showWhile(promise);
return promise; return promise;
} }
@@ -449,7 +449,7 @@ class ExplorerScriptCreateAction extends ScriptCreateAction {
} }
public run(actionContext: BaseActionContext): Promise<boolean> { public run(actionContext: BaseActionContext): Promise<boolean> {
let promise = super.run(actionContext); const promise = super.run(actionContext);
this.progressService.showWhile(promise); this.progressService.showWhile(promise);
return promise; return promise;
} }
@@ -468,7 +468,7 @@ class ExplorerScriptAlterAction extends ScriptAlterAction {
} }
public run(actionContext: BaseActionContext): Promise<boolean> { public run(actionContext: BaseActionContext): Promise<boolean> {
let promise = super.run(actionContext); const promise = super.run(actionContext);
this.progressService.showWhile(promise); this.progressService.showWhile(promise);
return promise; return promise;
} }
@@ -487,7 +487,7 @@ class ExplorerScriptExecuteAction extends ScriptExecuteAction {
} }
public run(actionContext: BaseActionContext): Promise<boolean> { public run(actionContext: BaseActionContext): Promise<boolean> {
let promise = super.run(actionContext); const promise = super.run(actionContext);
this.progressService.showWhile(promise); this.progressService.showWhile(promise);
return promise; return promise;
} }
@@ -504,7 +504,7 @@ class ExplorerManageAction extends ManageAction {
} }
public run(actionContext: ManageActionContext): Promise<boolean> { public run(actionContext: ManageActionContext): Promise<boolean> {
let promise = super.run(actionContext); const promise = super.run(actionContext);
this._progressService.showWhile(promise); this._progressService.showWhile(promise);
return promise; return promise;
} }

View File

@@ -10,7 +10,7 @@ import 'vs/css!./media/explorerWidget';
import { Component, Inject, forwardRef, ChangeDetectorRef, OnInit, ViewChild, ElementRef } from '@angular/core'; import { Component, Inject, forwardRef, ChangeDetectorRef, OnInit, ViewChild, ElementRef } from '@angular/core';
import { Router } from '@angular/router'; import { Router } from '@angular/router';
import { DashboardWidget, IDashboardWidget, WidgetConfig, WIDGET_CONFIG } from 'sql/parts/dashboard/common/dashboardWidget'; import { DashboardWidget, IDashboardWidget, WidgetConfig, WIDGET_CONFIG } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils'; import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
import { ExplorerFilter, ExplorerRenderer, ExplorerDataSource, ExplorerController, ObjectMetadataWrapper, ExplorerModel } from './explorerTree'; import { ExplorerFilter, ExplorerRenderer, ExplorerDataSource, ExplorerController, ObjectMetadataWrapper, ExplorerModel } from './explorerTree';
@@ -31,7 +31,7 @@ import { ScrollbarVisibility } from 'vs/base/common/scrollable';
@Component({ @Component({
selector: 'explorer-widget', selector: 'explorer-widget',
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/widgets/explorer/explorerWidget.component.html')) templateUrl: decodeURI(require.toUrl('sql/workbench/parts/dashboard/widgets/explorer/explorerWidget.component.html'))
}) })
export class ExplorerWidget extends DashboardWidget implements IDashboardWidget, OnInit { export class ExplorerWidget extends DashboardWidget implements IDashboardWidget, OnInit {
private _input: InputBox; private _input: InputBox;
@@ -75,9 +75,9 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
ngOnInit() { ngOnInit() {
this._inited = true; this._inited = true;
let placeholderLabel = this._config.context === 'database' ? nls.localize('seachObjects', 'Search by name of type (a:, t:, v:, f:, or sp:)') : nls.localize('searchDatabases', 'Search databases'); const placeholderLabel = this._config.context === 'database' ? nls.localize('seachObjects', 'Search by name of type (a:, t:, v:, f:, or sp:)') : nls.localize('searchDatabases', 'Search databases');
let inputOptions: IInputOptions = { const inputOptions: IInputOptions = {
placeholder: placeholderLabel, placeholder: placeholderLabel,
ariaLabel: placeholderLabel ariaLabel: placeholderLabel
}; };
@@ -106,7 +106,7 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
this._register(toDisposableSubscription(this._bootstrap.metadataService.metadata.subscribe( this._register(toDisposableSubscription(this._bootstrap.metadataService.metadata.subscribe(
data => { data => {
if (data) { if (data) {
let objectData = ObjectMetadataWrapper.createFromObjectMetadata(data.objectMetadata); const objectData = ObjectMetadataWrapper.createFromObjectMetadata(data.objectMetadata);
objectData.sort(ObjectMetadataWrapper.sort); objectData.sort(ObjectMetadataWrapper.sort);
this._treeDataSource.data = objectData; this._treeDataSource.data = objectData;
this._tree.setInput(new ExplorerModel()); this._tree.setInput(new ExplorerModel());
@@ -117,13 +117,13 @@ export class ExplorerWidget extends DashboardWidget implements IDashboardWidget,
} }
))); )));
} else { } else {
let currentProfile = this._bootstrap.connectionManagementService.connectionInfo.connectionProfile; const currentProfile = this._bootstrap.connectionManagementService.connectionInfo.connectionProfile;
this._register(toDisposableSubscription(this._bootstrap.metadataService.databaseNames.subscribe( this._register(toDisposableSubscription(this._bootstrap.metadataService.databaseNames.subscribe(
data => { data => {
// Handle the case where there is no metadata service // Handle the case where there is no metadata service
data = data || []; data = data || [];
let profileData = data.map(d => { const profileData = data.map(d => {
let profile = new ConnectionProfile(this.capabilitiesService, currentProfile); const profile = new ConnectionProfile(this.capabilitiesService, currentProfile);
profile.databaseName = d; profile.databaseName = d;
return profile; return profile;
}); });

View File

@@ -6,7 +6,7 @@
import { IJSONSchema } from 'vs/base/common/jsonSchema'; import { IJSONSchema } from 'vs/base/common/jsonSchema';
import { registerDashboardWidget } from 'sql/platform/dashboard/common/widgetRegistry'; import { registerDashboardWidget } from 'sql/platform/dashboard/common/widgetRegistry';
let explorerSchema: IJSONSchema = { const explorerSchema: IJSONSchema = {
type: 'object', type: 'object',
}; };

View File

@@ -2,6 +2,7 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { Action } from 'vs/base/common/actions'; import { Action } from 'vs/base/common/actions';
import * as nls from 'vs/nls'; import * as nls from 'vs/nls';

View File

@@ -2,15 +2,16 @@
* Copyright (c) Microsoft Corporation. All rights reserved. * Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information. * Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/ *--------------------------------------------------------------------------------------------*/
import { import {
Component, Inject, forwardRef, AfterContentInit, Component, Inject, forwardRef, AfterContentInit,
ComponentFactoryResolver, ViewChild, ChangeDetectorRef, Injector ComponentFactoryResolver, ViewChild, ChangeDetectorRef, Injector
} from '@angular/core'; } from '@angular/core';
import { Observable } from 'rxjs/Observable'; import { Observable } from 'rxjs/Observable';
import { DashboardWidget, IDashboardWidget, WIDGET_CONFIG, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget'; import { DashboardWidget, IDashboardWidget, WIDGET_CONFIG, WidgetConfig } from 'sql/workbench/parts/dashboard/common/dashboardWidget';
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service'; import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive'; import { ComponentHostDirective } from 'sql/workbench/parts/dashboard/common/componentHost.directive';
import { InsightAction, InsightActionContext } from 'sql/workbench/common/actions'; import { InsightAction, InsightActionContext } from 'sql/workbench/common/actions';
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils'; import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
import { IInsightsConfig, IInsightsView } from './interfaces'; import { IInsightsConfig, IInsightsView } from './interfaces';
@@ -85,9 +86,9 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
this._parseConfig().then(() => { this._parseConfig().then(() => {
if (!this._checkStorage()) { if (!this._checkStorage()) {
let promise = this._runQuery(); const promise = this._runQuery();
this.queryObv = Observable.fromPromise(promise); this.queryObv = Observable.fromPromise(promise);
let cancelablePromise = createCancelablePromise(() => { const cancelablePromise = createCancelablePromise(() => {
return promise.then( return promise.then(
result => { result => {
this._loading = false; this._loading = false;
@@ -150,7 +151,7 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
} }
get actions(): Array<Action> { get actions(): Array<Action> {
let actions: Array<Action> = []; const actions: Array<Action> = [];
if (this.insightConfig.details && (this.insightConfig.details.query || this.insightConfig.details.queryFile)) { if (this.insightConfig.details && (this.insightConfig.details.query || this.insightConfig.details.queryFile)) {
actions.push(this.instantiationService.createInstance(InsightAction, InsightAction.ID, InsightAction.LABEL)); actions.push(this.instantiationService.createInstance(InsightAction, InsightAction.ID, InsightAction.LABEL));
} }
@@ -167,8 +168,8 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
private _storeResult(result: SimpleExecuteResult): SimpleExecuteResult { private _storeResult(result: SimpleExecuteResult): SimpleExecuteResult {
if (this.insightConfig.cacheId) { if (this.insightConfig.cacheId) {
let currentTime = new Date(); const currentTime = new Date();
let store: IStorageResult = { const store: IStorageResult = {
date: currentTime.toString(), date: currentTime.toString(),
results: result results: result
}; };
@@ -181,10 +182,10 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
private _checkStorage(): boolean { private _checkStorage(): boolean {
if (this.insightConfig.cacheId) { if (this.insightConfig.cacheId) {
let storage = this.storageService.get(this._getStorageKey(), StorageScope.GLOBAL); const storage = this.storageService.get(this._getStorageKey(), StorageScope.GLOBAL);
if (storage) { if (storage) {
let storedResult: IStorageResult = JSON.parse(storage); const storedResult: IStorageResult = JSON.parse(storage);
let date = new Date(storedResult.date); const date = new Date(storedResult.date);
this.lastUpdated = nls.localize('insights.lastUpdated', "Last Updated: {0} {1}", date.toLocaleTimeString(), date.toLocaleDateString()); this.lastUpdated = nls.localize('insights.lastUpdated', "Last Updated: {0} {1}", date.toLocaleTimeString(), date.toLocaleDateString());
this._loading = false; this._loading = false;
if (this._init) { if (this._init) {
@@ -235,10 +236,10 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
return; return;
} }
let componentFactory = this._componentFactoryResolver.resolveComponentFactory<IInsightsView>(insightRegistry.getCtorFromId(this._typeKey)); const componentFactory = this._componentFactoryResolver.resolveComponentFactory<IInsightsView>(insightRegistry.getCtorFromId(this._typeKey));
let componentRef = this.componentHost.viewContainerRef.createComponent(componentFactory, 0, this._injector); const componentRef = this.componentHost.viewContainerRef.createComponent(componentFactory, 0, this._injector);
let componentInstance = componentRef.instance; const componentInstance = componentRef.instance;
// check if the setter is defined // check if the setter is defined
if (componentInstance.setConfig) { if (componentInstance.setConfig) {
@@ -289,7 +290,7 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
// When the editor.accessibilitySupport setting is on, we will force the chart type to be table. // When the editor.accessibilitySupport setting is on, we will force the chart type to be table.
// so that the information is accessible to the user. // so that the information is accessible to the user.
// count chart type is already a text based chart, we don't have to apply this rule for it. // count chart type is already a text based chart, we don't have to apply this rule for it.
let isAccessibilitySupportOn = this._configurationService.getValue('editor.accessibilitySupport') === 'on'; const isAccessibilitySupportOn = this._configurationService.getValue('editor.accessibilitySupport') === 'on';
if (isAccessibilitySupportOn && this._typeKey !== 'count') { if (isAccessibilitySupportOn && this._typeKey !== 'count') {
this._typeKey = 'table'; this._typeKey = 'table';
} }
@@ -297,7 +298,7 @@ export class InsightsWidget extends DashboardWidget implements IDashboardWidget,
if (types.isStringArray(this.insightConfig.query)) { if (types.isStringArray(this.insightConfig.query)) {
this.insightConfig.query = this.insightConfig.query.join(' '); this.insightConfig.query = this.insightConfig.query.join(' ');
} else if (this.insightConfig.queryFile) { } else if (this.insightConfig.queryFile) {
let filePath = await resolveQueryFilePath(this.insightConfig.queryFile, const filePath = await resolveQueryFilePath(this.insightConfig.queryFile,
this._workspaceContextService, this._workspaceContextService,
this._configurationResolverService); this._configurationResolverService);

Some files were not shown because too many files have changed in this diff Show More