Archived
Initial Code Layering (#3788)
* working on formatting * fixed basic lint errors; starting moving things to their appropriate location * formatting * update tslint to match the version of vscode we have * remove unused code * work in progress fixing layering * formatting * moved connection management service to platform * formatting * add missing file * moving more servies * formatting * moving more services * formatting * wip * moving more services * formatting * revert back tslint rules * move css file * add missing svgs
This commit is contained in:
@@ -14,7 +14,7 @@
|
|||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"declaration": true
|
"declaration": false
|
||||||
},
|
},
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules"
|
"node_modules"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"declaration": true
|
"declaration": false
|
||||||
},
|
},
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules"
|
"node_modules"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
"emitDecoratorMetadata": true,
|
"emitDecoratorMetadata": true,
|
||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"declaration": true
|
"declaration": false
|
||||||
},
|
},
|
||||||
"exclude": [
|
"exclude": [
|
||||||
"node_modules"
|
"node_modules"
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ export class CreateSessionDialog {
|
|||||||
|
|
||||||
private updateSessionName() {
|
private updateSessionName() {
|
||||||
if (this.templatesBox.value) {
|
if (this.templatesBox.value) {
|
||||||
this.sessionNameBox.value = `ADS_${this.templatesBox.value.toString()}`
|
this.sessionNameBox.value = `ADS_${this.templatesBox.value.toString()}`;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import 'vs/css!./media/breadcrumb';
|
|||||||
import { Component, Inject, forwardRef, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
import { Component, Inject, forwardRef, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
import { toDisposableSubscription } from 'sql/parts/common/rxjsUtils';
|
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
|
||||||
import { IBreadcrumbService, MenuItem } from './interfaces';
|
import { IBreadcrumbService, MenuItem } from './interfaces';
|
||||||
|
|
||||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
|
|
||||||
import { Dropdown, IDropdownOptions } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
import { Dropdown, IDropdownOptions } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
|
|
||||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { attachEditableDropdownStyler } from 'sql/common/theme/styler';
|
import { attachEditableDropdownStyler } from 'sql/common/theme/styler';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
|
|
||||||
import { InputBox as vsInputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
import { InputBox as vsInputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
|
|
||||||
import { attachInputBoxStyler } from 'vs/platform/theme/common/styler';
|
import { attachInputBoxStyler } from 'vs/platform/theme/common/styler';
|
||||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import './panelStyles';
|
|||||||
|
|
||||||
import { TabComponent } from './tab.component';
|
import { TabComponent } from './tab.component';
|
||||||
import { ScrollableDirective } from 'sql/base/browser/ui/scrollable/scrollable.directive';
|
import { ScrollableDirective } from 'sql/base/browser/ui/scrollable/scrollable.directive';
|
||||||
import { subscriptionToDisposable } from 'sql/base/common/lifecycle';
|
import { subscriptionToDisposable } from 'sql/base/node/lifecycle';
|
||||||
|
|
||||||
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||||
import { Action } from 'vs/base/common/actions';
|
import { Action } from 'vs/base/common/actions';
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import { Directive, Inject, forwardRef, ElementRef, Input } from '@angular/core'
|
|||||||
import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
|
import { ScrollableElement } from 'vs/base/browser/ui/scrollbar/scrollableElement';
|
||||||
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
||||||
import { getContentHeight, addDisposableListener, EventType, getContentWidth } from 'vs/base/browser/dom';
|
import { getContentHeight, addDisposableListener, EventType, getContentWidth } from 'vs/base/browser/dom';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
|
|
||||||
@Directive({
|
@Directive({
|
||||||
selector: '[scrollable]'
|
selector: '[scrollable]'
|
||||||
@@ -74,7 +74,7 @@ export class ScrollableDirective extends AngularDisposable {
|
|||||||
private resetScrollDimensions() {
|
private resetScrollDimensions() {
|
||||||
this.scrollableElement.setScrollDimensions({
|
this.scrollableElement.setScrollDimensions({
|
||||||
scrollHeight: this.verticalScroll === ScrollbarVisibility.Auto ? getContentHeight(this.scrolled) : undefined,
|
scrollHeight: this.verticalScroll === ScrollbarVisibility.Auto ? getContentHeight(this.scrolled) : undefined,
|
||||||
height: this.verticalScroll === ScrollbarVisibility.Auto ? getContentHeight(this.parent) : undefined,
|
height: this.verticalScroll === ScrollbarVisibility.Auto ? getContentHeight(this.parent) : undefined,
|
||||||
scrollWidth: this.horizontalScroll === ScrollbarVisibility.Auto ? this.scrolled.scrollWidth : undefined,
|
scrollWidth: this.horizontalScroll === ScrollbarVisibility.Auto ? this.scrolled.scrollWidth : undefined,
|
||||||
width: this.horizontalScroll === ScrollbarVisibility.Auto ? this.scrolled.offsetWidth : undefined
|
width: this.horizontalScroll === ScrollbarVisibility.Auto ? this.scrolled.offsetWidth : undefined
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
|
|
||||||
import { SelectBox as vsSelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
import { SelectBox as vsSelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
|
|
||||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { ISelectData } from 'vs/base/browser/ui/selectBox/selectBox';
|
import { ISelectData } from 'vs/base/browser/ui/selectBox/selectBox';
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ export class RowDetailView {
|
|||||||
public subscribeToOnAsyncResponse() {
|
public subscribeToOnAsyncResponse() {
|
||||||
this.onAsyncResponse.subscribe((e, args) => {
|
this.onAsyncResponse.subscribe((e, args) => {
|
||||||
if (!args || !args.itemDetail) {
|
if (!args || !args.itemDetail) {
|
||||||
throw 'Slick.RowDetailView plugin requires the onAsyncResponse() to supply "args.itemDetail" property.';
|
throw new Error('Slick.RowDetailView plugin requires the onAsyncResponse() to supply "args.itemDetail" property.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we just want to load in a view directly we can use detailView property to do so
|
// If we just want to load in a view directly we can use detailView property to do so
|
||||||
@@ -278,7 +278,7 @@ export class RowDetailView {
|
|||||||
item._isPadding = false;
|
item._isPadding = false;
|
||||||
item._parent = parent;
|
item._parent = parent;
|
||||||
item._offset = offset;
|
item._offset = offset;
|
||||||
item.name = parent.message ? parent.message : nls.localize('rowDetailView.loadError','Loading Error...');
|
item.name = parent.message ? parent.message : nls.localize('rowDetailView.loadError', 'Loading Error...');
|
||||||
parent._child = item;
|
parent._child = item;
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
@@ -349,15 +349,13 @@ export class RowDetailView {
|
|||||||
//slick-cell to escape the cell overflow clipping.
|
//slick-cell to escape the cell overflow clipping.
|
||||||
|
|
||||||
//sneaky extra </div> inserted here-----------------v
|
//sneaky extra </div> inserted here-----------------v
|
||||||
/* tslint:disable:no-unexternalized-strings */
|
html.push('<div class="detailView-toggle collapse"></div></div>');
|
||||||
html.push("<div class='detailView-toggle collapse'></div></div>");
|
|
||||||
|
|
||||||
html.push("<div id='cellDetailView_", dataContext.id, "' class='dynamic-cell-detail' "); //apply custom css to detail
|
html.push(`<div id='cellDetailView_${dataContext.id}' class='dynamic-cell-detail' `); //apply custom css to detail
|
||||||
html.push("style='height:", dataContext._height, "px;"); //set total height of padding
|
html.push(`style=\'height:${dataContext._height}px;`); //set total height of padding
|
||||||
html.push("top:", rowHeight, "px'>"); //shift detail below 1st row
|
html.push(`top:${rowHeight}px'>`); //shift detail below 1st row
|
||||||
html.push("<div id='detailViewContainer_", dataContext.id, "' class='detail-container' style='max-height:" + (dataContext._height - rowHeight + bottomMargin) + "px'>"); //sub ctr for custom styling
|
html.push(`<div id='detailViewContainer_${dataContext.id}"' class='detail-container' style='max-height:${(dataContext._height - rowHeight + bottomMargin)}px'>`); //sub ctr for custom styling
|
||||||
html.push("<div id='innerDetailView_", dataContext.id, "'>", escape(dataContext._detailContent), "</div></div>");
|
html.push(`<div id='innerDetailView_${dataContext.id}'>${escape(dataContext._detailContent)}</div></div>`);
|
||||||
/* tslint:enable:no-unexternalized-strings */
|
|
||||||
//&omit a final closing detail container </div> that would come next
|
//&omit a final closing detail container </div> that would come next
|
||||||
|
|
||||||
return html.join('');
|
return html.join('');
|
||||||
@@ -401,9 +399,9 @@ export class RowDetailView {
|
|||||||
this._grid.getOptions().minRowBuffer = item._sizePadding + 3;
|
this._grid.getOptions().minRowBuffer = item._sizePadding + 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
mainContainer.setAttribute('style', 'max-height: ' + item._height + 'px');
|
mainContainer.setAttribute('style', `max-height: ${item._height}px`);
|
||||||
if (cellItem) {
|
if (cellItem) {
|
||||||
cellItem.setAttribute('style', 'height: ' + item._height + 'px;top:' + rowHeight + 'px');
|
cellItem.setAttribute('style', `height: ${item._height}px;top:${rowHeight}px`);
|
||||||
}
|
}
|
||||||
|
|
||||||
let idxParent = this._dataView.getIdxById(item.id);
|
let idxParent = this._dataView.getIdxById(item.id);
|
||||||
|
|||||||
@@ -11,17 +11,17 @@ import { DefaultUrlSerializer, UrlSerializer, UrlTree } from '@angular/router';
|
|||||||
* encode and decode the parentheses. Github issue angular/angular#10280, microsoft/carbon#1116
|
* encode and decode the parentheses. Github issue angular/angular#10280, microsoft/carbon#1116
|
||||||
*/
|
*/
|
||||||
export default class CustomUrlSerializer implements UrlSerializer {
|
export default class CustomUrlSerializer implements UrlSerializer {
|
||||||
private _defaultUrlSerializer: DefaultUrlSerializer = new DefaultUrlSerializer();
|
private _defaultUrlSerializer: DefaultUrlSerializer = new DefaultUrlSerializer();
|
||||||
|
|
||||||
parse(url: string): UrlTree {
|
parse(url: string): UrlTree {
|
||||||
// Encode parentheses
|
// Encode parentheses
|
||||||
url = url.replace(/\(/g, '%28').replace(/\)/g, '%29');
|
url = url.replace(/\(/g, '%28').replace(/\)/g, '%29');
|
||||||
// Use the default serializer from here on
|
// Use the default serializer from here on
|
||||||
return this._defaultUrlSerializer.parse(url);
|
return this._defaultUrlSerializer.parse(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
serialize(tree: UrlTree): string {
|
serialize(tree: UrlTree): string {
|
||||||
// serialize parentheses after angular router
|
// serialize parentheses after angular router
|
||||||
return this._defaultUrlSerializer.serialize(tree).replace(/%28/g, '(').replace(/%29/g, ')');
|
return this._defaultUrlSerializer.serialize(tree).replace(/%28/g, '(').replace(/%29/g, ')');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,6 @@
|
|||||||
// localizable strings
|
// localizable strings
|
||||||
|
|
||||||
export const InvalidProvider = 'Provider is invalid';
|
export const InvalidProvider = 'Provider is invalid';
|
||||||
export const SerializationDisabled = 'Saving results into different format disabled for this data provider.';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Feature names
|
* Feature names
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
import { ITelemetryService, ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService, ITelemetryData } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { warn } from 'sql/base/common/log';
|
import { warn } from 'sql/base/common/log';
|
||||||
|
|
||||||
export interface IConnectionTelemetryData extends ITelemetryData {
|
export interface IConnectionTelemetryData extends ITelemetryData {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import { attachModalDialogStyler, attachButtonStyler, attachPanelStyler } from '
|
|||||||
import { AccountViewModel } from 'sql/parts/accountManagement/accountDialog/accountViewModel';
|
import { AccountViewModel } from 'sql/parts/accountManagement/accountDialog/accountViewModel';
|
||||||
import { AddAccountAction } from 'sql/parts/accountManagement/common/accountActions';
|
import { AddAccountAction } from 'sql/parts/accountManagement/common/accountActions';
|
||||||
import { AccountListRenderer, AccountListDelegate } from 'sql/parts/accountManagement/common/accountListRenderer';
|
import { AccountListRenderer, AccountListDelegate } from 'sql/parts/accountManagement/common/accountListRenderer';
|
||||||
import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/services/accountManagement/eventTypes';
|
import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes';
|
||||||
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
|
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
|
||||||
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,9 @@
|
|||||||
|
|
||||||
import Severity from 'vs/base/common/severity';
|
import Severity from 'vs/base/common/severity';
|
||||||
import { AccountDialog } from 'sql/parts/accountManagement/accountDialog/accountDialog';
|
import { AccountDialog } from 'sql/parts/accountManagement/accountDialog/accountDialog';
|
||||||
import { IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
|
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
|
||||||
|
|
||||||
export class AccountDialogController {
|
export class AccountDialogController {
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@
|
|||||||
|
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import { IAccountManagementService } from 'sql/services/accountManagement/interfaces';
|
import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces';
|
||||||
import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/services/accountManagement/eventTypes';
|
import { AccountProviderAddedEventParams, UpdateAccountListEventParams } from 'sql/platform/accountManagement/common/eventTypes';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* View model for account dialog
|
* View model for account dialog
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar';
|
|||||||
import { Themable, STATUS_BAR_FOREGROUND } from 'vs/workbench/common/theme';
|
import { Themable, STATUS_BAR_FOREGROUND } from 'vs/workbench/common/theme';
|
||||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||||
|
|
||||||
import { IAccountManagementService } from 'sql/services/accountManagement/interfaces';
|
import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces';
|
||||||
|
|
||||||
export class AccountListStatusbarItem extends Themable implements IStatusbarItem {
|
export class AccountListStatusbarItem extends Themable implements IStatusbarItem {
|
||||||
private _manageLinkedAccountAction: IAction;
|
private _manageLinkedAccountAction: IAction;
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||||||
import Severity from 'vs/base/common/severity';
|
import Severity from 'vs/base/common/severity';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
|
|
||||||
import { IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
|
|
||||||
import { AutoOAuthDialog } from 'sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialog';
|
import { AutoOAuthDialog } from 'sql/parts/accountManagement/autoOAuthDialog/autoOAuthDialog';
|
||||||
import { IAccountManagementService } from 'sql/services/accountManagement/interfaces';
|
import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces';
|
||||||
|
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
|
||||||
|
|
||||||
export class AutoOAuthDialogController {
|
export class AutoOAuthDialogController {
|
||||||
// MEMBER VARIABLES ////////////////////////////////////////////////////
|
// MEMBER VARIABLES ////////////////////////////////////////////////////
|
||||||
|
|||||||
@@ -12,8 +12,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
|
|||||||
import { Action } from 'vs/base/common/actions';
|
import { Action } from 'vs/base/common/actions';
|
||||||
|
|
||||||
import { error } from 'sql/base/common/log';
|
import { error } from 'sql/base/common/log';
|
||||||
import { IAccountManagementService } from 'sql/services/accountManagement/interfaces';
|
import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces';
|
||||||
import { IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
|
|
||||||
import { IDialogService, IConfirmation } from 'vs/platform/dialogs/common/dialogs';
|
import { IDialogService, IConfirmation } from 'vs/platform/dialogs/common/dialogs';
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||||
import Severity from 'vs/base/common/severity';
|
import Severity from 'vs/base/common/severity';
|
||||||
@@ -83,7 +82,6 @@ export class RemoveAccountAction extends Action {
|
|||||||
private _account: sqlops.Account,
|
private _account: sqlops.Account,
|
||||||
@IDialogService private _dialogService: IDialogService,
|
@IDialogService private _dialogService: IDialogService,
|
||||||
@INotificationService private _notificationService: INotificationService,
|
@INotificationService private _notificationService: INotificationService,
|
||||||
@IErrorMessageService private _errorMessageService: IErrorMessageService,
|
|
||||||
@IAccountManagementService private _accountManagementService: IAccountManagementService
|
@IAccountManagementService private _accountManagementService: IAccountManagementService
|
||||||
) {
|
) {
|
||||||
super(RemoveAccountAction.ID, RemoveAccountAction.LABEL, 'remove-account-action icon remove');
|
super(RemoveAccountAction.ID, RemoveAccountAction.LABEL, 'remove-account-action icon remove');
|
||||||
@@ -107,15 +105,15 @@ export class RemoveAccountAction extends Action {
|
|||||||
return new TPromise((resolve, reject) => {
|
return new TPromise((resolve, reject) => {
|
||||||
self._accountManagementService.removeAccount(self._account.key)
|
self._accountManagementService.removeAccount(self._account.key)
|
||||||
.then(
|
.then(
|
||||||
(result) => { resolve(result); },
|
(result) => { resolve(result); },
|
||||||
(err) => {
|
(err) => {
|
||||||
// Must handle here as this is an independent action
|
// Must handle here as this is an independent action
|
||||||
self._notificationService.notify({
|
self._notificationService.notify({
|
||||||
severity: Severity.Error,
|
severity: Severity.Error,
|
||||||
message: localize('removeAccountFailed', 'Failed to remove account')
|
message: localize('removeAccountFailed', 'Failed to remove account')
|
||||||
});
|
});
|
||||||
resolve(false);
|
resolve(false);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,13 +13,14 @@ import { Event, Emitter } from 'vs/base/common/event';
|
|||||||
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextViewService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import { buttonBackground } from 'vs/platform/theme/common/colorRegistry';
|
import { buttonBackground } from 'vs/platform/theme/common/colorRegistry';
|
||||||
import { IWorkbenchThemeService, IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
|
||||||
import { attachInputBoxStyler } from 'vs/platform/theme/common/styler';
|
import { attachInputBoxStyler } from 'vs/platform/theme/common/styler';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
import { SIDE_BAR_BACKGROUND } from 'vs/workbench/common/theme';
|
||||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||||
import { IWindowsService } from 'vs/platform/windows/common/windows';
|
import { IWindowsService } from 'vs/platform/windows/common/windows';
|
||||||
|
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
||||||
|
import { IThemeService, ITheme } from 'vs/platform/theme/common/themeService';
|
||||||
|
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
import { Button } from 'sql/base/browser/ui/button/button';
|
import { Button } from 'sql/base/browser/ui/button/button';
|
||||||
@@ -27,9 +28,8 @@ import { Modal } from 'sql/base/browser/ui/modal/modal';
|
|||||||
import { FirewallRuleViewModel } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel';
|
import { FirewallRuleViewModel } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleViewModel';
|
||||||
import { attachModalDialogStyler, attachButtonStyler } from 'sql/common/theme/styler';
|
import { attachModalDialogStyler, attachButtonStyler } from 'sql/common/theme/styler';
|
||||||
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||||
import { IAccountPickerService } from 'sql/parts/accountManagement/common/interfaces';
|
import { IAccountPickerService } from 'sql/platform/accountManagement/common/accountPicker';
|
||||||
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
||||||
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
|
||||||
|
|
||||||
// TODO: Make the help link 1) extensible (01/08/2018, https://github.com/Microsoft/azuredatastudio/issues/450)
|
// TODO: Make the help link 1) extensible (01/08/2018, https://github.com/Microsoft/azuredatastudio/issues/450)
|
||||||
// in case that other non-Azure sign in is to be used
|
// in case that other non-Azure sign in is to be used
|
||||||
@@ -65,7 +65,7 @@ export class FirewallRuleDialog extends Modal {
|
|||||||
constructor(
|
constructor(
|
||||||
@IAccountPickerService private _accountPickerService: IAccountPickerService,
|
@IAccountPickerService private _accountPickerService: IAccountPickerService,
|
||||||
@IPartService partService: IPartService,
|
@IPartService partService: IPartService,
|
||||||
@IWorkbenchThemeService private _workbenchThemeService: IWorkbenchThemeService,
|
@IThemeService themeService: IThemeService,
|
||||||
@IInstantiationService private _instantiationService: IInstantiationService,
|
@IInstantiationService private _instantiationService: IInstantiationService,
|
||||||
@IContextViewService private _contextViewService: IContextViewService,
|
@IContextViewService private _contextViewService: IContextViewService,
|
||||||
@ITelemetryService telemetryService: ITelemetryService,
|
@ITelemetryService telemetryService: ITelemetryService,
|
||||||
@@ -79,7 +79,7 @@ export class FirewallRuleDialog extends Modal {
|
|||||||
partService,
|
partService,
|
||||||
telemetryService,
|
telemetryService,
|
||||||
clipboardService,
|
clipboardService,
|
||||||
_workbenchThemeService,
|
themeService,
|
||||||
contextKeyService,
|
contextKeyService,
|
||||||
{
|
{
|
||||||
isFlyout: true,
|
isFlyout: true,
|
||||||
@@ -206,8 +206,8 @@ export class FirewallRuleDialog extends Modal {
|
|||||||
builder.append(firewallRuleSection);
|
builder.append(firewallRuleSection);
|
||||||
});
|
});
|
||||||
|
|
||||||
this._register(this._workbenchThemeService.onDidColorThemeChange(e => this.updateTheme(e)));
|
this._register(this._themeService.onThemeChange(e => this.updateTheme(e)));
|
||||||
this.updateTheme(this._workbenchThemeService.getColorTheme());
|
this.updateTheme(this._themeService.getTheme());
|
||||||
|
|
||||||
$(this._IPAddressInput).on(DOM.EventType.CLICK, () => {
|
$(this._IPAddressInput).on(DOM.EventType.CLICK, () => {
|
||||||
this.onFirewallRuleOptionSelected(true);
|
this.onFirewallRuleOptionSelected(true);
|
||||||
@@ -243,7 +243,7 @@ export class FirewallRuleDialog extends Modal {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update theming that is specific to firewall rule flyout body
|
// Update theming that is specific to firewall rule flyout body
|
||||||
private updateTheme(theme: IColorTheme): void {
|
private updateTheme(theme: ITheme): void {
|
||||||
let linkColor = theme.getColor(buttonBackground);
|
let linkColor = theme.getColor(buttonBackground);
|
||||||
let link = linkColor ? linkColor.toString() : null;
|
let link = linkColor ? linkColor.toString() : null;
|
||||||
if (this._helpLink) {
|
if (this._helpLink) {
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ import Severity from 'vs/base/common/severity';
|
|||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
|
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
|
|
||||||
import { FirewallRuleDialog } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialog';
|
import { FirewallRuleDialog } from 'sql/parts/accountManagement/firewallRuleDialog/firewallRuleDialog';
|
||||||
import { IAccountManagementService, AzureResource } from 'sql/services/accountManagement/interfaces';
|
import { IAccountManagementService, AzureResource } from 'sql/platform/accountManagement/common/interfaces';
|
||||||
import { IResourceProviderService } from 'sql/parts/accountManagement/common/interfaces';
|
import { IResourceProviderService } from 'sql/workbench/services/resourceProvider/common/resourceProviderService';
|
||||||
import { Deferred } from 'sql/base/common/promise';
|
import { Deferred } from 'sql/base/common/promise';
|
||||||
|
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
|
||||||
|
|
||||||
export class FirewallRuleDialogController {
|
export class FirewallRuleDialogController {
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ import { ChangeDetectorRef, ElementRef, Component, forwardRef, Inject } from '@a
|
|||||||
import { NgForm } from '@angular/forms';
|
import { NgForm } from '@angular/forms';
|
||||||
|
|
||||||
import { ITaskDialogComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
import { ITaskDialogComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
||||||
import { ConnectionManagementInfo } from 'sql/parts/connection/common/connectionManagementInfo';
|
import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo';
|
||||||
import { IAdminService } from 'sql/parts/admin/common/adminService';
|
import { IAdminService } from 'sql/workbench/services/admin/common/adminService';
|
||||||
import { ITaskDialogComponent } from 'sql/parts/tasks/common/tasks';
|
import { ITaskDialogComponent } from 'sql/parts/tasks/common/tasks';
|
||||||
|
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import { ElementRef, Component, Inject, forwardRef } from '@angular/core';
|
import { ElementRef, Component, Inject, forwardRef } from '@angular/core';
|
||||||
import { IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
import { IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
||||||
import { IDashboardComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
import { IDashboardComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
||||||
import { ConnectionManagementInfo } from 'sql/parts/connection/common/connectionManagementInfo';
|
import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo';
|
||||||
|
|
||||||
export const CREATELOGIN_SELECTOR: string = 'createlogin-component';
|
export const CREATELOGIN_SELECTOR: string = 'createlogin-component';
|
||||||
|
|
||||||
@@ -21,8 +21,8 @@ export class CreateLoginComponent {
|
|||||||
public connection: ConnectionManagementInfo;
|
public connection: ConnectionManagementInfo;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
@Inject(forwardRef(() => ElementRef)) private _el: ElementRef,
|
@Inject(forwardRef(() => ElementRef)) private _el: ElementRef,
|
||||||
@Inject(IBootstrapParams) private _params: IDashboardComponentParams
|
@Inject(IBootstrapParams) private _params: IDashboardComponentParams
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
|
|||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
import { IThemeService } from 'vs/platform/theme/common/themeService';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { CreateLoginInput } from './createLoginInput';
|
import { CreateLoginInput } from 'sql/parts/admin/security/createLoginInput';
|
||||||
import { CreateLoginModule } from './createLogin.module';
|
import { CreateLoginModule } from 'sql/parts/admin/security/createLogin.module';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IMetadataService } from 'sql/services/metadata/metadataService';
|
import { IMetadataService } from 'sql/platform/metadata/common/metadataService';
|
||||||
import { IScriptingService } from 'sql/services/scripting/scriptingService';
|
import { IScriptingService } from 'sql/platform/scripting/common/scriptingService';
|
||||||
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
||||||
import { bootstrapAngular, IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
import { bootstrapAngular, IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
||||||
import { CREATELOGIN_SELECTOR } from 'sql/parts/admin/security/createLogin.component';
|
import { CREATELOGIN_SELECTOR } from 'sql/parts/admin/security/createLogin.component';
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { EditorInput, EditorModel } from 'vs/workbench/common/editor';
|
import { EditorInput, EditorModel } from 'vs/workbench/common/editor';
|
||||||
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
|
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
|
|
||||||
export class CreateLoginInput extends EditorInput {
|
export class CreateLoginInput extends EditorInput {
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* 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 path from 'path';
|
|
||||||
|
|
||||||
import { EditorInput, IEditorInput } from 'vs/workbench/common/editor';
|
import { EditorInput, IEditorInput } from 'vs/workbench/common/editor';
|
||||||
import { IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService, ServiceIdentifier } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
|
import { UntitledEditorInput } from 'vs/workbench/common/editor/untitledEditorInput';
|
||||||
@@ -16,7 +14,7 @@ import { QueryInput } from 'sql/parts/query/common/queryInput';
|
|||||||
import { IQueryEditorOptions } from 'sql/parts/query/common/queryEditorService';
|
import { IQueryEditorOptions } from 'sql/parts/query/common/queryEditorService';
|
||||||
import { QueryPlanInput } from 'sql/parts/queryPlan/queryPlanInput';
|
import { QueryPlanInput } from 'sql/parts/queryPlan/queryPlanInput';
|
||||||
import { NotebookInput, NotebookInputModel, NotebookInputValidator } from 'sql/parts/notebook/notebookInput';
|
import { NotebookInput, NotebookInputModel, NotebookInputValidator } from 'sql/parts/notebook/notebookInput';
|
||||||
import { DEFAULT_NOTEBOOK_PROVIDER, INotebookService } from 'sql/services/notebook/notebookService';
|
import { DEFAULT_NOTEBOOK_PROVIDER, INotebookService } from 'sql/workbench/services/notebook/common/notebookService';
|
||||||
import { getProvidersForFileName } from 'sql/parts/notebook/notebookUtils';
|
import { getProvidersForFileName } from 'sql/parts/notebook/notebookUtils';
|
||||||
import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput';
|
import { ResourceEditorInput } from 'vs/workbench/common/editor/resourceEditorInput';
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import { Action } from 'vs/base/common/actions';
|
|||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
|
import { IQuickOpenService } from 'vs/platform/quickOpen/common/quickOpen';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { INotificationService, INotificationActions } from 'vs/platform/notification/common/notification';
|
import { INotificationService, INotificationActions } from 'vs/platform/notification/common/notification';
|
||||||
import Severity from 'vs/base/common/severity';
|
import Severity from 'vs/base/common/severity';
|
||||||
import { IDialogService, IConfirmation, IConfirmationResult } from 'vs/platform/dialogs/common/dialogs';
|
import { IDialogService, IConfirmation, IConfirmationResult } from 'vs/platform/dialogs/common/dialogs';
|
||||||
@@ -159,7 +159,7 @@ export class GetCurrentConnectionStringAction extends Action {
|
|||||||
return new TPromise<void>((resolve, reject) => {
|
return new TPromise<void>((resolve, reject) => {
|
||||||
let activeInput = this._editorService.activeEditor;
|
let activeInput = this._editorService.activeEditor;
|
||||||
if (activeInput && (activeInput instanceof QueryInput || activeInput instanceof EditDataInput || activeInput instanceof DashboardInput)
|
if (activeInput && (activeInput instanceof QueryInput || activeInput instanceof EditDataInput || activeInput instanceof DashboardInput)
|
||||||
&& this._connectionManagementService.isConnected(activeInput.uri)) {
|
&& this._connectionManagementService.isConnected(activeInput.uri)) {
|
||||||
let includePassword = false;
|
let includePassword = false;
|
||||||
let connectionProfile = this._connectionManagementService.getConnectionProfile(activeInput.uri);
|
let connectionProfile = this._connectionManagementService.getConnectionProfile(activeInput.uri);
|
||||||
this._connectionManagementService.getConnectionString(connectionProfile.id, includePassword).then(result => {
|
this._connectionManagementService.getConnectionString(connectionProfile.id, includePassword).then(result => {
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ import { IDisposable, combinedDisposable } from 'vs/base/common/lifecycle';
|
|||||||
import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar';
|
import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar';
|
||||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService';
|
import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
|
import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
|
||||||
import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
|
import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
|
||||||
import { EditorServiceImpl } from 'vs/workbench/browser/parts/editor/editor';
|
import { EditorServiceImpl } from 'vs/workbench/browser/parts/editor/editor';
|
||||||
|
|||||||
@@ -5,15 +5,15 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IConnectionComponentCallbacks, IConnectionComponentController, IConnectionValidateResult } from 'sql/parts/connection/connectionDialog/connectionDialogService';
|
import { IConnectionComponentCallbacks, IConnectionComponentController, IConnectionValidateResult } from 'sql/parts/connection/connectionDialog/connectionDialogService';
|
||||||
import { ConnectionWidget } from 'sql/parts/connection/connectionDialog/connectionWidget';
|
import { ConnectionWidget } from 'sql/parts/connection/connectionDialog/connectionWidget';
|
||||||
import { AdvancedPropertiesController } from 'sql/parts/connection/connectionDialog/advancedPropertiesController';
|
import { AdvancedPropertiesController } from 'sql/parts/connection/connectionDialog/advancedPropertiesController';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
|
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';
|
||||||
import * as Constants from 'sql/parts/connection/common/constants';
|
import * as Constants from 'sql/platform/connection/common/constants';
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
import * as Utils from 'sql/parts/connection/common/utils';
|
import * as Utils from 'sql/platform/connection/common/utils';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
||||||
import { ConnectionProviderProperties } from 'sql/workbench/parts/connection/common/connectionProviderExtension';
|
import { ConnectionProviderProperties } from 'sql/workbench/parts/connection/common/connectionProviderExtension';
|
||||||
|
|||||||
@@ -6,20 +6,19 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
IConnectionDialogService, IConnectionManagementService, IErrorMessageService,
|
IConnectionDialogService, IConnectionManagementService,
|
||||||
ConnectionType, INewConnectionParams, IConnectionCompletionOptions, IConnectionResult
|
ConnectionType, INewConnectionParams, IConnectionCompletionOptions, IConnectionResult
|
||||||
} from 'sql/parts/connection/common/connectionManagement';
|
} from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { ConnectionDialogWidget, OnShowUIResponse } from 'sql/parts/connection/connectionDialog/connectionDialogWidget';
|
import { ConnectionDialogWidget, OnShowUIResponse } from 'sql/parts/connection/connectionDialog/connectionDialogWidget';
|
||||||
import { ConnectionController } from 'sql/parts/connection/connectionDialog/connectionController';
|
import { ConnectionController } from 'sql/parts/connection/connectionDialog/connectionController';
|
||||||
import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
|
import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
|
||||||
import * as Constants from 'sql/parts/connection/common/constants';
|
import * as Constants from 'sql/platform/connection/common/constants';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||||
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import { localize } from 'vs/nls';
|
|
||||||
import { entries } from 'sql/base/common/objects';
|
import { entries } from 'sql/base/common/objects';
|
||||||
|
import { Deferred } from 'sql/base/common/promise';
|
||||||
import * as sqlops from 'sqlops';
|
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
|
||||||
|
|
||||||
import { IPartService } from 'vs/workbench/services/part/common/partService';
|
import { IPartService } from 'vs/workbench/services/part/common/partService';
|
||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
@@ -28,12 +27,11 @@ import * as platform from 'vs/base/common/platform';
|
|||||||
import Severity from 'vs/base/common/severity';
|
import Severity from 'vs/base/common/severity';
|
||||||
import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration';
|
import { IWorkspaceConfigurationService } from 'vs/workbench/services/configuration/common/configuration';
|
||||||
import { Action, IAction } from 'vs/base/common/actions';
|
import { Action, IAction } from 'vs/base/common/actions';
|
||||||
import { IWindowsService } from 'vs/platform/windows/common/windows';
|
|
||||||
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
||||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||||
import * as types from 'vs/base/common/types';
|
import * as types from 'vs/base/common/types';
|
||||||
import { trim } from 'vs/base/common/strings';
|
import { trim } from 'vs/base/common/strings';
|
||||||
import { Deferred } from 'sql/base/common/promise';
|
import { localize } from 'vs/nls';
|
||||||
|
|
||||||
export interface IConnectionValidateResult {
|
export interface IConnectionValidateResult {
|
||||||
isValid: boolean;
|
isValid: boolean;
|
||||||
@@ -87,14 +85,14 @@ export class ConnectionDialogService implements IConnectionDialogService {
|
|||||||
@IClipboardService private _clipboardService: IClipboardService,
|
@IClipboardService private _clipboardService: IClipboardService,
|
||||||
@ICommandService private _commandService: ICommandService
|
@ICommandService private _commandService: ICommandService
|
||||||
) { }
|
) { }
|
||||||
/**
|
/**
|
||||||
* Gets the default provider with the following actions
|
* Gets the default provider with the following actions
|
||||||
* 1. Checks if master provider(map) has data
|
* 1. Checks if master provider(map) has data
|
||||||
* 2. If so, filters provider paramter against master map
|
* 2. If so, filters provider paramter against master map
|
||||||
* 3. Fetches the result array and extracts the first element
|
* 3. Fetches the result array and extracts the first element
|
||||||
* 4. If none of the above data exists, returns 'MSSQL'
|
* 4. If none of the above data exists, returns 'MSSQL'
|
||||||
* @returns: Default provider as string
|
* @returns: Default provider as string
|
||||||
*/
|
*/
|
||||||
private getDefaultProviderName(): string {
|
private getDefaultProviderName(): string {
|
||||||
let defaultProvider: string;
|
let defaultProvider: string;
|
||||||
if (this._providerNameToDisplayNameMap) {
|
if (this._providerNameToDisplayNameMap) {
|
||||||
|
|||||||
@@ -7,13 +7,13 @@ import 'vs/css!./media/connectionDialog';
|
|||||||
import { Button } from 'sql/base/browser/ui/button/button';
|
import { Button } from 'sql/base/browser/ui/button/button';
|
||||||
import { attachModalDialogStyler, attachButtonStyler } from 'sql/common/theme/styler';
|
import { attachModalDialogStyler, attachButtonStyler } from 'sql/common/theme/styler';
|
||||||
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
||||||
import { IConnectionManagementService, INewConnectionParams } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService, INewConnectionParams } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper';
|
import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper';
|
||||||
import { TreeCreationUtils } from 'sql/parts/objectExplorer/viewlet/treeCreationUtils';
|
import { TreeCreationUtils } from 'sql/parts/objectExplorer/viewlet/treeCreationUtils';
|
||||||
import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
|
import { TreeUpdateUtils } from 'sql/parts/objectExplorer/viewlet/treeUpdateUtils';
|
||||||
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import { TabbedPanel, PanelTabIdentifier } from 'sql/base/browser/ui/panel/panel';
|
import { TabbedPanel, PanelTabIdentifier } from 'sql/base/browser/ui/panel/panel';
|
||||||
import { RecentConnectionTreeController, RecentConnectionActionsProvider } from 'sql/parts/connection/connectionDialog/recentConnectionTreeController';
|
import { RecentConnectionTreeController, RecentConnectionActionsProvider } from 'sql/parts/connection/connectionDialog/recentConnectionTreeController';
|
||||||
import { SavedConnectionTreeController } from 'sql/parts/connection/connectionDialog/savedConnectionTreeController';
|
import { SavedConnectionTreeController } from 'sql/parts/connection/connectionDialog/savedConnectionTreeController';
|
||||||
|
|||||||
@@ -13,16 +13,16 @@ import { Checkbox } from 'sql/base/browser/ui/checkbox/checkbox';
|
|||||||
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
import { InputBox } from 'sql/base/browser/ui/inputBox/inputBox';
|
||||||
import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper';
|
import * as DialogHelper from 'sql/base/browser/ui/modal/dialogHelper';
|
||||||
import { IConnectionComponentCallbacks } from 'sql/parts/connection/connectionDialog/connectionDialogService';
|
import { IConnectionComponentCallbacks } from 'sql/parts/connection/connectionDialog/connectionDialogService';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
import { ConnectionOptionSpecialType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
||||||
import * as Constants from 'sql/parts/connection/common/constants';
|
import * as Constants from 'sql/platform/connection/common/constants';
|
||||||
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/parts/connection/common/connectionProfileGroup';
|
import { ConnectionProfileGroup, IConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';
|
||||||
import { Dropdown } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
import { Dropdown } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||||
import { ConnectionProfile } from '../common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import * as styler from 'sql/common/theme/styler';
|
import * as styler from 'sql/common/theme/styler';
|
||||||
import { IAccountManagementService } from 'sql/services/accountManagement/interfaces';
|
import { IAccountManagementService } from 'sql/platform/accountManagement/common/interfaces';
|
||||||
|
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
|||||||
import { ClearSingleRecentConnectionAction } from 'sql/parts/connection/common/connectionActions';
|
import { ClearSingleRecentConnectionAction } from 'sql/parts/connection/common/connectionActions';
|
||||||
import { ContributableActionProvider } from 'vs/workbench/browser/actions';
|
import { ContributableActionProvider } from 'vs/workbench/browser/actions';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import { IAction } from 'vs/base/common/actions';
|
import { IAction } from 'vs/base/common/actions';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import mouse = require('vs/base/browser/mouseEvent');
|
import mouse = require('vs/base/browser/mouseEvent');
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
|
|
||||||
export class RecentConnectionActionsProvider extends ContributableActionProvider {
|
export class RecentConnectionActionsProvider extends ContributableActionProvider {
|
||||||
private _onRecentConnectionRemoved = new Emitter<void>();
|
private _onRecentConnectionRemoved = new Emitter<void>();
|
||||||
@@ -33,7 +33,7 @@ export class RecentConnectionActionsProvider extends ContributableActionProvider
|
|||||||
private getRecentConnectionActions(tree: ITree, element: any): IAction[] {
|
private getRecentConnectionActions(tree: ITree, element: any): IAction[] {
|
||||||
let actions: IAction[] = [];
|
let actions: IAction[] = [];
|
||||||
let clearSingleConnectionAction = this._instantiationService.createInstance(ClearSingleRecentConnectionAction, ClearSingleRecentConnectionAction.ID,
|
let clearSingleConnectionAction = this._instantiationService.createInstance(ClearSingleRecentConnectionAction, ClearSingleRecentConnectionAction.ID,
|
||||||
ClearSingleRecentConnectionAction.LABEL,<IConnectionProfile>element);
|
ClearSingleRecentConnectionAction.LABEL, <IConnectionProfile>element);
|
||||||
clearSingleConnectionAction.onRecentConnectionRemoved(() => this._onRecentConnectionRemoved.fire());
|
clearSingleConnectionAction.onRecentConnectionRemoved(() => this._onRecentConnectionRemoved.fire());
|
||||||
actions.push(clearSingleConnectionAction);
|
actions.push(clearSingleConnectionAction);
|
||||||
return actions;
|
return actions;
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ import { TPromise } from 'vs/base/common/winjs.base';
|
|||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||||
import { Event } from 'vs/base/common/event';
|
|
||||||
|
|
||||||
import { IAngularEventingService, AngularEventType, IAngularEvent } from 'sql/services/angularEventing/angularEventingService';
|
import { IAngularEventingService, AngularEventType, IAngularEvent } from 'sql/platform/angularEventing/common/angularEventingService';
|
||||||
import { INewDashboardTabDialogService } from 'sql/parts/dashboard/newDashboardTabDialog/interface';
|
import { INewDashboardTabDialogService } from 'sql/parts/dashboard/newDashboardTabDialog/interface';
|
||||||
import { IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry';
|
import { IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry';
|
||||||
import { toDisposableSubscription } from 'sql/parts/common/rxjsUtils';
|
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
|
||||||
|
|
||||||
export class EditDashboardAction extends Action {
|
export class EditDashboardAction extends Action {
|
||||||
|
|
||||||
private static readonly ID = 'editDashboard';
|
private static readonly ID = 'editDashboard';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { ContextKeyExpr, IContextKeyService } from 'vs/platform/contextkey/commo
|
|||||||
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/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/parts/connection/common/connectionManagementInfo';
|
import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo';
|
||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
||||||
import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution';
|
import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution';
|
||||||
import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution';
|
import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution';
|
||||||
@@ -21,7 +21,7 @@ import { CONTROLHOST_CONTAINER } from 'sql/parts/dashboard/containers/dashboardC
|
|||||||
import { NAV_SECTION } from 'sql/parts/dashboard/containers/dashboardNavSection.contribution';
|
import { NAV_SECTION } from 'sql/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/parts/connection/common/constants';
|
import * as Constants from 'sql/platform/connection/common/constants';
|
||||||
|
|
||||||
const dashboardcontainerRegistry = Registry.as<IDashboardContainerRegistry>(DashboardContainerExtensions.dashboardContainerContributions);
|
const dashboardcontainerRegistry = Registry.as<IDashboardContainerRegistry>(DashboardContainerExtensions.dashboardContainerContributions);
|
||||||
const containerTypes = [
|
const containerTypes = [
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import 'vs/css!sql/parts/dashboard/common/dashboardPage';
|
import 'vs/css!sql/parts/dashboard/common/dashboardPage';
|
||||||
import 'sql/parts/dashboard/common/dashboardPanelStyles';
|
import 'sql/parts/dashboard/common/dashboardPanelStyles';
|
||||||
|
|
||||||
import { Component, Inject, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, 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/parts/dashboard/services/dashboardServiceInterface.service';
|
||||||
import { CommonServiceInterface, SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface, SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
|
||||||
@@ -16,13 +16,13 @@ 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/services/angularEventing/angularEventingService';
|
import { AngularEventType, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
|
||||||
import { DashboardTab, IConfigModifierCollection } from 'sql/parts/dashboard/common/interfaces';
|
import { DashboardTab, IConfigModifierCollection } from 'sql/parts/dashboard/common/interfaces';
|
||||||
import * as dashboardHelper from 'sql/parts/dashboard/common/dashboardHelper';
|
import * as dashboardHelper from 'sql/parts/dashboard/common/dashboardHelper';
|
||||||
import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution';
|
import { WIDGETS_CONTAINER } from 'sql/parts/dashboard/containers/dashboardWidgetContainer.contribution';
|
||||||
import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution';
|
import { GRID_CONTAINER } from 'sql/parts/dashboard/containers/dashboardGridContainer.contribution';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
import * as Constants from 'sql/parts/connection/common/constants';
|
import * as Constants from 'sql/platform/connection/common/constants';
|
||||||
|
|
||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import * as types from 'vs/base/common/types';
|
import * as types from 'vs/base/common/types';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { IJSONSchema } from 'vs/base/common/jsonSchema';
|
|||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import * as types from 'vs/base/common/types';
|
import * as types from 'vs/base/common/types';
|
||||||
|
|
||||||
import * as Constants from 'sql/parts/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/parts/dashboard/containers/dashboardNavSection.contribution';
|
||||||
|
|||||||
@@ -6,10 +6,8 @@
|
|||||||
import { OnDestroy } from '@angular/core';
|
import { OnDestroy } from '@angular/core';
|
||||||
|
|
||||||
import { Event } from 'vs/base/common/event';
|
import { Event } from 'vs/base/common/event';
|
||||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
|
||||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||||
|
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
|
||||||
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
||||||
import { SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
|
import { SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
|
||||||
|
|
||||||
|
|||||||
@@ -5,22 +5,15 @@
|
|||||||
|
|
||||||
import 'vs/css!./dashboardGridContainer';
|
import 'vs/css!./dashboardGridContainer';
|
||||||
|
|
||||||
import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, EventEmitter } from '@angular/core';
|
import { Component, Inject, Input, forwardRef, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef } from '@angular/core';
|
||||||
import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid';
|
|
||||||
import { concat } from 'rxjs/operator/concat';
|
|
||||||
|
|
||||||
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 { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
import { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
||||||
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component';
|
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component';
|
||||||
import { subscriptionToDisposable } from 'sql/base/common/lifecycle';
|
|
||||||
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces';
|
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces';
|
||||||
import { WebviewContent } from 'sql/parts/dashboard/contents/webviewContent.component';
|
import { WebviewContent } from 'sql/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 { Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
|
|
||||||
import * as objects from 'vs/base/common/objects';
|
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
|
|
||||||
export interface GridCellConfig {
|
export interface GridCellConfig {
|
||||||
|
|||||||
@@ -8,11 +8,10 @@ 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/parts/dashboard/containers/dashboardWidgetContainer.component';
|
||||||
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces';
|
|
||||||
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
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 { AngularEventType, IAngularEventingService } from 'sql/services/angularEventing/angularEventingService';
|
import { AngularEventType, IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
|
||||||
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component';
|
import { DashboardWidgetWrapper } from 'sql/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';
|
||||||
|
|||||||
@@ -5,20 +5,13 @@
|
|||||||
|
|
||||||
import 'vs/css!./dashboardWidgetContainer';
|
import 'vs/css!./dashboardWidgetContainer';
|
||||||
|
|
||||||
import { Component, Inject, Input, forwardRef, ViewChild, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, EventEmitter, OnChanges, AfterContentInit } from '@angular/core';
|
import { Component, Inject, Input, forwardRef, ViewChild, OnDestroy, ChangeDetectorRef, AfterContentInit } from '@angular/core';
|
||||||
import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid';
|
|
||||||
|
|
||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
|
||||||
import { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
import { TabConfig, WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
||||||
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component';
|
|
||||||
import { subscriptionToDisposable } from 'sql/base/common/lifecycle';
|
|
||||||
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces';
|
import { DashboardTab } from 'sql/parts/dashboard/common/interfaces';
|
||||||
import { WidgetContent } from 'sql/parts/dashboard/contents/widgetContent.component';
|
import { WidgetContent } from 'sql/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 { Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
|
|
||||||
import * as objects from 'vs/base/common/objects';
|
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import 'vs/css!sql/media/icons/common-icons';
|
|||||||
import 'vs/css!./dashboardWidgetWrapper';
|
import 'vs/css!./dashboardWidgetWrapper';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Component, Input, Inject, forwardRef, ComponentFactoryResolver, AfterContentInit, ViewChild,
|
Component, Input, Inject, forwardRef, ComponentFactoryResolver, ViewChild,
|
||||||
ElementRef, OnInit, ChangeDetectorRef, OnDestroy, 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/parts/dashboard/common/componentHost.directive';
|
||||||
@@ -15,7 +15,7 @@ import { WidgetConfig, WIDGET_CONFIG, IDashboardWidget } from 'sql/parts/dashboa
|
|||||||
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/parts/dashboard/common/actions';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
|
|
||||||
/* Widgets */
|
/* Widgets */
|
||||||
import { PropertiesWidgetComponent } from 'sql/parts/dashboard/widgets/properties/propertiesWidget.component';
|
import { PropertiesWidgetComponent } from 'sql/parts/dashboard/widgets/properties/propertiesWidget.component';
|
||||||
@@ -24,10 +24,8 @@ import { TasksWidget } from 'sql/parts/dashboard/widgets/tasks/tasksWidget.compo
|
|||||||
import { InsightsWidget } from 'sql/parts/dashboard/widgets/insights/insightsWidget.component';
|
import { InsightsWidget } from 'sql/parts/dashboard/widgets/insights/insightsWidget.component';
|
||||||
import { WebviewWidget } from 'sql/parts/dashboard/widgets/webview/webviewWidget.component';
|
import { WebviewWidget } from 'sql/parts/dashboard/widgets/webview/webviewWidget.component';
|
||||||
|
|
||||||
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 { IDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||||
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
||||||
import * as themeColors from 'vs/workbench/common/theme';
|
import * as themeColors from 'vs/workbench/common/theme';
|
||||||
@@ -36,7 +34,6 @@ import { Registry } from 'vs/platform/registry/common/platform';
|
|||||||
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||||
import { memoize } from 'vs/base/common/decorators';
|
import { memoize } from 'vs/base/common/decorators';
|
||||||
import { generateUuid } from 'vs/base/common/uuid';
|
import { generateUuid } from 'vs/base/common/uuid';
|
||||||
import { Emitter } from 'vs/base/common/event';
|
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
|
||||||
const componentMap: { [x: string]: Type<IDashboardWidget> } = {
|
const componentMap: { [x: string]: Type<IDashboardWidget> } = {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
import 'vs/css!./webviewContent';
|
import 'vs/css!./webviewContent';
|
||||||
|
|
||||||
import { Component, forwardRef, Input, OnInit, Inject, ChangeDetectorRef, ElementRef } from '@angular/core';
|
import { Component, forwardRef, Input, OnInit, Inject, ElementRef } from '@angular/core';
|
||||||
|
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import { Parts, IPartService } from 'vs/workbench/services/part/common/partService';
|
import { Parts, IPartService } from 'vs/workbench/services/part/common/partService';
|
||||||
@@ -17,8 +17,8 @@ import { IEnvironmentService } from 'vs/platform/environment/common/environment'
|
|||||||
import { WebviewElement } from 'vs/workbench/parts/webview/electron-browser/webviewElement';
|
import { WebviewElement } from 'vs/workbench/parts/webview/electron-browser/webviewElement';
|
||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
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/services/dashboard/common/dashboardViewService';
|
import { IDashboardWebview, IDashboardViewService } from 'sql/platform/dashboard/common/dashboardViewService';
|
||||||
import { AngularDisposable } from 'sql/base/common/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 sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboar
|
|||||||
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/parts/dashboard/common/dashboardWidget';
|
||||||
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component';
|
import { DashboardWidgetWrapper } from 'sql/parts/dashboard/contents/dashboardWidgetWrapper.component';
|
||||||
import { subscriptionToDisposable, AngularDisposable } from 'sql/base/common/lifecycle';
|
import { subscriptionToDisposable, AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
|
|
||||||
import { Disposable, IDisposable } from 'vs/base/common/lifecycle';
|
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||||
import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
|
import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration';
|
||||||
import * as objects from 'vs/base/common/objects';
|
import * as objects from 'vs/base/common/objects';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
|
|||||||
@@ -5,16 +5,15 @@
|
|||||||
|
|
||||||
import 'vs/css!./dashboard';
|
import 'vs/css!./dashboard';
|
||||||
|
|
||||||
import { OnInit, Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, OnDestroy, ViewChild } from '@angular/core';
|
import { OnInit, Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild } from '@angular/core';
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
import { DashboardServiceInterface } from './services/dashboardServiceInterface.service';
|
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import * as Utils from 'sql/parts/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/parts/dashboard/common/actions';
|
||||||
import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component';
|
import { DashboardPage } from 'sql/parts/dashboard/common/dashboardPage.component';
|
||||||
import { AngularDisposable } from 'sql/base/common/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';
|
||||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import { FormsModule } from '@angular/forms';
|
|||||||
import { NgGridModule } from 'angular2-grid';
|
import { NgGridModule } from 'angular2-grid';
|
||||||
import { ChartsModule } from 'ng2-charts/ng2-charts';
|
import { ChartsModule } from 'ng2-charts/ng2-charts';
|
||||||
|
|
||||||
import CustomUrlSerializer from 'sql/common/urlSerializer';
|
import CustomUrlSerializer from 'sql/base/node/urlSerializer';
|
||||||
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
|
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
|
||||||
import { Extensions as ComponentExtensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
|
import { Extensions as ComponentExtensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
|
||||||
import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService';
|
import { IBootstrapParams, ISelector, providerIterator } from 'sql/services/bootstrap/bootstrapService';
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ 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/parts/dashboard/dashboard.component';
|
||||||
import { ConnectionContextKey } from 'sql/parts/connection/common/connectionContextKey';
|
import { ConnectionContextKey } from 'sql/parts/connection/common/connectionContextKey';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { CancellationToken } from 'vs/base/common/cancellation';
|
import { CancellationToken } from 'vs/base/common/cancellation';
|
||||||
|
|
||||||
export class DashboardEditor extends BaseEditor {
|
export class DashboardEditor extends BaseEditor {
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import URI from 'vs/base/common/uri';
|
|||||||
import { IModelService } from 'vs/editor/common/services/modelService';
|
import { IModelService } from 'vs/editor/common/services/modelService';
|
||||||
import { IModeService } from 'vs/editor/common/services/modeService';
|
import { IModeService } from 'vs/editor/common/services/modeService';
|
||||||
|
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
|
|
||||||
export class DashboardInput extends EditorInput {
|
export class DashboardInput extends EditorInput {
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
import { INewDashboardTabDialogService } from 'sql/parts/dashboard/newDashboardTabDialog/interface';
|
import { INewDashboardTabDialogService } from 'sql/parts/dashboard/newDashboardTabDialog/interface';
|
||||||
import { NewDashboardTabDialog } from 'sql/parts/dashboard/newDashboardTabDialog/newDashboardTabDialog';
|
import { NewDashboardTabDialog } from 'sql/parts/dashboard/newDashboardTabDialog/newDashboardTabDialog';
|
||||||
import { IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry';
|
import { IDashboardTab } from 'sql/platform/dashboard/common/dashboardRegistry';
|
||||||
import { IAngularEventingService, AngularEventType } from 'sql/services/angularEventing/angularEventingService';
|
import { IAngularEventingService, AngularEventType } from 'sql/platform/angularEventing/common/angularEventingService';
|
||||||
import { IDashboardUITab } from 'sql/parts/dashboard/newDashboardTabDialog/newDashboardTabViewModel';
|
import { IDashboardUITab } from 'sql/parts/dashboard/newDashboardTabDialog/newDashboardTabViewModel';
|
||||||
|
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
|||||||
@@ -11,13 +11,12 @@ import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
|
|||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
||||||
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { IAngularEventingService } from 'sql/services/angularEventing/angularEventingService';
|
import { IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
|
||||||
|
|
||||||
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
|
|
||||||
export class DatabaseDashboardPage extends DashboardPage implements OnInit {
|
export class DatabaseDashboardPage extends DashboardPage implements OnInit {
|
||||||
|
|||||||
@@ -11,13 +11,12 @@ import { IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
|
|||||||
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
import { WidgetConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
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 { IAngularEventingService } from 'sql/services/angularEventing/angularEventingService';
|
import { IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
|
||||||
|
|
||||||
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
import { INotificationService } from 'vs/platform/notification/common/notification';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||||
|
|
||||||
export class ServerDashboardPage extends DashboardPage implements OnInit {
|
export class ServerDashboardPage extends DashboardPage implements OnInit {
|
||||||
|
|||||||
@@ -3,15 +3,14 @@
|
|||||||
* 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 { Injectable, forwardRef, Inject, OnDestroy } from '@angular/core';
|
import { Injectable, forwardRef, Inject } from '@angular/core';
|
||||||
import { Subject } from 'rxjs/Subject';
|
import { Subject } from 'rxjs/Subject';
|
||||||
|
|
||||||
import { DashboardServiceInterface } from './dashboardServiceInterface.service';
|
import { DashboardServiceInterface } from './dashboardServiceInterface.service';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { MenuItem, IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
|
import { MenuItem, IBreadcrumbService } from 'sql/base/browser/ui/breadcrumb/interfaces';
|
||||||
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
|
|
||||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
|
||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
|
|
||||||
export enum BreadcrumbClass {
|
export enum BreadcrumbClass {
|
||||||
@@ -24,11 +23,9 @@ export class BreadcrumbService implements IBreadcrumbService {
|
|||||||
public breadcrumbItem: Subject<MenuItem[]>;
|
public breadcrumbItem: Subject<MenuItem[]>;
|
||||||
private itemBreadcrums: MenuItem[];
|
private itemBreadcrums: MenuItem[];
|
||||||
private _currentPage: BreadcrumbClass;
|
private _currentPage: BreadcrumbClass;
|
||||||
private _bootstrap: DashboardServiceInterface;
|
|
||||||
|
|
||||||
constructor( @Inject(forwardRef(() => CommonServiceInterface)) private commonService: CommonServiceInterface) {
|
constructor( @Inject(forwardRef(() => CommonServiceInterface)) private commonService: DashboardServiceInterface) {
|
||||||
this._bootstrap = commonService as DashboardServiceInterface;
|
this.commonService.onUpdatePage(() => {
|
||||||
this._bootstrap.onUpdatePage(() => {
|
|
||||||
this.setBreadcrumbs(this._currentPage);
|
this.setBreadcrumbs(this._currentPage);
|
||||||
});
|
});
|
||||||
this.breadcrumbItem = new Subject<MenuItem[]>();
|
this.breadcrumbItem = new Subject<MenuItem[]>();
|
||||||
@@ -43,7 +40,7 @@ export class BreadcrumbService implements IBreadcrumbService {
|
|||||||
|
|
||||||
private getBreadcrumbsLink(page: BreadcrumbClass): MenuItem[] {
|
private getBreadcrumbsLink(page: BreadcrumbClass): MenuItem[] {
|
||||||
this.itemBreadcrums = [];
|
this.itemBreadcrums = [];
|
||||||
let profile = this._bootstrap.connectionManagementService.connectionInfo.connectionProfile;
|
let 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:
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ import { Router } from '@angular/router';
|
|||||||
/* SQL imports */
|
/* SQL imports */
|
||||||
import { IDashboardComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
import { IDashboardComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
||||||
import { IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
import { IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
||||||
import { IMetadataService } from 'sql/services/metadata/metadataService';
|
import { IMetadataService } from 'sql/platform/metadata/common/metadataService';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IAdminService } from 'sql/parts/admin/common/adminService';
|
import { IAdminService } from 'sql/workbench/services/admin/common/adminService';
|
||||||
import { IQueryManagementService } from 'sql/parts/query/common/queryManagement';
|
import { IQueryManagementService } from 'sql/platform/query/common/queryManagement';
|
||||||
import { toDisposableSubscription } from 'sql/parts/common/rxjsUtils';
|
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
|
||||||
import { AngularEventType, IAngularEvent, IAngularEventingService } from 'sql/services/angularEventing/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/parts/dashboard/common/dashboardWidget';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
|
|||||||
@@ -5,18 +5,20 @@
|
|||||||
|
|
||||||
import { Router } from '@angular/router';
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { MetadataType, IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
|
import { MetadataType, IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
|
import { SingleConnectionManagementService } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import {
|
import {
|
||||||
NewQueryAction, ScriptSelectAction, EditDataAction, ScriptCreateAction, ScriptExecuteAction, ScriptAlterAction,
|
NewQueryAction, ScriptSelectAction, EditDataAction, ScriptCreateAction, ScriptExecuteAction, ScriptAlterAction,
|
||||||
BackupAction, ManageActionContext, BaseActionContext, ManageAction, RestoreAction
|
BackupAction, ManageActionContext, BaseActionContext, ManageAction, RestoreAction
|
||||||
} from 'sql/workbench/common/actions';
|
} from 'sql/workbench/common/actions';
|
||||||
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||||
import { ConnectionManagementInfo } from 'sql/parts/connection/common/connectionManagementInfo';
|
import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo';
|
||||||
import * as Constants from 'sql/parts/connection/common/constants';
|
import * as Constants from 'sql/platform/connection/common/constants';
|
||||||
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
||||||
import { IScriptingService } from 'sql/services/scripting/scriptingService';
|
import { IScriptingService } from 'sql/platform/scripting/common/scriptingService';
|
||||||
|
import { IAngularEventingService } from 'sql/platform/angularEventing/common/angularEventingService';
|
||||||
|
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
|
||||||
|
|
||||||
import { ObjectMetadata } from 'sqlops';
|
import { ObjectMetadata } from 'sqlops';
|
||||||
|
|
||||||
@@ -32,7 +34,6 @@ import { $ } from 'vs/base/browser/dom';
|
|||||||
import { ExecuteCommandAction } from 'vs/platform/actions/common/actions';
|
import { ExecuteCommandAction } from 'vs/platform/actions/common/actions';
|
||||||
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
import { IKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
||||||
import { IProgressService } from 'vs/platform/progress/common/progress';
|
import { IProgressService } from 'vs/platform/progress/common/progress';
|
||||||
import { IAngularEventingService } from 'sql/services/angularEventing/angularEventingService';
|
|
||||||
|
|
||||||
export class ObjectMetadataWrapper implements ObjectMetadata {
|
export class ObjectMetadataWrapper implements ObjectMetadata {
|
||||||
public metadataType: MetadataType;
|
public metadataType: MetadataType;
|
||||||
|
|||||||
@@ -11,12 +11,11 @@ import { Component, Inject, forwardRef, ChangeDetectorRef, OnInit, ViewChild, El
|
|||||||
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/parts/dashboard/common/dashboardWidget';
|
||||||
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 { toDisposableSubscription } from 'sql/parts/common/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';
|
||||||
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||||
|
|
||||||
import { InputBox, IInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';
|
import { InputBox, IInputOptions } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||||
import { attachInputBoxStyler, attachListStyler } from 'vs/platform/theme/common/styler';
|
import { attachInputBoxStyler, attachListStyler } from 'vs/platform/theme/common/styler';
|
||||||
@@ -28,7 +27,6 @@ import { IContextViewService, IContextMenuService } from 'vs/platform/contextvie
|
|||||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IProgressService } from 'vs/platform/progress/common/progress';
|
import { IProgressService } from 'vs/platform/progress/common/progress';
|
||||||
import * as types from 'vs/base/common/types';
|
|
||||||
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import * as nls from 'vs/nls';
|
|||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
|
|
||||||
import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
|
import * as TaskUtilities from 'sql/workbench/common/taskUtilities';
|
||||||
import { RunQueryOnConnectionMode, IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { RunQueryOnConnectionMode, IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
||||||
import { InsightActionContext } from 'sql/workbench/common/actions';
|
import { InsightActionContext } from 'sql/workbench/common/actions';
|
||||||
import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
|
import { IObjectExplorerService } from 'sql/parts/objectExplorer/common/objectExplorerService';
|
||||||
|
|||||||
@@ -9,11 +9,10 @@ import {
|
|||||||
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/parts/dashboard/common/dashboardWidget';
|
||||||
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 { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive';
|
import { ComponentHostDirective } from 'sql/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/parts/common/rxjsUtils';
|
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
|
||||||
import { IInsightsConfig, IInsightsView } from './interfaces';
|
import { IInsightsConfig, IInsightsView } from './interfaces';
|
||||||
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
|
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
|
||||||
import { insertValueRegex } from 'sql/parts/insights/common/interfaces';
|
import { insertValueRegex } from 'sql/parts/insights/common/interfaces';
|
||||||
|
|||||||
@@ -6,10 +6,9 @@
|
|||||||
import { Component, Inject, forwardRef, ChangeDetectorRef, OnInit, ElementRef, ViewChild } from '@angular/core';
|
import { Component, Inject, forwardRef, ChangeDetectorRef, OnInit, ElementRef, ViewChild } from '@angular/core';
|
||||||
|
|
||||||
import { DashboardWidget, IDashboardWidget, WidgetConfig, WIDGET_CONFIG } from 'sql/parts/dashboard/common/dashboardWidget';
|
import { DashboardWidget, IDashboardWidget, WidgetConfig, WIDGET_CONFIG } from 'sql/parts/dashboard/common/dashboardWidget';
|
||||||
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 { ConnectionManagementInfo } from 'sql/parts/connection/common/connectionManagementInfo';
|
import { ConnectionManagementInfo } from 'sql/platform/connection/common/connectionManagementInfo';
|
||||||
import { toDisposableSubscription } from 'sql/parts/common/rxjsUtils';
|
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
|
||||||
import { error } from 'sql/base/common/log';
|
import { error } from 'sql/base/common/log';
|
||||||
import { IDashboardRegistry, Extensions as DashboardExtensions } from 'sql/platform/dashboard/common/dashboardRegistry';
|
import { IDashboardRegistry, Extensions as DashboardExtensions } from 'sql/platform/dashboard/common/dashboardRegistry';
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import { DashboardWidget, IDashboardWidget, WidgetConfig, WIDGET_CONFIG } from '
|
|||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
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 { TaskRegistry } from 'sql/platform/tasks/common/tasks';
|
import { TaskRegistry } from 'sql/platform/tasks/common/tasks';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { BaseActionContext } from 'sql/workbench/common/actions';
|
import { BaseActionContext } from 'sql/workbench/common/actions';
|
||||||
|
|
||||||
/* VS imports */
|
/* VS imports */
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import { memoize } from 'vs/base/common/decorators';
|
|||||||
import { DashboardWidget, IDashboardWidget, WidgetConfig, WIDGET_CONFIG } from 'sql/parts/dashboard/common/dashboardWidget';
|
import { DashboardWidget, IDashboardWidget, WidgetConfig, WIDGET_CONFIG } from 'sql/parts/dashboard/common/dashboardWidget';
|
||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
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/services/dashboard/common/dashboardViewService';
|
import { IDashboardWebview, IDashboardViewService } from 'sql/platform/dashboard/common/dashboardViewService';
|
||||||
|
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||||
|
|||||||
@@ -14,12 +14,12 @@ import { ModalFooterStyle } from 'sql/base/browser/ui/modal/modal';
|
|||||||
import { CategoryView } from 'sql/base/browser/ui/modal/optionsDialog';
|
import { CategoryView } from 'sql/base/browser/ui/modal/optionsDialog';
|
||||||
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||||
import { attachButtonStyler, attachListBoxStyler, attachInputBoxStyler, attachSelectBoxStyler, attachCheckboxStyler } from 'sql/common/theme/styler';
|
import { attachButtonStyler, attachListBoxStyler, attachInputBoxStyler, attachSelectBoxStyler, attachCheckboxStyler } from 'sql/common/theme/styler';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import * as BackupConstants from 'sql/parts/disasterRecovery/backup/constants';
|
import * as BackupConstants from 'sql/parts/disasterRecovery/backup/constants';
|
||||||
import { IBackupService, IBackupUiService, TaskExecutionMode } from 'sql/parts/disasterRecovery/backup/common/backupService';
|
import { IBackupService, IBackupUiService, TaskExecutionMode } from 'sql/platform/backup/common/backupService';
|
||||||
import FileValidationConstants = require('sql/parts/fileBrowser/common/fileValidationServiceConstants');
|
import FileValidationConstants = require('sql/parts/fileBrowser/common/fileValidationServiceConstants');
|
||||||
import { IFileBrowserDialogController } from 'sql/parts/fileBrowser/common/interfaces';
|
import { IFileBrowserDialogController } from 'sql/platform/fileBrowser/common/interfaces';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { ScrollableSplitView } from 'sql/base/browser/ui/scrollableSplitview/scrollableSplitview';
|
import { ScrollableSplitView } from 'sql/base/browser/ui/scrollableSplitview/scrollableSplitview';
|
||||||
|
|
||||||
import { MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
|
import { MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
|
||||||
|
|||||||
@@ -4,11 +4,11 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { BackupModule } from 'sql/parts/disasterRecovery/backup/backup.module';
|
import { BackupModule } from 'sql/parts/disasterRecovery/backup/backup.module';
|
||||||
import { BACKUP_SELECTOR } from 'sql/parts/disasterRecovery/backup/backup.component';
|
import { BACKUP_SELECTOR } from 'sql/parts/disasterRecovery/backup/backup.component';
|
||||||
import { attachModalDialogStyler } from 'sql/common/theme/styler';
|
import { attachModalDialogStyler } from 'sql/common/theme/styler';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
||||||
|
|
||||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ export const tripleDES = 'Triple DES';
|
|||||||
export const serverCertificate = localize('backup.serverCertificate', "Server Certificate");
|
export const serverCertificate = localize('backup.serverCertificate', "Server Certificate");
|
||||||
export const asymmetricKey = localize('backup.asymmetricKey', "Asymmetric Key");
|
export const asymmetricKey = localize('backup.asymmetricKey', "Asymmetric Key");
|
||||||
|
|
||||||
export const fileFiltersSet: {label: string, filters: string[]}[] = [
|
export const fileFiltersSet: { label: string, filters: string[] }[] = [
|
||||||
{ label: localize('backup.filterBackupFiles', "Backup Files"), filters: ['*.bak', '*.trn', '*.log'] },
|
{ label: localize('backup.filterBackupFiles', "Backup Files"), filters: ['*.bak', '*.trn', '*.log'] },
|
||||||
{ label: localize('backup.allFiles', "All Files"), filters: ['*'] }
|
{ label: localize('backup.allFiles', "All Files"), filters: ['*'] }
|
||||||
];
|
];
|
||||||
@@ -41,7 +41,7 @@ import * as FileValidationConstants from 'sql/parts/fileBrowser/common/fileValid
|
|||||||
import { Dropdown } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
import { Dropdown } from 'sql/base/browser/ui/editableDropdown/dropdown';
|
||||||
import { TabbedPanel, PanelTabIdentifier } from 'sql/base/browser/ui/panel/panel';
|
import { TabbedPanel, PanelTabIdentifier } from 'sql/base/browser/ui/panel/panel';
|
||||||
import { ServiceOptionType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
import { ServiceOptionType } from 'sql/workbench/api/common/sqlExtHostTypes';
|
||||||
import { IFileBrowserDialogController } from 'sql/parts/fileBrowser/common/interfaces';
|
import { IFileBrowserDialogController } from 'sql/platform/fileBrowser/common/interfaces';
|
||||||
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
|
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
|
||||||
|
|
||||||
interface FileListElement {
|
interface FileListElement {
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { EditorInput, EditorModel, ConfirmResult, EncodingMode } from 'vs/workbench/common/editor';
|
import { EditorInput, EditorModel, ConfirmResult, EncodingMode } from 'vs/workbench/common/editor';
|
||||||
import { IConnectionManagementService, IConnectableInput, INewConnectionParams } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService, IConnectableInput, INewConnectionParams } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
||||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import { EditSessionReadyParams, ISelectionData } from 'sqlops';
|
import { EditSessionReadyParams, ISelectionData } from 'sqlops';
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import { Taskbar, ITaskbarContent } from 'sql/base/browser/ui/taskbar/taskbar';
|
|||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { IActionItem } from 'vs/base/browser/ui/actionbar/actionbar';
|
import { IActionItem } from 'vs/base/browser/ui/actionbar/actionbar';
|
||||||
import { Action } from 'vs/base/common/actions';
|
import { Action } from 'vs/base/common/actions';
|
||||||
import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
||||||
import { IEditorDescriptorService } from 'sql/parts/query/editor/editorDescriptorService';
|
import { IEditorDescriptorService } from 'sql/parts/query/editor/editorDescriptorService';
|
||||||
import {
|
import {
|
||||||
RefreshTableAction, StopRefreshTableAction, ChangeMaxRowsAction, ChangeMaxRowsActionItem, ShowQueryPaneAction
|
RefreshTableAction, StopRefreshTableAction, ChangeMaxRowsAction, ChangeMaxRowsActionItem, ShowQueryPaneAction
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import { IConfigurationService } from 'vs/platform/configuration/common/configur
|
|||||||
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
|
import { BaseEditor } from 'vs/workbench/browser/parts/editor/baseEditor';
|
||||||
import * as types from 'vs/base/common/types';
|
import * as types from 'vs/base/common/types';
|
||||||
|
|
||||||
import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
||||||
import { bootstrapAngular } from 'sql/services/bootstrap/bootstrapService';
|
import { bootstrapAngular } from 'sql/services/bootstrap/bootstrapService';
|
||||||
import { BareResultsGridInfo } from 'sql/parts/query/editor/queryResultsEditor';
|
import { BareResultsGridInfo } from 'sql/parts/query/editor/queryResultsEditor';
|
||||||
import { IEditDataComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
import { IEditDataComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
import { Action, IActionItem, IActionRunner } from 'vs/base/common/actions';
|
import { Action, IActionItem, IActionRunner } from 'vs/base/common/actions';
|
||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||||
import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
||||||
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
import { SelectBox } from 'sql/base/browser/ui/selectBox/selectBox';
|
||||||
import { EventEmitter } from 'sql/base/common/eventEmitter';
|
import { EventEmitter } from 'sql/base/common/eventEmitter';
|
||||||
import { IConnectionManagementService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { EditDataEditor } from 'sql/parts/editData/editor/editDataEditor';
|
import { EditDataEditor } from 'sql/parts/editData/editor/editDataEditor';
|
||||||
import nls = require('vs/nls');
|
import nls = require('vs/nls');
|
||||||
import * as dom from 'vs/base/browser/dom';
|
import * as dom from 'vs/base/browser/dom';
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { IFileBrowserService } from 'sql/parts/fileBrowser/common/interfaces';
|
import { IFileBrowserService } from 'sql/platform/fileBrowser/common/interfaces';
|
||||||
import { FileNode } from 'sql/parts/fileBrowser/common/fileNode';
|
import { FileNode } from 'sql/parts/fileBrowser/common/fileNode';
|
||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { ITree, IDataSource } from 'vs/base/parts/tree/browser/tree';
|
import { ITree, IDataSource } from 'vs/base/parts/tree/browser/tree';
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { IFileBrowserDialogController } from 'sql/parts/fileBrowser/common/interfaces';
|
import { IFileBrowserDialogController } from 'sql/platform/fileBrowser/common/interfaces';
|
||||||
import { FileBrowserDialog } from 'sql/parts/fileBrowser/fileBrowserDialog';
|
import { FileBrowserDialog } from 'sql/parts/fileBrowser/fileBrowserDialog';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
@@ -23,7 +23,7 @@ export class FileBrowserDialogController implements IFileBrowserDialogController
|
|||||||
|
|
||||||
public showDialog(ownerUri: string,
|
public showDialog(ownerUri: string,
|
||||||
expandPath: string,
|
expandPath: string,
|
||||||
fileFilters: [{label: string, filters: string[]}],
|
fileFilters: [{ label: string, filters: string[] }],
|
||||||
fileValidationServiceType: string,
|
fileValidationServiceType: string,
|
||||||
isWide: boolean,
|
isWide: boolean,
|
||||||
handleOnOk: (path: string) => void
|
handleOnOk: (path: string) => void
|
||||||
@@ -35,6 +35,6 @@ export class FileBrowserDialogController implements IFileBrowserDialogController
|
|||||||
|
|
||||||
this._fileBrowserDialog.setWide(isWide);
|
this._fileBrowserDialog.setWide(isWide);
|
||||||
this._fileBrowserDialog.onOk((filepath) => handleOnOk(filepath));
|
this._fileBrowserDialog.onOk((filepath) => handleOnOk(filepath));
|
||||||
this._fileBrowserDialog.open(ownerUri, expandPath, fileFilters, fileValidationServiceType);
|
this._fileBrowserDialog.open(ownerUri, expandPath, fileFilters, fileValidationServiceType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,17 +3,16 @@
|
|||||||
* 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 { IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
|
|
||||||
import { FileBrowserDataSource } from 'sql/parts/fileBrowser/fileBrowserDataSource';
|
import { FileBrowserDataSource } from 'sql/parts/fileBrowser/fileBrowserDataSource';
|
||||||
import { FileBrowserController } from 'sql/parts/fileBrowser/fileBrowserController';
|
import { FileBrowserController } from 'sql/parts/fileBrowser/fileBrowserController';
|
||||||
import { FileBrowserRenderer } from 'sql/parts/fileBrowser/fileBrowserRenderer';
|
import { FileBrowserRenderer } from 'sql/parts/fileBrowser/fileBrowserRenderer';
|
||||||
import { IFileBrowserService } from 'sql/parts/fileBrowser/common/interfaces';
|
import { IFileBrowserService } from 'sql/platform/fileBrowser/common/interfaces';
|
||||||
import { FileNode } from 'sql/parts/fileBrowser/common/fileNode';
|
import { FileNode } from 'sql/parts/fileBrowser/common/fileNode';
|
||||||
import errors = require('vs/base/common/errors');
|
import errors = require('vs/base/common/errors');
|
||||||
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
import { IDisposable, dispose } from 'vs/base/common/lifecycle';
|
||||||
import * as DOM from 'vs/base/browser/dom';
|
import * as DOM from 'vs/base/browser/dom';
|
||||||
import nls = require('vs/nls');
|
import nls = require('vs/nls');
|
||||||
import { DefaultFilter, DefaultAccessibilityProvider, DefaultController, DefaultDragAndDrop } from 'vs/base/parts/tree/browser/treeDefaults';
|
import { DefaultFilter, DefaultAccessibilityProvider, DefaultDragAndDrop } from 'vs/base/parts/tree/browser/treeDefaults';
|
||||||
import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
|
import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { attachListStyler } from 'vs/platform/theme/common/styler';
|
import { attachListStyler } from 'vs/platform/theme/common/styler';
|
||||||
@@ -30,7 +29,6 @@ export class FileBrowserTreeView implements IDisposable {
|
|||||||
constructor(
|
constructor(
|
||||||
@IInstantiationService private _instantiationService: IInstantiationService,
|
@IInstantiationService private _instantiationService: IInstantiationService,
|
||||||
@IFileBrowserService private _fileBrowserService: IFileBrowserService,
|
@IFileBrowserService private _fileBrowserService: IFileBrowserService,
|
||||||
@IErrorMessageService private _errorMessageService: IErrorMessageService,
|
|
||||||
@IThemeService private _themeService: IThemeService
|
@IThemeService private _themeService: IThemeService
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import { IFileBrowserService } from 'sql/parts/fileBrowser/common/interfaces';
|
import { IFileBrowserService } from 'sql/platform/fileBrowser/common/interfaces';
|
||||||
import { localize } from 'vs/nls';
|
import { localize } from 'vs/nls';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -14,11 +14,11 @@ import { localize } from 'vs/nls';
|
|||||||
export class FileBrowserViewModel {
|
export class FileBrowserViewModel {
|
||||||
private _ownerUri: string;
|
private _ownerUri: string;
|
||||||
private _expandPath: string;
|
private _expandPath: string;
|
||||||
private _fileFilters: [{label: string, filters: string[]}];
|
private _fileFilters: [{ label: string, filters: string[] }];
|
||||||
private _fileValidationServiceType: string;
|
private _fileValidationServiceType: string;
|
||||||
public formattedFileFilters: string[];
|
public formattedFileFilters: string[];
|
||||||
|
|
||||||
constructor(@IFileBrowserService private _fileBrowserService: IFileBrowserService) {
|
constructor( @IFileBrowserService private _fileBrowserService: IFileBrowserService) {
|
||||||
}
|
}
|
||||||
|
|
||||||
public onAddFileTree(onAddFileTreeCallback) {
|
public onAddFileTree(onAddFileTreeCallback) {
|
||||||
@@ -31,7 +31,7 @@ export class FileBrowserViewModel {
|
|||||||
|
|
||||||
public initialize(ownerUri: string,
|
public initialize(ownerUri: string,
|
||||||
expandPath: string,
|
expandPath: string,
|
||||||
fileFilters: [ {label: string, filters: string[]} ],
|
fileFilters: [{ label: string, filters: string[] }],
|
||||||
fileValidationServiceType: string,
|
fileValidationServiceType: string,
|
||||||
) {
|
) {
|
||||||
this._ownerUri = ownerUri;
|
this._ownerUri = ownerUri;
|
||||||
@@ -39,7 +39,7 @@ export class FileBrowserViewModel {
|
|||||||
this._fileValidationServiceType = fileValidationServiceType;
|
this._fileValidationServiceType = fileValidationServiceType;
|
||||||
|
|
||||||
if (!fileFilters) {
|
if (!fileFilters) {
|
||||||
this._fileFilters = [ {label: localize('allFiles', 'All files'), filters: ['*']} ];
|
this._fileFilters = [{ label: localize('allFiles', 'All files'), filters: ['*'] }];
|
||||||
} else {
|
} else {
|
||||||
this._fileFilters = fileFilters;
|
this._fileFilters = fileFilters;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ import { Subject } from 'rxjs/Subject';
|
|||||||
import { Observer } from 'rxjs/Observer';
|
import { Observer } from 'rxjs/Observer';
|
||||||
|
|
||||||
import { ResultSetSubset, EditUpdateCellResult, EditSubsetResult, EditCreateRowResult } from 'sqlops';
|
import { ResultSetSubset, EditUpdateCellResult, EditSubsetResult, EditCreateRowResult } from 'sqlops';
|
||||||
import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
||||||
import { ResultSerializer } from 'sql/parts/query/common/resultSerializer';
|
import { ResultSerializer } from 'sql/platform/node/resultSerializer';
|
||||||
import { ISaveRequest } from 'sql/parts/grid/common/interfaces';
|
import { ISaveRequest } from 'sql/parts/grid/common/interfaces';
|
||||||
|
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
|||||||
@@ -6,14 +6,14 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
import * as GridContentEvents from 'sql/parts/grid/common/gridContentEvents';
|
import * as GridContentEvents from 'sql/parts/grid/common/gridContentEvents';
|
||||||
import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
||||||
import { QueryEditor } from 'sql/parts/query/editor/queryEditor';
|
import { QueryEditor } from 'sql/parts/query/editor/queryEditor';
|
||||||
import { EditDataEditor } from 'sql/parts/editData/editor/editDataEditor';
|
import { EditDataEditor } from 'sql/parts/editData/editor/editDataEditor';
|
||||||
|
|
||||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||||
|
|
||||||
function runActionOnActiveResultsEditor (accessor: ServicesAccessor, eventName: string): void {
|
function runActionOnActiveResultsEditor(accessor: ServicesAccessor, eventName: string): void {
|
||||||
let editorService = accessor.get(IEditorService);
|
let editorService = accessor.get(IEditorService);
|
||||||
const candidates = [editorService.activeControl, ...editorService.visibleControls].filter(e => {
|
const candidates = [editorService.activeControl, ...editorService.visibleControls].filter(e => {
|
||||||
if (e) {
|
if (e) {
|
||||||
@@ -28,7 +28,7 @@ function runActionOnActiveResultsEditor (accessor: ServicesAccessor, eventName:
|
|||||||
|
|
||||||
if (candidates.length > 0) {
|
if (candidates.length > 0) {
|
||||||
let queryModelService: IQueryModelService = accessor.get(IQueryModelService);
|
let queryModelService: IQueryModelService = accessor.get(IQueryModelService);
|
||||||
let uri = (<any> candidates[0].input).uri;
|
let uri = (<any>candidates[0].input).uri;
|
||||||
queryModelService.sendGridContentEvent(uri, eventName);
|
queryModelService.sendGridContentEvent(uri, eventName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ import 'vs/css!sql/parts/grid/media/slickGrid';
|
|||||||
import { Subscription, Subject } from 'rxjs/Rx';
|
import { Subscription, Subject } from 'rxjs/Rx';
|
||||||
import { ElementRef, QueryList, ChangeDetectorRef, ViewChildren } from '@angular/core';
|
import { ElementRef, QueryList, ChangeDetectorRef, ViewChildren } from '@angular/core';
|
||||||
import { SlickGrid } from 'angular2-slickgrid';
|
import { SlickGrid } from 'angular2-slickgrid';
|
||||||
import { toDisposableSubscription } from 'sql/parts/common/rxjsUtils';
|
import { toDisposableSubscription } from 'sql/base/node/rxjsUtils';
|
||||||
import * as Constants from 'sql/parts/query/common/constants';
|
import * as Constants from 'sql/parts/query/common/constants';
|
||||||
import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants';
|
import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants';
|
||||||
import { IGridInfo, IGridDataSet, SaveFormat } from 'sql/parts/grid/common/interfaces';
|
import { IGridInfo, IGridDataSet, SaveFormat } from 'sql/parts/grid/common/interfaces';
|
||||||
import * as Utils from 'sql/parts/connection/common/utils';
|
import * as Utils from 'sql/platform/connection/common/utils';
|
||||||
import { DataService } from 'sql/parts/grid/services/dataService';
|
import { DataService } from 'sql/parts/grid/services/dataService';
|
||||||
import * as actions from 'sql/parts/grid/views/gridActions';
|
import * as actions from 'sql/parts/grid/views/gridActions';
|
||||||
import * as Services from 'sql/parts/grid/services/sharedServices';
|
import * as Services from 'sql/parts/grid/services/sharedServices';
|
||||||
@@ -235,7 +235,7 @@ export abstract class GridParentComponent {
|
|||||||
let selection = this.slickgrids.toArray()[index || this.activeGrid].getSelectedRanges();
|
let selection = this.slickgrids.toArray()[index || this.activeGrid].getSelectedRanges();
|
||||||
if (selection) {
|
if (selection) {
|
||||||
selection = selection.map(c => { return <Slick.Range>{ fromCell: c.fromCell - 1, toCell: c.toCell - 1, toRow: c.toRow, fromRow: c.fromRow }; });
|
selection = selection.map(c => { return <Slick.Range>{ fromCell: c.fromCell - 1, toCell: c.toCell - 1, toRow: c.toRow, fromRow: c.fromRow }; });
|
||||||
return selection;
|
return selection;
|
||||||
} else {
|
} else {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,261 +0,0 @@
|
|||||||
<div #taskbarContainer></div>
|
|
||||||
<div style="display: flex; flex-flow: row; overflow: hidden; height: 100%; width: 100%">
|
|
||||||
<div style="flex:3 3 auto; margin: 5px; overflow: scroll">
|
|
||||||
<div style="position: relative; width: calc(100% - 20px); height: calc(100% - 20px)">
|
|
||||||
<ng-template component-host></ng-template>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="angular-modal-body-content chart-viewer" style="flex:1 1 auto; border-left: 1px solid; margin: 5px;">
|
|
||||||
<div style="position: relative; width: 100%">
|
|
||||||
<div class="dialog-label">{{localizedStrings.CHART_TYPE}}</div>
|
|
||||||
<select-box #chartTypeSelect class="input-divider"
|
|
||||||
[aria-label]="localizedStrings.CHART_TYPE"
|
|
||||||
[options]="insightRegistry.getAllIds()"
|
|
||||||
[selectedOption]="getDefaultChartType()"
|
|
||||||
[onlyEmitOnChange]="true"
|
|
||||||
(onDidSelect)="onChartChanged($event)"></select-box>
|
|
||||||
<ng-container [ngSwitch]="chartTypesSelectBox.value">
|
|
||||||
<ng-container *ngSwitchCase="'line'">
|
|
||||||
<ng-container *ngTemplateOutlet="lineInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'scatter'">
|
|
||||||
<ng-container *ngTemplateOutlet="scatterInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'timeSeries'">
|
|
||||||
<ng-container *ngTemplateOutlet="scatterInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'bar'">
|
|
||||||
<ng-container *ngTemplateOutlet="barInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'horizontalBar'">
|
|
||||||
<ng-container *ngTemplateOutlet="horizontalBarInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'pie'">
|
|
||||||
<ng-container *ngTemplateOutlet="pieInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'doughnut'">
|
|
||||||
<ng-container *ngTemplateOutlet="pieInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'count'">
|
|
||||||
<ng-container *ngTemplateOutlet="countInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'image'">
|
|
||||||
<ng-container *ngTemplateOutlet="imageInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
<ng-container *ngSwitchCase="'table'">
|
|
||||||
<ng-container *ngTemplateOutlet="tableInput"></ng-container>
|
|
||||||
</ng-container>
|
|
||||||
</ng-container>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
count control interface
|
|
||||||
-->
|
|
||||||
<ng-template #countInput>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
image control interface
|
|
||||||
-->
|
|
||||||
<ng-template #imageInput>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
table control interface
|
|
||||||
-->
|
|
||||||
<ng-template #tableInput>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Line graph control interface
|
|
||||||
-->
|
|
||||||
<ng-template #lineInput>
|
|
||||||
<ng-container *ngTemplateOutlet="dataTypeInput"></ng-container>
|
|
||||||
<ng-template [ngIf]="showColumnsAsLabels">
|
|
||||||
<ng-container *ngTemplateOutlet="columnsAsLabelsInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-template [ngIf]="showLabelFirstColumn">
|
|
||||||
<ng-container *ngTemplateOutlet="labelFirstColumnInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-container *ngTemplateOutlet="yAxisLabelInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="xAxisLabelInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="legendInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
scatter graph control interface
|
|
||||||
-->
|
|
||||||
<ng-template #scatterInput>
|
|
||||||
<ng-container *ngTemplateOutlet="legendInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="yAxisLabelInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="xAxisLabelInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
bar graph control interface
|
|
||||||
-->
|
|
||||||
<ng-template #barInput>
|
|
||||||
<ng-container *ngTemplateOutlet="dataDirectionInput"></ng-container>
|
|
||||||
<ng-template [ngIf]="showColumnsAsLabels">
|
|
||||||
<ng-container *ngTemplateOutlet="columnsAsLabelsInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-template [ngIf]="showLabelFirstColumn">
|
|
||||||
<ng-container *ngTemplateOutlet="labelFirstColumnInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-container *ngTemplateOutlet="legendInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="yAxisLabelInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="yAxisMinMaxInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="xAxisLabelInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Horizontal bar graph control interface
|
|
||||||
-->
|
|
||||||
<ng-template #horizontalBarInput>
|
|
||||||
<ng-container *ngTemplateOutlet="dataDirectionInput"></ng-container>
|
|
||||||
<ng-template [ngIf]="showColumnsAsLabels">
|
|
||||||
<ng-container *ngTemplateOutlet="columnsAsLabelsInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-template [ngIf]="showLabelFirstColumn">
|
|
||||||
<ng-container *ngTemplateOutlet="labelFirstColumnInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-container *ngTemplateOutlet="legendInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="xAxisLabelInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="xAxisMinMaxInput"></ng-container>
|
|
||||||
<ng-container *ngTemplateOutlet="yAxisLabelInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Pie graph control interface
|
|
||||||
-->
|
|
||||||
<ng-template #pieInput>
|
|
||||||
<ng-container *ngTemplateOutlet="dataDirectionInput"></ng-container>
|
|
||||||
<ng-template [ngIf]="showColumnsAsLabels">
|
|
||||||
<ng-container *ngTemplateOutlet="columnsAsLabelsInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-template [ngIf]="showLabelFirstColumn">
|
|
||||||
<ng-container *ngTemplateOutlet="labelFirstColumnInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
<ng-container *ngTemplateOutlet="legendInput"></ng-container>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Legend Input Control interface
|
|
||||||
Valid for any charting type, i.e not image/count
|
|
||||||
-->
|
|
||||||
<ng-template #legendInput>
|
|
||||||
<div class="dialog-label" id="legendLabel">{{localizedStrings.LEGEND}}</div>
|
|
||||||
<select-box class="input-divider"
|
|
||||||
[aria-label]="localizedStrings.LEGEND"
|
|
||||||
[options]="legendOptions"
|
|
||||||
[selectedOption]="_chartConfig.legendPosition"
|
|
||||||
[onlyEmitOnChange]="true"
|
|
||||||
(onDidSelect)="setConfigValue('legendPosition', $event.selected)"></select-box>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Data type input control interface
|
|
||||||
point vs number data type, only valid for the line chart type
|
|
||||||
-->
|
|
||||||
<ng-template #dataTypeInput>
|
|
||||||
<div class="dialog-label" id="dataTypeLabel">{{localizedStrings.DATA_TYPE}}</div>
|
|
||||||
<div class="radio-indent" role="radiogroup" aria-labelledby="dataTypeLabel">
|
|
||||||
<div class="option">
|
|
||||||
<input type="radio" role="radio" name="data-type" value="number" [(ngModel)]="dataType" aria-labelledby="numberLabel"><span id="numberLabel">{{localizedStrings.NUMBER}}</span>
|
|
||||||
</div>
|
|
||||||
<div class="option">
|
|
||||||
<input type="radio" role="radio" name="data-type" value="point" [(ngModel)]="dataType" aria-labelledby="pointLabel"><span id="pointLabel">{{localizedStrings.POINT}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Data direction input control
|
|
||||||
vertical vs horizontal, change which direction is considered a "series" of data
|
|
||||||
only valid for pie, bar, doughnut charts and line is numbr is the data type
|
|
||||||
otherwise the direction is assumed for each other type
|
|
||||||
-->
|
|
||||||
<ng-template #dataDirectionInput>
|
|
||||||
<div class="dialog-label" id="dataDirectionLabel">{{localizedStrings.DATA_DIRECTION}}</div>
|
|
||||||
<div class="radio-indent" role="radiogroup" aria-labelledby="dataDirectionLabel">
|
|
||||||
<div class="option">
|
|
||||||
<input type="radio" role="radio" name="data-direction" value="vertical" [(ngModel)]="dataDirection" aria-labelledby="verticalLabel"><span id="verticalLabel">{{localizedStrings.VERTICAL}}</span>
|
|
||||||
</div>
|
|
||||||
<div class="option">
|
|
||||||
<input type="radio" role="radio" name="data-direction" value="horizontal" [(ngModel)]="dataDirection" aria-labelledby="horizontalLabel"><span id="horizontalLabel">{{localizedStrings.HORIZONTAL}}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Control for specifing if the first column should be used to label the series
|
|
||||||
Only valid for data direction = horizontal
|
|
||||||
-->
|
|
||||||
<ng-template #labelFirstColumnInput>
|
|
||||||
<checkbox class="input-divider" [label]="localizedStrings.LABEL_FIRST_COLUMN" (onChange)="setConfigValue('labelFirstColumn', $event)"></checkbox>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Control whether to use column names as series labels
|
|
||||||
Only valid for data direction = vertical
|
|
||||||
-->
|
|
||||||
<ng-template #columnsAsLabelsInput>
|
|
||||||
<checkbox class="input-divider" [label]="localizedStrings.COLUMNS_AS_LABELS" (onChange)="setConfigValue('columnsAsLabels', $event)"></checkbox>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Y-Axis options controls
|
|
||||||
valid for any charting value
|
|
||||||
-->
|
|
||||||
<ng-template #yAxisLabelInput>
|
|
||||||
<span>
|
|
||||||
{{localizedStrings.Y_AXIS_LABEL}}
|
|
||||||
<input-box (onDidChange)="setConfigValue('yAxisLabel', $event)"
|
|
||||||
[aria-label]="localizedStrings.Y_AXIS_LABEL"></input-box>
|
|
||||||
</span>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template #yAxisMinMaxInput>
|
|
||||||
<span>
|
|
||||||
{{localizedStrings.Y_AXIS_MAX_VAL}}
|
|
||||||
<input-box [type]="'number'"
|
|
||||||
(onDidChange)="setConfigValue('yAxisMax', $event)"
|
|
||||||
[aria-label]="localizedStrings.Y_AXIS_MAX_VAL"></input-box>
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
{{localizedStrings.Y_AXIS_MIN_VAL}}
|
|
||||||
<input-box [type]="'number'"
|
|
||||||
(onDidChange)="setConfigValue('yAxisMin', $event)"
|
|
||||||
[aria-label]="localizedStrings.Y_AXIS_MIN_VAL"></input-box>
|
|
||||||
</span>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
|
|
||||||
<!--
|
|
||||||
X-Axis options controls
|
|
||||||
valid for any charting value
|
|
||||||
-->
|
|
||||||
<ng-template #xAxisLabelInput>
|
|
||||||
<span>
|
|
||||||
{{localizedStrings.X_AXIS_LABEL}}
|
|
||||||
<input-box (onDidChange)="setConfigValue('xAxisLabel', $event)"
|
|
||||||
[aria-label]="localizedStrings.X_AXIS_LABEL"></input-box>
|
|
||||||
</span>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template #xAxisMinMaxInput>
|
|
||||||
<span>
|
|
||||||
{{localizedStrings.X_AXIS_MAX_VAL}}
|
|
||||||
<input-box [type]="'number'"
|
|
||||||
(onDidChange)="setConfigValue('xAxisMax', $event)"
|
|
||||||
[aria-label]="localizedStrings.X_AXIS_MAX_VAL"></input-box>
|
|
||||||
</span>
|
|
||||||
<span>
|
|
||||||
{{localizedStrings.X_AXIS_MIN_VAL}}
|
|
||||||
<input-box [type]="'number'"
|
|
||||||
(onDidChange)="setConfigValue('xAxisMin', $event)"
|
|
||||||
[aria-label]="localizedStrings.X_AXIS_MIN_VAL"></input-box>
|
|
||||||
</span>
|
|
||||||
</ng-template>
|
|
||||||
@@ -1,363 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------------------------
|
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
||||||
*--------------------------------------------------------------------------------------------*/
|
|
||||||
import 'vs/css!sql/parts/grid/views/query/chartViewer';
|
|
||||||
|
|
||||||
import {
|
|
||||||
Component, Inject, forwardRef, OnInit, ComponentFactoryResolver, ViewChild,
|
|
||||||
OnDestroy, Input, ElementRef, ChangeDetectorRef
|
|
||||||
} from '@angular/core';
|
|
||||||
import { NgGridItemConfig } from 'angular2-grid';
|
|
||||||
|
|
||||||
import { Taskbar } from 'sql/base/browser/ui/taskbar/taskbar';
|
|
||||||
import { ComponentHostDirective } from 'sql/parts/dashboard/common/componentHost.directive';
|
|
||||||
import { IGridDataSet } from 'sql/parts/grid/common/interfaces';
|
|
||||||
import { IInsightData, IInsightsView, IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
|
||||||
import { Extensions, IInsightRegistry } from 'sql/platform/dashboard/common/insightRegistry';
|
|
||||||
import { QueryEditor } from 'sql/parts/query/editor/queryEditor';
|
|
||||||
import { ILineConfig } from 'sql/parts/dashboard/widgets/insights/views/charts/types/lineChart.component';
|
|
||||||
import * as PathUtilities from 'sql/common/pathUtilities';
|
|
||||||
import { IChartViewActionContext, CopyAction, CreateInsightAction, SaveImageAction } from 'sql/parts/grid/views/query/chartViewerActions';
|
|
||||||
import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
|
|
||||||
import * as Constants from 'sql/parts/query/common/constants';
|
|
||||||
import { SelectBox as AngularSelectBox } from 'sql/base/browser/ui/selectBox/selectBox.component';
|
|
||||||
import { IQueryModelService } from 'sql/parts/query/execution/queryModel';
|
|
||||||
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
|
|
||||||
import { LegendPosition, DataDirection, DataType } from 'sql/parts/dashboard/widgets/insights/views/charts/interfaces';
|
|
||||||
|
|
||||||
/* Insights */
|
|
||||||
import {
|
|
||||||
ChartInsight
|
|
||||||
} from 'sql/parts/dashboard/widgets/insights/views/charts/chartInsight.component';
|
|
||||||
|
|
||||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import Severity from 'vs/base/common/severity';
|
|
||||||
import URI from 'vs/base/common/uri';
|
|
||||||
import * as nls from 'vs/nls';
|
|
||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
|
||||||
import { mixin } from 'vs/base/common/objects';
|
|
||||||
import * as paths from 'vs/base/common/paths';
|
|
||||||
import * as pfs from 'vs/base/node/pfs';
|
|
||||||
import { ISelectData } from 'vs/base/browser/ui/selectBox/selectBox';
|
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
|
||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
|
||||||
import { IWindowsService, IWindowService } from 'vs/platform/windows/common/windows';
|
|
||||||
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
|
|
||||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
|
||||||
|
|
||||||
const insightRegistry = Registry.as<IInsightRegistry>(Extensions.InsightContribution);
|
|
||||||
|
|
||||||
const LocalizedStrings = {
|
|
||||||
CHART_TYPE: nls.localize('chartTypeLabel', 'Chart Type'),
|
|
||||||
DATA_DIRECTION: nls.localize('dataDirectionLabel', 'Data Direction'),
|
|
||||||
VERTICAL: nls.localize('verticalLabel', 'Vertical'),
|
|
||||||
HORIZONTAL: nls.localize('horizontalLabel', 'Horizontal'),
|
|
||||||
DATA_TYPE: nls.localize('dataTypeLabel', 'Data Type'),
|
|
||||||
NUMBER: nls.localize('numberLabel', 'Number'),
|
|
||||||
POINT: nls.localize('pointLabel', 'Point'),
|
|
||||||
LABEL_FIRST_COLUMN: nls.localize('labelFirstColumnLabel', 'Use first column as row label'),
|
|
||||||
COLUMNS_AS_LABELS: nls.localize('columnsAsLabelsLabel', 'Use column names as labels'),
|
|
||||||
LEGEND: nls.localize('legendLabel', 'Legend Position'),
|
|
||||||
CHART_NOT_FOUND: nls.localize('chartNotFound', 'Could not find chart to save'),
|
|
||||||
X_AXIS_LABEL: nls.localize('xAxisLabel', 'X Axis Label'),
|
|
||||||
X_AXIS_MIN_VAL: nls.localize('xAxisMinVal', 'X Axis Minimum Value'),
|
|
||||||
X_AXIS_MAX_VAL: nls.localize('xAxisMaxVal', 'X Axis Maximum Value'),
|
|
||||||
Y_AXIS_LABEL: nls.localize('yAxisLabel', 'Y Axis Label'),
|
|
||||||
Y_AXIS_MIN_VAL: nls.localize('yAxisMinVal', 'Y Axis Minimum Value'),
|
|
||||||
Y_AXIS_MAX_VAL: nls.localize('yAxisMaxVal', 'Y Axis Maximum Value')
|
|
||||||
};
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'chart-viewer',
|
|
||||||
templateUrl: decodeURI(require.toUrl('sql/parts/grid/views/query/chartViewer.component.html'))
|
|
||||||
})
|
|
||||||
export class ChartViewerComponent implements OnInit, OnDestroy, IChartViewActionContext {
|
|
||||||
public legendOptions: string[];
|
|
||||||
@ViewChild('chartTypeSelect') private chartTypesSelectBox: AngularSelectBox;
|
|
||||||
|
|
||||||
/* UI */
|
|
||||||
|
|
||||||
private _actionBar: Taskbar;
|
|
||||||
private _createInsightAction: CreateInsightAction;
|
|
||||||
private _copyAction: CopyAction;
|
|
||||||
private _saveAction: SaveImageAction;
|
|
||||||
private _chartConfig: ILineConfig;
|
|
||||||
private _disposables: Array<IDisposable> = [];
|
|
||||||
private _executeResult: IInsightData;
|
|
||||||
private _chartComponent: ChartInsight;
|
|
||||||
|
|
||||||
protected localizedStrings = LocalizedStrings;
|
|
||||||
protected insightRegistry = insightRegistry;
|
|
||||||
|
|
||||||
@ViewChild(ComponentHostDirective) private componentHost: ComponentHostDirective;
|
|
||||||
@ViewChild('taskbarContainer', { read: ElementRef }) private taskbarContainer;
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
@Inject(forwardRef(() => ComponentFactoryResolver)) private _componentFactoryResolver: ComponentFactoryResolver,
|
|
||||||
@Inject(forwardRef(() => ChangeDetectorRef)) private _cd: ChangeDetectorRef,
|
|
||||||
@Inject(IInstantiationService) private instantiationService: IInstantiationService,
|
|
||||||
@Inject(INotificationService) private notificationService: INotificationService,
|
|
||||||
@Inject(IContextMenuService) private contextMenuService: IContextMenuService,
|
|
||||||
@Inject(IClipboardService) private clipboardService: IClipboardService,
|
|
||||||
@Inject(IConfigurationService) private configurationService: IConfigurationService,
|
|
||||||
@Inject(IWindowsService) private windowsService: IWindowsService,
|
|
||||||
@Inject(IWorkspaceContextService) private workspaceContextService: IWorkspaceContextService,
|
|
||||||
@Inject(IWindowService) private windowService: IWindowService,
|
|
||||||
@Inject(IQueryModelService) private queryModelService: IQueryModelService,
|
|
||||||
@Inject(IEditorService) private editorService: IEditorService
|
|
||||||
) {
|
|
||||||
this.setDefaultChartConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnInit() {
|
|
||||||
this.legendOptions = Object.values(LegendPosition);
|
|
||||||
this._initActionBar();
|
|
||||||
}
|
|
||||||
|
|
||||||
private setDefaultChartConfig() {
|
|
||||||
let defaultChart = this.getDefaultChartType();
|
|
||||||
if (defaultChart === 'timeSeries') {
|
|
||||||
this._chartConfig = <ILineConfig>{
|
|
||||||
dataDirection: 'vertical',
|
|
||||||
dataType: 'point',
|
|
||||||
legendPosition: 'none'
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
this._chartConfig = <ILineConfig>{
|
|
||||||
dataDirection: 'vertical',
|
|
||||||
dataType: 'number',
|
|
||||||
legendPosition: 'none'
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected getDefaultChartType(): string {
|
|
||||||
let defaultChartType = Constants.chartTypeHorizontalBar;
|
|
||||||
if (this.configurationService) {
|
|
||||||
let chartSettings = WorkbenchUtils.getSqlConfigSection(this.configurationService, 'chart');
|
|
||||||
// Only use the value if it's a known chart type. Ideally could query this dynamically but can't figure out how
|
|
||||||
if (chartSettings && Constants.allChartTypes.indexOf(chartSettings[Constants.defaultChartType]) > -1) {
|
|
||||||
defaultChartType = chartSettings[Constants.defaultChartType];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return defaultChartType;
|
|
||||||
}
|
|
||||||
|
|
||||||
private _initActionBar() {
|
|
||||||
this._createInsightAction = this.instantiationService.createInstance(CreateInsightAction);
|
|
||||||
this._copyAction = this.instantiationService.createInstance(CopyAction);
|
|
||||||
this._saveAction = this.instantiationService.createInstance(SaveImageAction);
|
|
||||||
|
|
||||||
let taskbar = <HTMLElement>this.taskbarContainer.nativeElement;
|
|
||||||
this._actionBar = new Taskbar(taskbar, this.contextMenuService);
|
|
||||||
this._actionBar.context = this;
|
|
||||||
this._actionBar.setContent([
|
|
||||||
{ action: this._createInsightAction },
|
|
||||||
{ action: this._copyAction },
|
|
||||||
{ action: this._saveAction }
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
public onChartChanged(e: ISelectData): void {
|
|
||||||
this.setDefaultChartConfig();
|
|
||||||
if ([Constants.chartTypeScatter, Constants.chartTypeTimeSeries].some(item => item === e.selected)) {
|
|
||||||
this.dataType = DataType.Point;
|
|
||||||
this.dataDirection = DataDirection.Horizontal;
|
|
||||||
}
|
|
||||||
this.initChart();
|
|
||||||
}
|
|
||||||
|
|
||||||
ngAfterViewInit() {
|
|
||||||
this.initChart();
|
|
||||||
}
|
|
||||||
|
|
||||||
setConfigValue(key: string, value: any, refresh = true): void {
|
|
||||||
this._chartConfig[key] = value;
|
|
||||||
if (refresh) {
|
|
||||||
this.initChart();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public set dataType(type: DataType) {
|
|
||||||
this._chartConfig.dataType = type;
|
|
||||||
// Requires full chart refresh
|
|
||||||
this.initChart();
|
|
||||||
}
|
|
||||||
|
|
||||||
public set dataDirection(direction: DataDirection) {
|
|
||||||
this._chartConfig.dataDirection = direction;
|
|
||||||
// Requires full chart refresh
|
|
||||||
this.initChart();
|
|
||||||
}
|
|
||||||
|
|
||||||
public copyChart(): void {
|
|
||||||
let data = this._chartComponent.getCanvasData();
|
|
||||||
if (!data) {
|
|
||||||
this.showError(LocalizedStrings.CHART_NOT_FOUND);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.clipboardService.writeImageDataUrl(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public saveChart(): void {
|
|
||||||
this.promptForFilepath().then(filePath => {
|
|
||||||
let data = this._chartComponent.getCanvasData();
|
|
||||||
if (!data) {
|
|
||||||
this.showError(LocalizedStrings.CHART_NOT_FOUND);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (filePath) {
|
|
||||||
let buffer = this.decodeBase64Image(data);
|
|
||||||
pfs.writeFile(filePath, buffer).then(undefined, (err) => {
|
|
||||||
if (err) {
|
|
||||||
this.showError(err.message);
|
|
||||||
} else {
|
|
||||||
let fileUri = URI.from({ scheme: PathUtilities.FILE_SCHEMA, path: filePath });
|
|
||||||
this.windowsService.openExternal(fileUri.toString());
|
|
||||||
this.notificationService.notify({
|
|
||||||
severity: Severity.Error,
|
|
||||||
message: nls.localize('chartSaved', 'Saved Chart to path: {0}', filePath)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private promptForFilepath(): Thenable<string> {
|
|
||||||
let filepathPlaceHolder = PathUtilities.resolveCurrentDirectory(this.getActiveUriString(), PathUtilities.getRootPath(this.workspaceContextService));
|
|
||||||
filepathPlaceHolder = paths.join(filepathPlaceHolder, 'chart.png');
|
|
||||||
return this.windowService.showSaveDialog({
|
|
||||||
title: nls.localize('chartViewer.saveAsFileTitle', 'Choose Results File'),
|
|
||||||
defaultPath: paths.normalize(filepathPlaceHolder, true)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private decodeBase64Image(data: string): Buffer {
|
|
||||||
let matches = data.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
|
|
||||||
return new Buffer(matches[2], 'base64');
|
|
||||||
}
|
|
||||||
|
|
||||||
public createInsight(): void {
|
|
||||||
let uriString: string = this.getActiveUriString();
|
|
||||||
if (!uriString) {
|
|
||||||
this.showError(nls.localize('createInsightNoEditor', 'Cannot create insight as the active editor is not a SQL Editor'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
let uri: URI = URI.parse(uriString);
|
|
||||||
let dataService = this.queryModelService.getDataService(uriString);
|
|
||||||
if (!dataService) {
|
|
||||||
this.showError(nls.localize('createInsightNoDataService', 'Cannot create insight, backing data model not found'));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let queryFile: string = uri.fsPath;
|
|
||||||
let query: string = undefined;
|
|
||||||
let type = {};
|
|
||||||
type[this.chartTypesSelectBox.value] = this._chartConfig;
|
|
||||||
// create JSON
|
|
||||||
let config: IInsightsConfig = {
|
|
||||||
type,
|
|
||||||
query,
|
|
||||||
queryFile
|
|
||||||
};
|
|
||||||
|
|
||||||
let widgetConfig = {
|
|
||||||
name: nls.localize('myWidgetName', 'My-Widget'),
|
|
||||||
gridItemConfig: this.getGridItemConfig(),
|
|
||||||
widget: {
|
|
||||||
'insights-widget': config
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// open in new window as untitled JSON file
|
|
||||||
dataService.openLink(JSON.stringify(widgetConfig), 'Insight', 'json');
|
|
||||||
}
|
|
||||||
|
|
||||||
private showError(errorMsg: string) {
|
|
||||||
this.notificationService.notify({
|
|
||||||
severity: Severity.Error,
|
|
||||||
message: errorMsg
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private getGridItemConfig(): NgGridItemConfig {
|
|
||||||
let config: NgGridItemConfig = {
|
|
||||||
sizex: 2,
|
|
||||||
sizey: 1
|
|
||||||
};
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
private getActiveUriString(): string {
|
|
||||||
let editorService = this.editorService;
|
|
||||||
let editor = editorService.activeControl;
|
|
||||||
if (editor && editor instanceof QueryEditor) {
|
|
||||||
let queryEditor: QueryEditor = editor;
|
|
||||||
return queryEditor.uri;
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected get showDataDirection(): boolean {
|
|
||||||
return ['pie', 'horizontalBar', 'bar', 'doughnut'].some(item => item === this.chartTypesSelectBox.value) || (this.chartTypesSelectBox.value === 'line' && this.dataType === 'number');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected get showLabelFirstColumn(): boolean {
|
|
||||||
return this.dataDirection === 'horizontal' && this.dataType !== 'point';
|
|
||||||
}
|
|
||||||
|
|
||||||
protected get showColumnsAsLabels(): boolean {
|
|
||||||
return this.dataDirection === 'vertical' && this.dataType !== 'point';
|
|
||||||
}
|
|
||||||
|
|
||||||
public get dataDirection(): DataDirection {
|
|
||||||
return this._chartConfig.dataDirection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public get dataType(): DataType {
|
|
||||||
return this._chartConfig.dataType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Input() set dataSet(dataSet: IGridDataSet) {
|
|
||||||
// Setup the execute result
|
|
||||||
this._executeResult = <IInsightData>{};
|
|
||||||
|
|
||||||
// Remove first column and its value since this is the row number column
|
|
||||||
this._executeResult.columns = dataSet.columnDefinitions.slice(1).map(def => def.name);
|
|
||||||
this._executeResult.rows = dataSet.dataRows.getRange(0, dataSet.dataRows.getLength()).map(v => {
|
|
||||||
return this._executeResult.columns.reduce((p, c) => {
|
|
||||||
p.push(v[c]);
|
|
||||||
return p;
|
|
||||||
}, []);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public initChart() {
|
|
||||||
this._cd.detectChanges();
|
|
||||||
if (this._executeResult) {
|
|
||||||
// Reinitialize the chart component
|
|
||||||
let componentFactory = this._componentFactoryResolver.resolveComponentFactory<IInsightsView>(insightRegistry.getCtorFromId(this.chartTypesSelectBox.value));
|
|
||||||
this.componentHost.viewContainerRef.clear();
|
|
||||||
let componentRef = this.componentHost.viewContainerRef.createComponent(componentFactory);
|
|
||||||
this._chartComponent = <ChartInsight>componentRef.instance;
|
|
||||||
if (this._chartComponent.setConfig) {
|
|
||||||
this._chartComponent.setConfig(this._chartConfig);
|
|
||||||
}
|
|
||||||
this._chartComponent.data = this._executeResult;
|
|
||||||
this._chartComponent.options = mixin(this._chartComponent.options, { animation: { duration: 0 } });
|
|
||||||
if (this._chartComponent.init) {
|
|
||||||
this._chartComponent.init();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ngOnDestroy() {
|
|
||||||
this._disposables.forEach(i => i.dispose());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
|
|
||||||
input[type="radio"] {
|
|
||||||
margin-top: -2px;
|
|
||||||
vertical-align: middle;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer {
|
|
||||||
overflow-y: auto;
|
|
||||||
}
|
|
||||||
.chart-viewer .indent {
|
|
||||||
margin-left: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .radio-indent {
|
|
||||||
margin-left: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .option {
|
|
||||||
width: 100%;
|
|
||||||
padding-bottom: 7px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .dialog-label {
|
|
||||||
width: 100%;
|
|
||||||
padding-bottom: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .input-divider {
|
|
||||||
width: 100%;
|
|
||||||
padding-bottom: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .footer {
|
|
||||||
display: flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .footer .right-footer {
|
|
||||||
display: flex;
|
|
||||||
flex: 1 1 auto;
|
|
||||||
justify-content: flex-end;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .footer-button a.monaco-button.monaco-text-button {
|
|
||||||
width: 100px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.vs-dark.monaco-shell .chart-viewer .footer-button a.monaco-button.monaco-text-button {
|
|
||||||
outline-color: #8e8c8c;
|
|
||||||
}
|
|
||||||
.chart-viewer .footer-button {
|
|
||||||
margin-right: 5px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.chart-viewer .right-footer .footer-button:last-of-type {
|
|
||||||
margin-right: none;
|
|
||||||
}
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------------------------
|
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
||||||
*--------------------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
|
||||||
import { Action } from 'vs/base/common/actions';
|
|
||||||
import * as nls from 'vs/nls';
|
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
|
||||||
import Severity from 'vs/base/common/severity';
|
|
||||||
|
|
||||||
export interface IChartViewActionContext {
|
|
||||||
copyChart(): void;
|
|
||||||
saveChart(): void;
|
|
||||||
createInsight(): void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class ChartViewActionBase extends Action {
|
|
||||||
public static BaseClass = 'queryTaskbarIcon';
|
|
||||||
private _classes: string[];
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
id: string,
|
|
||||||
label: string,
|
|
||||||
enabledClass: string,
|
|
||||||
protected notificationService: INotificationService
|
|
||||||
) {
|
|
||||||
super(id, label);
|
|
||||||
this.enabled = true;
|
|
||||||
this._setCssClass(enabledClass);
|
|
||||||
}
|
|
||||||
protected updateCssClass(enabledClass: string): void {
|
|
||||||
// set the class, useful on change of label or icon
|
|
||||||
this._setCssClass(enabledClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the CSS classes combining the parent and child classes.
|
|
||||||
* Public for testing only.
|
|
||||||
*/
|
|
||||||
private _setCssClass(enabledClass: string): void {
|
|
||||||
this._classes = [];
|
|
||||||
this._classes.push(ChartViewActionBase.BaseClass);
|
|
||||||
|
|
||||||
if (enabledClass) {
|
|
||||||
this._classes.push(enabledClass);
|
|
||||||
}
|
|
||||||
this.class = this._classes.join(' ');
|
|
||||||
}
|
|
||||||
|
|
||||||
protected doRun(context: IChartViewActionContext, runAction: Function): TPromise<boolean> {
|
|
||||||
if (!context) {
|
|
||||||
// TODO implement support for finding chart view in active window
|
|
||||||
this.notificationService.notify({
|
|
||||||
severity: Severity.Error,
|
|
||||||
message: nls.localize('chartContextRequired', 'Chart View context is required to run this action')
|
|
||||||
});
|
|
||||||
return TPromise.as(false);
|
|
||||||
}
|
|
||||||
return new TPromise<boolean>((resolve, reject) => {
|
|
||||||
runAction();
|
|
||||||
resolve(true);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export class CreateInsightAction extends ChartViewActionBase {
|
|
||||||
public static ID = 'chartview.createInsight';
|
|
||||||
public static LABEL = nls.localize('createInsightLabel', "Create Insight");
|
|
||||||
|
|
||||||
constructor(@INotificationService notificationService: INotificationService
|
|
||||||
) {
|
|
||||||
super(CreateInsightAction.ID, CreateInsightAction.LABEL, 'createInsight', notificationService);
|
|
||||||
}
|
|
||||||
|
|
||||||
public run(context: IChartViewActionContext): TPromise<boolean> {
|
|
||||||
return this.doRun(context, () => context.createInsight());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class CopyAction extends ChartViewActionBase {
|
|
||||||
public static ID = 'chartview.copy';
|
|
||||||
public static LABEL = nls.localize('copyChartLabel', "Copy as image");
|
|
||||||
|
|
||||||
constructor(@INotificationService notificationService: INotificationService
|
|
||||||
) {
|
|
||||||
super(CopyAction.ID, CopyAction.LABEL, 'copyImage', notificationService);
|
|
||||||
}
|
|
||||||
|
|
||||||
public run(context: IChartViewActionContext): TPromise<boolean> {
|
|
||||||
return this.doRun(context, () => context.copyChart());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export class SaveImageAction extends ChartViewActionBase {
|
|
||||||
public static ID = 'chartview.saveImage';
|
|
||||||
public static LABEL = nls.localize('saveImageLabel', "Save as image");
|
|
||||||
|
|
||||||
constructor(@INotificationService notificationService: INotificationService
|
|
||||||
) {
|
|
||||||
super(SaveImageAction.ID, SaveImageAction.LABEL, 'saveAsImage', notificationService);
|
|
||||||
}
|
|
||||||
|
|
||||||
public run(context: IChartViewActionContext): TPromise<boolean> {
|
|
||||||
return this.doRun(context, () => context.saveChart());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,82 +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 class="fullsize vertBox" style="position: relative">
|
|
||||||
<div #resultsPane role="toolbar" tabindex="0" [attr.aria-label]="LocalizedConstants.resultPaneLabel" [attr.aria-expanded]="resultActive" *ngIf="dataSets.length > 0" id="resultspane" class="boxRow resultsMessageHeader resultsViewCollapsible" [class.collapsed]="!resultActive" (click)="togglePane('results')">
|
|
||||||
<span> {{LocalizedConstants.resultPaneLabel}} </span>
|
|
||||||
<span class="queryResultsShortCut"> {{resultShortcut}} </span>
|
|
||||||
</div>
|
|
||||||
<div #resultsScrollBox id="results" *ngIf="renderedDataSets.length > 0" class="results vertBox scrollable"
|
|
||||||
(onScroll)="onScroll($event)" [scrollEnabled]="scrollEnabled" [class.hidden]="!resultActive"
|
|
||||||
(focusin)="onGridFocus()" (focusout)="onGridFocusout()">
|
|
||||||
<div class="boxRow content horzBox slickgrid" *ngFor="let dataSet of renderedDataSets; let i = index"
|
|
||||||
[style.max-height]="dataSet.maxHeight" [style.min-height]="dataSet.minHeight">
|
|
||||||
<slick-grid #slickgrid id="slickgrid_{{i}}"
|
|
||||||
class="boxCol content vertBox slickgrid"
|
|
||||||
enableAsyncPostRender="true"
|
|
||||||
showHeader="true"
|
|
||||||
[columnDefinitions]="dataSet.columnDefinitions"
|
|
||||||
[ngClass]="i === activeGrid ? 'active' : ''"
|
|
||||||
[dataRows]="dataSet.dataRows"
|
|
||||||
[resized]="dataSet.resized"
|
|
||||||
[selectionModel]="selectionModel"
|
|
||||||
[plugins]="plugins[i]"
|
|
||||||
[rowHeight]="rowHeight"
|
|
||||||
(onContextMenu)="openContextMenu($event, dataSet.batchId, dataSet.resultId, i)"
|
|
||||||
(onActiveCellChanged)="onActiveCellChanged(i)"
|
|
||||||
(mousedown)="navigateToGrid(i)">
|
|
||||||
</slick-grid>
|
|
||||||
<span class="boxCol content vertBox">
|
|
||||||
<div class="boxRow content maxHeight" *ngFor="let icon of dataIcons">
|
|
||||||
<div *ngIf="icon.showCondition()" class="gridIconContainer">
|
|
||||||
<a class="gridIcon" style="cursor: pointer;"
|
|
||||||
role="button"
|
|
||||||
(click)="icon.functionality(dataSet.batchId, dataSet.resultId, i)"
|
|
||||||
[title]="icon.hoverText()" [ngClass]="icon.icon()" tabindex="0">
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div id="messagepane" role="toolbar" tabindex="0" [attr.aria-label]="LocalizedConstants.messagePaneLabel" [attr.aria-expanded]="!(!messageActive && dataSets.length !== 0)" class="boxRow resultsMessageHeader resultsViewCollapsible" [class.collapsed]="!messageActive && dataSets.length !== 0" (click)="togglePane('messages')" style="position: relative">
|
|
||||||
<div id="messageResizeHandle" [class.hidden]="!_resultsPane || !_messageActive || !resultActive" class="resizableHandle"></div>
|
|
||||||
<span> {{LocalizedConstants.messagePaneLabel}} </span>
|
|
||||||
<span class="queryResultsShortCut"> {{messageShortcut}} </span>
|
|
||||||
</div>
|
|
||||||
<div #messagesContainer id="messages" class="scrollable messages" [class.hidden]="!messageActive && dataSets.length !== 0"
|
|
||||||
(contextmenu)="openMessagesContextMenu($event)" (focusin)="onMessagesFocus()" (focusout)="onMessagesFocusout()"
|
|
||||||
tabindex=0>
|
|
||||||
<div class="messagesTopSpacing"></div>
|
|
||||||
<table id="messageTable" class="resultsMessageTable">
|
|
||||||
<colgroup>
|
|
||||||
<col span="1" class="wideResultsMessage">
|
|
||||||
</colgroup>
|
|
||||||
<tbody>
|
|
||||||
<ng-template ngFor let-message [ngForOf]="messages">
|
|
||||||
<tr class='messageRow'>
|
|
||||||
<td><span *ngIf="message.link">[{{message.time}}]</span></td>
|
|
||||||
<td class="resultsMessageValue" [class.errorMessage]="message.isError" [class.batchMessage]="!message.link">{{message.message}} <a tabindex="0" #queryLink class="queryLink" *ngIf="message.link" (click)="onSelectionLinkClicked(message.batchId)" (keyup)="onKey($event, message.batchId)">{{message.link.text}}</a>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</ng-template>
|
|
||||||
<tr id='executionSpinner' *ngIf="!complete">
|
|
||||||
<td><span *ngIf="messages.length === 0">[{{startString}}]</span></td>
|
|
||||||
<td>
|
|
||||||
<img class="icon in-progress" height="18px" />
|
|
||||||
<span style="vertical-align: bottom">{{LocalizedConstants.executeQueryLabel}}</span>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr *ngIf="complete">
|
|
||||||
<td></td>
|
|
||||||
<td>{{stringsFormat(LocalizedConstants.elapsedTimeLabel, totalElapsedTimeSpan)}}</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
<div id="resizeHandle" [class.hidden]="!resizing" [style.top]="resizeHandleTop"></div>
|
|
||||||
</div>
|
|
||||||
@@ -1,732 +0,0 @@
|
|||||||
/*---------------------------------------------------------------------------------------------
|
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
||||||
*--------------------------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
import 'vs/css!sql/media/icons/common-icons';
|
|
||||||
import 'vs/css!sql/parts/grid/media/slickColorTheme';
|
|
||||||
import 'vs/css!sql/parts/grid/media/flexbox';
|
|
||||||
import 'vs/css!sql/parts/grid/media/styles';
|
|
||||||
import 'vs/css!sql/parts/grid/media/slick.grid';
|
|
||||||
import 'vs/css!sql/parts/grid/media/slickGrid';
|
|
||||||
|
|
||||||
import {
|
|
||||||
ElementRef, QueryList, ChangeDetectorRef, OnInit, OnDestroy, Component, Inject,
|
|
||||||
ViewChildren, forwardRef, EventEmitter, Input, ViewChild
|
|
||||||
} from '@angular/core';
|
|
||||||
import { IGridDataRow, SlickGrid, VirtualizedCollection } from 'angular2-slickgrid';
|
|
||||||
|
|
||||||
import * as LocalizedConstants from 'sql/parts/query/common/localizedConstants';
|
|
||||||
import * as Services from 'sql/parts/grid/services/sharedServices';
|
|
||||||
import { IGridIcon, IMessage, IGridDataSet } from 'sql/parts/grid/common/interfaces';
|
|
||||||
import { GridParentComponent } from 'sql/parts/grid/views/gridParentComponent';
|
|
||||||
import { GridActionProvider } from 'sql/parts/grid/views/gridActions';
|
|
||||||
import { IQueryComponentParams } from 'sql/services/bootstrap/bootstrapParams';
|
|
||||||
import { error } from 'sql/base/common/log';
|
|
||||||
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
|
||||||
import { clone, mixin } from 'sql/base/common/objects';
|
|
||||||
import { IQueryEditorService } from 'sql/parts/query/common/queryEditorService';
|
|
||||||
import { escape } from 'sql/base/common/strings';
|
|
||||||
import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColumn.plugin';
|
|
||||||
import { AutoColumnSize } from 'sql/base/browser/ui/table/plugins/autoSizeColumns.plugin';
|
|
||||||
import { AdditionalKeyBindings } from 'sql/base/browser/ui/table/plugins/additionalKeyBindings.plugin';
|
|
||||||
|
|
||||||
import { format } from 'vs/base/common/strings';
|
|
||||||
import * as DOM from 'vs/base/browser/dom';
|
|
||||||
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
|
||||||
import { KeyCode } from 'vs/base/common/keyCodes';
|
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
|
||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
|
||||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
|
||||||
import { IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
|
|
||||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
|
||||||
import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService';
|
|
||||||
import { INotificationService } from 'vs/platform/notification/common/notification';
|
|
||||||
import { localize } from 'vs/nls';
|
|
||||||
|
|
||||||
export const QUERY_SELECTOR: string = 'query-component';
|
|
||||||
|
|
||||||
declare type PaneType = 'messages' | 'results';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: QUERY_SELECTOR,
|
|
||||||
host: { '(window:keydown)': 'keyEvent($event)', '(window:gridnav)': 'keyEvent($event)' },
|
|
||||||
templateUrl: decodeURI(require.toUrl('sql/parts/grid/views/query/query.component.html')),
|
|
||||||
providers: [{ provide: TabChild, useExisting: forwardRef(() => QueryComponent) }]
|
|
||||||
})
|
|
||||||
export class QueryComponent extends GridParentComponent implements OnInit, OnDestroy {
|
|
||||||
// CONSTANTS
|
|
||||||
// tslint:disable-next-line:no-unused-variable
|
|
||||||
private scrollTimeOutTime: number = 200;
|
|
||||||
private windowSize: number = 50;
|
|
||||||
private messagePaneHeight: number = 22;
|
|
||||||
// tslint:disable-next-line:no-unused-variable
|
|
||||||
private maxScrollGrids: number = 8;
|
|
||||||
|
|
||||||
// create a function alias to use inside query.component
|
|
||||||
// tslint:disable-next-line:no-unused-variable
|
|
||||||
protected stringsFormat: any = format;
|
|
||||||
|
|
||||||
protected plugins = new Array<Array<Slick.Plugin<any>>>();
|
|
||||||
|
|
||||||
// tslint:disable-next-line:no-unused-variable
|
|
||||||
private dataIcons: IGridIcon[] = [
|
|
||||||
{
|
|
||||||
showCondition: () => { return this.dataSets.length > 1; },
|
|
||||||
icon: () => {
|
|
||||||
return this.renderedDataSets.length === 1
|
|
||||||
? 'exitFullScreen'
|
|
||||||
: 'extendFullScreen';
|
|
||||||
},
|
|
||||||
hoverText: () => {
|
|
||||||
return this.renderedDataSets.length === 1
|
|
||||||
? LocalizedConstants.restoreLabel
|
|
||||||
: LocalizedConstants.maximizeLabel;
|
|
||||||
},
|
|
||||||
functionality: (batchId, resultId, index) => {
|
|
||||||
this.magnify(index);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
showCondition: () => { return true; },
|
|
||||||
icon: () => { return 'saveCsv'; },
|
|
||||||
hoverText: () => { return LocalizedConstants.saveCSVLabel; },
|
|
||||||
functionality: (batchId, resultId, index) => {
|
|
||||||
let selection = this.getSelection(index);
|
|
||||||
if (selection.length <= 1) {
|
|
||||||
this.handleContextClick({ type: 'savecsv', batchId: batchId, resultId: resultId, index: index, selection: selection });
|
|
||||||
} else {
|
|
||||||
this.dataService.showWarning(LocalizedConstants.msgCannotSaveMultipleSelections);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
showCondition: () => { return true; },
|
|
||||||
icon: () => { return 'saveJson'; },
|
|
||||||
hoverText: () => { return LocalizedConstants.saveJSONLabel; },
|
|
||||||
functionality: (batchId, resultId, index) => {
|
|
||||||
let selection = this.getSelection(index);
|
|
||||||
if (selection.length <= 1) {
|
|
||||||
this.handleContextClick({ type: 'savejson', batchId: batchId, resultId: resultId, index: index, selection: selection });
|
|
||||||
} else {
|
|
||||||
this.dataService.showWarning(LocalizedConstants.msgCannotSaveMultipleSelections);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
showCondition: () => { return true; },
|
|
||||||
icon: () => { return 'saveExcel'; },
|
|
||||||
hoverText: () => { return LocalizedConstants.saveExcelLabel; },
|
|
||||||
functionality: (batchId, resultId, index) => {
|
|
||||||
let selection = this.getSelection(index);
|
|
||||||
if (selection.length <= 1) {
|
|
||||||
this.handleContextClick({ type: 'saveexcel', batchId: batchId, resultId: resultId, index: index, selection: selection });
|
|
||||||
} else {
|
|
||||||
this.dataService.showWarning(LocalizedConstants.msgCannotSaveMultipleSelections);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
showCondition: () => { return true; },
|
|
||||||
icon: () => { return 'saveXml'; },
|
|
||||||
hoverText: () => { return LocalizedConstants.saveXMLLabel; },
|
|
||||||
functionality: (batchId, resultId, index) => {
|
|
||||||
let selection = this.getSelection(index);
|
|
||||||
if (selection.length <= 1) {
|
|
||||||
this.handleContextClick({ type: 'savexml', batchId: batchId, resultId: resultId, index: index, selection: selection });
|
|
||||||
} else {
|
|
||||||
this.dataService.showWarning(LocalizedConstants.msgCannotSaveMultipleSelections);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
showCondition: () => {
|
|
||||||
return this.configurationService.getValue('workbench')['enablePreviewFeatures'];
|
|
||||||
},
|
|
||||||
icon: () => { return 'viewChart'; },
|
|
||||||
hoverText: () => { return LocalizedConstants.viewChartLabel; },
|
|
||||||
functionality: (batchId, resultId, index) => {
|
|
||||||
this.showChartForGrid(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
// FIELDS
|
|
||||||
// Service for interaction with the IQueryModel
|
|
||||||
|
|
||||||
// All datasets
|
|
||||||
private dataSets: IGridDataSet[] = [];
|
|
||||||
private messages: IMessage[] = [];
|
|
||||||
private messageStore: IMessage[] = [];
|
|
||||||
private messageTimeout: number;
|
|
||||||
private lastMessageHandleTime: number = 0;
|
|
||||||
private scrollTimeOut: number;
|
|
||||||
private resizing = false;
|
|
||||||
private resizeHandleTop: string = '0';
|
|
||||||
private scrollEnabled = true;
|
|
||||||
private rowHeight: number;
|
|
||||||
// tslint:disable-next-line:no-unused-variable
|
|
||||||
private firstRender = true;
|
|
||||||
private totalElapsedTimeSpan: number;
|
|
||||||
private complete = false;
|
|
||||||
private sentPlans: Map<number, string> = new Map<number, string>();
|
|
||||||
private hasQueryPlan: boolean = false;
|
|
||||||
private queryPlanResultSetId: number = 0;
|
|
||||||
public queryExecutionStatus: EventEmitter<string> = new EventEmitter<string>();
|
|
||||||
public queryPlanAvailable: EventEmitter<string> = new EventEmitter<string>();
|
|
||||||
public showChartRequested: EventEmitter<IGridDataSet> = new EventEmitter<IGridDataSet>();
|
|
||||||
public goToNextQueryOutputTabRequested: EventEmitter<void> = new EventEmitter<void>();
|
|
||||||
public onActiveCellChanged: (gridIndex: number) => void;
|
|
||||||
|
|
||||||
private savedViewState: {
|
|
||||||
gridSelections: Slick.Range[][];
|
|
||||||
resultsScroll: number;
|
|
||||||
messagePaneScroll: number;
|
|
||||||
slickGridScrolls: { vertical: number; horizontal: number }[];
|
|
||||||
};
|
|
||||||
|
|
||||||
@Input() public queryParameters: IQueryComponentParams;
|
|
||||||
|
|
||||||
@ViewChildren('slickgrid') slickgrids: QueryList<SlickGrid>;
|
|
||||||
// tslint:disable-next-line:no-unused-variable
|
|
||||||
@ViewChild('resultsPane', { read: ElementRef }) private _resultsPane: ElementRef;
|
|
||||||
@ViewChild('queryLink', { read: ElementRef }) private _queryLinkElement: ElementRef;
|
|
||||||
@ViewChild('messagesContainer', { read: ElementRef }) private _messagesContainer: ElementRef;
|
|
||||||
@ViewChild('resultsScrollBox', { read: ElementRef }) private _resultsScrollBox: ElementRef;
|
|
||||||
@ViewChildren('slickgrid', { read: ElementRef }) private _slickgridElements: QueryList<ElementRef>;
|
|
||||||
constructor(
|
|
||||||
@Inject(forwardRef(() => ElementRef)) el: ElementRef,
|
|
||||||
@Inject(forwardRef(() => ChangeDetectorRef)) cd: ChangeDetectorRef,
|
|
||||||
@Inject(IInstantiationService) private instantiationService: IInstantiationService,
|
|
||||||
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
|
||||||
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
|
||||||
@Inject(IContextKeyService) contextKeyService: IContextKeyService,
|
|
||||||
@Inject(IConfigurationService) configurationService: IConfigurationService,
|
|
||||||
@Inject(IClipboardService) clipboardService: IClipboardService,
|
|
||||||
@Inject(IQueryEditorService) queryEditorService: IQueryEditorService,
|
|
||||||
@Inject(INotificationService) notificationService: INotificationService,
|
|
||||||
) {
|
|
||||||
super(el, cd, contextMenuService, keybindingService, contextKeyService, configurationService, clipboardService, queryEditorService, notificationService);
|
|
||||||
this._el.nativeElement.className = 'slickgridContainer';
|
|
||||||
this.rowHeight = configurationService.getValue<any>('resultsGrid').rowHeight;
|
|
||||||
configurationService.onDidChangeConfiguration(e => {
|
|
||||||
if (e.affectsConfiguration('resultsGrid')) {
|
|
||||||
this.rowHeight = configurationService.getValue<any>('resultsGrid').rowHeight;
|
|
||||||
this.slickgrids.forEach(i => {
|
|
||||||
i.rowHeight = this.rowHeight;
|
|
||||||
});
|
|
||||||
this.resizeGrids();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Called by Angular when the object is initialized
|
|
||||||
*/
|
|
||||||
ngOnInit(): void {
|
|
||||||
const self = this;
|
|
||||||
|
|
||||||
this.dataService = this.queryParameters.dataService;
|
|
||||||
this.actionProvider = this.instantiationService.createInstance(GridActionProvider, this.dataService, this.onGridSelectAll());
|
|
||||||
|
|
||||||
this.baseInit();
|
|
||||||
this.setupResizeBind();
|
|
||||||
|
|
||||||
this.subscribeWithDispose(this.dataService.queryEventObserver, (event) => {
|
|
||||||
switch (event.type) {
|
|
||||||
case 'start':
|
|
||||||
self.handleStart(self, event);
|
|
||||||
break;
|
|
||||||
case 'complete':
|
|
||||||
self.handleComplete(self, event);
|
|
||||||
break;
|
|
||||||
case 'message':
|
|
||||||
self.handleMessage(self, event);
|
|
||||||
break;
|
|
||||||
case 'resultSet':
|
|
||||||
self.handleResultSet(self, event);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
error('Unexpected query event type "' + event.type + '" sent');
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
self._cd.detectChanges();
|
|
||||||
});
|
|
||||||
|
|
||||||
this.queryParameters.onSaveViewState(() => this.saveViewState());
|
|
||||||
this.queryParameters.onRestoreViewState(() => this.restoreViewState());
|
|
||||||
|
|
||||||
this.dataService.onAngularLoaded();
|
|
||||||
}
|
|
||||||
|
|
||||||
public ngOnDestroy(): void {
|
|
||||||
this.baseDestroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected initShortcuts(shortcuts: { [name: string]: Function }): void {
|
|
||||||
shortcuts['event.nextGrid'] = () => {
|
|
||||||
this.navigateToGrid(this.activeGrid + 1);
|
|
||||||
};
|
|
||||||
shortcuts['event.prevGrid'] = () => {
|
|
||||||
this.navigateToGrid(this.activeGrid - 1);
|
|
||||||
};
|
|
||||||
shortcuts['event.maximizeGrid'] = () => {
|
|
||||||
this.magnify(this.activeGrid);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
handleStart(self: QueryComponent, event: any): void {
|
|
||||||
self.messages = [];
|
|
||||||
self.dataSets = [];
|
|
||||||
self.placeHolderDataSets = [];
|
|
||||||
self.renderedDataSets = self.placeHolderDataSets;
|
|
||||||
self.totalElapsedTimeSpan = undefined;
|
|
||||||
self.complete = false;
|
|
||||||
self.activeGrid = 0;
|
|
||||||
|
|
||||||
this.onActiveCellChanged = this.onCellSelect;
|
|
||||||
|
|
||||||
// reset query plan info and send notification to subscribers
|
|
||||||
self.hasQueryPlan = false;
|
|
||||||
self.sentPlans = new Map<number, string>();
|
|
||||||
self.queryExecutionStatus.emit('start');
|
|
||||||
self.firstRender = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
handleComplete(self: QueryComponent, event: any): void {
|
|
||||||
self.totalElapsedTimeSpan = event.data;
|
|
||||||
self.complete = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
handleMessage(self: QueryComponent, event: any): void {
|
|
||||||
self.messageStore.push(event.data);
|
|
||||||
// Ensure that messages are updated at least every 10 seconds during long-running queries
|
|
||||||
if (self.messageTimeout !== undefined && Date.now() - self.lastMessageHandleTime < 10000) {
|
|
||||||
clearTimeout(self.messageTimeout);
|
|
||||||
} else {
|
|
||||||
self.lastMessageHandleTime = Date.now();
|
|
||||||
}
|
|
||||||
self.messageTimeout = setTimeout(() => {
|
|
||||||
while (self.messageStore.length > 0) {
|
|
||||||
let lastMessage = self.messages.length > 0 ? self.messages[self.messages.length - 1] : undefined;
|
|
||||||
let nextMessage = self.messageStore[0];
|
|
||||||
// If the next message has the same metadata as the previous one, just append its text to avoid rendering an entirely new message
|
|
||||||
if (lastMessage !== undefined && lastMessage.batchId === nextMessage.batchId && lastMessage.isError === nextMessage.isError
|
|
||||||
&& lastMessage.link === nextMessage.link && lastMessage.link === undefined) {
|
|
||||||
lastMessage.message += '\n' + nextMessage.message;
|
|
||||||
} else {
|
|
||||||
self.messages.push(nextMessage);
|
|
||||||
}
|
|
||||||
self.messageStore = self.messageStore.slice(1);
|
|
||||||
}
|
|
||||||
self._cd.detectChanges();
|
|
||||||
self.scrollMessages();
|
|
||||||
}, 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
handleResultSet(self: QueryComponent, event: any): void {
|
|
||||||
let resultSet = event.data;
|
|
||||||
|
|
||||||
// No column info found, so define a column of no name by default
|
|
||||||
if (!resultSet.columnInfo) {
|
|
||||||
resultSet.columnInfo = [];
|
|
||||||
resultSet.columnInfo[0] = { columnName: '' };
|
|
||||||
}
|
|
||||||
// Setup a function for generating a promise to lookup result subsets
|
|
||||||
let loadDataFunction = (offset: number, count: number): Promise<IGridDataRow[]> => {
|
|
||||||
return new Promise<IGridDataRow[]>((resolve, reject) => {
|
|
||||||
self.dataService.getQueryRows(offset, count, resultSet.batchId, resultSet.id).subscribe(rows => {
|
|
||||||
let gridData: IGridDataRow[] = [];
|
|
||||||
for (let row = 0; row < rows.rows.length; row++) {
|
|
||||||
// Push row values onto end of gridData for slickgrid
|
|
||||||
gridData.push({
|
|
||||||
values: [{}].concat(rows.rows[row].map(c => {
|
|
||||||
return mixin({ ariaLabel: escape(c.displayValue) }, c);
|
|
||||||
}))
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// if this is a query plan resultset we haven't processed yet then forward to subscribers
|
|
||||||
if (self.hasQueryPlan && resultSet.id === self.queryPlanResultSetId && !self.sentPlans[resultSet.id]) {
|
|
||||||
self.sentPlans[resultSet.id] = rows.rows[0][0].displayValue;
|
|
||||||
self.queryPlanAvailable.emit(rows.rows[0][0].displayValue);
|
|
||||||
}
|
|
||||||
resolve(gridData);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Precalculate the max height and min height
|
|
||||||
let maxHeight: string = 'inherit';
|
|
||||||
if (resultSet.rowCount < self._defaultNumShowingRows) {
|
|
||||||
let maxHeightNumber: number = Math.max((resultSet.rowCount + 1) * self._rowHeight, self.dataIcons.length * 30) + 10;
|
|
||||||
maxHeight = maxHeightNumber.toString() + 'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
let minHeight: string = maxHeight;
|
|
||||||
if (resultSet.rowCount >= self._defaultNumShowingRows) {
|
|
||||||
let minHeightNumber: number = (self._defaultNumShowingRows + 1) * self._rowHeight + 10;
|
|
||||||
minHeight = minHeightNumber.toString() + 'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
let rowNumberColumn = new RowNumberColumn({ numberOfRows: resultSet.rowCount });
|
|
||||||
|
|
||||||
// Store the result set from the event
|
|
||||||
let dataSet: IGridDataSet = {
|
|
||||||
resized: undefined,
|
|
||||||
batchId: resultSet.batchId,
|
|
||||||
resultId: resultSet.id,
|
|
||||||
totalRows: resultSet.rowCount,
|
|
||||||
maxHeight: maxHeight,
|
|
||||||
minHeight: minHeight,
|
|
||||||
dataRows: new VirtualizedCollection(
|
|
||||||
self.windowSize,
|
|
||||||
resultSet.rowCount,
|
|
||||||
loadDataFunction,
|
|
||||||
index => { return { values: [] }; }
|
|
||||||
),
|
|
||||||
columnDefinitions: [rowNumberColumn.getColumnDefinition()].concat(resultSet.columnInfo.map((c, i) => {
|
|
||||||
let isLinked = c.isXml || c.isJson;
|
|
||||||
let linkType = c.isXml ? 'xml' : 'json';
|
|
||||||
|
|
||||||
return {
|
|
||||||
id: i.toString(),
|
|
||||||
name: c.columnName === 'Microsoft SQL Server 2005 XML Showplan'
|
|
||||||
? 'XML Showplan'
|
|
||||||
: escape(c.columnName),
|
|
||||||
field: i.toString(),
|
|
||||||
formatter: isLinked ? Services.hyperLinkFormatter : Services.textFormatter,
|
|
||||||
asyncPostRender: isLinked ? self.linkHandler(linkType) : undefined
|
|
||||||
};
|
|
||||||
}))
|
|
||||||
};
|
|
||||||
self.plugins.push([rowNumberColumn, new AutoColumnSize(), new AdditionalKeyBindings()]);
|
|
||||||
self.dataSets.push(dataSet);
|
|
||||||
|
|
||||||
// check if the resultset is for a query plan
|
|
||||||
for (let i = 0; i < resultSet.columnInfo.length; ++i) {
|
|
||||||
let column = resultSet.columnInfo[i];
|
|
||||||
if (column.columnName === 'Microsoft SQL Server 2005 XML Showplan') {
|
|
||||||
this.hasQueryPlan = true;
|
|
||||||
this.queryPlanResultSetId = resultSet.id;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create a dataSet to render without rows to reduce DOM size
|
|
||||||
let undefinedDataSet = clone(dataSet);
|
|
||||||
undefinedDataSet.columnDefinitions = dataSet.columnDefinitions;
|
|
||||||
undefinedDataSet.dataRows = undefined;
|
|
||||||
undefinedDataSet.resized = new EventEmitter();
|
|
||||||
self.placeHolderDataSets.push(undefinedDataSet);
|
|
||||||
self.onScroll(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
onCellSelect(gridIndex: number): void {
|
|
||||||
this.activeGrid = gridIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
openMessagesContextMenu(event: any): void {
|
|
||||||
let self = this;
|
|
||||||
event.preventDefault();
|
|
||||||
let selectedRange = this.getSelectedRangeUnderMessages();
|
|
||||||
let selectAllFunc = () => self.selectAllMessages();
|
|
||||||
let anchor = { x: event.x + 1, y: event.y };
|
|
||||||
this.contextMenuService.showContextMenu({
|
|
||||||
getAnchor: () => anchor,
|
|
||||||
getActions: () => this.actionProvider.getMessagesActions(this.dataService, selectAllFunc),
|
|
||||||
getKeyBinding: (action) => this._keybindingFor(action),
|
|
||||||
onHide: (wasCancelled?: boolean) => {
|
|
||||||
},
|
|
||||||
getActionsContext: () => (selectedRange)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles rendering the results to the DOM that are currently being shown
|
|
||||||
* and destroying any results that have moved out of view
|
|
||||||
* @param scrollTop The scrolltop value, if not called by the scroll event should be 0
|
|
||||||
*/
|
|
||||||
onScroll(scrollTop): void {
|
|
||||||
const self = this;
|
|
||||||
clearTimeout(self.scrollTimeOut);
|
|
||||||
this.scrollTimeOut = setTimeout(() => {
|
|
||||||
if (self.dataSets.length < self.maxScrollGrids) {
|
|
||||||
self.scrollEnabled = false;
|
|
||||||
for (let i = 0; i < self.placeHolderDataSets.length; i++) {
|
|
||||||
self.placeHolderDataSets[i].dataRows = self.dataSets[i].dataRows;
|
|
||||||
self.placeHolderDataSets[i].resized.emit();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let gridHeight = self._el.nativeElement.getElementsByTagName('slick-grid')[0].offsetHeight;
|
|
||||||
let tabHeight = self.getResultsElement().offsetHeight;
|
|
||||||
let numOfVisibleGrids = Math.ceil((tabHeight / gridHeight)
|
|
||||||
+ ((scrollTop % gridHeight) / gridHeight));
|
|
||||||
let min = Math.floor(scrollTop / gridHeight);
|
|
||||||
let max = min + numOfVisibleGrids;
|
|
||||||
for (let i = 0; i < self.placeHolderDataSets.length; i++) {
|
|
||||||
if (i >= min && i < max) {
|
|
||||||
if (self.placeHolderDataSets[i].dataRows === undefined) {
|
|
||||||
self.placeHolderDataSets[i].dataRows = self.dataSets[i].dataRows;
|
|
||||||
self.placeHolderDataSets[i].resized.emit();
|
|
||||||
}
|
|
||||||
} else if (self.placeHolderDataSets[i].dataRows !== undefined) {
|
|
||||||
self.placeHolderDataSets[i].dataRows = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self._cd.detectChanges();
|
|
||||||
}, self.scrollTimeOutTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
onSelectionLinkClicked(index: number): void {
|
|
||||||
this.dataService.setEditorSelection(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
onKey(e: Event, index: number) {
|
|
||||||
if (DOM.isAncestor(<HTMLElement>e.target, this._queryLinkElement.nativeElement) && e instanceof KeyboardEvent) {
|
|
||||||
let event = new StandardKeyboardEvent(e);
|
|
||||||
if (event.equals(KeyCode.Enter)) {
|
|
||||||
this.onSelectionLinkClicked(index);
|
|
||||||
e.stopPropagation();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets up the resize for the messages/results panes bar
|
|
||||||
*/
|
|
||||||
setupResizeBind(): void {
|
|
||||||
const self = this;
|
|
||||||
|
|
||||||
let resizeHandleElement: HTMLElement = self._el.nativeElement.querySelector('#messageResizeHandle');
|
|
||||||
let $resizeHandle = $(resizeHandleElement);
|
|
||||||
let $messages = $(self.getMessagesElement());
|
|
||||||
|
|
||||||
$resizeHandle.bind('dragstart', (e) => {
|
|
||||||
self.resizing = true;
|
|
||||||
self.resizeHandleTop = self.calculateResizeHandleTop(e.pageY);
|
|
||||||
self._cd.detectChanges();
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
|
|
||||||
$resizeHandle.bind('drag', (e) => {
|
|
||||||
// Update the animation if the drag is within the allowed range.
|
|
||||||
if (self.isDragWithinAllowedRange(e.pageY, resizeHandleElement)) {
|
|
||||||
self.resizeHandleTop = self.calculateResizeHandleTop(e.pageY);
|
|
||||||
self.resizing = true;
|
|
||||||
self._cd.detectChanges();
|
|
||||||
|
|
||||||
// Stop the animation if the drag is out of the allowed range.
|
|
||||||
// The animation is resumed when the drag comes back into the allowed range.
|
|
||||||
} else {
|
|
||||||
self.resizing = false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$resizeHandle.bind('dragend', (e) => {
|
|
||||||
self.resizing = false;
|
|
||||||
// Redefine the min size for the messages based on the final position
|
|
||||||
// if the drag is within the allowed rang
|
|
||||||
if (self.isDragWithinAllowedRange(e.pageY, resizeHandleElement)) {
|
|
||||||
let minHeightNumber = this.getMessagePaneHeightFromDrag(e.pageY);
|
|
||||||
$messages.css('min-height', minHeightNumber + 'px');
|
|
||||||
self._cd.detectChanges();
|
|
||||||
self.resizeGrids();
|
|
||||||
|
|
||||||
// Otherwise just update the UI to show that the drag is complete
|
|
||||||
} else {
|
|
||||||
self._cd.detectChanges();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if the resize of the messagepane given by the drag at top=eventPageY is valid,
|
|
||||||
* false otherwise. A drag is valid if it is below the bottom of the resultspane and
|
|
||||||
* this.messagePaneHeight pixels above the bottom of the entire angular component.
|
|
||||||
*/
|
|
||||||
isDragWithinAllowedRange(eventPageY: number, resizeHandle: HTMLElement): boolean {
|
|
||||||
let resultspaneElement: HTMLElement = this._el.nativeElement.querySelector('#resultspane');
|
|
||||||
let minHeight = this.getMessagePaneHeightFromDrag(eventPageY);
|
|
||||||
|
|
||||||
if (resultspaneElement &&
|
|
||||||
minHeight > 0 &&
|
|
||||||
resultspaneElement.getBoundingClientRect().bottom < eventPageY
|
|
||||||
) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Calculates the position of the top of the resize handle given the Y-axis drag
|
|
||||||
* coordinate as eventPageY.
|
|
||||||
*/
|
|
||||||
calculateResizeHandleTop(eventPageY: number): string {
|
|
||||||
let resultsWindowTop: number = this._el.nativeElement.getBoundingClientRect().top;
|
|
||||||
let relativeTop: number = eventPageY - resultsWindowTop;
|
|
||||||
return relativeTop + 'px';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the height the message pane would be if it were resized so that its top would be set to eventPageY.
|
|
||||||
* This will return a negative value if eventPageY is below the bottom limit.
|
|
||||||
*/
|
|
||||||
getMessagePaneHeightFromDrag(eventPageY: number): number {
|
|
||||||
let bottomDragLimit: number = this._el.nativeElement.getBoundingClientRect().bottom - this.messagePaneHeight;
|
|
||||||
return bottomDragLimit - eventPageY;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ensures the messages tab is scrolled to the bottom
|
|
||||||
*/
|
|
||||||
scrollMessages(): void {
|
|
||||||
let messagesDiv = this.getMessagesElement();
|
|
||||||
messagesDiv.scrollTop = messagesDiv.scrollHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
protected tryHandleKeyEvent(e): boolean {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handles rendering and unrendering necessary resources in order to properly
|
|
||||||
* navigate from one grid another. Should be called any time grid navigation is performed
|
|
||||||
* @param targetIndex The index in the renderedDataSets to navigate to
|
|
||||||
* @returns A boolean representing if the navigation was successful
|
|
||||||
*/
|
|
||||||
navigateToGrid(targetIndex: number): boolean {
|
|
||||||
// check if the target index is valid
|
|
||||||
if (targetIndex >= this.renderedDataSets.length || !this.hasFocus()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deselect any text since we are navigating to a new grid
|
|
||||||
// Do this even if not switching grids, since this covers clicking on the grid after message selection
|
|
||||||
window.getSelection().removeAllRanges();
|
|
||||||
|
|
||||||
// check if you are actually trying to change navigation
|
|
||||||
if (this.activeGrid === targetIndex) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.slickgrids.toArray()[this.activeGrid].selection = false;
|
|
||||||
this.slickgrids.toArray()[targetIndex].setActive();
|
|
||||||
this.activeGrid = targetIndex;
|
|
||||||
|
|
||||||
// scrolling logic
|
|
||||||
let resultsWindow = $('#results');
|
|
||||||
let scrollTop = resultsWindow.scrollTop();
|
|
||||||
let scrollBottom = scrollTop + resultsWindow.height();
|
|
||||||
let gridHeight = $(this._el.nativeElement).find('slick-grid').height();
|
|
||||||
if (scrollBottom < gridHeight * (targetIndex + 1)) {
|
|
||||||
scrollTop += (gridHeight * (targetIndex + 1)) - scrollBottom;
|
|
||||||
resultsWindow.scrollTop(scrollTop);
|
|
||||||
}
|
|
||||||
if (scrollTop > gridHeight * targetIndex) {
|
|
||||||
scrollTop = (gridHeight * targetIndex);
|
|
||||||
resultsWindow.scrollTop(scrollTop);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public hasFocus(): boolean {
|
|
||||||
return DOM.isAncestor(document.activeElement, this._el.nativeElement);
|
|
||||||
}
|
|
||||||
|
|
||||||
resizeGrids(): void {
|
|
||||||
const self = this;
|
|
||||||
setTimeout(() => {
|
|
||||||
for (let grid of self.renderedDataSets) {
|
|
||||||
grid.resized.emit();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
protected showChartForGrid(index: number) {
|
|
||||||
if (this.renderedDataSets.length > index) {
|
|
||||||
this.showChartRequested.emit(this.renderedDataSets[index]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected goToNextQueryOutputTab(): void {
|
|
||||||
this.goToNextQueryOutputTabRequested.emit();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected toggleResultPane(): void {
|
|
||||||
this.resultActive = !this.resultActive;
|
|
||||||
this._cd.detectChanges();
|
|
||||||
if (this.resultActive) {
|
|
||||||
this.resizeGrids();
|
|
||||||
this.slickgrids.toArray()[this.activeGrid].setActive();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected toggleMessagePane(): void {
|
|
||||||
this.messageActive = !this.messageActive;
|
|
||||||
this._cd.detectChanges();
|
|
||||||
if (this.messageActive && this._messagesContainer) {
|
|
||||||
let header = <HTMLElement>this._messagesContainer.nativeElement;
|
|
||||||
header.focus();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Helper function to toggle messages and results panes */
|
|
||||||
// tslint:disable-next-line:no-unused-variable
|
|
||||||
private togglePane(pane: PaneType): void {
|
|
||||||
if (pane === 'messages') {
|
|
||||||
this.toggleMessagePane();
|
|
||||||
} else if (pane === 'results') {
|
|
||||||
this.toggleResultPane();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private saveViewState(): void {
|
|
||||||
let gridSelections = this.slickgrids.map(grid => grid.getSelectedRanges());
|
|
||||||
let resultsScrollElement = (this._resultsScrollBox.nativeElement as HTMLElement);
|
|
||||||
let resultsScroll = resultsScrollElement.scrollTop;
|
|
||||||
let messagePaneScroll = (this._messagesContainer.nativeElement as HTMLElement).scrollTop;
|
|
||||||
let slickGridScrolls = this._slickgridElements.map(element => {
|
|
||||||
// Get the slick grid's viewport element and save its scroll position
|
|
||||||
let scrollElement = (element.nativeElement as HTMLElement).children[0].children[3];
|
|
||||||
return {
|
|
||||||
vertical: scrollElement.scrollTop,
|
|
||||||
horizontal: scrollElement.scrollLeft
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
this.savedViewState = {
|
|
||||||
gridSelections,
|
|
||||||
messagePaneScroll,
|
|
||||||
resultsScroll,
|
|
||||||
slickGridScrolls
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
private restoreViewState(): void {
|
|
||||||
if (this.savedViewState) {
|
|
||||||
this.slickgrids.forEach((grid, index) => grid.selection = this.savedViewState.gridSelections[index]);
|
|
||||||
(this._resultsScrollBox.nativeElement as HTMLElement).scrollTop = this.savedViewState.resultsScroll;
|
|
||||||
(this._messagesContainer.nativeElement as HTMLElement).scrollTop = this.savedViewState.messagePaneScroll;
|
|
||||||
this._slickgridElements.forEach((element, index) => {
|
|
||||||
let scrollElement = (element.nativeElement as HTMLElement).children[0].children[3];
|
|
||||||
let savedScroll = this.savedViewState.slickGridScrolls[index];
|
|
||||||
scrollElement.scrollTop = savedScroll.vertical;
|
|
||||||
scrollElement.scrollLeft = savedScroll.horizontal;
|
|
||||||
});
|
|
||||||
this.savedViewState = undefined;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
layout() {
|
|
||||||
this.resizeGrids();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,12 +5,12 @@
|
|||||||
import 'vs/css!sql/parts/insights/browser/media/insightsDialog';
|
import 'vs/css!sql/parts/insights/browser/media/insightsDialog';
|
||||||
|
|
||||||
import { Button } from 'sql/base/browser/ui/button/button';
|
import { Button } from 'sql/base/browser/ui/button/button';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
import { Modal } from 'sql/base/browser/ui/modal/modal';
|
||||||
import { IInsightsConfigDetails } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
import { IInsightsConfigDetails } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
||||||
import { attachButtonStyler, attachModalDialogStyler, attachTableStyler, attachPanelStyler } from 'sql/common/theme/styler';
|
import { attachButtonStyler, attachModalDialogStyler, attachTableStyler, attachPanelStyler } from 'sql/common/theme/styler';
|
||||||
import { TaskRegistry } from 'sql/platform/tasks/common/tasks';
|
import { TaskRegistry } from 'sql/platform/tasks/common/tasks';
|
||||||
import { ConnectionProfile } from 'sql/parts/connection/common/connectionProfile';
|
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||||
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
||||||
import { IInsightsDialogModel, ListResource, IInsightDialogActionContext, insertValueRegex } from 'sql/parts/insights/common/interfaces';
|
import { IInsightsDialogModel, ListResource, IInsightDialogActionContext, insertValueRegex } from 'sql/parts/insights/common/interfaces';
|
||||||
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
|
import { TableDataView } from 'sql/base/browser/ui/table/tableDataView';
|
||||||
@@ -18,7 +18,7 @@ import { RowSelectionModel } from 'sql/base/browser/ui/table/plugins/rowSelectio
|
|||||||
import { error } from 'sql/base/common/log';
|
import { error } from 'sql/base/common/log';
|
||||||
import { Table } from 'sql/base/browser/ui/table/table';
|
import { Table } from 'sql/base/browser/ui/table/table';
|
||||||
import { CopyInsightDialogSelectionAction } from 'sql/parts/insights/common/insightDialogActions';
|
import { CopyInsightDialogSelectionAction } from 'sql/parts/insights/common/insightDialogActions';
|
||||||
import { ICapabilitiesService } from 'sql/services/capabilities/capabilitiesService';
|
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||||
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
|
import { IClipboardService } from 'sql/platform/clipboard/common/clipboardService';
|
||||||
import { IDisposableDataProvider } from 'sql/base/browser/ui/table/interfaces';
|
import { IDisposableDataProvider } from 'sql/base/browser/ui/table/interfaces';
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { Event } from 'vs/base/common/event';
|
|||||||
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
import { createDecorator } from 'vs/platform/instantiation/common/instantiation';
|
||||||
|
|
||||||
import { IInsightsConfigDetails, IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
import { IInsightsConfigDetails, IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { BaseActionContext } from 'sql/workbench/common/actions';
|
import { BaseActionContext } from 'sql/workbench/common/actions';
|
||||||
|
|
||||||
export interface IInsightsDialogModel {
|
export interface IInsightsDialogModel {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti
|
|||||||
|
|
||||||
import { InsightsDialogController } from 'sql/parts/insights/node/insightsDialogController';
|
import { InsightsDialogController } from 'sql/parts/insights/node/insightsDialogController';
|
||||||
import { InsightsDialogView } from 'sql/parts/insights/browser/insightsDialogView';
|
import { InsightsDialogView } from 'sql/parts/insights/browser/insightsDialogView';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
import { IInsightsConfig } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
||||||
import { IInsightsDialogModel, IInsightsDialogService } from 'sql/parts/insights/common/interfaces';
|
import { IInsightsDialogModel, IInsightsDialogService } from 'sql/parts/insights/common/interfaces';
|
||||||
import { InsightsDialogModel } from 'sql/parts/insights/common/insightsDialogModel';
|
import { InsightsDialogModel } from 'sql/parts/insights/common/insightsDialogModel';
|
||||||
|
|||||||
@@ -3,13 +3,14 @@
|
|||||||
* 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 { IConnectionManagementService, IErrorMessageService } from 'sql/parts/connection/common/connectionManagement';
|
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||||
import { IConnectionProfile } from 'sql/parts/connection/common/interfaces';
|
import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
|
||||||
import { IInsightsConfigDetails } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
import { IInsightsConfigDetails } from 'sql/parts/dashboard/widgets/insights/interfaces';
|
||||||
import QueryRunner, { EventType as QREvents } from 'sql/parts/query/execution/queryRunner';
|
import QueryRunner, { EventType as QREvents } from 'sql/platform/query/common/queryRunner';
|
||||||
import * as Utils from 'sql/parts/connection/common/utils';
|
import * as Utils from 'sql/platform/connection/common/utils';
|
||||||
import { IInsightsDialogModel, insertValueRegex } from 'sql/parts/insights/common/interfaces';
|
import { IInsightsDialogModel, insertValueRegex } from 'sql/parts/insights/common/interfaces';
|
||||||
import { error } from 'sql/base/common/log';
|
import { error } from 'sql/base/common/log';
|
||||||
|
import { IErrorMessageService } from 'sql/platform/errorMessage/common/errorMessageService';
|
||||||
|
|
||||||
import { DbCellValue, IDbColumn, QueryExecuteSubsetResult } from 'sqlops';
|
import { DbCellValue, IDbColumn, QueryExecuteSubsetResult } from 'sqlops';
|
||||||
|
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ 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';
|
||||||
import { AgentJobInfo } from 'sqlops';
|
import { AgentJobInfo } from 'sqlops';
|
||||||
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 { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces';
|
import { IJobManagementService } from 'sql/platform/jobManagement/common/interfaces';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
|
|
||||||
|
|
||||||
export const DASHBOARD_SELECTOR: string = 'agentview-component';
|
export const DASHBOARD_SELECTOR: string = 'agentview-component';
|
||||||
@@ -51,7 +51,7 @@ export class AgentViewComponent {
|
|||||||
constructor(
|
constructor(
|
||||||
@Inject(forwardRef(() => ChangeDetectorRef)) private _cd: ChangeDetectorRef,
|
@Inject(forwardRef(() => ChangeDetectorRef)) private _cd: ChangeDetectorRef,
|
||||||
@Inject(IJobManagementService) jobManagementService: IJobManagementService,
|
@Inject(IJobManagementService) jobManagementService: IJobManagementService,
|
||||||
@Inject(IDashboardService) dashboardService: IDashboardService,) {
|
@Inject(IDashboardService) dashboardService: IDashboardService, ) {
|
||||||
this._expanded = new Map<string, string>();
|
this._expanded = new Map<string, string>();
|
||||||
|
|
||||||
let self = this;
|
let self = this;
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ import { Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild
|
|||||||
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
||||||
import { Table } from 'sql/base/browser/ui/table/table';
|
import { Table } from 'sql/base/browser/ui/table/table';
|
||||||
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
||||||
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces';
|
import { IJobManagementService } from 'sql/platform/jobManagement/common/interfaces';
|
||||||
import { EditAlertAction, DeleteAlertAction, NewAlertAction } from 'sql/parts/jobManagement/common/jobActions';
|
import { EditAlertAction, DeleteAlertAction, NewAlertAction } from 'sql/platform/jobManagement/common/jobActions';
|
||||||
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||||
@@ -29,8 +29,8 @@ import { IAction } from 'vs/base/common/actions';
|
|||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
import { AlertsCacheObject } from 'sql/parts/jobManagement/common/jobManagementService';
|
import { AlertsCacheObject } from 'sql/platform/jobManagement/common/jobManagementService';
|
||||||
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
||||||
|
|
||||||
export const VIEW_SELECTOR: string = 'jobalertsview-component';
|
export const VIEW_SELECTOR: string = 'jobalertsview-component';
|
||||||
@@ -84,7 +84,7 @@ export class AlertsViewComponent extends JobManagementView implements OnInit, On
|
|||||||
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
||||||
@Inject(forwardRef(() => CommonServiceInterface)) commonService: CommonServiceInterface,
|
@Inject(forwardRef(() => CommonServiceInterface)) commonService: CommonServiceInterface,
|
||||||
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
||||||
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
||||||
@Inject(IDashboardService) _dashboardService: IDashboardService) {
|
@Inject(IDashboardService) _dashboardService: IDashboardService) {
|
||||||
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService);
|
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService);
|
||||||
this._didTabChange = false;
|
this._didTabChange = false;
|
||||||
@@ -100,7 +100,7 @@ export class AlertsViewComponent extends JobManagementView implements OnInit, On
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(){
|
ngOnInit() {
|
||||||
// set base class elements
|
// set base class elements
|
||||||
this._visibilityElement = this._gridEl;
|
this._visibilityElement = this._gridEl;
|
||||||
this._parentComponent = this._agentViewComponent;
|
this._parentComponent = this._agentViewComponent;
|
||||||
@@ -148,7 +148,7 @@ export class AlertsViewComponent extends JobManagementView implements OnInit, On
|
|||||||
$(this._gridEl.nativeElement).empty();
|
$(this._gridEl.nativeElement).empty();
|
||||||
$(this.actionBarContainer.nativeElement).empty();
|
$(this.actionBarContainer.nativeElement).empty();
|
||||||
this.initActionBar();
|
this.initActionBar();
|
||||||
this._table = new Table(this._gridEl.nativeElement, {columns}, this.options);
|
this._table = new Table(this._gridEl.nativeElement, { columns }, this.options);
|
||||||
this._table.grid.setData(this.dataView, true);
|
this._table.grid.setData(this.dataView, true);
|
||||||
this._register(this._table.onContextMenu(e => {
|
this._register(this._table.onContextMenu(e => {
|
||||||
self.openContextMenu(e);
|
self.openContextMenu(e);
|
||||||
|
|||||||
@@ -13,10 +13,10 @@ import { OnInit, Component, Inject, Input, forwardRef, ElementRef, ChangeDetecto
|
|||||||
import { Taskbar } from 'sql/base/browser/ui/taskbar/taskbar';
|
import { Taskbar } from 'sql/base/browser/ui/taskbar/taskbar';
|
||||||
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { RunJobAction, StopJobAction, EditJobAction, JobsRefreshAction } from 'sql/parts/jobManagement/common/jobActions';
|
import { RunJobAction, StopJobAction, EditJobAction, JobsRefreshAction } from 'sql/platform/jobManagement/common/jobActions';
|
||||||
import { JobCacheObject } from 'sql/parts/jobManagement/common/jobManagementService';
|
import { JobCacheObject } from 'sql/platform/jobManagement/common/jobManagementService';
|
||||||
import { JobManagementUtilities } from 'sql/parts/jobManagement/common/jobManagementUtilities';
|
import { JobManagementUtilities } from 'sql/platform/jobManagement/common/jobManagementUtilities';
|
||||||
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces';
|
import { IJobManagementService } from 'sql/platform/jobManagement/common/interfaces';
|
||||||
import { JobHistoryController, JobHistoryDataSource,
|
import { JobHistoryController, JobHistoryDataSource,
|
||||||
JobHistoryRenderer, JobHistoryFilter, JobHistoryModel, JobHistoryRow } from 'sql/parts/jobManagement/views/jobHistoryTree';
|
JobHistoryRenderer, JobHistoryFilter, JobHistoryModel, JobHistoryRow } from 'sql/parts/jobManagement/views/jobHistoryTree';
|
||||||
import { JobStepsViewRow } from 'sql/parts/jobManagement/views/jobStepsViewTree';
|
import { JobStepsViewRow } from 'sql/parts/jobManagement/views/jobStepsViewTree';
|
||||||
@@ -28,7 +28,7 @@ import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
|||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
||||||
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||||
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry';
|
||||||
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
import * as TelemetryKeys from 'sql/common/telemetryKeys';
|
||||||
@@ -77,7 +77,7 @@ export class JobHistoryComponent extends JobManagementView implements OnInit {
|
|||||||
@Inject(IInstantiationService) private instantiationService: IInstantiationService,
|
@Inject(IInstantiationService) private instantiationService: IInstantiationService,
|
||||||
@Inject(IContextMenuService) private contextMenuService: IContextMenuService,
|
@Inject(IContextMenuService) private contextMenuService: IContextMenuService,
|
||||||
@Inject(IJobManagementService) private _jobManagementService: IJobManagementService,
|
@Inject(IJobManagementService) private _jobManagementService: IJobManagementService,
|
||||||
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
||||||
@Inject(IDashboardService) dashboardService: IDashboardService,
|
@Inject(IDashboardService) dashboardService: IDashboardService,
|
||||||
@Inject(ITelemetryService) private _telemetryService: ITelemetryService
|
@Inject(ITelemetryService) private _telemetryService: ITelemetryService
|
||||||
) {
|
) {
|
||||||
@@ -85,7 +85,7 @@ export class JobHistoryComponent extends JobManagementView implements OnInit {
|
|||||||
this._treeController = new JobHistoryController();
|
this._treeController = new JobHistoryController();
|
||||||
this._treeDataSource = new JobHistoryDataSource();
|
this._treeDataSource = new JobHistoryDataSource();
|
||||||
this._treeRenderer = new JobHistoryRenderer();
|
this._treeRenderer = new JobHistoryRenderer();
|
||||||
this._treeFilter = new JobHistoryFilter();
|
this._treeFilter = new JobHistoryFilter();
|
||||||
let jobCacheObjectMap = this._jobManagementService.jobCacheObjectMap;
|
let jobCacheObjectMap = this._jobManagementService.jobCacheObjectMap;
|
||||||
this._serverName = commonService.connectionManagementService.connectionInfo.connectionProfile.serverName;
|
this._serverName = commonService.connectionManagementService.connectionInfo.connectionProfile.serverName;
|
||||||
let jobCache = jobCacheObjectMap[this._serverName];
|
let jobCache = jobCacheObjectMap[this._serverName];
|
||||||
@@ -142,7 +142,7 @@ export class JobHistoryComponent extends JobManagementView implements OnInit {
|
|||||||
dataSource: this._treeDataSource,
|
dataSource: this._treeDataSource,
|
||||||
filter: this._treeFilter,
|
filter: this._treeFilter,
|
||||||
renderer: this._treeRenderer
|
renderer: this._treeRenderer
|
||||||
}, {verticalScrollMode: ScrollbarVisibility.Visible});
|
}, { verticalScrollMode: ScrollbarVisibility.Visible });
|
||||||
this._register(attachListStyler(this._tree, this.themeService));
|
this._register(attachListStyler(this._tree, this.themeService));
|
||||||
this._tree.layout(dom.getContentHeight(this._tableContainer.nativeElement));
|
this._tree.layout(dom.getContentHeight(this._tableContainer.nativeElement));
|
||||||
this._telemetryService.publicLog(TelemetryKeys.JobHistoryView);
|
this._telemetryService.publicLog(TelemetryKeys.JobHistoryView);
|
||||||
@@ -281,7 +281,7 @@ export class JobHistoryComponent extends JobManagementView implements OnInit {
|
|||||||
this.agentJobInfo = this._agentJobInfo;
|
this.agentJobInfo = this._agentJobInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.isRefreshing ) {
|
if (this.isRefreshing) {
|
||||||
this.loadHistory();
|
this.loadHistory();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -299,7 +299,7 @@ export class JobHistoryComponent extends JobManagementView implements OnInit {
|
|||||||
this._actionBar.context = { targetObject: this._agentJobInfo, ownerUri: this.ownerUri, jobHistoryComponent: this };
|
this._actionBar.context = { targetObject: this._agentJobInfo, ownerUri: this.ownerUri, jobHistoryComponent: this };
|
||||||
this._cd.detectChanges();
|
this._cd.detectChanges();
|
||||||
}
|
}
|
||||||
} else if (jobHistories && jobHistories.length === 0 ){
|
} else if (jobHistories && jobHistories.length === 0) {
|
||||||
this._showPreviousRuns = false;
|
this._showPreviousRuns = false;
|
||||||
this._showSteps = false;
|
this._showSteps = false;
|
||||||
this._noJobsAvailable = true;
|
this._noJobsAvailable = true;
|
||||||
|
|||||||
@@ -9,15 +9,14 @@ import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.comp
|
|||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { IAction, Action } from 'vs/base/common/actions';
|
import { IAction, Action } from 'vs/base/common/actions';
|
||||||
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
|
import { ResolvedKeybinding } from 'vs/base/common/keyCodes';
|
||||||
import { Disposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { Taskbar } from '../../../base/browser/ui/taskbar/taskbar';
|
import { Taskbar } from '../../../base/browser/ui/taskbar/taskbar';
|
||||||
import { JobsRefreshAction } from 'sql/parts/jobManagement/common/jobActions';
|
import { JobsRefreshAction } from 'sql/platform/jobManagement/common/jobActions';
|
||||||
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
|
|
||||||
export abstract class JobManagementView extends TabChild implements AfterContentChecked {
|
export abstract class JobManagementView extends TabChild implements AfterContentChecked {
|
||||||
protected isVisible: boolean = false;
|
protected isVisible: boolean = false;
|
||||||
@@ -79,7 +78,7 @@ export abstract class JobManagementView extends TabChild implements AfterContent
|
|||||||
let actions = this.getTableActions();
|
let actions = this.getTableActions();
|
||||||
if (actions) {
|
if (actions) {
|
||||||
let ownerUri: string = this._commonService.connectionManagementService.connectionInfo.ownerUri;
|
let ownerUri: string = this._commonService.connectionManagementService.connectionInfo.ownerUri;
|
||||||
let actionContext= {
|
let actionContext = {
|
||||||
ownerUri: ownerUri,
|
ownerUri: ownerUri,
|
||||||
targetObject: targetObject
|
targetObject: targetObject
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,11 +12,13 @@ import { Tree } from 'vs/base/parts/tree/browser/treeImpl';
|
|||||||
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
import { ScrollbarVisibility } from 'vs/base/common/scrollable';
|
||||||
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
import { IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { JobStepsViewController, JobStepsViewDataSource, JobStepsViewFilter,
|
import {
|
||||||
JobStepsViewRenderer, JobStepsViewModel} from 'sql/parts/jobManagement/views/jobStepsViewTree';
|
JobStepsViewController, JobStepsViewDataSource, JobStepsViewFilter,
|
||||||
|
JobStepsViewRenderer, JobStepsViewModel
|
||||||
|
} from 'sql/parts/jobManagement/views/jobStepsViewTree';
|
||||||
import { JobHistoryComponent } from 'sql/parts/jobManagement/views/jobHistory.component';
|
import { JobHistoryComponent } from 'sql/parts/jobManagement/views/jobHistory.component';
|
||||||
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
||||||
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
import { IContextMenuService } from 'vs/platform/contextview/browser/contextView';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
@@ -31,13 +33,13 @@ export const JOBSTEPSVIEW_SELECTOR: string = 'jobstepsview-component';
|
|||||||
templateUrl: decodeURI(require.toUrl('./jobStepsView.component.html')),
|
templateUrl: decodeURI(require.toUrl('./jobStepsView.component.html')),
|
||||||
providers: [{ provide: TabChild, useExisting: forwardRef(() => JobStepsViewComponent) }],
|
providers: [{ provide: TabChild, useExisting: forwardRef(() => JobStepsViewComponent) }],
|
||||||
})
|
})
|
||||||
export class JobStepsViewComponent extends JobManagementView implements OnInit, AfterContentChecked {
|
export class JobStepsViewComponent extends JobManagementView implements OnInit, AfterContentChecked {
|
||||||
|
|
||||||
private _tree: Tree;
|
private _tree: Tree;
|
||||||
private _treeController = new JobStepsViewController();
|
private _treeController = new JobStepsViewController();
|
||||||
private _treeDataSource = new JobStepsViewDataSource();
|
private _treeDataSource = new JobStepsViewDataSource();
|
||||||
private _treeRenderer = new JobStepsViewRenderer();
|
private _treeRenderer = new JobStepsViewRenderer();
|
||||||
private _treeFilter = new JobStepsViewFilter();
|
private _treeFilter = new JobStepsViewFilter();
|
||||||
|
|
||||||
@ViewChild('table') private _tableContainer: ElementRef;
|
@ViewChild('table') private _tableContainer: ElementRef;
|
||||||
|
|
||||||
@@ -49,7 +51,7 @@ export class JobStepsViewComponent extends JobManagementView implements OnInit,
|
|||||||
@Inject(IWorkbenchThemeService) private themeService: IWorkbenchThemeService,
|
@Inject(IWorkbenchThemeService) private themeService: IWorkbenchThemeService,
|
||||||
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
||||||
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
||||||
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
||||||
@Inject(IDashboardService) dashboardService: IDashboardService,
|
@Inject(IDashboardService) dashboardService: IDashboardService,
|
||||||
@Inject(ITelemetryService) private _telemetryService: ITelemetryService
|
@Inject(ITelemetryService) private _telemetryService: ITelemetryService
|
||||||
) {
|
) {
|
||||||
@@ -101,7 +103,7 @@ export class JobStepsViewComponent extends JobManagementView implements OnInit,
|
|||||||
dataSource: this._treeDataSource,
|
dataSource: this._treeDataSource,
|
||||||
filter: this._treeFilter,
|
filter: this._treeFilter,
|
||||||
renderer: this._treeRenderer
|
renderer: this._treeRenderer
|
||||||
}, {verticalScrollMode: ScrollbarVisibility.Visible, horizontalScrollMode: ScrollbarVisibility.Visible });
|
}, { verticalScrollMode: ScrollbarVisibility.Visible, horizontalScrollMode: ScrollbarVisibility.Visible });
|
||||||
this._register(attachListStyler(this._tree, this.themeService));
|
this._register(attachListStyler(this._tree, this.themeService));
|
||||||
this._telemetryService.publicLog(TelemetryKeys.JobStepsView);
|
this._telemetryService.publicLog(TelemetryKeys.JobStepsView);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,11 +20,11 @@ import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
|||||||
import { Table } from 'sql/base/browser/ui/table/table';
|
import { Table } from 'sql/base/browser/ui/table/table';
|
||||||
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
||||||
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
||||||
import { JobCacheObject } from 'sql/parts/jobManagement/common/jobManagementService';
|
import { JobCacheObject } from 'sql/platform/jobManagement/common/jobManagementService';
|
||||||
import { EditJobAction, DeleteJobAction, NewJobAction } from 'sql/parts/jobManagement/common/jobActions';
|
import { EditJobAction, DeleteJobAction, NewJobAction } from 'sql/platform/jobManagement/common/jobActions';
|
||||||
import { JobManagementUtilities } from 'sql/parts/jobManagement/common/jobManagementUtilities';
|
import { JobManagementUtilities } from 'sql/platform/jobManagement/common/jobManagementUtilities';
|
||||||
import { HeaderFilter } from 'sql/base/browser/ui/table/plugins/headerFilter.plugin';
|
import { HeaderFilter } from 'sql/base/browser/ui/table/plugins/headerFilter.plugin';
|
||||||
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces';
|
import { IJobManagementService } from 'sql/platform/jobManagement/common/interfaces';
|
||||||
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||||
@@ -33,7 +33,7 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
|||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { IAction } from 'vs/base/common/actions';
|
import { IAction } from 'vs/base/common/actions';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
import { escape } from 'sql/base/common/strings';
|
import { escape } from 'sql/base/common/strings';
|
||||||
import { IWorkbenchThemeService, IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
import { IWorkbenchThemeService, IColorTheme } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||||
import { tableBackground, cellBackground, cellBorderColor } from 'sql/common/theme/colors';
|
import { tableBackground, cellBackground, cellBorderColor } from 'sql/common/theme/colors';
|
||||||
@@ -106,7 +106,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
|
|||||||
@Inject(ICommandService) private _commandService: ICommandService,
|
@Inject(ICommandService) private _commandService: ICommandService,
|
||||||
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
||||||
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
||||||
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
||||||
@Inject(IDashboardService) _dashboardService: IDashboardService,
|
@Inject(IDashboardService) _dashboardService: IDashboardService,
|
||||||
@Inject(ITelemetryService) private _telemetryService: ITelemetryService
|
@Inject(ITelemetryService) private _telemetryService: ITelemetryService
|
||||||
) {
|
) {
|
||||||
@@ -123,7 +123,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
|
|||||||
this._isCloud = commonService.connectionManagementService.connectionInfo.serverInfo.isCloud;
|
this._isCloud = commonService.connectionManagementService.connectionInfo.serverInfo.isCloud;
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(){
|
ngOnInit() {
|
||||||
// set base class elements
|
// set base class elements
|
||||||
this._visibilityElement = this._gridEl;
|
this._visibilityElement = this._gridEl;
|
||||||
this._parentComponent = this._agentViewComponent;
|
this._parentComponent = this._agentViewComponent;
|
||||||
@@ -185,7 +185,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
|
|||||||
$(this._gridEl.nativeElement).empty();
|
$(this._gridEl.nativeElement).empty();
|
||||||
$(this.actionBarContainer.nativeElement).empty();
|
$(this.actionBarContainer.nativeElement).empty();
|
||||||
this.initActionBar();
|
this.initActionBar();
|
||||||
this._table = new Table(this._gridEl.nativeElement, {columns}, options);
|
this._table = new Table(this._gridEl.nativeElement, { columns }, options);
|
||||||
this._table.grid.setData(this.dataView, true);
|
this._table.grid.setData(this.dataView, true);
|
||||||
this._table.grid.onClick.subscribe((e, args) => {
|
this._table.grid.onClick.subscribe((e, args) => {
|
||||||
let job = self.getJob(args);
|
let job = self.getJob(args);
|
||||||
@@ -507,11 +507,11 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
|
|||||||
if (runChart && runChart.length > 0) {
|
if (runChart && runChart.length > 0) {
|
||||||
return `<table class="jobprevruns" id="${dataContext.id}">
|
return `<table class="jobprevruns" id="${dataContext.id}">
|
||||||
<tr>
|
<tr>
|
||||||
<td>${runChart[0] ? runChart[0] : '<div></div>' }</td>
|
<td>${runChart[0] ? runChart[0] : '<div></div>'}</td>
|
||||||
<td>${runChart[1] ? runChart[1] : '<div></div>' }</td>
|
<td>${runChart[1] ? runChart[1] : '<div></div>'}</td>
|
||||||
<td>${runChart[2] ? runChart[2] : '<div></div>' }</td>
|
<td>${runChart[2] ? runChart[2] : '<div></div>'}</td>
|
||||||
<td>${runChart[3] ? runChart[3] : '<div></div>' }</td>
|
<td>${runChart[3] ? runChart[3] : '<div></div>'}</td>
|
||||||
<td>${runChart[4] ? runChart[4] : '<div></div>' }</td>
|
<td>${runChart[4] ? runChart[4] : '<div></div>'}</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>`;
|
</table>`;
|
||||||
} else {
|
} else {
|
||||||
@@ -906,7 +906,7 @@ export class JobsViewComponent extends JobManagementView implements OnInit, OnDe
|
|||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
let jobId = data.getItem(rowIndex).jobId;
|
let jobId = data.getItem(rowIndex).jobId;
|
||||||
if (!jobId) {
|
if (!jobId) {
|
||||||
// if we couldn't find the ID, check if it's an
|
// if we couldn't find the ID, check if it's an
|
||||||
// error row
|
// error row
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ import * as sqlops from 'sqlops';
|
|||||||
import { Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, OnInit, OnDestroy } from '@angular/core';
|
import { Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, OnInit, OnDestroy } from '@angular/core';
|
||||||
import { Table } from 'sql/base/browser/ui/table/table';
|
import { Table } from 'sql/base/browser/ui/table/table';
|
||||||
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
||||||
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces';
|
import { IJobManagementService } from 'sql/platform/jobManagement/common/interfaces';
|
||||||
import { EditOperatorAction, DeleteOperatorAction, NewOperatorAction } from 'sql/parts/jobManagement/common/jobActions';
|
import { EditOperatorAction, DeleteOperatorAction, NewOperatorAction } from 'sql/platform/jobManagement/common/jobActions';
|
||||||
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
||||||
@@ -29,8 +29,8 @@ import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding';
|
|||||||
import { TPromise } from 'vs/base/common/winjs.base';
|
import { TPromise } from 'vs/base/common/winjs.base';
|
||||||
import { IAction } from 'vs/base/common/actions';
|
import { IAction } from 'vs/base/common/actions';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
import { OperatorsCacheObject } from 'sql/parts/jobManagement/common/jobManagementService';
|
import { OperatorsCacheObject } from 'sql/platform/jobManagement/common/jobManagementService';
|
||||||
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
||||||
|
|
||||||
export const VIEW_SELECTOR: string = 'joboperatorsview-component';
|
export const VIEW_SELECTOR: string = 'joboperatorsview-component';
|
||||||
@@ -83,7 +83,7 @@ export class OperatorsViewComponent extends JobManagementView implements OnInit,
|
|||||||
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
||||||
@Inject(forwardRef(() => CommonServiceInterface)) commonService: CommonServiceInterface,
|
@Inject(forwardRef(() => CommonServiceInterface)) commonService: CommonServiceInterface,
|
||||||
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
||||||
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
||||||
@Inject(IDashboardService) _dashboardService: IDashboardService
|
@Inject(IDashboardService) _dashboardService: IDashboardService
|
||||||
) {
|
) {
|
||||||
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService);
|
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService);
|
||||||
@@ -99,7 +99,7 @@ export class OperatorsViewComponent extends JobManagementView implements OnInit,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(){
|
ngOnInit() {
|
||||||
// set base class elements
|
// set base class elements
|
||||||
this._visibilityElement = this._gridEl;
|
this._visibilityElement = this._gridEl;
|
||||||
this._parentComponent = this._agentViewComponent;
|
this._parentComponent = this._agentViewComponent;
|
||||||
@@ -149,7 +149,7 @@ export class OperatorsViewComponent extends JobManagementView implements OnInit,
|
|||||||
$(this._gridEl.nativeElement).empty();
|
$(this._gridEl.nativeElement).empty();
|
||||||
$(this.actionBarContainer.nativeElement).empty();
|
$(this.actionBarContainer.nativeElement).empty();
|
||||||
this.initActionBar();
|
this.initActionBar();
|
||||||
this._table = new Table(this._gridEl.nativeElement, {columns}, this.options);
|
this._table = new Table(this._gridEl.nativeElement, { columns }, this.options);
|
||||||
this._table.grid.setData(this.dataView, true);
|
this._table.grid.setData(this.dataView, true);
|
||||||
|
|
||||||
this._register(this._table.onContextMenu(e => {
|
this._register(this._table.onContextMenu(e => {
|
||||||
@@ -217,7 +217,7 @@ export class OperatorsViewComponent extends JobManagementView implements OnInit,
|
|||||||
private renderName(row, cell, value, columnDef, dataContext) {
|
private renderName(row, cell, value, columnDef, dataContext) {
|
||||||
let resultIndicatorClass = dataContext.enabled ? 'operatorview-operatornameindicatorenabled' :
|
let resultIndicatorClass = dataContext.enabled ? 'operatorview-operatornameindicatorenabled' :
|
||||||
'operatorview-operatornameindicatordisabled';
|
'operatorview-operatornameindicatordisabled';
|
||||||
return '<table class="operatorview-operatornametable"><tr class="operatorview-operatornamerow">' +
|
return '<table class="operatorview-operatornametable"><tr class="operatorview-operatornamerow">' +
|
||||||
'<td nowrap class=' + resultIndicatorClass + '></td>' +
|
'<td nowrap class=' + resultIndicatorClass + '></td>' +
|
||||||
'<td nowrap class="operatorview-operatornametext">' + dataContext.name + '</td>' +
|
'<td nowrap class="operatorview-operatornametext">' + dataContext.name + '</td>' +
|
||||||
'</tr></table>';
|
'</tr></table>';
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ import * as nls from 'vs/nls';
|
|||||||
import { Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, OnInit, OnDestroy } from '@angular/core';
|
import { Component, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, OnInit, OnDestroy } from '@angular/core';
|
||||||
import { Table } from 'sql/base/browser/ui/table/table';
|
import { Table } from 'sql/base/browser/ui/table/table';
|
||||||
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
import { AgentViewComponent } from 'sql/parts/jobManagement/agent/agentView.component';
|
||||||
import { IJobManagementService } from 'sql/parts/jobManagement/common/interfaces';
|
import { IJobManagementService } from 'sql/platform/jobManagement/common/interfaces';
|
||||||
import { EditProxyAction, DeleteProxyAction, NewProxyAction } from 'sql/parts/jobManagement/common/jobActions';
|
import { EditProxyAction, DeleteProxyAction, NewProxyAction } from 'sql/platform/jobManagement/common/jobActions';
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
import { TabChild } from 'sql/base/browser/ui/panel/tab.component';
|
||||||
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
import { JobManagementView } from 'sql/parts/jobManagement/views/jobManagementView';
|
||||||
@@ -29,8 +29,8 @@ import { TPromise } from 'vs/base/common/winjs.base';
|
|||||||
import { IAction } from 'vs/base/common/actions';
|
import { IAction } from 'vs/base/common/actions';
|
||||||
import { ICommandService } from 'vs/platform/commands/common/commands';
|
import { ICommandService } from 'vs/platform/commands/common/commands';
|
||||||
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
|
||||||
import { IDashboardService } from 'sql/services/dashboard/common/dashboardService';
|
import { IDashboardService } from 'sql/platform/dashboard/browser/dashboardService';
|
||||||
import { ProxiesCacheObject } from 'sql/parts/jobManagement/common/jobManagementService';
|
import { ProxiesCacheObject } from 'sql/platform/jobManagement/common/jobManagementService';
|
||||||
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
import { RowDetailView } from 'sql/base/browser/ui/table/plugins/rowdetailview';
|
||||||
|
|
||||||
export const VIEW_SELECTOR: string = 'jobproxiesview-component';
|
export const VIEW_SELECTOR: string = 'jobproxiesview-component';
|
||||||
@@ -56,8 +56,8 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit, O
|
|||||||
id: 'accountName'
|
id: 'accountName'
|
||||||
},
|
},
|
||||||
{ name: nls.localize('jobProxiesView.credentialName', 'Credential Name'), field: 'credentialName', width: 200, id: 'credentialName' },
|
{ name: nls.localize('jobProxiesView.credentialName', 'Credential Name'), field: 'credentialName', width: 200, id: 'credentialName' },
|
||||||
{ name: nls.localize('jobProxiesView.description', 'Description'), field: 'description', width: 200, id: 'description'},
|
{ name: nls.localize('jobProxiesView.description', 'Description'), field: 'description', width: 200, id: 'description' },
|
||||||
{ name: nls.localize('jobProxiesView.isEnabled', 'Enabled'), field: 'isEnabled', width: 200, id: 'isEnabled'}
|
{ name: nls.localize('jobProxiesView.isEnabled', 'Enabled'), field: 'isEnabled', width: 200, id: 'isEnabled' }
|
||||||
];
|
];
|
||||||
|
|
||||||
private options: Slick.GridOptions<any> = {
|
private options: Slick.GridOptions<any> = {
|
||||||
@@ -87,7 +87,7 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit, O
|
|||||||
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
@Inject(IInstantiationService) instantiationService: IInstantiationService,
|
||||||
@Inject(forwardRef(() => CommonServiceInterface)) commonService: CommonServiceInterface,
|
@Inject(forwardRef(() => CommonServiceInterface)) commonService: CommonServiceInterface,
|
||||||
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
@Inject(IContextMenuService) contextMenuService: IContextMenuService,
|
||||||
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
@Inject(IKeybindingService) keybindingService: IKeybindingService,
|
||||||
@Inject(IDashboardService) _dashboardService: IDashboardService
|
@Inject(IDashboardService) _dashboardService: IDashboardService
|
||||||
) {
|
) {
|
||||||
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService);
|
super(commonService, _dashboardService, contextMenuService, keybindingService, instantiationService);
|
||||||
@@ -103,7 +103,7 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit, O
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit(){
|
ngOnInit() {
|
||||||
// set base class elements
|
// set base class elements
|
||||||
this._visibilityElement = this._gridEl;
|
this._visibilityElement = this._gridEl;
|
||||||
this._parentComponent = this._agentViewComponent;
|
this._parentComponent = this._agentViewComponent;
|
||||||
@@ -152,7 +152,7 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit, O
|
|||||||
$(this._gridEl.nativeElement).empty();
|
$(this._gridEl.nativeElement).empty();
|
||||||
$(this.actionBarContainer.nativeElement).empty();
|
$(this.actionBarContainer.nativeElement).empty();
|
||||||
this.initActionBar();
|
this.initActionBar();
|
||||||
this._table = new Table(this._gridEl.nativeElement, {columns}, this.options);
|
this._table = new Table(this._gridEl.nativeElement, { columns }, this.options);
|
||||||
this._table.grid.setData(this.dataView, true);
|
this._table.grid.setData(this.dataView, true);
|
||||||
|
|
||||||
this._register(this._table.onContextMenu(e => {
|
this._register(this._table.onContextMenu(e => {
|
||||||
@@ -221,7 +221,7 @@ export class ProxiesViewComponent extends JobManagementView implements OnInit, O
|
|||||||
private renderName(row, cell, value, columnDef, dataContext) {
|
private renderName(row, cell, value, columnDef, dataContext) {
|
||||||
let resultIndicatorClass = dataContext.isEnabled ? 'proxyview-proxynameindicatorenabled' :
|
let resultIndicatorClass = dataContext.isEnabled ? 'proxyview-proxynameindicatorenabled' :
|
||||||
'proxyview-proxynameindicatordisabled';
|
'proxyview-proxynameindicatordisabled';
|
||||||
return '<table class="proxyview-proxynametable"><tr class="proxyview-proxynamerow">' +
|
return '<table class="proxyview-proxynametable"><tr class="proxyview-proxynamerow">' +
|
||||||
'<td nowrap class=' + resultIndicatorClass + '></td>' +
|
'<td nowrap class=' + resultIndicatorClass + '></td>' +
|
||||||
'<td nowrap class="proxyview-proxynametext">' + dataContext.accountName + '</td>' +
|
'<td nowrap class="proxyview-proxynametext">' + dataContext.accountName + '</td>' +
|
||||||
'</tr></table>';
|
'</tr></table>';
|
||||||
|
|||||||
@@ -5,29 +5,24 @@
|
|||||||
import 'vs/css!sql/media/icons/common-icons';
|
import 'vs/css!sql/media/icons/common-icons';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
Component, Input, Inject, forwardRef, ComponentFactoryResolver, AfterContentInit, ViewChild,
|
Component, Input, Inject, forwardRef, ComponentFactoryResolver, ViewChild,
|
||||||
ElementRef, OnInit, ChangeDetectorRef, OnDestroy, ReflectiveInjector, Injector, Type, 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/parts/dashboard/common/componentHost.directive';
|
||||||
import { error } from 'sql/base/common/log';
|
import { error } from 'sql/base/common/log';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
|
|
||||||
import { IComponent, IComponentConfig, IComponentDescriptor, IModelStore, COMPONENT_CONFIG } from './interfaces';
|
import { IComponent, IComponentConfig, IComponentDescriptor, IModelStore, COMPONENT_CONFIG } from './interfaces';
|
||||||
import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
|
import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
|
||||||
|
|
||||||
import { IDisposable } from 'vs/base/common/lifecycle';
|
|
||||||
import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
import { IColorTheme, IWorkbenchThemeService } from 'vs/workbench/services/themes/common/workbenchThemeService';
|
||||||
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
import * as colors from 'vs/platform/theme/common/colorRegistry';
|
||||||
import * as themeColors from 'vs/workbench/common/theme';
|
import * as themeColors from 'vs/workbench/common/theme';
|
||||||
import { Action } from 'vs/base/common/actions';
|
|
||||||
import { Registry } from 'vs/platform/registry/common/platform';
|
import { Registry } from 'vs/platform/registry/common/platform';
|
||||||
import { ActionBar } from 'vs/base/browser/ui/actionbar/actionbar';
|
|
||||||
import { memoize } from 'vs/base/common/decorators';
|
import { memoize } from 'vs/base/common/decorators';
|
||||||
import { generateUuid } from 'vs/base/common/uuid';
|
import { generateUuid } from 'vs/base/common/uuid';
|
||||||
import { IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
import { IBootstrapParams } from 'sql/services/bootstrap/bootstrapService';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event } from 'vs/base/common/event';
|
||||||
import * as nls from 'vs/nls';
|
|
||||||
import { LayoutRequestParams } from 'sql/platform/dialog/dialogContainer.component';
|
import { LayoutRequestParams } from 'sql/platform/dialog/dialogContainer.component';
|
||||||
|
|
||||||
const componentRegistry = <IComponentRegistry>Registry.as(Extensions.ComponentContribution);
|
const componentRegistry = <IComponentRegistry>Registry.as(Extensions.ComponentContribution);
|
||||||
|
|||||||
@@ -4,21 +4,17 @@
|
|||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
// import 'vs/css!./modelViewContent';
|
// import 'vs/css!./modelViewContent';
|
||||||
|
|
||||||
import { Component, forwardRef, Input, OnInit, Inject, ChangeDetectorRef, ElementRef } from '@angular/core';
|
import { Component, forwardRef, Input, OnInit, Inject, ChangeDetectorRef } from '@angular/core';
|
||||||
|
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
import { Parts } from 'vs/workbench/services/part/common/partService';
|
import { IDisposable } from 'vs/base/common/lifecycle';
|
||||||
import { IDisposable, Disposable } 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 * as nls from 'vs/nls';
|
|
||||||
|
|
||||||
import { TabConfig } from 'sql/parts/dashboard/common/dashboardWidget';
|
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { IModelView } from 'sql/services/model/modelViewService';
|
import { IModelView } from 'sql/platform/model/common/modelViewService';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
|
||||||
import { ViewBase } from 'sql/parts/modelComponents/viewBase';
|
import { ViewBase } from 'sql/parts/modelComponents/viewBase';
|
||||||
import { IModelViewService } from 'sql/services/modelComponents/modelViewService';
|
import { IModelViewService } from 'sql/platform/modelComponents/common/modelViewService';
|
||||||
|
|
||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
|
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ import nls = require('vs/nls');
|
|||||||
import * as sqlops from 'sqlops';
|
import * as sqlops from 'sqlops';
|
||||||
import { IModelStore, IComponentDescriptor, IComponent } from './interfaces';
|
import { IModelStore, IComponentDescriptor, IComponent } from './interfaces';
|
||||||
import { IItemConfig, ModelComponentTypes, IComponentShape } from 'sql/workbench/api/common/sqlExtHostTypes';
|
import { IItemConfig, ModelComponentTypes, IComponentShape } from 'sql/workbench/api/common/sqlExtHostTypes';
|
||||||
import { IModelView, IModelViewEventArgs } from 'sql/services/model/modelViewService';
|
import { IModelView, IModelViewEventArgs } from 'sql/platform/model/common/modelViewService';
|
||||||
import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
|
import { Extensions, IComponentRegistry } from 'sql/platform/dashboard/common/modelComponentRegistry';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
import { ModelStore } from 'sql/parts/modelComponents/modelStore';
|
import { ModelStore } from 'sql/parts/modelComponents/modelStore';
|
||||||
import { Event, Emitter } from 'vs/base/common/event';
|
import { Event, Emitter } from 'vs/base/common/event';
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import 'vs/css!./code';
|
|||||||
import { OnInit, Component, Input, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, Output, EventEmitter, OnChanges, SimpleChange } from '@angular/core';
|
import { OnInit, Component, Input, Inject, forwardRef, ElementRef, ChangeDetectorRef, ViewChild, Output, EventEmitter, OnChanges, SimpleChange } from '@angular/core';
|
||||||
|
|
||||||
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
import { CommonServiceInterface } from 'sql/services/common/commonServiceInterface.service';
|
||||||
import { AngularDisposable } from 'sql/base/common/lifecycle';
|
import { AngularDisposable } from 'sql/base/node/lifecycle';
|
||||||
import { QueryTextEditor } from 'sql/parts/modelComponents/queryTextEditor';
|
import { QueryTextEditor } from 'sql/parts/modelComponents/queryTextEditor';
|
||||||
import { CellToggleMoreActions } from 'sql/parts/notebook/cellToggleMoreActions';
|
import { CellToggleMoreActions } from 'sql/parts/notebook/cellToggleMoreActions';
|
||||||
import { ICellModel } from 'sql/parts/notebook/models/modelInterfaces';
|
import { ICellModel } from 'sql/parts/notebook/models/modelInterfaces';
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user