Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,25 @@
*--------------------------------------------------------------------------------------------*/

import { type Container, type EnvironmentVar } from "@azure/arm-appcontainers";
import { nonNullProp } from "@microsoft/vscode-azext-utils";
import { type Progress } from "vscode";
import { ActivityChildItem, ActivityChildType, activityFailContext, activityFailIcon, activityProgressContext, activityProgressIcon, activitySuccessContext, activitySuccessIcon, createContextValue, nonNullProp, type ExecuteActivityOutput } from "@microsoft/vscode-azext-utils";
import { TreeItemCollapsibleState, type Progress } from "vscode";
import { type ContainerAppItem } from "../../../tree/ContainerAppItem";
import { type RevisionsItemModel } from "../../../tree/revisionManagement/RevisionItem";
import { localize } from "../../../utils/localize";
import { RevisionDraftUpdateBaseStep } from "../../revisionDraft/RevisionDraftUpdateBaseStep";
import { type EnvironmentVariablesEditContext } from "./EnvironmentVariablesEditContext";

export type EnvironmentVariablesEditDraftStepOutputs = {
treeItemLabel?: string;
outputLogFailMessage?: string;
};

const environmentVariablesEditDraftStepContext: string = 'environmentVariablesEditDraftStepItem';

export class EnvironmentVariablesEditDraftStep<T extends EnvironmentVariablesEditContext> extends RevisionDraftUpdateBaseStep<T> {
public priority: number = 920;

constructor(baseItem: ContainerAppItem | RevisionsItemModel) {
constructor(baseItem: ContainerAppItem | RevisionsItemModel, readonly outputs: EnvironmentVariablesEditDraftStepOutputs = {}) {
super(baseItem);
}

Expand All @@ -41,4 +48,40 @@ export class EnvironmentVariablesEditDraftStep<T extends EnvironmentVariablesEdi
public shouldExecute(context: T): boolean {
return !!context.environmentVariables;
}

public createSuccessOutput(): ExecuteActivityOutput {
return {
item: new ActivityChildItem({
label: this.outputs.treeItemLabel ?? localize('editEnvironmentVariables', 'Edit environment variables (draft)'),
contextValue: createContextValue([environmentVariablesEditDraftStepContext, activitySuccessContext]),
activityType: ActivityChildType.Success,
iconPath: activitySuccessIcon,
}),
};
}

public createProgressOutput(): ExecuteActivityOutput {
return {
item: new ActivityChildItem({
label: this.outputs.treeItemLabel ?? localize('editEnvironmentVariables', 'Edit environment variables (draft)'),
contextValue: createContextValue([environmentVariablesEditDraftStepContext, activityProgressContext]),
activityType: ActivityChildType.Progress,
iconPath: activityProgressIcon,
}),
};
}

public createFailOutput(): ExecuteActivityOutput {
return {
item: new ActivityChildItem({
label: this.outputs.treeItemLabel ?? localize('editEnvironmentVariables', 'Edit environment variables (draft)'),
contextValue: createContextValue([environmentVariablesEditDraftStepContext, activityFailContext]),
initialCollapsibleState: TreeItemCollapsibleState.Expanded,
activityType: ActivityChildType.Fail,
iconPath: activityFailIcon,
isParent: true,
}),
message: this.outputs.outputLogFailMessage ?? localize('editEnvironmentVariablesFail', 'Failed to edit environment variables (draft).'),
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { getParentResourceFromItem, isTemplateItemEditable, TemplateItemNotEdita
import { EnvFileListStep } from "../../image/imageSource/EnvFileListStep";
import { RevisionDraftDeployPromptStep } from "../../revisionDraft/RevisionDraftDeployPromptStep";
import { type EnvironmentVariablesEditContext } from "./EnvironmentVariablesEditContext";
import { EnvironmentVariablesEditDraftStep } from "./EnvironmentVariablesEditDraftStep";
import { EnvironmentVariablesEditDraftStep, type EnvironmentVariablesEditDraftStepOutputs } from "./EnvironmentVariablesEditDraftStep";

export async function editEnvironmentVariables(context: IActionContext, node?: EnvironmentVariablesItem): Promise<void> {
const item: EnvironmentVariablesItem = node ?? await pickEnvironmentVariables(context, { autoSelectDraft: true });
Expand All @@ -41,6 +41,9 @@ export async function editEnvironmentVariables(context: IActionContext, node?: E
};
wizardContext.telemetry.properties.revisionMode = containerApp.revisionsMode;

// Create an output reference to pass to the draft step so we can edit after prompting
const editDraftStepOutputs: EnvironmentVariablesEditDraftStepOutputs = {};

const wizard = new AzureWizard<EnvironmentVariablesEditContext>(wizardContext, {
title: localize('editEnvironmentVariables', 'Edit environment variables for "{0}" (draft)', parentResource.name),
promptSteps: [
Expand All @@ -49,10 +52,15 @@ export async function editEnvironmentVariables(context: IActionContext, node?: E
],
executeSteps: [
getVerifyProvidersStep<EnvironmentVariablesEditContext>(),
new EnvironmentVariablesEditDraftStep(item),
new EnvironmentVariablesEditDraftStep(item, editDraftStepOutputs),
],
});

await wizard.prompt();
if (wizardContext.envPath) {
wizardContext.activityTitle = localize('editEnvVarsFromFileActivityTitle', 'Edit environment variables for "{0}" from provided .env file (draft)', parentResource.name);
editDraftStepOutputs.treeItemLabel = localize('saveEnvVarsToDraftLabel', 'Save environment variables from provided .env file to draft');
editDraftStepOutputs.outputLogFailMessage = localize('editEnvVarsFileFail', 'Failed to edit environment variables for "{0}" from provided .env file (draft).', parentResource.name);
}
await wizard.execute();
}