mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
* Fix to enable two projects showing only their data even if opening together * Fixing a typo * Taking in PR comments
This commit is contained in:
@@ -23,7 +23,7 @@ export const DoNotShowAgain = localize('dataworkspace.doNotShowAgain', "Do not s
|
||||
export const ProjectsFailedToLoad = localize('dataworkspace.projectsFailedToLoad', "Some projects failed to load. Please open console for more information");
|
||||
export const fileDoesNotExist = (name: string): string => { return localize('fileDoesNotExist', "File '{0}' doesn't exist", name); };
|
||||
export const projectNameNull = localize('projectNameNull', "Project name is null");
|
||||
export const noPreviousData = (tableName: string): string => { return localize('noPreviousData', "Prior {0} will appear here, please run to see the results.", tableName); };
|
||||
export const noPreviousData = (tableName: string): string => { return localize('noPreviousData', "Prior {0} for the current project will appear here, please run to see the results.", tableName); };
|
||||
|
||||
// config settings
|
||||
export const projectsConfigurationKey = 'projects';
|
||||
|
||||
10
extensions/data-workspace/src/dataworkspace.d.ts
vendored
10
extensions/data-workspace/src/dataworkspace.d.ts
vendored
@@ -67,6 +67,11 @@ declare module 'dataworkspace' {
|
||||
*/
|
||||
createProject(name: string, location: vscode.Uri, projectTypeId: string): Promise<vscode.Uri>;
|
||||
|
||||
/**
|
||||
* Gets the project data corresponding to the project file, to be placed in the dashboard container
|
||||
*/
|
||||
getDashboardComponents(projectFile: string): IDashboardTable[];
|
||||
|
||||
/**
|
||||
* Gets the supported project types
|
||||
*/
|
||||
@@ -77,11 +82,6 @@ declare module 'dataworkspace' {
|
||||
*/
|
||||
readonly projectActions: (IProjectAction | IProjectActionGroup)[];
|
||||
|
||||
/**
|
||||
* Gets the project data to be placed in the dashboard container
|
||||
*/
|
||||
readonly dashboardComponents: IDashboardTable[];
|
||||
|
||||
/**
|
||||
* Gets the project image to be used as background in dashboard container
|
||||
*/
|
||||
|
||||
@@ -44,7 +44,7 @@ export class ProjectDashboard {
|
||||
await this.dashboard!.open();
|
||||
}
|
||||
|
||||
private async createDashboard(title: string, location: string): Promise<void> {
|
||||
private async createDashboard(title: string, projectFilePath: string): Promise<void> {
|
||||
this.dashboard = azdata.window.createModelViewDashboard(title, 'ProjectDashboard', { alwaysShowTabs: false });
|
||||
this.dashboard.registerTabs(async (modelView: azdata.ModelView) => {
|
||||
this.modelView = modelView;
|
||||
@@ -52,8 +52,8 @@ export class ProjectDashboard {
|
||||
this.overviewTab = {
|
||||
title: '',
|
||||
id: 'overview-tab',
|
||||
content: this.createContainer(title, location),
|
||||
toolbar: this.createToolbarContainer()
|
||||
content: this.createContainer(title, projectFilePath),
|
||||
toolbar: this.createToolbarContainer(projectFilePath)
|
||||
};
|
||||
return [
|
||||
this.overviewTab
|
||||
@@ -61,7 +61,7 @@ export class ProjectDashboard {
|
||||
});
|
||||
}
|
||||
|
||||
private createToolbarContainer(): azdata.ToolbarContainer {
|
||||
private createToolbarContainer(projectFilePath: string): azdata.ToolbarContainer {
|
||||
const projectActions: (IProjectAction | IProjectActionGroup)[] = this.projectProvider!.projectActions;
|
||||
|
||||
// Add actions as buttons
|
||||
@@ -92,7 +92,7 @@ export class ProjectDashboard {
|
||||
|
||||
refreshButton.onDidClick(() => {
|
||||
this.rootContainer?.removeItem(this.tableContainer!);
|
||||
this.tableContainer = this.createTables();
|
||||
this.tableContainer = this.createTables(projectFilePath);
|
||||
this.rootContainer?.addItem(this.tableContainer);
|
||||
});
|
||||
|
||||
@@ -123,7 +123,7 @@ export class ProjectDashboard {
|
||||
return button;
|
||||
}
|
||||
|
||||
private createContainer(title: string, location: string): azdata.FlexContainer {
|
||||
private createContainer(title: string, projectFilePath: string): azdata.FlexContainer {
|
||||
this.rootContainer = this.modelView!.modelBuilder.flexContainer().withLayout(
|
||||
{
|
||||
flexFlow: 'column',
|
||||
@@ -131,8 +131,8 @@ export class ProjectDashboard {
|
||||
height: '100%'
|
||||
}).component();
|
||||
|
||||
const headerContainer = this.createHeader(title, location);
|
||||
this.tableContainer = this.createTables();
|
||||
const headerContainer = this.createHeader(title, projectFilePath);
|
||||
this.tableContainer = this.createTables(projectFilePath);
|
||||
|
||||
this.rootContainer.addItem(headerContainer);
|
||||
this.rootContainer.addItem(this.tableContainer);
|
||||
@@ -188,8 +188,8 @@ export class ProjectDashboard {
|
||||
/**
|
||||
* Adds all the tables to the container
|
||||
*/
|
||||
private createTables(): azdata.Component {
|
||||
const dashboardData: IDashboardTable[] = this.projectProvider!.dashboardComponents;
|
||||
private createTables(projectFile: string): azdata.Component {
|
||||
const dashboardData: IDashboardTable[] = this.projectProvider!.getDashboardComponents(projectFile);
|
||||
|
||||
const tableContainer = this.modelView!.modelBuilder.flexContainer().withLayout(
|
||||
{
|
||||
|
||||
@@ -33,7 +33,9 @@ export function createProjectProvider(projectTypes: IProjectType[], projectActio
|
||||
return Promise.resolve(location);
|
||||
},
|
||||
projectActions: projectActions,
|
||||
dashboardComponents: dashboardComponents
|
||||
getDashboardComponents: (projectFile: string): IDashboardTable[] => {
|
||||
return dashboardComponents;
|
||||
}
|
||||
};
|
||||
return projectProvider;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { IProjectProvider, WorkspaceTreeItem } from 'dataworkspace';
|
||||
import { IDashboardTable, IProjectProvider, WorkspaceTreeItem } from 'dataworkspace';
|
||||
import 'mocha';
|
||||
import * as should from 'should';
|
||||
import * as sinon from 'sinon';
|
||||
@@ -111,7 +111,8 @@ suite('workspaceTreeDataProvider Tests', function (): void {
|
||||
id: 'Target Version',
|
||||
run: async (): Promise<any> => { return Promise.resolve(); }
|
||||
}],
|
||||
dashboardComponents: [{
|
||||
getDashboardComponents: (projectFile: string): IDashboardTable[] => {
|
||||
return [{
|
||||
name: 'Deployments',
|
||||
columns: [{ displayName: 'c1', width: 75, type: 'string' }],
|
||||
data: [['d1']]
|
||||
@@ -120,8 +121,8 @@ suite('workspaceTreeDataProvider Tests', function (): void {
|
||||
name: 'Builds',
|
||||
columns: [{ displayName: 'c1', width: 75, type: 'string' }],
|
||||
data: [['d1']]
|
||||
}]
|
||||
};
|
||||
}];
|
||||
}};
|
||||
const getProjectProviderStub = sinon.stub(workspaceService, 'getProjectProvider');
|
||||
getProjectProviderStub.onFirstCall().resolves(undefined);
|
||||
getProjectProviderStub.onSecondCall().resolves(projectProvider);
|
||||
|
||||
@@ -52,11 +52,12 @@ export class ProjectsController {
|
||||
this.buildHelper = new BuildHelper();
|
||||
}
|
||||
|
||||
public get dashboardDeployData(): (string | dataworkspace.IconCellValue)[][] {
|
||||
public getDashboardDeployData(projectFile: string): (string | dataworkspace.IconCellValue)[][] {
|
||||
const infoRows: (string | dataworkspace.IconCellValue)[][] = [];
|
||||
let count = 0;
|
||||
|
||||
for (let i = this.deployInfo.length - 1; i >= 0; i--) {
|
||||
if (this.deployInfo[i].projectFile === projectFile) {
|
||||
let icon: azdata.IconPath;
|
||||
let text: string;
|
||||
if (this.deployInfo[i].status === Status.success) {
|
||||
@@ -78,15 +79,17 @@ export class ProjectsController {
|
||||
infoRows.push(infoRow);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return infoRows;
|
||||
}
|
||||
|
||||
public get dashboardBuildData(): (string | dataworkspace.IconCellValue)[][] {
|
||||
public getDashboardBuildData(projectFile: string): (string | dataworkspace.IconCellValue)[][] {
|
||||
const infoRows: (string | dataworkspace.IconCellValue)[][] = [];
|
||||
let count = 0;
|
||||
|
||||
for (let i = this.buildInfo.length - 1; i >= 0; i--) {
|
||||
if (this.buildInfo[i].projectFile === projectFile) {
|
||||
let icon: azdata.IconPath;
|
||||
let text: string;
|
||||
if (this.buildInfo[i].status === Status.success) {
|
||||
@@ -108,6 +111,7 @@ export class ProjectsController {
|
||||
infoRows.push(infoRow);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
return infoRows;
|
||||
}
|
||||
@@ -176,7 +180,7 @@ export class ProjectsController {
|
||||
const startTime = new Date();
|
||||
const currentBuildTimeInfo = `${startTime.toLocaleDateString()} ${constants.at} ${startTime.toLocaleTimeString()}`;
|
||||
|
||||
let buildInfoNew = new DashboardData(Status.inProgress, project.getProjectTargetVersion(), currentBuildTimeInfo);
|
||||
let buildInfoNew = new DashboardData(project.projectFilePath, Status.inProgress, project.getProjectTargetVersion(), currentBuildTimeInfo);
|
||||
this.buildInfo.push(buildInfoNew);
|
||||
|
||||
if (this.buildInfo.length - 1 === maxTableLength) {
|
||||
@@ -276,7 +280,7 @@ export class ProjectsController {
|
||||
const actionStartTime = currentDate.getTime();
|
||||
const currentDeployTimeInfo = `${currentDate.toLocaleDateString()} ${constants.at} ${currentDate.toLocaleTimeString()}`;
|
||||
|
||||
let deployInfoNew = new DashboardData(Status.inProgress, project.getProjectTargetVersion(), currentDeployTimeInfo);
|
||||
let deployInfoNew = new DashboardData(project.projectFilePath, Status.inProgress, project.getProjectTargetVersion(), currentDeployTimeInfo);
|
||||
this.deployInfo.push(deployInfoNew);
|
||||
|
||||
if (this.deployInfo.length - 1 === maxTableLength) {
|
||||
|
||||
@@ -4,12 +4,14 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
export class DashboardData {
|
||||
public projectFile: string;
|
||||
public status: Status;
|
||||
public target: string;
|
||||
public timeToCompleteAction: string;
|
||||
public startDate: string;
|
||||
|
||||
constructor(status: Status, target: string, startDate: string) {
|
||||
constructor(projectFile: string, status: Status, target: string, startDate: string) {
|
||||
this.projectFile = projectFile;
|
||||
this.status = status;
|
||||
this.target = target;
|
||||
this.timeToCompleteAction = '';
|
||||
|
||||
@@ -128,7 +128,7 @@ export class SqlDatabaseProjectProvider implements dataworkspace.IProjectProvide
|
||||
/**
|
||||
* Gets the data to be displayed in the project dashboard
|
||||
*/
|
||||
get dashboardComponents(): dataworkspace.IDashboardTable[] {
|
||||
getDashboardComponents(projectFile: string): dataworkspace.IDashboardTable[] {
|
||||
const deployInfo: dataworkspace.IDashboardTable = {
|
||||
name: constants.Deployments,
|
||||
columns: [{ displayName: constants.ID, width: 100 },
|
||||
@@ -136,7 +136,7 @@ export class SqlDatabaseProjectProvider implements dataworkspace.IProjectProvide
|
||||
{ displayName: constants.Target, width: 250 },
|
||||
{ displayName: constants.Time, width: 250 },
|
||||
{ displayName: constants.Date, width: 250 }],
|
||||
data: this.projectController.dashboardDeployData
|
||||
data: this.projectController.getDashboardDeployData(projectFile)
|
||||
};
|
||||
|
||||
const buildInfo: dataworkspace.IDashboardTable = {
|
||||
@@ -146,7 +146,7 @@ export class SqlDatabaseProjectProvider implements dataworkspace.IProjectProvide
|
||||
{ displayName: constants.Target, width: 250 },
|
||||
{ displayName: constants.Time, width: 250 },
|
||||
{ displayName: constants.Date, width: 250 }],
|
||||
data: this.projectController.dashboardBuildData
|
||||
data: this.projectController.getDashboardBuildData(projectFile)
|
||||
};
|
||||
|
||||
return [deployInfo, buildInfo];
|
||||
|
||||
Reference in New Issue
Block a user