From b06a57ff52d37843f6908b63f9b1482c2eb2ddeb Mon Sep 17 00:00:00 2001 From: Kira Pilot Date: Fri, 6 Oct 2023 19:03:58 +0000 Subject: [PATCH] feat(site): disable rich parameters when using open in coder --- site/e2e/tests/createWorkspace.spec.ts | 24 ++++++++++++++++++- .../CreateWorkspacePageView.tsx | 14 +++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/site/e2e/tests/createWorkspace.spec.ts b/site/e2e/tests/createWorkspace.spec.ts index c2b1e7cad7..d7cec29a90 100644 --- a/site/e2e/tests/createWorkspace.spec.ts +++ b/site/e2e/tests/createWorkspace.spec.ts @@ -1,4 +1,4 @@ -import { test } from "@playwright/test"; +import { test, expect } from "@playwright/test"; import { createTemplate, createWorkspace, @@ -119,3 +119,25 @@ test("create workspace and overwrite default parameters", async ({ page }) => { ); await verifyParameters(page, workspaceName, richParameters, buildParameters); }); + +test("create workspace with disable_param search params", async ({ page }) => { + const richParameters: RichParameter[] = [ + firstParameter, // mutable + secondParameter, //immutable + ]; + + const templateName = await createTemplate( + page, + echoResponsesWithParameters(richParameters), + ); + + await page.goto( + `/templates/${templateName}/workspace?disable_params=first_parameter,second_parameter`, + { + waitUntil: "domcontentloaded", + }, + ); + + await expect(page.getByLabel(/First parameter/i)).toBeDisabled(); + await expect(page.getByLabel(/Second parameter/i)).toBeDisabled(); +}); diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx index c473d12ef5..2883f28bf5 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx @@ -31,6 +31,7 @@ import { ExternalAuth } from "./ExternalAuth"; import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Stack } from "components/Stack/Stack"; import { type ExternalAuthPollingState } from "./CreateWorkspacePage"; +import { useSearchParams } from "react-router-dom"; export interface CreateWorkspacePageViewProps { error: unknown; @@ -72,6 +73,9 @@ export const CreateWorkspacePageView: FC = ({ const [owner, setOwner] = useState(defaultOwner); const { verifyExternalAuth, externalAuthErrors } = useExternalAuthVerification(externalAuth); + const [searchParams] = useSearchParams(); + const disabledParamsList = searchParams?.get("disable_params")?.split(","); + const form: FormikContextType = useFormik({ initialValues: { @@ -198,7 +202,10 @@ export const CreateWorkspacePageView: FC = ({ value: value, }); }, - disabled: form.isSubmitting, + disabled: + disabledParamsList?.includes( + parameter.name.toLowerCase().replace(/ /g, "_"), + ) || form.isSubmitting, }; }} /> @@ -216,7 +223,10 @@ export const CreateWorkspacePageView: FC = ({ value: value, }); }, - disabled: form.isSubmitting, + disabled: + disabledParamsList?.includes( + parameter.name.toLowerCase().replace(/ /g, "_"), + ) || form.isSubmitting, }; }} />