mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-17 02:51:36 -05:00
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:
@@ -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"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
@@ -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'
|
||||||
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user