diff --git a/coderd/presets.go b/coderd/presets.go index 83cade37d3..2a4500fa51 100644 --- a/coderd/presets.go +++ b/coderd/presets.go @@ -61,6 +61,7 @@ func (api *API) templateVersionPresetParameters(rw http.ResponseWriter, r *http. Message: "Internal error fetching template version presets.", Detail: err.Error(), }) + return } var res []codersdk.PresetParameter diff --git a/coderd/wsbuilder/wsbuilder.go b/coderd/wsbuilder/wsbuilder.go index 3d757f4c55..a31e5eff46 100644 --- a/coderd/wsbuilder/wsbuilder.go +++ b/coderd/wsbuilder/wsbuilder.go @@ -363,19 +363,20 @@ func (b *Builder) buildTx(authFunc func(action policy.Action, object rbac.Object var workspaceBuild database.WorkspaceBuild err = b.store.InTx(func(store database.Store) error { err = store.InsertWorkspaceBuild(b.ctx, database.InsertWorkspaceBuildParams{ - ID: workspaceBuildID, - CreatedAt: now, - UpdatedAt: now, - WorkspaceID: b.workspace.ID, - TemplateVersionID: templateVersionID, - BuildNumber: buildNum, - ProvisionerState: state, - InitiatorID: b.initiator, - Transition: b.trans, - JobID: provisionerJob.ID, - Reason: b.reason, - Deadline: time.Time{}, // set by provisioner upon completion - MaxDeadline: time.Time{}, // set by provisioner upon completion + ID: workspaceBuildID, + CreatedAt: now, + UpdatedAt: now, + WorkspaceID: b.workspace.ID, + TemplateVersionID: templateVersionID, + BuildNumber: buildNum, + ProvisionerState: state, + InitiatorID: b.initiator, + Transition: b.trans, + JobID: provisionerJob.ID, + Reason: b.reason, + Deadline: time.Time{}, // set by provisioner upon completion + MaxDeadline: time.Time{}, // set by provisioner upon completion + TemplateVersionPresetID: uuid.NullUUID{}, // TODO (sasswart): add this in from the caller }) if err != nil { code := http.StatusInternalServerError diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx index e35e91b6f3..6156dd7b84 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePage.tsx @@ -64,8 +64,8 @@ const CreateWorkspacePage: FC = () => { : { enabled: false }, ); const templateVersionPresetParametersQuery = useQuery( - templateVersionPresetsQuery.data - ? templateVersionPresetParameters(templateVersionPresetsQuery.data) + templateQuery.data + ? templateVersionPresetParameters(templateQuery.data.active_version_id) : { enabled: false }, ); const permissionsQuery = useQuery( diff --git a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx index 65efdf0a56..9c0335d4a5 100644 --- a/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx +++ b/site/src/pages/CreateWorkspacePage/CreateWorkspacePageView.tsx @@ -6,6 +6,7 @@ import { Alert } from "components/Alert/Alert"; import { ErrorAlert } from "components/Alert/ErrorAlert"; import { Avatar } from "components/Avatar/Avatar"; import { Button } from "components/Button/Button"; +import { SelectFilter } from "components/Filter/SelectFilter"; import { FormFields, FormFooter, @@ -43,7 +44,6 @@ import type { } from "./CreateWorkspacePage"; import { ExternalAuthButton } from "./ExternalAuthButton"; import type { CreateWSPermissions } from "./permissions"; -import { SelectFilter } from "components/Filter/SelectFilter"; export const Language = { duplicationWarning: @@ -150,28 +150,19 @@ export const CreateWorkspacePageView: FC = ({ [autofillParameters], ); - const presetOptions = [ - { label: "None", value: "" }, - ...presets.map((preset) => ({ - label: preset.Name, - value: preset.ID, - })), - ]; + const presetOptions = useMemo(() => { + return [ + { label: "None", value: "" }, + ...presets.map((preset) => ({ + label: preset.Name, + value: preset.ID, + })), + ]; + }, [presets]); const [selectedPresetIndex, setSelectedPresetIndex] = useState(0); useEffect(() => { - if (!presetParameters) { - return; - } - - const selectedPreset = presetOptions[selectedPresetIndex]; - console.log("selectedPreset", selectedPreset); - - const selectedPresetParameters = presetParameters.filter( - (param) => param.PresetID === selectedPreset.value, - ); - console.log("selectedPresetParameters", selectedPresetParameters); // TODO (sasswart): test case: what if immutable parameters are used in the preset? // TODO (sasswart): test case: what if presets are defined for a template version with no params? // TODO (sasswart): test case: what if a non active version is selected? @@ -180,16 +171,26 @@ export const CreateWorkspacePageView: FC = ({ // TODO (sasswart): test case: if we move from preset to no preset, do we reset the params? // If so, how should it behave? Reset to initial value? reset to last set value? + if (!presetParameters) { + return; + } + + const selectedPreset = presetOptions[selectedPresetIndex]; + + const selectedPresetParameters = presetParameters.filter( + (param) => param.PresetID === selectedPreset.value, + ); + for (const param of selectedPresetParameters) { const paramIndex = parameters.findIndex((p) => p.name === param.Name); if (paramIndex !== -1) { form.setFieldValue(`rich_parameter_values.${paramIndex}`, { name: param.Name, - value: param.Value + value: param.Value, }); } } - }, [selectedPresetIndex, presetParameters]); + }, [selectedPresetIndex, presetParameters, presetOptions, parameters, form]); return (