fixed the grid layout schema and fixed layout bugs (#847)

* fixed the grid layout schema and fixed layout bugs
This commit is contained in:
Leila Lali
2018-03-06 15:33:47 -08:00
committed by GitHub
parent 9f5268101d
commit 1d284ea66a
3 changed files with 55 additions and 13 deletions

View File

@@ -5,7 +5,7 @@
import 'vs/css!./dashboardGridContainer'; import 'vs/css!./dashboardGridContainer';
import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, EventEmitter, OnChanges } from '@angular/core'; import { Component, Inject, Input, forwardRef, ViewChild, ElementRef, ViewChildren, QueryList, OnDestroy, ChangeDetectorRef, EventEmitter } from '@angular/core';
import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid'; import { NgGridConfig, NgGrid, NgGridItem } from 'angular2-grid';
import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service'; import { DashboardServiceInterface } from 'sql/parts/dashboard/services/dashboardServiceInterface.service';
@@ -19,6 +19,7 @@ import { ConfigurationTarget } from 'vs/platform/configuration/common/configurat
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';
import { concat } from 'rxjs/operator/concat'; import { concat } from 'rxjs/operator/concat';
import { WebviewContent } from 'sql/parts/dashboard/contents/webviewContent.component';
export interface GridCellConfig { export interface GridCellConfig {
id?: string; id?: string;
@@ -42,7 +43,7 @@ export interface GridWebviewConfig extends GridCellConfig {
templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/containers/dashboardGridContainer.component.html')), templateUrl: decodeURI(require.toUrl('sql/parts/dashboard/containers/dashboardGridContainer.component.html')),
providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardGridContainer) }] providers: [{ provide: DashboardTab, useExisting: forwardRef(() => DashboardGridContainer) }]
}) })
export class DashboardGridContainer extends DashboardTab implements OnDestroy, OnChanges { export class DashboardGridContainer extends DashboardTab implements OnDestroy {
@Input() private tab: TabConfig; @Input() private tab: TabConfig;
private _contents: GridCellConfig[]; private _contents: GridCellConfig[];
private _onResize = new Emitter<void>(); private _onResize = new Emitter<void>();
@@ -105,7 +106,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
let content = this.getContent(row, col); let content = this.getContent(row, col);
let colspan: string = '1'; let colspan: string = '1';
if (content && content.colspan) { if (content && content.colspan) {
colspan = content.colspan; colspan = this.convertToNumber(content.colspan, this.cols.length).toString();
} }
return colspan; return colspan;
} }
@@ -113,7 +114,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
protected getRowspan(row: number, col: number): string { protected getRowspan(row: number, col: number): string {
let content = this.getContent(row, col); let content = this.getContent(row, col);
if (content && (content.rowspan)) { if (content && (content.rowspan)) {
return content.rowspan; return this.convertToNumber(content.rowspan, this.rows.length).toString();
} else { } else {
return '1'; return '1';
} }
@@ -122,7 +123,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
protected getWidgetWidth(row: number, col: number): string { protected getWidgetWidth(row: number, col: number): string {
let content = this.getContent(row, col); let content = this.getContent(row, col);
let colspan = this.getColspan(row, col); let colspan = this.getColspan(row, col);
let columnCount = this.covertToNumber(colspan, this.cols.length); let columnCount = this.convertToNumber(colspan, this.cols.length);
return columnCount * this.cellWidth + 'px'; return columnCount * this.cellWidth + 'px';
} }
@@ -130,12 +131,12 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
protected getWidgetHeight(row: number, col: number): string { protected getWidgetHeight(row: number, col: number): string {
let content = this.getContent(row, col); let content = this.getContent(row, col);
let rowspan = this.getRowspan(row, col); let rowspan = this.getRowspan(row, col);
let rowCount = this.covertToNumber(rowspan, this.rows.length); let rowCount = this.convertToNumber(rowspan, this.rows.length);
return rowCount * this.cellHeight + 'px'; return rowCount * this.cellHeight + 'px';
} }
private covertToNumber(value: string, maxNumber: number): number { private convertToNumber(value: string, maxNumber: number): number {
if (value === '*') { if (value === '*') {
return maxNumber; return maxNumber;
} }
@@ -147,6 +148,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
} }
@ViewChildren(DashboardWidgetWrapper) private _widgets: QueryList<DashboardWidgetWrapper>; @ViewChildren(DashboardWidgetWrapper) private _widgets: QueryList<DashboardWidgetWrapper>;
@ViewChildren(WebviewContent) private _webViews: QueryList<WebviewContent>;
constructor( constructor(
@Inject(forwardRef(() => DashboardServiceInterface)) protected dashboardService: DashboardServiceInterface, @Inject(forwardRef(() => DashboardServiceInterface)) protected dashboardService: DashboardServiceInterface,
@Inject(forwardRef(() => ElementRef)) protected _el: ElementRef, @Inject(forwardRef(() => ElementRef)) protected _el: ElementRef,
@@ -158,7 +160,7 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
protected init() { protected init() {
} }
ngOnChanges() { ngOnInit() {
if (this.tab.container) { if (this.tab.container) {
this._contents = Object.values(this.tab.container)[0]; this._contents = Object.values(this.tab.container)[0];
this._contents.forEach(widget => { this._contents.forEach(widget => {
@@ -177,8 +179,6 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
}); });
this.rows = this.createIndexes(this._contents.map(w => w.row)); this.rows = this.createIndexes(this._contents.map(w => w.row));
this.cols = this.createIndexes(this._contents.map(w => w.col)); this.cols = this.createIndexes(this._contents.map(w => w.col));
this._cd.detectChanges();
} }
} }
@@ -205,6 +205,11 @@ export class DashboardGridContainer extends DashboardTab implements OnDestroy, O
item.layout(); item.layout();
}); });
} }
if (this._webViews) {
this._webViews.forEach(item => {
item.layout();
});
}
} }
public refresh(): void { public refresh(): void {

View File

@@ -163,6 +163,7 @@ export class DashboardNavSection extends DashboardTab implements OnDestroy, OnCh
public handleTabChange(tab: TabComponent): void { public handleTabChange(tab: TabComponent): void {
let localtab = this._tabs.find(i => i.id === tab.identifier); let localtab = this._tabs.find(i => i.id === tab.identifier);
this._cd.detectChanges();
localtab.layout(); localtab.layout();
} }
} }

View File

@@ -75,10 +75,46 @@ export function generateDashboardGridLayoutSchema(type?: 'database' | 'server',
type: 'object', type: 'object',
properties: { properties: {
name: { name: {
type: 'string' type: 'string',
description: localize('dashboardpage.tabName', "The title of the container")
}, },
icon: { row: {
type: 'string' type: 'number',
description: localize('dashboardpage.rowNumber', "The row of the component in the grid")
},
rowspan: {
type: 'string',
description: localize('dashboardpage.rowSpan', "The rowspan of the component in the grid. Default value is 1. Use '*' to set to number of rows in the grid.")
},
col: {
type: 'number',
description: localize('dashboardpage.colNumber', "The column of the component in the grid")
},
colspan: {
type: 'string',
description: localize('dashboardpage.colspan', "The colspan of the component in the grid. Default value is 1. Use '*' to set to number of columns in the grid.")
},
widget: {
anyOf: [
{
type: 'object',
properties: schemas,
minItems: 1,
maxItems: 1
}
]
},
webview: {
anyOf: [
{
type: 'object',
properties: {
id: {
type: 'string',
}
}
}
]
}, },
when: { when: {
description: localize('sqlops.extension.contributes.widget.when', 'Condition which must be true to show this item'), description: localize('sqlops.extension.contributes.widget.when', 'Condition which must be true to show this item'),