Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4fe0a4b

Browse files
feat: add ephemeral parameter dialog for workspace start/restart (#18413)
resolves#17709 FYI, blink created a first draft which was heavily modified.## SummaryThis PR implements ephemeral parameter handling for workspacestart/restart operations when templates use dynamic parameters(`use_classic_parameter_flow = false`).<img width="522" alt="Screenshot 2025-06-18 at 14 35 54"src="https://github.com/user-attachments/assets/450527c0-cc88-4fc3-b0fa-170bdeb5ea51"/><img width="327" alt="Screenshot 2025-06-18 at 14 35 43"src="https://github.com/user-attachments/assets/ea74bf8e-d127-489d-b406-edfc5ec1e9a8"/>![Screenshot 2025-06-18 at 14 4141](https://github.com/user-attachments/assets/52f1ab99-f3bf-4540-91ac-e385c632de8c)## Changes### 1. EphemeralParametersDialog Component- **New**: `site/src/components/EphemeralParametersDialog/`- Shows a dialog when starting/restarting workspaces with ephemeralparameters- Lists ephemeral parameters with names and descriptions- Provides options to continue without setting values or navigate toparameters page### 2. WorkspaceReadyPage Updates- Added `checkEphemeralParameters()` function using`API.getDynamicParameters`- Modified `handleStart` and `handleRestart` to check for ephemeralparameters- Only triggers for templates with `use_classic_parameter_flow = false`- Shows dialog if ephemeral parameters exist, otherwise proceedsnormally### 3. BuildParametersPopover Updates- Added special UI for non-classic parameter flow templates withephemeral parameters- Lists ephemeral parameters with descriptions- Explains that users must use the workspace parameters page- Provides direct link to `WorkspaceParametersPageExperimental`---------Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com>Co-authored-by: jaaydenh <1858163+jaaydenh@users.noreply.github.com>Co-authored-by: Jaayden Halko <jaayden@coder.com>
1 parent556b095 commit4fe0a4b

File tree

8 files changed

+290
-66
lines changed

8 files changed

+290
-66
lines changed

‎site/src/components/Badge/Badge.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ const badgeVariants = cva(
2222
"border border-solid border-border-warning bg-surface-orange text-content-warning shadow",
2323
destructive:
2424
"border border-solid border-border-destructive bg-surface-red text-highlight-red shadow",
25+
green:
26+
"border border-solid border-surface-green bg-surface-green text-highlight-green shadow",
2527
},
2628
size:{
2729
xs:"text-2xs font-regular h-5 [&_svg]:hidden rounded px-1.5",
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
importtype{TemplateVersionParameter}from"api/typesGenerated";
2+
import{Button}from"components/Button/Button";
3+
import{
4+
Dialog,
5+
DialogContent,
6+
DialogDescription,
7+
DialogFooter,
8+
DialogHeader,
9+
DialogTitle,
10+
}from"components/Dialog/Dialog";
11+
importtype{FC}from"react";
12+
import{useNavigate}from"react-router-dom";
13+
14+
interfaceEphemeralParametersDialogProps{
15+
open:boolean;
16+
onClose:()=>void;
17+
onContinue:()=>void;
18+
ephemeralParameters:TemplateVersionParameter[];
19+
workspaceOwner:string;
20+
workspaceName:string;
21+
templateVersionId:string;
22+
}
23+
24+
exportconstEphemeralParametersDialog:FC<EphemeralParametersDialogProps>=({
25+
open,
26+
onClose,
27+
onContinue,
28+
ephemeralParameters,
29+
workspaceOwner,
30+
workspaceName,
31+
templateVersionId,
32+
})=>{
33+
constnavigate=useNavigate();
34+
35+
consthandleGoToParameters=()=>{
36+
onClose();
37+
navigate(
38+
`/@${workspaceOwner}/${workspaceName}/settings/parameters?templateVersionId=${templateVersionId}`,
39+
);
40+
};
41+
42+
return(
43+
<Dialogopen={open}onOpenChange={(isOpen)=>!isOpen&&onClose()}>
44+
<DialogContent>
45+
<DialogHeader>
46+
<DialogTitle>Ephemeral Parameters Detected</DialogTitle>
47+
<DialogDescription>
48+
This workspace template has{" "}
49+
<strongclassName="text-content-primary">
50+
{ephemeralParameters.length}
51+
</strong>{" "}
52+
ephemeral parameters that will be reset to their default values
53+
</DialogDescription>
54+
<DialogDescription>
55+
<ulclassName="list-none pl-6 space-y-2">
56+
{ephemeralParameters.map((param)=>(
57+
<likey={param.name}>
58+
<pclassName="text-content-primary m-0 font-bold">
59+
{param.display_name||param.name}
60+
</p>
61+
{param.description&&(
62+
<pclassName="m-0 text-sm text-content-secondary">
63+
{param.description}
64+
</p>
65+
)}
66+
</li>
67+
))}
68+
</ul>
69+
</DialogDescription>
70+
<DialogDescription>
71+
Would you like to go to the workspace parameters page to review and
72+
update these parameters before continuing?
73+
</DialogDescription>
74+
</DialogHeader>
75+
<DialogFooter>
76+
<ButtononClick={onContinue}variant="outline">
77+
Continue
78+
</Button>
79+
<ButtononClick={handleGoToParameters}>
80+
Go to workspace parameters
81+
</Button>
82+
</DialogFooter>
83+
</DialogContent>
84+
</Dialog>
85+
);
86+
};

‎site/src/modules/workspaces/DynamicParameter/DynamicParameter.stories.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,15 @@ export const Immutable: Story = {
211211
},
212212
};
213213

214+
exportconstEphemeral:Story={
215+
args:{
216+
parameter:{
217+
...MockPreviewParameter,
218+
ephemeral:true,
219+
},
220+
},
221+
};
222+
214223
exportconstAllBadges:Story={
215224
args:{
216225
parameter:{

‎site/src/modules/workspaces/DynamicParameter/DynamicParameter.tsx

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import { useDebouncedValue } from "hooks/debounce";
3636
import{useEffectEvent}from"hooks/hookPolyfills";
3737
import{
3838
CircleAlert,
39+
Hourglass,
3940
Info,
4041
LinkIcon,
4142
Settings,
@@ -162,6 +163,23 @@ const ParameterLabel: FC<ParameterLabelProps> = ({
162163
</Tooltip>
163164
</TooltipProvider>
164165
)}
166+
{parameter.ephemeral&&(
167+
<TooltipProviderdelayDuration={100}>
168+
<Tooltip>
169+
<TooltipTriggerasChild>
170+
<spanclassName="flex items-center">
171+
<Badgesize="sm"variant="green"border="none">
172+
<Hourglass/>
173+
Ephemeral
174+
</Badge>
175+
</span>
176+
</TooltipTrigger>
177+
<TooltipContentclassName="max-w-xs">
178+
This parameter only applies for a single workspace start
179+
</TooltipContent>
180+
</Tooltip>
181+
</TooltipProvider>
182+
)}
165183
{isPreset&&(
166184
<TooltipProviderdelayDuration={100}>
167185
<Tooltip>

‎site/src/pages/WorkspacePage/WorkspaceActions/BuildParametersPopover.tsx

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import{useTheme}from"@emotion/react";
2-
importButtonfrom"@mui/material/Button";
32
importvisuallyHiddenfrom"@mui/utils/visuallyHidden";
43
import{API}from"api/api";
54
importtype{
65
TemplateVersionParameter,
76
Workspace,
87
WorkspaceBuildParameter,
98
}from"api/typesGenerated";
9+
import{Button}from"components/Button/Button";
1010
import{FormFields}from"components/Form/Form";
1111
import{TopbarButton}from"components/FullPageLayout/Topbar";
1212
import{
@@ -27,6 +27,7 @@ import { useFormik } from "formik";
2727
import{ChevronDownIcon}from"lucide-react";
2828
importtype{FC}from"react";
2929
import{useQuery}from"react-query";
30+
import{useNavigate}from"react-router-dom";
3031
import{docs}from"utils/docs";
3132
import{getFormHelpers}from"utils/formUtils";
3233
import{
@@ -72,6 +73,7 @@ export const BuildParametersPopover: FC<BuildParametersPopoverProps> = ({
7273
css={{".MuiPaper-root":{width:304}}}
7374
>
7475
<BuildParametersPopoverContent
76+
workspace={workspace}
7577
ephemeralParameters={ephemeralParameters}
7678
buildParameters={parameters?.buildParameters}
7779
onSubmit={onSubmit}
@@ -82,18 +84,67 @@ export const BuildParametersPopover: FC<BuildParametersPopoverProps> = ({
8284
};
8385

8486
interfaceBuildParametersPopoverContentProps{
87+
workspace:Workspace;
8588
ephemeralParameters?:TemplateVersionParameter[];
8689
buildParameters?:WorkspaceBuildParameter[];
8790
onSubmit:(buildParameters:WorkspaceBuildParameter[])=>void;
8891
}
8992

9093
constBuildParametersPopoverContent:FC<BuildParametersPopoverContentProps>=({
94+
workspace,
9195
ephemeralParameters,
9296
buildParameters,
9397
onSubmit,
9498
})=>{
9599
consttheme=useTheme();
96100
constpopover=usePopover();
101+
constnavigate=useNavigate();
102+
103+
if(
104+
!workspace.template_use_classic_parameter_flow&&
105+
ephemeralParameters&&
106+
ephemeralParameters.length>0
107+
){
108+
consthandleGoToParameters=()=>{
109+
popover.setOpen(false);
110+
navigate(
111+
`/@${workspace.owner_name}/${workspace.name}/settings/parameters`,
112+
);
113+
};
114+
115+
return(
116+
<divclassName="flex flex-col gap-4 p-5">
117+
<h1className="text-xl m-0 text-content-primary font-semibold leading-none ">
118+
Ephemeral Parameters
119+
</h1>
120+
<pclassName="m-0 text-sm text-content-secondary">
121+
This template has ephemeral parameters that must be configured on the
122+
workspace parameters page
123+
</p>
124+
125+
<div>
126+
<ulclassName="list-none pl-3 space-y-2">
127+
{ephemeralParameters.map((param)=>(
128+
<likey={param.name}>
129+
<pclassName="text-content-primary m-0 font-bold">
130+
{param.display_name||param.name}
131+
</p>
132+
{param.description&&(
133+
<pclassName="m-0 text-sm text-content-secondary">
134+
{param.description}
135+
</p>
136+
)}
137+
</li>
138+
))}
139+
</ul>
140+
</div>
141+
142+
<ButtonclassName="w-full"onClick={handleGoToParameters}>
143+
Go to workspace parameters
144+
</Button>
145+
</div>
146+
);
147+
}
97148

98149
return(
99150
<>
@@ -206,8 +257,6 @@ const Form: FC<FormProps> = ({
206257
<Button
207258
data-testid="build-parameters-submit"
208259
type="submit"
209-
variant="contained"
210-
color="primary"
211260
css={{width:"100%"}}
212261
>
213262
Build workspace

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp