From 5dd8416cb9a25b58399e69365b18d5d0c46533d5 Mon Sep 17 00:00:00 2001 From: Sas Swart Date: Mon, 23 Jun 2025 12:40:24 +0000 Subject: [PATCH 1/4] fix: allow delesecting a preset without triggering a validation error --- .../CreateWorkspacePageView.stories.tsx | 36 +++++++++++++++++++ .../CreateWorkspacePageView.tsx | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx index deab54d531ec4..b09b2c03fedea 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx @@ -201,6 +201,42 @@ export const PresetReselected: Story = { }, }; +export const PresetNoneSelected: Story = { + args: { + ...PresetsButNoneSelected.args, + onSubmit: (request, owner) => { + // Assert that template_version_preset_id is not present in the request + console.assert( + !('template_version_preset_id' in request), + 'template_version_preset_id should not be present when "None" is selected' + ); + action('onSubmit')(request, owner); + }, + }, + play: async ({ canvasElement }) => { + const canvas = within(canvasElement); + + // First select a preset to set the field value + await userEvent.click(canvas.getByLabelText("Preset")); + await userEvent.click(canvas.getByText("Preset 1")); + + // Then select "None" to unset the field value + await userEvent.click(canvas.getByLabelText("Preset")); + await userEvent.click(canvas.getByText("None")); + + // Fill in required fields and submit to test the API call + await userEvent.type(canvas.getByLabelText("Workspace Name"), "test-workspace"); + await userEvent.click(canvas.getByText("Create workspace")); + }, + parameters: { + docs: { + description: { + story: "This story tests that when 'None' preset is selected, the template_version_preset_id field is not included in the form submission. The story first selects a preset to set the field value, then selects 'None' to unset it, and finally submits the form to verify the API call behavior.", + }, + }, + }, +}; + export const ExternalAuth: Story = { args: { externalAuth: [ diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx index 7a880e8df26b6..5021f63f5ff61 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx @@ -369,7 +369,7 @@ export const CreateWorkspacePageView: FC = ({ setSelectedPresetIndex(index); form.setFieldValue( "template_version_preset_id", - option?.value, + index === 0 ? undefined : option?.value, ); }} placeholder="Select a preset" From 896ab19e89490116a34c0db7ec545c3b441fd071 Mon Sep 17 00:00:00 2001 From: Sas Swart Date: Mon, 23 Jun 2025 12:48:36 +0000 Subject: [PATCH 2/4] make fmt --- .../CreateWorkspacePageView.stories.tsx | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx index b09b2c03fedea..9f7ff44a2da64 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx @@ -207,10 +207,10 @@ export const PresetNoneSelected: Story = { onSubmit: (request, owner) => { // Assert that template_version_preset_id is not present in the request console.assert( - !('template_version_preset_id' in request), - 'template_version_preset_id should not be present when "None" is selected' + !("template_version_preset_id" in request), + 'template_version_preset_id should not be present when "None" is selected', ); - action('onSubmit')(request, owner); + action("onSubmit")(request, owner); }, }, play: async ({ canvasElement }) => { @@ -225,13 +225,17 @@ export const PresetNoneSelected: Story = { await userEvent.click(canvas.getByText("None")); // Fill in required fields and submit to test the API call - await userEvent.type(canvas.getByLabelText("Workspace Name"), "test-workspace"); + await userEvent.type( + canvas.getByLabelText("Workspace Name"), + "test-workspace", + ); await userEvent.click(canvas.getByText("Create workspace")); }, parameters: { docs: { description: { - story: "This story tests that when 'None' preset is selected, the template_version_preset_id field is not included in the form submission. The story first selects a preset to set the field value, then selects 'None' to unset it, and finally submits the form to verify the API call behavior.", + story: + "This story tests that when 'None' preset is selected, the template_version_preset_id field is not included in the form submission. The story first selects a preset to set the field value, then selects 'None' to unset it, and finally submits the form to verify the API call behavior.", }, }, }, From 927e66e845338343c84bff5a2a40194b2b55e8fa Mon Sep 17 00:00:00 2001 From: Jaayden Halko Date: Mon, 23 Jun 2025 15:13:49 +0000 Subject: [PATCH 3/4] fix: implement fix for dynamic parameters --- .../CreateWorkspacePageViewExperimental.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx index 3522d24012445..127f922c816aa 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageViewExperimental.tsx @@ -563,6 +563,10 @@ export const CreateWorkspacePageViewExperimental: FC< return; } setSelectedPresetIndex(index); + form.setFieldValue( + "template_version_preset_id", + index === 0 ? undefined : option, + ); }} > From fa7411ccf01acedb856252f915aee3eeefe441a6 Mon Sep 17 00:00:00 2001 From: Sas Swart Date: Tue, 24 Jun 2025 08:42:55 +0200 Subject: [PATCH 4/4] Update site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx use option?.value instead of index to check whether we should send a preset ID when a workspace is created Co-authored-by: Susana Ferreira --- site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx index 5021f63f5ff61..c4a5a4e5bd023 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx @@ -369,7 +369,8 @@ export const CreateWorkspacePageView: FC = ({ setSelectedPresetIndex(index); form.setFieldValue( "template_version_preset_id", - index === 0 ? undefined : option?.value, + // Empty string is equivalent to using None + option?.value === "" ? undefined : option?.value, ); }} placeholder="Select a preset"