From 8fafc2cb6e9f7a9a4210f3e7f5a90b249c0846bc Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 9 Jun 2025 14:34:24 +0000 Subject: [PATCH 01/11] chore: remove dynamic-parameters experiment --- site/src/pages/WorkspacesPage/WorkspacesPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx index 22ba0d15f1f9a..f54fd3df060ff 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx @@ -164,7 +164,7 @@ const WorkspacesPage: FC = () => { onConfirm={async () => { await batchActions.updateAll({ workspaces: checkedWorkspaces, - isDynamicParametersEnabled: false, + isDynamicParametersEnabled: true, }); setConfirmingBatchAction(null); }} From a06e5ca477250b389aa32bf2a873af2ec01531d9 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 9 Jun 2025 20:50:55 +0000 Subject: [PATCH 02/11] fix: fix tests --- coderd/templates_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coderd/templates_test.go b/coderd/templates_test.go index f8f2b1372263c..f5fbe49741838 100644 --- a/coderd/templates_test.go +++ b/coderd/templates_test.go @@ -1548,7 +1548,7 @@ func TestPatchTemplateMeta(t *testing.T) { user := coderdtest.CreateFirstUser(t, client) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) - require.True(t, template.UseClassicParameterFlow, "default is true") + require.False(t, template.UseClassicParameterFlow, "default is false") bTrue := true bFalse := false From bb2aab2db539d743a622196172d914ae11d2b7a0 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 9 Jun 2025 21:19:24 +0000 Subject: [PATCH 03/11] fix: fix jest tests --- site/src/pages/WorkspacesPage/WorkspacesPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx index f54fd3df060ff..22ba0d15f1f9a 100644 --- a/site/src/pages/WorkspacesPage/WorkspacesPage.tsx +++ b/site/src/pages/WorkspacesPage/WorkspacesPage.tsx @@ -164,7 +164,7 @@ const WorkspacesPage: FC = () => { onConfirm={async () => { await batchActions.updateAll({ workspaces: checkedWorkspaces, - isDynamicParametersEnabled: true, + isDynamicParametersEnabled: false, }); setConfirmingBatchAction(null); }} From a808c03ff37e919143ccfd76cfec8a15488fb497 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 9 Jun 2025 16:34:34 -0500 Subject: [PATCH 04/11] update db mock --- coderd/wsbuilder/wsbuilder_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/coderd/wsbuilder/wsbuilder_test.go b/coderd/wsbuilder/wsbuilder_test.go index 58999a33e6e5e..9bc45e6c0a1d9 100644 --- a/coderd/wsbuilder/wsbuilder_test.go +++ b/coderd/wsbuilder/wsbuilder_test.go @@ -57,6 +57,7 @@ func TestBuilder_NoOptions(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -113,6 +114,7 @@ func TestBuilder_Initiator(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -159,6 +161,7 @@ func TestBuilder_Baggage(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -197,6 +200,7 @@ func TestBuilder_Reason(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -235,6 +239,7 @@ func TestBuilder_ActiveVersion(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withActiveVersion(nil), withLastBuildNotFound, withTemplateVersionVariables(activeVersionID, nil), @@ -338,6 +343,7 @@ func TestWorkspaceBuildWithTags(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, templateVersionVariables), @@ -433,6 +439,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -480,6 +487,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -533,6 +541,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -565,6 +574,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -617,6 +627,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withActiveVersion(version2params), withLastBuildFound, withTemplateVersionVariables(activeVersionID, nil), @@ -680,6 +691,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withActiveVersion(version2params), withLastBuildFound, withTemplateVersionVariables(activeVersionID, nil), @@ -741,6 +753,7 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withActiveVersion(version2params), withLastBuildFound, withTemplateVersionVariables(activeVersionID, nil), @@ -788,6 +801,7 @@ func TestWorkspaceBuildWithPreset(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, + withTerraformValuesErrNoRows, withActiveVersion(nil), // building workspaces using presets with different combinations of parameters // is tested at the API layer, in TestWorkspace. Here, it is sufficient to @@ -902,6 +916,12 @@ func withTemplate(mTx *dbmock.MockStore) { }, nil) } +func withTerraformValuesErrNoRows(mTx *dbmock.MockStore) { + mTx.EXPECT().GetTemplateVersionTerraformValues(gomock.Any(), gomock.Any()). + Times(1). + Return(database.TemplateVersionTerraformValue{}, sql.ErrNoRows) +} + // withInTx runs the given functions on the same db mock. func withInTx(mTx *dbmock.MockStore) { mTx.EXPECT().InTx(gomock.Any(), gomock.Any()).Times(1).DoAndReturn( From 8d64a3778e5bf7c4a546b47114435c05bf139784 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Tue, 10 Jun 2025 19:38:37 +0000 Subject: [PATCH 05/11] fix: fix tests --- coderd/parameters_test.go | 1 + coderd/templates_test.go | 2 +- coderd/wsbuilder/wsbuilder_test.go | 20 -------------------- 3 files changed, 2 insertions(+), 21 deletions(-) diff --git a/coderd/parameters_test.go b/coderd/parameters_test.go index da2c19ba20e3c..640dc3ad22e55 100644 --- a/coderd/parameters_test.go +++ b/coderd/parameters_test.go @@ -249,6 +249,7 @@ func TestDynamicParametersWithTerraformValues(t *testing.T) { Value: "GO", }, } + request.EnableDynamicParameters = true }) coderdtest.AwaitWorkspaceBuildJobCompleted(t, setup.client, wrk.LatestBuild.ID) diff --git a/coderd/templates_test.go b/coderd/templates_test.go index f5fbe49741838..f8f2b1372263c 100644 --- a/coderd/templates_test.go +++ b/coderd/templates_test.go @@ -1548,7 +1548,7 @@ func TestPatchTemplateMeta(t *testing.T) { user := coderdtest.CreateFirstUser(t, client) version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil) template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID) - require.False(t, template.UseClassicParameterFlow, "default is false") + require.True(t, template.UseClassicParameterFlow, "default is true") bTrue := true bFalse := false diff --git a/coderd/wsbuilder/wsbuilder_test.go b/coderd/wsbuilder/wsbuilder_test.go index 9bc45e6c0a1d9..58999a33e6e5e 100644 --- a/coderd/wsbuilder/wsbuilder_test.go +++ b/coderd/wsbuilder/wsbuilder_test.go @@ -57,7 +57,6 @@ func TestBuilder_NoOptions(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -114,7 +113,6 @@ func TestBuilder_Initiator(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -161,7 +159,6 @@ func TestBuilder_Baggage(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -200,7 +197,6 @@ func TestBuilder_Reason(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(nil), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -239,7 +235,6 @@ func TestBuilder_ActiveVersion(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withActiveVersion(nil), withLastBuildNotFound, withTemplateVersionVariables(activeVersionID, nil), @@ -343,7 +338,6 @@ func TestWorkspaceBuildWithTags(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, templateVersionVariables), @@ -439,7 +433,6 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -487,7 +480,6 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -541,7 +533,6 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -574,7 +565,6 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withInactiveVersion(richParameters), withLastBuildFound, withTemplateVersionVariables(inactiveVersionID, nil), @@ -627,7 +617,6 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withActiveVersion(version2params), withLastBuildFound, withTemplateVersionVariables(activeVersionID, nil), @@ -691,7 +680,6 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withActiveVersion(version2params), withLastBuildFound, withTemplateVersionVariables(activeVersionID, nil), @@ -753,7 +741,6 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withActiveVersion(version2params), withLastBuildFound, withTemplateVersionVariables(activeVersionID, nil), @@ -801,7 +788,6 @@ func TestWorkspaceBuildWithPreset(t *testing.T) { mDB := expectDB(t, // Inputs withTemplate, - withTerraformValuesErrNoRows, withActiveVersion(nil), // building workspaces using presets with different combinations of parameters // is tested at the API layer, in TestWorkspace. Here, it is sufficient to @@ -916,12 +902,6 @@ func withTemplate(mTx *dbmock.MockStore) { }, nil) } -func withTerraformValuesErrNoRows(mTx *dbmock.MockStore) { - mTx.EXPECT().GetTemplateVersionTerraformValues(gomock.Any(), gomock.Any()). - Times(1). - Return(database.TemplateVersionTerraformValue{}, sql.ErrNoRows) -} - // withInTx runs the given functions on the same db mock. func withInTx(mTx *dbmock.MockStore) { mTx.EXPECT().InTx(gomock.Any(), gomock.Any()).Times(1).DoAndReturn( From 6f0ee1dbf24a0f50956b35b53ebb51edcf5f8401 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Thu, 12 Jun 2025 12:02:03 +0000 Subject: [PATCH 06/11] chore: remove local storage based optin/optout --- .../useDynamicParametersOptOut.ts | 37 ------------------ .../WorkspaceMoreActions.tsx | 16 +++----- .../workspaces/WorkspaceUpdateDialogs.tsx | 30 +------------- .../CreateWorkspaceExperimentRouter.tsx | 35 ++--------------- .../CreateWorkspacePageView.tsx | 28 ++----------- .../CreateWorkspacePageViewExperimental.tsx | 15 +------ .../ExperimentalFormContext.tsx | 5 --- .../WorkspaceParametersExperimentRouter.tsx | 39 ++----------------- .../WorkspaceParametersPage.tsx | 14 +------ .../WorkspaceParametersPageExperimental.tsx | 17 +------- 10 files changed, 23 insertions(+), 213 deletions(-) delete mode 100644 site/src/modules/workspaces/DynamicParameter/useDynamicParametersOptOut.ts delete mode 100644 site/src/pages/CreateWorkspacePage/ExperimentalFormContext.tsx diff --git a/site/src/modules/workspaces/DynamicParameter/useDynamicParametersOptOut.ts b/site/src/modules/workspaces/DynamicParameter/useDynamicParametersOptOut.ts deleted file mode 100644 index 22364edb0c70f..0000000000000 --- a/site/src/modules/workspaces/DynamicParameter/useDynamicParametersOptOut.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { useQuery } from "react-query"; - -export const optOutKey = (id: string): string => `parameters.${id}.optOut`; - -interface UseDynamicParametersOptOutOptions { - templateId: string | undefined; - templateUsesClassicParameters: boolean | undefined; - enabled: boolean; -} - -export const useDynamicParametersOptOut = ({ - templateId, - templateUsesClassicParameters, - enabled, -}: UseDynamicParametersOptOutOptions) => { - return useQuery({ - enabled: !!templateId && enabled, - queryKey: ["dynamicParametersOptOut", templateId], - queryFn: () => { - if (!templateId) { - // This should not happen if enabled is working correctly, - // but as a type guard and sanity check. - throw new Error("templateId is required"); - } - const localStorageKey = optOutKey(templateId); - const storedOptOutString = localStorage.getItem(localStorageKey); - - // Since the dynamic-parameters experiment was removed, always use classic parameters - const optedOut = true; - - return { - templateId, - optedOut, - }; - }, - }); -}; diff --git a/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx b/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx index ff20aea807bf4..d2d916f71e9e8 100644 --- a/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx +++ b/site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx @@ -21,7 +21,6 @@ import { SettingsIcon, TrashIcon, } from "lucide-react"; -import { useDynamicParametersOptOut } from "modules/workspaces/DynamicParameter/useDynamicParametersOptOut"; import { type FC, useEffect, useState } from "react"; import { useMutation, useQuery, useQueryClient } from "react-query"; import { Link as RouterLink } from "react-router-dom"; @@ -43,13 +42,6 @@ export const WorkspaceMoreActions: FC = ({ }) => { const queryClient = useQueryClient(); - const optOutQuery = useDynamicParametersOptOut({ - templateId: workspace.template_id, - templateUsesClassicParameters: - workspace.template_use_classic_parameter_flow, - enabled: true, - }); - // Permissions const { data: permissions } = useQuery(workspacePermissions(workspace)); @@ -59,7 +51,11 @@ export const WorkspaceMoreActions: FC = ({ // Change version const [changeVersionDialogOpen, setChangeVersionDialogOpen] = useState(false); const changeVersionMutation = useMutation( - changeVersion(workspace, queryClient, optOutQuery.data?.optedOut === false), + changeVersion( + workspace, + queryClient, + !workspace.template_use_classic_parameter_flow, + ), ); // Delete @@ -151,7 +147,7 @@ export const WorkspaceMoreActions: FC = ({ onClose={() => setIsDownloadDialogOpen(false)} /> - {optOutQuery.data?.optedOut ? ( + {workspace.template_use_classic_parameter_flow ? ( { updateWorkspaceMutation.mutate({ buildParameters, - isDynamicParametersEnabled: optOutQuery.data?.optedOut === false, + isDynamicParametersEnabled: workspace.template_use_classic_parameter_flow, }); setIsConfirmingUpdate(false); }; @@ -160,29 +150,13 @@ const MissingBuildParametersDialog: FC = ({ error, ...dialogProps }) => { - const optOutQuery = useDynamicParametersOptOut({ - templateId: workspace.template_id, - templateUsesClassicParameters: - workspace.template_use_classic_parameter_flow, - enabled: true, - }); - const missedParameters = error instanceof MissingBuildParameters ? error.parameters : []; const versionId = error instanceof MissingBuildParameters ? error.versionId : undefined; const isOpen = error instanceof MissingBuildParameters; - if (optOutQuery.isError) { - return ; - } - if (!optOutQuery.data) { - return ; - } - - const shouldUseClassicDialog = optOutQuery.data?.optedOut; - - return shouldUseClassicDialog ? ( + return workspace.template_use_classic_parameter_flow ? ( { const { organization: organizationName = "default", template: templateName } = @@ -19,43 +14,21 @@ const CreateWorkspaceExperimentRouter: FC = () => { templateByName(organizationName, templateName), ); - const optOutQuery = useDynamicParametersOptOut({ - templateId: templateQuery.data?.id, - templateUsesClassicParameters: - templateQuery.data?.use_classic_parameter_flow, - enabled: !!templateQuery.data, - }); - if (templateQuery.isError) { return ; } - if (optOutQuery.isError) { - return ; - } - if (!optOutQuery.data) { + if (!templateQuery.data) { return ; } - const toggleOptedOut = () => { - const key = optOutKey(optOutQuery.data?.templateId ?? ""); - const storedValue = localStorage.getItem(key); - - const current = storedValue - ? storedValue === "true" - : Boolean(templateQuery.data?.use_classic_parameter_flow); - - localStorage.setItem(key, (!current).toString()); - optOutQuery.refetch(); - }; - return ( - - {optOutQuery.data.optedOut ? ( + <> + {templateQuery.data?.use_classic_parameter_flow ? ( ) : ( )} - + ); }; diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx index 64ea110709cf4..d365a565afcdb 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx @@ -28,14 +28,7 @@ import { Switch } from "components/Switch/Switch"; import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete"; import { type FormikContextType, useFormik } from "formik"; import { generateWorkspaceName } from "modules/workspaces/generateWorkspaceName"; -import { - type FC, - useCallback, - useContext, - useEffect, - useMemo, - useState, -} from "react"; +import { type FC, useCallback, useEffect, useMemo, useState } from "react"; import { getFormHelpers, nameValidator, @@ -51,7 +44,6 @@ import type { CreateWorkspaceMode, ExternalAuthPollingState, } from "./CreateWorkspacePage"; -import { ExperimentalFormContext } from "./ExperimentalFormContext"; import { ExternalAuthButton } from "./ExternalAuthButton"; import type { CreateWorkspacePermissions } from "./permissions"; @@ -106,7 +98,6 @@ export const CreateWorkspacePageView: FC = ({ onSubmit, onCancel, }) => { - const experimentalFormContext = useContext(ExperimentalFormContext); const [owner, setOwner] = useState(defaultOwner); const [suggestedName, setSuggestedName] = useState(() => generateWorkspaceName(), @@ -220,20 +211,9 @@ export const CreateWorkspacePageView: FC = ({ - {experimentalFormContext && ( - - )} - - + } > diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx index c2b6807a5833f..4fff4db92e21d 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx @@ -26,7 +26,7 @@ import { } from "components/Tooltip/Tooltip"; import { UserAutocomplete } from "components/UserAutocomplete/UserAutocomplete"; import { type FormikContextType, useFormik } from "formik"; -import { ArrowLeft, CircleHelp, Undo2 } from "lucide-react"; +import { ArrowLeft, CircleHelp } from "lucide-react"; import { useSyncFormParameters } from "modules/hooks/useSyncFormParameters"; import { Diagnostics } from "modules/workspaces/DynamicParameter/DynamicParameter"; import { @@ -38,7 +38,6 @@ import { generateWorkspaceName } from "modules/workspaces/generateWorkspaceName" import { type FC, useCallback, - useContext, useEffect, useId, useRef, @@ -52,7 +51,6 @@ import type { CreateWorkspaceMode, ExternalAuthPollingState, } from "./CreateWorkspacePage"; -import { ExperimentalFormContext } from "./ExperimentalFormContext"; import { ExternalAuthButton } from "./ExternalAuthButton"; import type { CreateWorkspacePermissions } from "./permissions"; @@ -112,7 +110,6 @@ export const CreateWorkspacePageViewExperimental: FC< owner, setOwner, }) => { - const experimentalFormContext = useContext(ExperimentalFormContext); const [suggestedName, setSuggestedName] = useState(() => generateWorkspaceName(), ); @@ -372,16 +369,6 @@ export const CreateWorkspacePageViewExperimental: FC< )} - {experimentalFormContext && ( - - )}

New workspace

diff --git a/site/src/pages/CreateWorkspacePage/ExperimentalFormContext.tsx b/site/src/pages/CreateWorkspacePage/ExperimentalFormContext.tsx deleted file mode 100644 index f79665a0e4a01..0000000000000 --- a/site/src/pages/CreateWorkspacePage/ExperimentalFormContext.tsx +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from "react"; - -export const ExperimentalFormContext = createContext< - { toggleOptedOut: () => void } | undefined ->(undefined); diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersExperimentRouter.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersExperimentRouter.tsx index 8e47b0105664d..0a01c9907bd00 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersExperimentRouter.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersExperimentRouter.tsx @@ -1,11 +1,4 @@ -import { ErrorAlert } from "components/Alert/ErrorAlert"; -import { Loader } from "components/Loader/Loader"; -import { - optOutKey, - useDynamicParametersOptOut, -} from "modules/workspaces/DynamicParameter/useDynamicParametersOptOut"; import type { FC } from "react"; -import { ExperimentalFormContext } from "../../CreateWorkspacePage/ExperimentalFormContext"; import { useWorkspaceSettings } from "../WorkspaceSettingsLayout"; import WorkspaceParametersPage from "./WorkspaceParametersPage"; import WorkspaceParametersPageExperimental from "./WorkspaceParametersPageExperimental"; @@ -13,40 +6,14 @@ import WorkspaceParametersPageExperimental from "./WorkspaceParametersPageExperi const WorkspaceParametersExperimentRouter: FC = () => { const workspace = useWorkspaceSettings(); - const optOutQuery = useDynamicParametersOptOut({ - templateId: workspace.template_id, - templateUsesClassicParameters: - workspace.template_use_classic_parameter_flow, - enabled: true, - }); - - if (optOutQuery.isError) { - return ; - } - if (!optOutQuery.data) { - return ; - } - - const toggleOptedOut = () => { - const key = optOutKey(optOutQuery.data.templateId); - const storedValue = localStorage.getItem(key); - - const current = storedValue - ? storedValue === "true" - : Boolean(workspace.template_use_classic_parameter_flow); - - localStorage.setItem(key, (!current).toString()); - optOutQuery.refetch(); - }; - return ( - - {optOutQuery.data.optedOut ? ( + <> + {workspace.template_use_classic_parameter_flow ? ( ) : ( )} - + ); }; diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.tsx index 56720292957ff..50f2eedaeec26 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.tsx @@ -4,11 +4,10 @@ import { isApiValidationError } from "api/errors"; import { checkAuthorization } from "api/queries/authCheck"; import type { Workspace, WorkspaceBuildParameter } from "api/typesGenerated"; import { ErrorAlert } from "components/Alert/ErrorAlert"; -import { Button as ShadcnButton } from "components/Button/Button"; import { EmptyState } from "components/EmptyState/EmptyState"; import { Loader } from "components/Loader/Loader"; import { ExternalLinkIcon } from "lucide-react"; -import { type FC, useContext } from "react"; +import type { FC } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQuery } from "react-query"; import { useNavigate } from "react-router-dom"; @@ -18,7 +17,6 @@ import { type WorkspacePermissions, workspaceChecks, } from "../../../modules/workspaces/permissions"; -import { ExperimentalFormContext } from "../../CreateWorkspacePage/ExperimentalFormContext"; import { useWorkspaceSettings } from "../WorkspaceSettingsLayout"; import { WorkspaceParametersForm, @@ -113,21 +111,11 @@ export const WorkspaceParametersPageView: FC< isSubmitting, onCancel, }) => { - const experimentalFormContext = useContext(ExperimentalFormContext); return (

Workspace parameters

- {experimentalFormContext && ( - - Try out the new workspace parameters ✨ - - )}
diff --git a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPageExperimental.tsx b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPageExperimental.tsx index 5fa3033542782..755291ec28629 100644 --- a/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPageExperimental.tsx +++ b/site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPageExperimental.tsx @@ -7,7 +7,6 @@ import type { WorkspaceBuildParameter, } from "api/typesGenerated"; import { ErrorAlert } from "components/Alert/ErrorAlert"; -import { Button } from "components/Button/Button"; import { EmptyState } from "components/EmptyState/EmptyState"; import { FeatureStageBadge } from "components/FeatureStageBadge/FeatureStageBadge"; import { Link } from "components/Link/Link"; @@ -19,9 +18,9 @@ import { TooltipTrigger, } from "components/Tooltip/Tooltip"; import { useEffectEvent } from "hooks/hookPolyfills"; -import { CircleHelp, Undo2 } from "lucide-react"; +import { CircleHelp } from "lucide-react"; import type { FC } from "react"; -import { useContext, useEffect, useMemo, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { Helmet } from "react-helmet-async"; import { useMutation, useQuery } from "react-query"; import { useNavigate, useSearchParams } from "react-router-dom"; @@ -32,14 +31,12 @@ import { type WorkspacePermissions, workspaceChecks, } from "../../../modules/workspaces/permissions"; -import { ExperimentalFormContext } from "../../CreateWorkspacePage/ExperimentalFormContext"; import { useWorkspaceSettings } from "../WorkspaceSettingsLayout"; import { WorkspaceParametersPageViewExperimental } from "./WorkspaceParametersPageViewExperimental"; const WorkspaceParametersPageExperimental: FC = () => { const workspace = useWorkspaceSettings(); const navigate = useNavigate(); - const experimentalFormContext = useContext(ExperimentalFormContext); const [searchParams] = useSearchParams(); const templateVersionId = searchParams.get("templateVersionId") ?? undefined; @@ -236,16 +233,6 @@ const WorkspaceParametersPageExperimental: FC = () => { - {experimentalFormContext && ( - - )} Date: Thu, 12 Jun 2025 16:36:30 +0000 Subject: [PATCH 07/11] fix: fix test --- site/src/pages/WorkspacePage/WorkspacePage.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx index fb95d0c883627..348dd09bff07d 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx @@ -317,7 +317,7 @@ describe("WorkspacePage", () => { value: "2", }, ], - false, + true, ); }); }); From ad3506535e0fd75389102fe4c625455a722b7c44 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Thu, 12 Jun 2025 17:16:28 +0000 Subject: [PATCH 08/11] fix: fix e2e tests --- site/e2e/helpers.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/site/e2e/helpers.ts b/site/e2e/helpers.ts index 52e9f5e820f23..0d6c10df500b0 100644 --- a/site/e2e/helpers.ts +++ b/site/e2e/helpers.ts @@ -1011,6 +1011,8 @@ export const updateWorkspace = async ( await page.getByTestId("workspace-update-button").click(); await page.getByTestId("confirm-button").click(); + await page.waitForSelector('[data-testid="dialog"]', { state: "visible" }); + await fillParameters(page, richParameters, buildParameters); await page.getByRole("button", { name: /update parameters/i }).click(); From aa3dd7937acdd0905e3debe5a80bcd1baeee42d0 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Thu, 12 Jun 2025 17:16:44 +0000 Subject: [PATCH 09/11] fix: pass correct value for isDynamicParametersEnabled --- site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx b/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx index 05d705947a6a4..d3ce24537e723 100644 --- a/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx +++ b/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx @@ -55,7 +55,7 @@ export const useWorkspaceUpdate = ({ const confirmUpdate = (buildParameters: WorkspaceBuildParameter[] = []) => { updateWorkspaceMutation.mutate({ buildParameters, - isDynamicParametersEnabled: workspace.template_use_classic_parameter_flow, + isDynamicParametersEnabled: !workspace.template_use_classic_parameter_flow, }); setIsConfirmingUpdate(false); }; From 85ed811c395ee7fa0a64570e3e21613050450edd Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Thu, 12 Jun 2025 17:24:04 +0000 Subject: [PATCH 10/11] fix: fix test --- site/src/pages/WorkspacePage/WorkspacePage.test.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx index 348dd09bff07d..67a1a460dcd45 100644 --- a/site/src/pages/WorkspacePage/WorkspacePage.test.tsx +++ b/site/src/pages/WorkspacePage/WorkspacePage.test.tsx @@ -305,7 +305,7 @@ describe("WorkspacePage", () => { // Check if the update was called using the values from the form await waitFor(() => { - expect(API.updateWorkspace).toBeCalledWith( + expect(API.updateWorkspace).toHaveBeenCalledWith( MockOutdatedWorkspace, [ { @@ -317,7 +317,7 @@ describe("WorkspacePage", () => { value: "2", }, ], - true, + false, ); }); }); From 9fe37baa80f409c4aa4cac4323d1a1ddcf2db7f5 Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Thu, 12 Jun 2025 17:24:28 +0000 Subject: [PATCH 11/11] fix: format --- site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx b/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx index d3ce24537e723..bdad9e405bd48 100644 --- a/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx +++ b/site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx @@ -55,7 +55,8 @@ export const useWorkspaceUpdate = ({ const confirmUpdate = (buildParameters: WorkspaceBuildParameter[] = []) => { updateWorkspaceMutation.mutate({ buildParameters, - isDynamicParametersEnabled: !workspace.template_use_classic_parameter_flow, + isDynamicParametersEnabled: + !workspace.template_use_classic_parameter_flow, }); setIsConfirmingUpdate(false); }; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy