Scoping of project context menu items based on node type (#10902)

* Remove context menu items from files

* More changes for context menu and adding test

* change to initiate build
This commit is contained in:
Udeesha Gautam
2020-06-12 17:00:51 -07:00
committed by GitHub
parent 960aa14027
commit 70f65f45b5
8 changed files with 53 additions and 21 deletions

View File

@@ -174,62 +174,57 @@
"view/item/context": [ "view/item/context": [
{ {
"command": "sqlDatabaseProjects.build", "command": "sqlDatabaseProjects.build",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project",
"group": "1_dbProjectsFirst@1" "group": "1_dbProjectsFirst@1"
}, },
{ {
"command": "sqlDatabaseProjects.deploy", "command": "sqlDatabaseProjects.deploy",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project",
"group": "1_dbProjectsFirst@2" "group": "1_dbProjectsFirst@2"
}, },
{ {
"command": "sqlDatabaseProjects.schemaCompare", "command": "sqlDatabaseProjects.schemaCompare",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project",
"group": "1_dbProjectsFirst@3" "group": "1_dbProjectsFirst@3"
}, },
{ {
"command": "sqlDatabaseProjects.newItem", "command": "sqlDatabaseProjects.newItem",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project || viewItem == databaseProject.itemType.folder",
"group": "2_dbProjects_newMain@1" "group": "2_dbProjects_newMain@1"
}, },
{ {
"command": "sqlDatabaseProjects.newFolder", "command": "sqlDatabaseProjects.newFolder",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project || viewItem == databaseProject.itemType.folder",
"group": "2_dbProjects_newMain@2" "group": "2_dbProjects_newMain@2"
}, },
{ {
"command": "sqlDatabaseProjects.newTable", "command": "sqlDatabaseProjects.newTable",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project || viewItem == databaseProject.itemType.folder",
"group": "3_dbProjects_newItem@1" "group": "3_dbProjects_newItem@1"
}, },
{ {
"command": "sqlDatabaseProjects.newView", "command": "sqlDatabaseProjects.newView",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project || viewItem == databaseProject.itemType.folder",
"group": "3_dbProjects_newItem@2" "group": "3_dbProjects_newItem@2"
}, },
{ {
"command": "sqlDatabaseProjects.newStoredProcedure", "command": "sqlDatabaseProjects.newStoredProcedure",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project || viewItem == databaseProject.itemType.folder",
"group": "3_dbProjects_newItem@3" "group": "3_dbProjects_newItem@3"
}, },
{ {
"command": "sqlDatabaseProjects.newScript", "command": "sqlDatabaseProjects.newScript",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project || viewItem == databaseProject.itemType.folder",
"group": "3_dbProjects_newItem@9" "group": "3_dbProjects_newItem@9"
}, },
{ {
"command": "sqlDatabaseProjects.addDatabaseReference", "command": "sqlDatabaseProjects.addDatabaseReference",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.referencesRoot",
"group": "4_dbProjects_addDatabaseReference" "group": "4_dbProjects_addDatabaseReference"
}, },
{ {
"command": "sqlDatabaseProjects.close", "command": "sqlDatabaseProjects.close",
"when": "view == sqlDatabaseProjectsView", "when": "view == sqlDatabaseProjectsView && viewItem == databaseProject.itemType.project",
"group": "9_dbProjectsLast"
},
{
"command": "sqlDatabaseProjects.properties",
"when": "view == sqlDatabaseProjectsView",
"group": "9_dbProjectsLast" "group": "9_dbProjectsLast"
} }
], ],

View File

@@ -146,3 +146,14 @@ export const dataSourceSetting = 'Data Source';
export const integratedSecuritySetting = 'Integrated Security'; export const integratedSecuritySetting = 'Integrated Security';
export const userIdSetting = 'User ID'; export const userIdSetting = 'User ID';
export const passwordSetting = 'Password'; export const passwordSetting = 'Password';
// Tree item types
export enum DatabaseProjectItemType {
project = 'databaseProject.itemType.project',
folder = 'databaseProject.itemType.folder',
file = 'databaseProject.itemType.file',
referencesRoot = 'databaseProject.itemType.referencesRoot',
reference = 'databaseProject.itemType.reference',
dataSourceRoot = 'databaseProject.itemType.dataSourceRoot',
dataSource = 'databaseProject.itemType.dataSource'
}

View File

@@ -336,8 +336,10 @@ export class Project {
break; break;
case EntryType.Folder: case EntryType.Folder:
this.addFolderToProjFile(entry.relativePath); this.addFolderToProjFile(entry.relativePath);
break;
case EntryType.DatabaseReference: case EntryType.DatabaseReference:
this.addDatabaseReferenceToProjFile(<DatabaseReferenceProjectEntry>entry); this.addDatabaseReferenceToProjFile(<DatabaseReferenceProjectEntry>entry);
break; // not required but adding so that we dont miss when we add new items
} }
await this.serializeToProjFile(this.projFileXmlDoc); await this.serializeToProjFile(this.projFileXmlDoc);

View File

@@ -34,7 +34,9 @@ export class DataSourcesTreeItem extends BaseProjectTreeItem {
} }
public get treeItem(): vscode.TreeItem { public get treeItem(): vscode.TreeItem {
return new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Collapsed); const dataSource = new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Collapsed);
dataSource.contextValue = constants.DatabaseProjectItemType.dataSourceRoot;
return dataSource;
} }
} }

View File

@@ -32,6 +32,8 @@ export class DatabaseReferencesTreeItem extends BaseProjectTreeItem {
} }
public get treeItem(): vscode.TreeItem { public get treeItem(): vscode.TreeItem {
return new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Collapsed); const refFolderItem = new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Collapsed);
refFolderItem.contextValue = constants.DatabaseProjectItemType.referencesRoot;
return refFolderItem;
} }
} }

View File

@@ -8,6 +8,7 @@ import * as path from 'path';
import { BaseProjectTreeItem } from './baseTreeItem'; import { BaseProjectTreeItem } from './baseTreeItem';
import { ProjectRootTreeItem } from './projectTreeItem'; import { ProjectRootTreeItem } from './projectTreeItem';
import { Project } from '../project'; import { Project } from '../project';
import { DatabaseProjectItemType } from '../../common/constants';
/** /**
* Node representing a folder in a project * Node representing a folder in a project
@@ -26,7 +27,9 @@ export class FolderNode extends BaseProjectTreeItem {
} }
public get treeItem(): vscode.TreeItem { public get treeItem(): vscode.TreeItem {
return new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Expanded); const folderItem = new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Expanded);
folderItem.contextValue = DatabaseProjectItemType.folder;
return folderItem;
} }
public get project(): Project { public get project(): Project {
@@ -58,7 +61,7 @@ export class FileNode extends BaseProjectTreeItem {
arguments: [this.fileSystemUri] arguments: [this.fileSystemUri]
}; };
treeItem.contextValue = 'File'; treeItem.contextValue = DatabaseProjectItemType.file;
return treeItem; return treeItem;
} }

View File

@@ -11,6 +11,7 @@ import * as fileTree from './fileFolderTreeItem';
import { Project, ProjectEntry, EntryType } from '../project'; import { Project, ProjectEntry, EntryType } from '../project';
import * as utils from '../../common/utils'; import * as utils from '../../common/utils';
import { DatabaseReferencesTreeItem } from './databaseReferencesTreeItem'; import { DatabaseReferencesTreeItem } from './databaseReferencesTreeItem';
import { DatabaseProjectItemType } from '../../common/constants';
/** /**
* TreeNode root that represents an entire project * TreeNode root that represents an entire project
@@ -40,7 +41,9 @@ export class ProjectRootTreeItem extends BaseProjectTreeItem {
} }
public get treeItem(): vscode.TreeItem { public get treeItem(): vscode.TreeItem {
return new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Expanded); const projectItem = new vscode.TreeItem(this.uri, vscode.TreeItemCollapsibleState.Expanded);
projectItem.contextValue = DatabaseProjectItemType.project;
return projectItem;
} }
/** /**

View File

@@ -11,6 +11,7 @@ import * as path from 'path';
import { Project, EntryType } from '../models/project'; import { Project, EntryType } from '../models/project';
import { FolderNode, FileNode, sortFileFolderNodes } from '../models/tree/fileFolderTreeItem'; import { FolderNode, FileNode, sortFileFolderNodes } from '../models/tree/fileFolderTreeItem';
import { ProjectRootTreeItem } from '../models/tree/projectTreeItem'; import { ProjectRootTreeItem } from '../models/tree/projectTreeItem';
import { DatabaseProjectItemType } from '../common/constants';
describe('Project Tree tests', function (): void { describe('Project Tree tests', function (): void {
it('Should correctly order tree nodes by type, then by name', async function (): Promise<void> { it('Should correctly order tree nodes by type, then by name', async function (): Promise<void> {
@@ -78,5 +79,18 @@ describe('Project Tree tests', function (): void {
'/TestProj.sqlproj/someFolder/bNestedFolder', '/TestProj.sqlproj/someFolder/bNestedFolder',
'/TestProj.sqlproj/someFolder/aNestedTest.sql', '/TestProj.sqlproj/someFolder/aNestedTest.sql',
'/TestProj.sqlproj/someFolder/bNestedTest.sql']); '/TestProj.sqlproj/someFolder/bNestedTest.sql']);
should(tree.children.map(x => x.treeItem.contextValue)).deepEqual([
DatabaseProjectItemType.dataSourceRoot,
DatabaseProjectItemType.referencesRoot,
DatabaseProjectItemType.folder,
DatabaseProjectItemType.folder,
DatabaseProjectItemType.file]);
should(tree.children.find(x => x.uri.path === '/TestProj.sqlproj/someFolder')?.children.map(y => y.treeItem.contextValue)).deepEqual([
DatabaseProjectItemType.folder,
DatabaseProjectItemType.folder,
DatabaseProjectItemType.file,
DatabaseProjectItemType.file]);
}); });
}); });