From eb526f9e513938068b4a2170281f6a3dbf11aade Mon Sep 17 00:00:00 2001 From: MicroFish91 Date: Wed, 14 Jun 2023 14:19:33 -0700 Subject: [PATCH 1/3] Implementation --- package.json | 16 +++--- ...con-menu-Container-Revision-Management.svg | 29 +++++++++++ .../ingress/editTargetPort/editTargetPort.ts | 2 +- .../toggleIngressVisibility.ts | 2 +- src/commands/registerCommands.ts | 8 +-- .../activateRevision.ts | 7 ++- .../changeRevisionActiveState.ts | 5 +- .../{ => revision}/chooseRevisionMode.ts | 18 +++---- .../deactivateRevision.ts | 5 +- .../restartRevision.ts | 5 +- src/tree/ContainerAppItem.ts | 6 +-- .../{ => configurations}/ConfigurationItem.ts | 19 ++++--- src/tree/{ => configurations}/DaprItem.ts | 8 +-- src/tree/{ => configurations}/IngressItem.ts | 10 ++-- .../{ => revisionManagement}/RevisionItem.ts | 51 ++++++++++++------- .../{ => revisionManagement}/RevisionsItem.ts | 30 +++++++---- src/tree/scaling/ScaleRuleGroupItem.ts | 2 +- 17 files changed, 139 insertions(+), 84 deletions(-) create mode 100644 resources/02889-icon-menu-Container-Revision-Management.svg rename src/commands/{revisionCommands => revision}/activateRevision.ts (70%) rename src/commands/{revisionCommands => revision}/changeRevisionActiveState.ts (89%) rename src/commands/{ => revision}/chooseRevisionMode.ts (84%) rename src/commands/{revisionCommands => revision}/deactivateRevision.ts (78%) rename src/commands/{revisionCommands => revision}/restartRevision.ts (78%) rename src/tree/{ => configurations}/ConfigurationItem.ts (73%) rename src/tree/{ => configurations}/DaprItem.ts (92%) rename src/tree/{ => configurations}/IngressItem.ts (91%) rename src/tree/{ => revisionManagement}/RevisionItem.ts (62%) rename src/tree/{ => revisionManagement}/RevisionsItem.ts (58%) diff --git a/package.json b/package.json index 3b4bd999c..821b1c439 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 && (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 && 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 && 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 && 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..5c15bc479 --- /dev/null +++ b/resources/02889-icon-menu-Container-Revision-Management.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file 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 { From 59bed4dc36afffa8c374a385a27669a54a70db08 Mon Sep 17 00:00:00 2001 From: MicroFish91 Date: Wed, 14 Jun 2023 14:21:23 -0700 Subject: [PATCH 2/3] Add back focusView --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 821b1c439..8766c4512 100644 --- a/package.json +++ b/package.json @@ -220,22 +220,22 @@ }, { "command": "containerApps.chooseRevisionMode", - "when": "view == azureResourceGroups && (viewItem =~ /revisionItem(.*)revisionMode:single/i || viewItem =~ /revisionsItem/i)", + "when": "view =~ /(azureResourceGroups|azureFocusView)/ && (viewItem =~ /revisionItem(.*)revisionMode:single/i || viewItem =~ /revisionsItem/i)", "group": "2@1" }, { "command": "containerApps.activateRevision", - "when": "view == azureResourceGroups && viewItem =~ /revisionItem(.*)revisionMode:multiple(.*)revisionState:inactive/i", + "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionItem(.*)revisionMode:multiple(.*)revisionState:inactive/i", "group": "2@2" }, { "command": "containerApps.deactivateRevision", - "when": "view == azureResourceGroups && viewItem =~ /revisionItem(.*)revisionMode:multiple(.*)revisionState:active/i", + "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionItem(.*)revisionMode:multiple(.*)revisionState:active/i", "group": "2@3" }, { "command": "containerApps.restartRevision", - "when": "view == azureResourceGroups && viewItem =~ /revisionItem(.*)revisionState:active/i", + "when": "view =~ /(azureResourceGroups|azureFocusView)/ && viewItem =~ /revisionItem(.*)revisionState:active/i", "group": "2@4" }, { From 618bf477af6b544c284509e6c09c3da2bc64f51b Mon Sep 17 00:00:00 2001 From: MicroFish91 Date: Wed, 14 Jun 2023 14:26:12 -0700 Subject: [PATCH 3/3] Update revision management icon --- resources/02889-icon-menu-Container-Revision-Management.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/02889-icon-menu-Container-Revision-Management.svg b/resources/02889-icon-menu-Container-Revision-Management.svg index 5c15bc479..c14671a8e 100644 --- a/resources/02889-icon-menu-Container-Revision-Management.svg +++ b/resources/02889-icon-menu-Container-Revision-Management.svg @@ -13,8 +13,8 @@ - - + + @@ -26,4 +26,4 @@ - \ No newline at end of file +