From 0cd242cd0ceb36fd3d56d0991e5bf021ad82f885 Mon Sep 17 00:00:00 2001 From: Charles Gagnon Date: Wed, 16 Sep 2020 16:25:41 -0700 Subject: [PATCH] Add "No instances available" node for empty arc controllers (#12374) --- extensions/arc/package.json | 2 +- extensions/arc/src/localizedConstants.ts | 1 + .../arc/src/ui/tree/controllerTreeNode.ts | 3 ++- .../arc/src/ui/tree/noInstancesTreeNode.ts | 18 ++++++++++++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 extensions/arc/src/ui/tree/noInstancesTreeNode.ts diff --git a/extensions/arc/package.json b/extensions/arc/package.json index 5be4b54acf..55e488c50a 100644 --- a/extensions/arc/package.json +++ b/extensions/arc/package.json @@ -96,7 +96,7 @@ "view/item/context": [ { "command": "arc.openDashboard", - "when": "view == azureArc && viewItem != postgresInstances", + "when": "view == azureArc && viewItem == sqlManagedInstances", "group": "navigation@1" }, { diff --git a/extensions/arc/src/localizedConstants.ts b/extensions/arc/src/localizedConstants.ts index 9253fe5768..534b3f58fb 100644 --- a/extensions/arc/src/localizedConstants.ts +++ b/extensions/arc/src/localizedConstants.ts @@ -72,6 +72,7 @@ export const direct = localize('arc.direct', "Direct"); export const indirect = localize('arc.indirect', "Indirect"); export const loading = localize('arc.loading', "Loading..."); export const refreshToEnterCredentials = localize('arc.refreshToEnterCredentials', "Refresh node to enter credentials"); +export const noInstancesAvailable = localize('arc.noInstancesAvailable', "No instances available"); export const connectToController = localize('arc.connectToController', "Connect to Existing Controller"); export function connectToSql(name: string): string { return localize('arc.connectToSql', "Connect to SQL instance - Azure Arc ({0})", name); } export const passwordToController = localize('arc.passwordToController', "Provide Password to Controller"); diff --git a/extensions/arc/src/ui/tree/controllerTreeNode.ts b/extensions/arc/src/ui/tree/controllerTreeNode.ts index 7a4c6cd75b..b4cbbdb9ef 100644 --- a/extensions/arc/src/ui/tree/controllerTreeNode.ts +++ b/extensions/arc/src/ui/tree/controllerTreeNode.ts @@ -13,6 +13,7 @@ import { PostgresModel } from '../../models/postgresModel'; import { ControllerDashboard } from '../dashboards/controller/controllerDashboard'; import { AzureArcTreeDataProvider } from './azureArcTreeDataProvider'; import { MiaaTreeNode } from './miaaTreeNode'; +import { NoInstancesTreeNode } from './noInstancesTreeNode'; import { PostgresTreeNode } from './postgresTreeNode'; import { RefreshTreeNode } from './refreshTreeNode'; import { ResourceTreeNode } from './resourceTreeNode'; @@ -55,7 +56,7 @@ export class ControllerTreeNode extends TreeNode { } } - return this._children; + return this._children.length > 0 ? this._children : [new NoInstancesTreeNode()]; } public async openDashboard(): Promise { diff --git a/extensions/arc/src/ui/tree/noInstancesTreeNode.ts b/extensions/arc/src/ui/tree/noInstancesTreeNode.ts new file mode 100644 index 0000000000..9fd44cf3dc --- /dev/null +++ b/extensions/arc/src/ui/tree/noInstancesTreeNode.ts @@ -0,0 +1,18 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the Source EULA. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as vscode from 'vscode'; +import * as loc from '../../localizedConstants'; +import { TreeNode } from './treeNode'; + +/** + * A placeholder TreeNode to display when there aren't any child instances available + */ +export class NoInstancesTreeNode extends TreeNode { + + constructor() { + super(loc.noInstancesAvailable, vscode.TreeItemCollapsibleState.None, 'noInstances'); + } +}