Skip to content

Commit b9f604c

Browse files
fix(site): fix workspace parameters update when having immutable parameters (#9500)
1 parent f5829d2 commit b9f604c

File tree

4 files changed

+39
-21
lines changed

4 files changed

+39
-21
lines changed

site/src/pages/WorkspaceBuildPage/WorkspaceBuildPageView.stories.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export const LoadingBuildLogs: Story = {
3636

3737
const failedBuild = {
3838
...MockFailedWorkspaceBuild("delete"),
39-
build_number: new Date().getDate(),
39+
build_number: 123123123123,
4040
}
4141

4242
export const FailedDelete: Story = {

site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.test.tsx

+14-12
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,27 @@ import {
1313
MockWorkspaceBuildParameter1,
1414
MockWorkspaceBuildParameter2,
1515
MockWorkspaceBuild,
16+
MockTemplateVersionParameter4,
17+
MockWorkspaceBuildParameter4,
1618
} from "testHelpers/entities"
1719

1820
test("Submit the workspace settings page successfully", async () => {
1921
// Mock the API calls that loads data
2022
jest
2123
.spyOn(api, "getWorkspaceByOwnerAndName")
2224
.mockResolvedValueOnce(MockWorkspace)
23-
jest
24-
.spyOn(api, "getTemplateVersionRichParameters")
25-
.mockResolvedValueOnce([
26-
MockTemplateVersionParameter1,
27-
MockTemplateVersionParameter2,
28-
])
29-
jest
30-
.spyOn(api, "getWorkspaceBuildParameters")
31-
.mockResolvedValueOnce([
32-
MockWorkspaceBuildParameter1,
33-
MockWorkspaceBuildParameter2,
34-
])
25+
jest.spyOn(api, "getTemplateVersionRichParameters").mockResolvedValueOnce([
26+
MockTemplateVersionParameter1,
27+
MockTemplateVersionParameter2,
28+
// Immutable parameters
29+
MockTemplateVersionParameter4,
30+
])
31+
jest.spyOn(api, "getWorkspaceBuildParameters").mockResolvedValueOnce([
32+
MockWorkspaceBuildParameter1,
33+
MockWorkspaceBuildParameter2,
34+
// Immutable value
35+
MockWorkspaceBuildParameter4,
36+
])
3537
// Mock the API calls that submit data
3638
const postWorkspaceBuildSpy = jest
3739
.spyOn(api, "postWorkspaceBuild")

site/src/pages/WorkspaceSettingsPage/WorkspaceParametersPage/WorkspaceParametersPage.tsx

+19-8
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,20 @@ import { PageHeader, PageHeaderTitle } from "components/PageHeader/PageHeader"
1414
import { FC } from "react"
1515
import { isApiValidationError } from "api/errors"
1616
import { ErrorAlert } from "components/Alert/ErrorAlert"
17+
import { WorkspaceBuildParameter } from "api/typesGenerated"
1718

1819
const WorkspaceParametersPage = () => {
1920
const { workspace } = useWorkspaceSettingsContext()
20-
const query = useQuery({
21+
const parameters = useQuery({
2122
queryKey: ["workspace", workspace.id, "parameters"],
2223
queryFn: () => getWorkspaceParameters(workspace),
2324
})
2425
const navigate = useNavigate()
25-
const mutation = useMutation({
26-
mutationFn: (formValues: WorkspaceParametersFormValues) =>
26+
const updateParameters = useMutation({
27+
mutationFn: (buildParameters: WorkspaceBuildParameter[]) =>
2728
postWorkspaceBuild(workspace.id, {
2829
transition: "start",
29-
rich_parameter_values: formValues.rich_parameter_values,
30+
rich_parameter_values: buildParameters,
3031
}),
3132
onSuccess: () => {
3233
navigate(`/${workspace.owner_name}/${workspace.name}`)
@@ -40,10 +41,20 @@ const WorkspaceParametersPage = () => {
4041
</Helmet>
4142

4243
<WorkspaceParametersPageView
43-
data={query.data}
44-
submitError={mutation.error}
45-
isSubmitting={mutation.isLoading}
46-
onSubmit={mutation.mutate}
44+
data={parameters.data}
45+
submitError={updateParameters.error}
46+
isSubmitting={updateParameters.isLoading}
47+
onSubmit={(values) => {
48+
// When updating the parameters, the API does not accept immutable
49+
// values so we need to filter them
50+
const onlyMultableValues = parameters
51+
.data!.templateVersionRichParameters.filter((p) => p.mutable)
52+
.map(
53+
(p) =>
54+
values.rich_parameter_values.find((v) => v.name === p.name)!,
55+
)
56+
updateParameters.mutate(onlyMultableValues)
57+
}}
4758
onCancel={() => {
4859
navigate("../..")
4960
}}

site/src/testHelpers/entities.ts

+5
Original file line numberDiff line numberDiff line change
@@ -2078,6 +2078,11 @@ export const MockWorkspaceBuildParameter3: TypesGen.WorkspaceBuildParameter = {
20782078
value: "my-database",
20792079
}
20802080

2081+
export const MockWorkspaceBuildParameter4: TypesGen.WorkspaceBuildParameter = {
2082+
name: MockTemplateVersionParameter4.name,
2083+
value: "immutable-value",
2084+
}
2085+
20812086
export const MockWorkspaceBuildParameter5: TypesGen.WorkspaceBuildParameter = {
20822087
name: MockTemplateVersionParameter5.name,
20832088
value: "5",

0 commit comments

Comments
 (0)