Skip to content

Commit 791144d

Browse files
authored
feat(site): disable rich parameters when using open in coder (#10114)
* feat(site): disable rich parameters when using open in coder * updated docs * chore(site): increase refetch interval for deployment health * Revert "chore(site): increase refetch interval for deployment health" This reverts commit 8e642be.
1 parent 5673aca commit 791144d

File tree

3 files changed

+42
-3
lines changed

3 files changed

+42
-3
lines changed

docs/templates/open-in-coder.md

+7
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,13 @@ approach for "Open in Coder" flows.
106106

107107
![Pre-filled parameters](../images/templates/pre-filled-parameters.png)
108108

109+
1. Optional: disable specific parameter fields by including their names as
110+
specified in your template in the `disable_params` search params list
111+
112+
```md
113+
[![Open in Coder](https://YOUR_ACCESS_URL/open-in-coder.svg)](https://YOUR_ACCESS_URL/templates/YOUR_TEMPLATE/workspace?disable_params=first_parameter,second_parameter)
114+
```
115+
109116
## Example: Kubernetes
110117

111118
For a full example of the Open in Coder flow in Kubernetes, check out

site/e2e/tests/createWorkspace.spec.ts

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { test } from "@playwright/test";
1+
import { test, expect } from "@playwright/test";
22
import {
33
createTemplate,
44
createWorkspace,
@@ -119,3 +119,25 @@ test("create workspace and overwrite default parameters", async ({ page }) => {
119119
);
120120
await verifyParameters(page, workspaceName, richParameters, buildParameters);
121121
});
122+
123+
test("create workspace with disable_param search params", async ({ page }) => {
124+
const richParameters: RichParameter[] = [
125+
firstParameter, // mutable
126+
secondParameter, //immutable
127+
];
128+
129+
const templateName = await createTemplate(
130+
page,
131+
echoResponsesWithParameters(richParameters),
132+
);
133+
134+
await page.goto(
135+
`/templates/${templateName}/workspace?disable_params=first_parameter,second_parameter`,
136+
{
137+
waitUntil: "domcontentloaded",
138+
},
139+
);
140+
141+
await expect(page.getByLabel(/First parameter/i)).toBeDisabled();
142+
await expect(page.getByLabel(/Second parameter/i)).toBeDisabled();
143+
});

site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx

+12-2
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import { ExternalAuth } from "./ExternalAuth";
3131
import { ErrorAlert } from "components/Alert/ErrorAlert";
3232
import { Stack } from "components/Stack/Stack";
3333
import { type ExternalAuthPollingState } from "./CreateWorkspacePage";
34+
import { useSearchParams } from "react-router-dom";
3435

3536
export interface CreateWorkspacePageViewProps {
3637
error: unknown;
@@ -72,6 +73,9 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
7273
const [owner, setOwner] = useState(defaultOwner);
7374
const { verifyExternalAuth, externalAuthErrors } =
7475
useExternalAuthVerification(externalAuth);
76+
const [searchParams] = useSearchParams();
77+
const disabledParamsList = searchParams?.get("disable_params")?.split(",");
78+
7579
const form: FormikContextType<TypesGen.CreateWorkspaceRequest> =
7680
useFormik<TypesGen.CreateWorkspaceRequest>({
7781
initialValues: {
@@ -198,7 +202,10 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
198202
value: value,
199203
});
200204
},
201-
disabled: form.isSubmitting,
205+
disabled:
206+
disabledParamsList?.includes(
207+
parameter.name.toLowerCase().replace(/ /g, "_"),
208+
) || form.isSubmitting,
202209
};
203210
}}
204211
/>
@@ -216,7 +223,10 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
216223
value: value,
217224
});
218225
},
219-
disabled: form.isSubmitting,
226+
disabled:
227+
disabledParamsList?.includes(
228+
parameter.name.toLowerCase().replace(/ /g, "_"),
229+
) || form.isSubmitting,
220230
};
221231
}}
222232
/>

0 commit comments

Comments
 (0)