diff --git a/package.json b/package.json
index 3b4bd999c..8766c4512 100644
--- a/package.json
+++ b/package.json
@@ -220,23 +220,23 @@
},
{
"command": "containerApps.chooseRevisionMode",
- "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionmode:single|revisions$/i",
- "group": "2@4"
+ "when": "view =~ /(azureResourceGroups|azureFocusView)/ && (viewItem =~ /revisionItem(.*)revisionMode:single/i || viewItem =~ /revisionsItem/i)",
+ "group": "2@1"
},
{
"command": "containerApps.activateRevision",
- "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionmode:single|^inactive;revision[^a-z]/i",
- "group": "2@1"
+ "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionItem(.*)revisionMode:multiple(.*)revisionState:inactive/i",
+ "group": "2@2"
},
{
"command": "containerApps.deactivateRevision",
- "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionmode:single|^active;revision[^a-z]/i",
- "group": "2@2"
+ "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionItem(.*)revisionMode:multiple(.*)revisionState:active/i",
+ "group": "2@3"
},
{
"command": "containerApps.restartRevision",
- "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionmode:single|^active;revision[^a-z]/i",
- "group": "2@3"
+ "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionItem(.*)revisionState:active/i",
+ "group": "2@4"
},
{
"command": "containerApps.disableIngress",
diff --git a/resources/02889-icon-menu-Container-Revision-Management.svg b/resources/02889-icon-menu-Container-Revision-Management.svg
new file mode 100644
index 000000000..c14671a8e
--- /dev/null
+++ b/resources/02889-icon-menu-Container-Revision-Management.svg
@@ -0,0 +1,29 @@
+
diff --git a/src/commands/ingress/editTargetPort/editTargetPort.ts b/src/commands/ingress/editTargetPort/editTargetPort.ts
index fed253e2b..d600132ac 100644
--- a/src/commands/ingress/editTargetPort/editTargetPort.ts
+++ b/src/commands/ingress/editTargetPort/editTargetPort.ts
@@ -4,8 +4,8 @@
*--------------------------------------------------------------------------------------------*/
import { AzureWizard, AzureWizardExecuteStep, AzureWizardPromptStep, createSubscriptionContext, IActionContext } from "@microsoft/vscode-azext-utils";
+import { IngressItem } from "../../../tree/configurations/IngressItem";
import type { ContainerAppItem } from "../../../tree/ContainerAppItem";
-import { IngressItem } from "../../../tree/IngressItem";
import { createActivityContext } from "../../../utils/activityUtils";
import { localize } from "../../../utils/localize";
import { pickContainerApp } from "../../../utils/pickContainerApp";
diff --git a/src/commands/ingress/toggleIngressVisibility/toggleIngressVisibility.ts b/src/commands/ingress/toggleIngressVisibility/toggleIngressVisibility.ts
index 426b5b463..b5f411e52 100644
--- a/src/commands/ingress/toggleIngressVisibility/toggleIngressVisibility.ts
+++ b/src/commands/ingress/toggleIngressVisibility/toggleIngressVisibility.ts
@@ -2,7 +2,7 @@ import type { Ingress } from "@azure/arm-appcontainers";
import { AzureWizard, AzureWizardExecuteStep, IActionContext, createSubscriptionContext, nonNullValueAndProp } from "@microsoft/vscode-azext-utils";
import { IngressConstants } from "../../../constants";
import type { ContainerAppItem } from "../../../tree/ContainerAppItem";
-import type { IngressItem } from "../../../tree/IngressItem";
+import type { IngressItem } from "../../../tree/configurations/IngressItem";
import { createActivityContext } from "../../../utils/activityUtils";
import { localize } from "../../../utils/localize";
import { pickContainerApp } from "../../../utils/pickContainerApp";
diff --git a/src/commands/registerCommands.ts b/src/commands/registerCommands.ts
index d88648806..f2cadf0a4 100644
--- a/src/commands/registerCommands.ts
+++ b/src/commands/registerCommands.ts
@@ -5,7 +5,6 @@
import { registerCommandWithTreeNodeUnwrapping, registerErrorHandler, registerReportIssueCommand } from '@microsoft/vscode-azext-utils';
import { browseContainerAppNode } from './browseContainerApp';
-import { chooseRevisionMode } from './chooseRevisionMode';
import { createContainerApp } from './createContainerApp/createContainerApp';
import { createManagedEnvironment } from './createManagedEnvironment/createManagedEnvironment';
import { deleteContainerApp } from './deleteContainerApp/deleteContainerApp';
@@ -22,9 +21,10 @@ import { toggleIngressVisibility } from './ingress/toggleIngressVisibility/toggl
import { startStreamingLogs } from './logStream/startStreamingLogs';
import { stopStreamingLogs } from './logStream/stopStreamingLogs';
import { openConsoleInPortal } from './openConsoleInPortal';
-import { activateRevision } from './revisionCommands/activateRevision';
-import { deactivateRevision } from './revisionCommands/deactivateRevision';
-import { restartRevision } from './revisionCommands/restartRevision';
+import { activateRevision } from './revision/activateRevision';
+import { chooseRevisionMode } from './revision/chooseRevisionMode';
+import { deactivateRevision } from './revision/deactivateRevision';
+import { restartRevision } from './revision/restartRevision';
import { addScaleRule } from './scaling/addScaleRule/addScaleRule';
import { editScalingRange } from './scaling/editScalingRange';
diff --git a/src/commands/revisionCommands/activateRevision.ts b/src/commands/revision/activateRevision.ts
similarity index 70%
rename from src/commands/revisionCommands/activateRevision.ts
rename to src/commands/revision/activateRevision.ts
index 8f76470ac..af0317d42 100644
--- a/src/commands/revisionCommands/activateRevision.ts
+++ b/src/commands/revision/activateRevision.ts
@@ -3,11 +3,10 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { IActionContext } from "@microsoft/vscode-azext-utils";
-import { ContainerAppItem } from "../../tree/ContainerAppItem";
-import { RevisionItem } from "../../tree/RevisionItem";
+import type { IActionContext } from "@microsoft/vscode-azext-utils";
+import type { RevisionItem } from "../../tree/revisionManagement/RevisionItem";
import { executeRevisionOperation } from "./changeRevisionActiveState";
-export function activateRevision(context: IActionContext, node?: ContainerAppItem | RevisionItem): Promise {
+export function activateRevision(context: IActionContext, node?: RevisionItem): Promise {
return executeRevisionOperation(context, node, 'activateRevision');
}
diff --git a/src/commands/revisionCommands/changeRevisionActiveState.ts b/src/commands/revision/changeRevisionActiveState.ts
similarity index 89%
rename from src/commands/revisionCommands/changeRevisionActiveState.ts
rename to src/commands/revision/changeRevisionActiveState.ts
index de64cfbc5..049639451 100644
--- a/src/commands/revisionCommands/changeRevisionActiveState.ts
+++ b/src/commands/revision/changeRevisionActiveState.ts
@@ -6,13 +6,12 @@
import { ContainerAppsAPIClient } from "@azure/arm-appcontainers";
import { IActionContext, nonNullProp } from "@microsoft/vscode-azext-utils";
import { ext } from "../../extensionVariables";
-import { ContainerAppItem } from "../../tree/ContainerAppItem";
-import { RevisionItem } from "../../tree/RevisionItem";
+import { RevisionItem } from "../../tree/revisionManagement/RevisionItem";
import { createContainerAppsClient } from "../../utils/azureClients";
import { localize } from "../../utils/localize";
import { pickContainerApp } from "../../utils/pickContainerApp";
-export async function executeRevisionOperation(context: IActionContext, node: ContainerAppItem | RevisionItem | undefined, operation: RevisionOperation): Promise {
+export async function executeRevisionOperation(context: IActionContext, node: RevisionItem | undefined, operation: RevisionOperation): Promise {
const item = node ?? await pickContainerApp(context);
await ext.state.runWithTemporaryDescription(item.id, revisionOperationDescriptions[operation], async () => {
diff --git a/src/commands/chooseRevisionMode.ts b/src/commands/revision/chooseRevisionMode.ts
similarity index 84%
rename from src/commands/chooseRevisionMode.ts
rename to src/commands/revision/chooseRevisionMode.ts
index e1cab82bc..a50df21b5 100644
--- a/src/commands/chooseRevisionMode.ts
+++ b/src/commands/revision/chooseRevisionMode.ts
@@ -4,16 +4,16 @@
*--------------------------------------------------------------------------------------------*/
import { KnownActiveRevisionsMode } from "@azure/arm-appcontainers";
-import { IActionContext, IAzureQuickPickItem } from "@microsoft/vscode-azext-utils";
+import type { IActionContext, IAzureQuickPickItem } from "@microsoft/vscode-azext-utils";
import { ProgressLocation, window } from "vscode";
-import { ext } from "../extensionVariables";
-import { ContainerAppModel } from "../tree/ContainerAppItem";
-import { ContainerAppsItem } from "../tree/ContainerAppsBranchDataProvider";
-import { localize } from "../utils/localize";
-import { pickContainerApp } from "../utils/pickContainerApp";
-import { updateContainerApp } from "./deployContainerApp/updateContainerApp";
-
-export async function chooseRevisionMode(context: IActionContext, node?: ContainerAppsItem): Promise {
+import { ext } from "../../extensionVariables";
+import type { ContainerAppModel } from "../../tree/ContainerAppItem";
+import type { RevisionsItem } from "../../tree/revisionManagement/RevisionsItem";
+import { localize } from "../../utils/localize";
+import { pickContainerApp } from "../../utils/pickContainerApp";
+import { updateContainerApp } from "../deployContainerApp/updateContainerApp";
+
+export async function chooseRevisionMode(context: IActionContext, node?: RevisionsItem): Promise {
const { subscription, containerApp } = node ?? await pickContainerApp(context);
const pickedRevisionMode = await pickRevisionsMode(context, containerApp);
diff --git a/src/commands/revisionCommands/deactivateRevision.ts b/src/commands/revision/deactivateRevision.ts
similarity index 78%
rename from src/commands/revisionCommands/deactivateRevision.ts
rename to src/commands/revision/deactivateRevision.ts
index a6ebb9f76..547289cb6 100644
--- a/src/commands/revisionCommands/deactivateRevision.ts
+++ b/src/commands/revision/deactivateRevision.ts
@@ -4,10 +4,9 @@
*--------------------------------------------------------------------------------------------*/
import { IActionContext } from "@microsoft/vscode-azext-utils";
-import { ContainerAppItem } from "../../tree/ContainerAppItem";
-import { RevisionItem } from "../../tree/RevisionItem";
+import { RevisionItem } from "../../tree/revisionManagement/RevisionItem";
import { executeRevisionOperation } from "./changeRevisionActiveState";
-export function deactivateRevision(context: IActionContext, node?: ContainerAppItem | RevisionItem): Promise {
+export function deactivateRevision(context: IActionContext, node?: RevisionItem): Promise {
return executeRevisionOperation(context, node, 'deactivateRevision');
}
diff --git a/src/commands/revisionCommands/restartRevision.ts b/src/commands/revision/restartRevision.ts
similarity index 78%
rename from src/commands/revisionCommands/restartRevision.ts
rename to src/commands/revision/restartRevision.ts
index 85905e779..15c56a653 100644
--- a/src/commands/revisionCommands/restartRevision.ts
+++ b/src/commands/revision/restartRevision.ts
@@ -4,10 +4,9 @@
*--------------------------------------------------------------------------------------------*/
import { IActionContext } from "@microsoft/vscode-azext-utils";
-import { ContainerAppItem } from "../../tree/ContainerAppItem";
-import { RevisionItem } from "../../tree/RevisionItem";
+import { RevisionItem } from "../../tree/revisionManagement/RevisionItem";
import { executeRevisionOperation } from "./changeRevisionActiveState";
-export function restartRevision(context: IActionContext, node?: ContainerAppItem | RevisionItem): Promise {
+export function restartRevision(context: IActionContext, node?: RevisionItem): Promise {
return executeRevisionOperation(context, node, 'restartRevision');
}
diff --git a/src/tree/ContainerAppItem.ts b/src/tree/ContainerAppItem.ts
index c933e7666..f7f4b8380 100644
--- a/src/tree/ContainerAppItem.ts
+++ b/src/tree/ContainerAppItem.ts
@@ -16,11 +16,11 @@ import { createContainerAppsAPIClient, createContainerAppsClient } from "../util
import { createPortalUrl } from "../utils/createPortalUrl";
import { localize } from "../utils/localize";
import { treeUtils } from "../utils/treeUtils";
-import { ConfigurationItem } from "./ConfigurationItem";
import { ContainerAppsItem, TreeElementBase } from "./ContainerAppsBranchDataProvider";
import { LogsItem } from "./LogsItem";
-import { RevisionItem } from "./RevisionItem";
-import { RevisionsItem } from "./RevisionsItem";
+import { ConfigurationItem } from "./configurations/ConfigurationItem";
+import { RevisionItem } from "./revisionManagement/RevisionItem";
+import { RevisionsItem } from "./revisionManagement/RevisionsItem";
export interface ContainerAppModel extends ContainerApp {
id: string;
diff --git a/src/tree/ConfigurationItem.ts b/src/tree/configurations/ConfigurationItem.ts
similarity index 73%
rename from src/tree/ConfigurationItem.ts
rename to src/tree/configurations/ConfigurationItem.ts
index cff56fa7d..1c2eae58c 100644
--- a/src/tree/ConfigurationItem.ts
+++ b/src/tree/configurations/ConfigurationItem.ts
@@ -3,15 +3,17 @@
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { callWithTelemetryAndErrorHandling } from "@microsoft/vscode-azext-utils";
-import { AzureSubscription } from "@microsoft/vscode-azureresources-api";
+import { callWithTelemetryAndErrorHandling, nonNullProp } from "@microsoft/vscode-azext-utils";
+import { AzureSubscription, ViewPropertiesModel } from "@microsoft/vscode-azureresources-api";
import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode";
-import { localize } from "../utils/localize";
-import { ContainerAppModel } from "./ContainerAppItem";
-import { ContainerAppsItem, TreeElementBase } from "./ContainerAppsBranchDataProvider";
+import { localize } from "../../utils/localize";
+import { ContainerAppModel } from "../ContainerAppItem";
+import { ContainerAppsItem, TreeElementBase } from "../ContainerAppsBranchDataProvider";
+import { ActionsTreeItem } from "../gitHub/ActionsTreeItem";
import { DaprEnabledItem, createDaprDisabledItem } from "./DaprItem";
import { IngressDisabledItem, IngressItem } from "./IngressItem";
-import { ActionsTreeItem } from "./gitHub/ActionsTreeItem";
+
+const configuration: string = localize('configuration', 'Configuration');
export class ConfigurationItem implements ContainerAppsItem {
id: string;
@@ -21,6 +23,11 @@ export class ConfigurationItem implements ContainerAppsItem {
this.id = `${containerApp.id}/Configurations`;
}
+ viewProperties: ViewPropertiesModel = {
+ data: nonNullProp(this.containerApp, 'configuration'),
+ label: `${this.containerApp.name} ${configuration}`,
+ }
+
async getChildren(): Promise {
const result = await callWithTelemetryAndErrorHandling('getChildren', async (_context) => {
const children: TreeElementBase[] = [];
diff --git a/src/tree/DaprItem.ts b/src/tree/configurations/DaprItem.ts
similarity index 92%
rename from src/tree/DaprItem.ts
rename to src/tree/configurations/DaprItem.ts
index 2d52f741c..d64a421fb 100644
--- a/src/tree/DaprItem.ts
+++ b/src/tree/configurations/DaprItem.ts
@@ -7,10 +7,10 @@ import { ContainerApp, Dapr } from "@azure/arm-appcontainers";
import { createGenericElement } from "@microsoft/vscode-azext-utils";
import { ViewPropertiesModel } from "@microsoft/vscode-azureresources-api";
import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode";
-import { localize } from "../utils/localize";
-import { treeUtils } from "../utils/treeUtils";
-import { ContainerAppModel } from "./ContainerAppItem";
-import { TreeElementBase } from "./ContainerAppsBranchDataProvider";
+import { localize } from "../../utils/localize";
+import { treeUtils } from "../../utils/treeUtils";
+import { ContainerAppModel } from "../ContainerAppItem";
+import { TreeElementBase } from "../ContainerAppsBranchDataProvider";
export class DaprEnabledItem implements TreeElementBase {
diff --git a/src/tree/IngressItem.ts b/src/tree/configurations/IngressItem.ts
similarity index 91%
rename from src/tree/IngressItem.ts
rename to src/tree/configurations/IngressItem.ts
index b33729e5a..ebc357c18 100644
--- a/src/tree/IngressItem.ts
+++ b/src/tree/configurations/IngressItem.ts
@@ -7,11 +7,11 @@ import { ContainerApp, Ingress } from "@azure/arm-appcontainers";
import { createGenericElement } from "@microsoft/vscode-azext-utils";
import { AzureSubscription, ViewPropertiesModel } from "@microsoft/vscode-azureresources-api";
import { ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode";
-import { IngressConstants, azResourceContextValue } from "../constants";
-import { localize } from "../utils/localize";
-import { treeUtils } from "../utils/treeUtils";
-import { ContainerAppModel } from "./ContainerAppItem";
-import { ContainerAppsItem, TreeElementBase } from "./ContainerAppsBranchDataProvider";
+import { IngressConstants, azResourceContextValue } from "../../constants";
+import { localize } from "../../utils/localize";
+import { treeUtils } from "../../utils/treeUtils";
+import { ContainerAppModel } from "../ContainerAppItem";
+import { ContainerAppsItem, TreeElementBase } from "../ContainerAppsBranchDataProvider";
const label: string = localize('ingress', 'Ingress');
diff --git a/src/tree/RevisionItem.ts b/src/tree/revisionManagement/RevisionItem.ts
similarity index 62%
rename from src/tree/RevisionItem.ts
rename to src/tree/revisionManagement/RevisionItem.ts
index 1ebef11f1..70042765b 100644
--- a/src/tree/RevisionItem.ts
+++ b/src/tree/revisionManagement/RevisionItem.ts
@@ -5,43 +5,58 @@
import { KnownActiveRevisionsMode, KnownRevisionProvisioningState, Revision } from "@azure/arm-appcontainers";
import { TreeItemIconPath, createContextValue, nonNullProp } from "@microsoft/vscode-azext-utils";
-import { AzureSubscription, ViewPropertiesModel } from "@microsoft/vscode-azureresources-api";
+import type { AzureSubscription, ViewPropertiesModel } from "@microsoft/vscode-azureresources-api";
import { ThemeColor, ThemeIcon, TreeItem, TreeItemCollapsibleState } from "vscode";
-import { localize } from "../utils/localize";
-import { treeUtils } from "../utils/treeUtils";
-import { ContainerAppModel } from "./ContainerAppItem";
-import { ContainerAppsItem, TreeElementBase } from "./ContainerAppsBranchDataProvider";
-import { ScaleItem } from "./scaling/ScaleItem";
+import { localize } from "../../utils/localize";
+import { treeUtils } from "../../utils/treeUtils";
+import type { ContainerAppModel } from "../ContainerAppItem";
+import type { ContainerAppsItem, TreeElementBase } from "../ContainerAppsBranchDataProvider";
+import { ScaleItem } from "../scaling/ScaleItem";
export interface RevisionsItemModel extends ContainerAppsItem {
revision: Revision;
}
export class RevisionItem implements RevisionsItemModel {
+ static contextValue: string = 'revisionItem';
+ static contextValueRegExp: RegExp = new RegExp(RevisionItem.contextValue);
+
id: string;
revisionsMode: KnownActiveRevisionsMode;
- constructor(public readonly subscription: AzureSubscription, public readonly containerApp: ContainerAppModel, public readonly revision: Revision) {
+ constructor(readonly subscription: AzureSubscription, readonly containerApp: ContainerAppModel, readonly revision: Revision) {
this.id = nonNullProp(this.revision, 'id');
this.revisionsMode = containerApp.revisionsMode;
}
+ get contextValue(): string {
+ const values: string[] = [RevisionItem.contextValue];
+
+ values.push(this.revision.active ? 'revisionState:active' : 'revisionState:inactive');
+ // values.push(ext.revisionDraftFileSystem.doesContainerAppsItemHaveRevisionDraft(this) ? 'revisionDraft:true' : 'revisionDraft:false');
+ values.push(this.revisionsMode === KnownActiveRevisionsMode.Single ? 'revisionMode:single' : 'revisionMode:multiple');
+
+ return createContextValue(values);
+ }
+
get description(): string | undefined {
- if (this.revisionsMode === KnownActiveRevisionsMode.Multiple) {
- if (!this.revision.active) {
- return localize('inactive', 'Inactive');
- } else if (this.revision.name === this.containerApp.latestRevisionName) {
- return localize('latest', 'Latest');
- }
+ if (this.revisionsMode === KnownActiveRevisionsMode.Single) {
+ return undefined;
}
- return undefined;
+ if (!this.revision.active) {
+ return localize('inactive', 'Inactive');
+ } else if (this.revision.name === this.containerApp.latestRevisionName) {
+ return localize('latest', 'Latest');
+ } else {
+ return localize('active', 'Active');
+ }
}
viewProperties: ViewPropertiesModel = {
data: this.revision,
label: nonNullProp(this.revision, 'name'),
- }
+ };
async getChildren(): Promise {
return [new ScaleItem(this.subscription, this.containerApp, this.revision)];
@@ -50,12 +65,12 @@ export class RevisionItem implements RevisionsItemModel {
getTreeItem(): TreeItem {
return {
id: this.id,
- label: this.revision.name,
+ label: this.revisionsMode === KnownActiveRevisionsMode.Single ? 'Latest' : this.revision.name,
iconPath: this.iconPath,
description: this.description,
- contextValue: createContextValue([`${this.revision.active ? 'active' : 'inactive'}`, 'revision']),
+ contextValue: this.contextValue,
collapsibleState: TreeItemCollapsibleState.Collapsed,
- }
+ };
}
private get iconPath(): TreeItemIconPath {
diff --git a/src/tree/RevisionsItem.ts b/src/tree/revisionManagement/RevisionsItem.ts
similarity index 58%
rename from src/tree/RevisionsItem.ts
rename to src/tree/revisionManagement/RevisionsItem.ts
index 2234b6679..4e353b84d 100644
--- a/src/tree/RevisionsItem.ts
+++ b/src/tree/revisionManagement/RevisionsItem.ts
@@ -4,29 +4,37 @@
*--------------------------------------------------------------------------------------------*/
import { uiUtils } from "@microsoft/vscode-azext-azureutils";
-import { callWithTelemetryAndErrorHandling, createSubscriptionContext } from "@microsoft/vscode-azext-utils";
-import { AzureSubscription } from "@microsoft/vscode-azureresources-api";
+import { TreeElementBase, callWithTelemetryAndErrorHandling, createContextValue, createSubscriptionContext } from "@microsoft/vscode-azext-utils";
+import type { AzureSubscription } from "@microsoft/vscode-azureresources-api";
import { TreeItem, TreeItemCollapsibleState } from "vscode";
-import { createContainerAppsAPIClient } from "../utils/azureClients";
-import { localize } from "../utils/localize";
-import { treeUtils } from "../utils/treeUtils";
-import { ContainerAppModel } from "./ContainerAppItem";
-import { ContainerAppsItem, TreeElementBase } from "./ContainerAppsBranchDataProvider";
+import { createContainerAppsAPIClient } from "../../utils/azureClients";
+import { localize } from "../../utils/localize";
+import { treeUtils } from "../../utils/treeUtils";
+import type { ContainerAppModel } from "../ContainerAppItem";
+import type { ContainerAppsItem } from "../ContainerAppsBranchDataProvider";
import { RevisionItem } from "./RevisionItem";
export class RevisionsItem implements ContainerAppsItem {
+ static contextValue: string = 'revisionsItem';
+ static contextValueRegExp: RegExp = new RegExp(RevisionsItem.contextValue);
+
id: string;
constructor(public readonly subscription: AzureSubscription, public readonly containerApp: ContainerAppModel) {
this.id = `${containerApp.id}/Revisions`;
}
+ get contextValue(): string {
+ const values: string[] = [RevisionsItem.contextValue];
+ // values.push(ext.revisionDraftFileSystem.doesContainerAppsItemHaveRevisionDraft(this) ? 'revisionDraft:true' : 'revisionDraft:false');
+ return createContextValue(values);
+ }
+
async getChildren(): Promise {
const result = await callWithTelemetryAndErrorHandling('getChildren', async (context) => {
const client = await createContainerAppsAPIClient([context, createSubscriptionContext(this.subscription)]);
const revisions = await uiUtils.listAllIterator(client.containerAppsRevisions.listRevisions(this.containerApp.resourceGroup, this.containerApp.name));
return revisions.map(revision => new RevisionItem(this.subscription, this.containerApp, revision));
-
});
return result?.reverse() ?? [];
@@ -35,9 +43,9 @@ export class RevisionsItem implements ContainerAppsItem {
getTreeItem(): TreeItem {
return {
label: localize('revisions', 'Revision Management'),
- iconPath: treeUtils.getIconPath('02885-icon-menu-Container-Revision-Active'),
- contextValue: 'revisions',
+ iconPath: treeUtils.getIconPath('02889-icon-menu-Container-Revision-Management'),
+ contextValue: this.contextValue,
collapsibleState: TreeItemCollapsibleState.Collapsed,
- }
+ };
}
}
diff --git a/src/tree/scaling/ScaleRuleGroupItem.ts b/src/tree/scaling/ScaleRuleGroupItem.ts
index 34fea7c9d..d24579642 100644
--- a/src/tree/scaling/ScaleRuleGroupItem.ts
+++ b/src/tree/scaling/ScaleRuleGroupItem.ts
@@ -9,7 +9,7 @@ import { AzureSubscription } from "@microsoft/vscode-azureresources-api";
import { ThemeIcon, TreeItemCollapsibleState } from "vscode";
import { localize } from "../../utils/localize";
import { ContainerAppModel } from "../ContainerAppItem";
-import { RevisionsItemModel } from "../RevisionItem";
+import { RevisionsItemModel } from "../revisionManagement/RevisionItem";
import { createScaleRuleItem } from "./ScaleRuleItem";
export interface ScaleRuleGroupItem extends RevisionsItemModel {