diff --git a/package.json b/package.json index 38ba9dcca..d3af489fd 100644 --- a/package.json +++ b/package.json @@ -695,6 +695,21 @@ "default": true, "description": "Show or hide the Cosmos DB Explorer" }, + "cosmosDB.documentLabelFields": { + "type": "array", + "default": [ + "name", + "Name", + "NAME", + "ID", + "UUID", + "Id", + "id", + "_id", + "uuid" + ], + "description": "The field values to display as labels in the treeview for Cosmos DB and MongoDB documents, in priority order" + }, "cosmosDB.showSavePrompt": { "type": "boolean", "default": true, diff --git a/src/constants.ts b/src/constants.ts index 21e3b9b09..767510a45 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -34,5 +34,3 @@ export const defaultStoredProcedure = };` ; export const emptyPartitionKeyValue = {}; - -export const documentLabelFields = ["name", "Name", "NAME", "ID", "UUID", "Id", "id", "_id", "uuid"]; diff --git a/src/docdb/tree/DocDBDocumentsTreeItem.ts b/src/docdb/tree/DocDBDocumentsTreeItem.ts index ba6007c16..bf2bacee5 100644 --- a/src/docdb/tree/DocDBDocumentsTreeItem.ts +++ b/src/docdb/tree/DocDBDocumentsTreeItem.ts @@ -11,8 +11,6 @@ import { IAzureTreeItem, UserCancelledError, IAzureNode } from 'vscode-azureexte import { DocDBDocumentTreeItem } from './DocDBDocumentTreeItem'; import { DocDBCollectionTreeItem } from './DocDBCollectionTreeItem'; -// NOTE: This node not used until viewing/editor stored procedures is implemented - /** * This class provides logic for DocumentDB collections */ diff --git a/src/extension.ts b/src/extension.ts index 4d1d42d83..5b8f8d571 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -27,6 +27,7 @@ import { DocDBAccountTreeItemBase } from './docdb/tree/DocDBAccountTreeItemBase' import { GraphAccountTreeItem } from './graph/tree/GraphAccountTreeItem'; import { DocDBAccountTreeItem } from './docdb/tree/DocDBAccountTreeItem'; import { TableAccountTreeItem } from './table/tree/TableAccountTreeItem'; +import { ext } from './extensionVariables'; export function activate(context: vscode.ExtensionContext) { context.subscriptions.push(new Reporter(context)); @@ -114,8 +115,21 @@ export function activate(context: vscode.ExtensionContext) { }); actionHandler.registerCommand('cosmosDB.update', (filePath: vscode.Uri) => editorManager.updateMatchingNode(filePath, tree)); actionHandler.registerCommand('cosmosDB.loadMore', (node?: IAzureNode) => tree.loadMore(node)); - actionHandler.registerEvent('cosmosDB.CosmosEditorManager.onDidSaveTextDocument', vscode.workspace.onDidSaveTextDocument, async function - (this: IActionContext, doc: vscode.TextDocument): Promise { await editorManager.onDidSaveTextDocument(this, doc, tree); }); + actionHandler.registerEvent('cosmosDB.CosmosEditorManager.onDidSaveTextDocument', vscode.workspace.onDidSaveTextDocument, async function ( + this: IActionContext, doc: vscode.TextDocument): Promise { + await editorManager.onDidSaveTextDocument(this, doc, tree); + }); + actionHandler.registerEvent( + 'cosmosDB.onDidChangeConfiguration', + vscode.workspace.onDidChangeConfiguration, + async function + (this: IActionContext, event: vscode.ConfigurationChangeEvent): Promise { + this.properties.isActivationEvent = "true"; + this.suppressErrorDisplay = true; + if (event.affectsConfiguration(ext.settingsKeys.documentLabelFields)) { + await vscode.commands.executeCommand("cosmosDB.refresh"); + } + }); } async function getAttachedNode(tree: AzureTreeDataProvider): Promise> { diff --git a/src/extensionVariables.ts b/src/extensionVariables.ts index 812cf37cc..6024560d0 100644 --- a/src/extensionVariables.ts +++ b/src/extensionVariables.ts @@ -13,6 +13,7 @@ export namespace ext { export namespace settingsKeys { export const mongoShellPath = 'mongo.shell.path'; + export const documentLabelFields = 'cosmosDB.documentLabelFields'; export namespace vsCode { export const proxyStrictSSL = "http.proxyStrictSSL"; diff --git a/src/utils/vscodeUtils.ts b/src/utils/vscodeUtils.ts index bec6a7b86..057cf6828 100644 --- a/src/utils/vscodeUtils.ts +++ b/src/utils/vscodeUtils.ts @@ -11,7 +11,7 @@ import { MongoAccountTreeItem } from '../mongo/tree/MongoAccountTreeItem'; import { DocDBAccountTreeItemBase } from '../docdb/tree/DocDBAccountTreeItemBase'; import { IMongoDocument } from '../mongo/tree/MongoDocumentTreeItem'; import { RetrievedDocument } from 'documentdb'; -import { documentLabelFields } from '../constants'; +import { ext } from '../extensionVariables'; const outputChannel = vscode.window.createOutputChannel("Azure CosmosDB"); @@ -107,7 +107,7 @@ function isAccountTreeItem(treeItem: IAzureTreeItem): boolean { } export function getDocumentTreeItemLabel(document: IMongoDocument | RetrievedDocument): string { - for (let field of documentLabelFields) { + for (let field of getDocumentLabelFields()) { if (document.hasOwnProperty(field)) { let value = document[field]; if (value !== undefined && typeof value !== 'object') { @@ -117,3 +117,9 @@ export function getDocumentTreeItemLabel(document: IMongoDocument | RetrievedDoc } return String(document["_id"]); } + +function getDocumentLabelFields(): string[] { + const settingKey: string = ext.settingsKeys.documentLabelFields; + let documentLabelFields: string[] | undefined = vscode.workspace.getConfiguration().get(settingKey) || []; + return documentLabelFields; +}