Skip to content

Commit 38b21ab

Browse files
authored
fix(site): gracefully handle reselection of the same preset (coder#17014)
This PR closes coder#16953. Reselecting a preset that was already the selected preset returned an undefined option to the onSelect function. We then tried to read an attribute of this undefined value. With this fix, we handle the undefined option correctly.
1 parent b39477c commit 38b21ab

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.stories.tsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,25 @@ export const PresetSelected: Story = {
159159
},
160160
};
161161

162+
export const PresetReselected: Story = {
163+
args: PresetsButNoneSelected.args,
164+
play: async ({ canvasElement }) => {
165+
const canvas = within(canvasElement);
166+
167+
// First selection of Preset 1
168+
await userEvent.click(canvas.getByLabelText("Preset"));
169+
await userEvent.click(
170+
canvas.getByText("Preset 1", { selector: ".MuiMenuItem-root" }),
171+
);
172+
173+
// Reselect the same preset
174+
await userEvent.click(canvas.getByLabelText("Preset"));
175+
await userEvent.click(
176+
canvas.getByText("Preset 1", { selector: ".MuiMenuItem-root" }),
177+
);
178+
},
179+
};
180+
162181
export const ExternalAuth: Story = {
163182
args: {
164183
externalAuth: [

site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -286,11 +286,13 @@ export const CreateWorkspacePageView: FC<CreateWorkspacePageViewProps> = ({
286286
label="Preset"
287287
options={presetOptions}
288288
onSelect={(option) => {
289-
setSelectedPresetIndex(
290-
presetOptions.findIndex(
291-
(preset) => preset.value === option?.value,
292-
),
289+
const index = presetOptions.findIndex(
290+
(preset) => preset.value === option?.value,
293291
);
292+
if (index === -1) {
293+
return;
294+
}
295+
setSelectedPresetIndex(index);
294296
}}
295297
placeholder="Select a preset"
296298
selectedOption={presetOptions[selectedPresetIndex]}

0 commit comments

Comments
 (0)