Skip to content

Commit 301c045

Browse files
chore(site): remove create workspace xservice (#10217)
* Move xstate transitions to provider * Centrlize auth logic in the provider * Remove actor * Remove auth xservice * Add loader while AuthProvider is loading * Simplify and fix a few computed states * Add a few replaces * Fix logout * Remove unused import * Fix RequireAuth test * Fix wait loader * Fix tests * Remove unecessary type * Rename workspace queries module * Remove auto create from workspace xservice * Move external auth into its own hook * Remove permissions fetching from templateByName query * Remove form load from service * Remove create workspace service entirely * refactor: update workspace automation to use useEffectEvent --------- Co-authored-by: Parkreiner <michaelsmith@coder.com> Co-authored-by: Michael Smith <throwawayclover@gmail.com>
1 parent 5be4b12 commit 301c045

File tree

13 files changed

+277
-363
lines changed

13 files changed

+277
-363
lines changed

site/src/api/queries/templateVersions.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,10 @@ export const templateVersionLogs = (versionId: string) => {
66
queryFn: () => API.getTemplateVersionLogs(versionId),
77
};
88
};
9+
10+
export const richParameters = (versionId: string) => {
11+
return {
12+
queryKey: ["templateVersion", versionId, "richParameters"],
13+
queryFn: () => API.getTemplateVersionRichParameters(versionId),
14+
};
15+
};

site/src/api/queries/templates.ts

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as API from "api/api";
22
import {
33
type Template,
4-
type AuthorizationResponse,
54
type CreateTemplateVersionRequest,
65
type ProvisionerJobStatus,
76
type TemplateVersion,
@@ -21,25 +20,10 @@ export const templateByNameKey = (orgId: string, name: string) => [
2120
export const templateByName = (
2221
orgId: string,
2322
name: string,
24-
): QueryOptions<{ template: Template; permissions: AuthorizationResponse }> => {
23+
): QueryOptions<Template> => {
2524
return {
2625
queryKey: templateByNameKey(orgId, name),
27-
queryFn: async () => {
28-
const template = await API.getTemplateByName(orgId, name);
29-
const permissions = await API.checkAuthorization({
30-
checks: {
31-
canUpdateTemplate: {
32-
object: {
33-
resource_type: "template",
34-
resource_id: template.id,
35-
},
36-
action: "update",
37-
},
38-
},
39-
});
40-
41-
return { template, permissions };
42-
},
26+
queryFn: async () => API.getTemplateByName(orgId, name),
4327
};
4428
};
4529

site/src/api/queries/workspace.ts

Lines changed: 0 additions & 20 deletions
This file was deleted.

site/src/api/queries/workspaces.ts

Lines changed: 80 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,89 @@
11
import * as API from "api/api";
2-
import { type QueryOptions } from "react-query";
2+
import { QueryClient, type QueryOptions } from "react-query";
3+
34
import {
5+
type WorkspaceBuildParameter,
6+
type Workspace,
7+
type CreateWorkspaceRequest,
48
type WorkspacesResponse,
59
type WorkspacesRequest,
610
} from "api/typesGenerated";
711

12+
export const workspaceByOwnerAndNameKey = (owner: string, name: string) => [
13+
"workspace",
14+
owner,
15+
name,
16+
"settings",
17+
];
18+
19+
export const workspaceByOwnerAndName = (
20+
owner: string,
21+
name: string,
22+
): QueryOptions<Workspace> => {
23+
return {
24+
queryKey: workspaceByOwnerAndNameKey(owner, name),
25+
queryFn: () => API.getWorkspaceByOwnerAndName(owner, name),
26+
};
27+
};
28+
29+
type AutoCreateWorkspaceOptions = {
30+
templateName: string;
31+
versionId?: string;
32+
organizationId: string;
33+
defaultBuildParameters?: WorkspaceBuildParameter[];
34+
defaultName: string;
35+
};
36+
37+
type CreateWorkspaceMutationVariables = CreateWorkspaceRequest & {
38+
userId: string;
39+
organizationId: string;
40+
};
41+
42+
export const createWorkspace = (queryClient: QueryClient) => {
43+
return {
44+
mutationFn: async (variables: CreateWorkspaceMutationVariables) => {
45+
const { userId, organizationId, ...req } = variables;
46+
return API.createWorkspace(organizationId, userId, req);
47+
},
48+
onSuccess: async () => {
49+
await queryClient.invalidateQueries(["workspaces"]);
50+
},
51+
};
52+
};
53+
54+
export const autoCreateWorkspace = (queryClient: QueryClient) => {
55+
return {
56+
mutationFn: async ({
57+
templateName,
58+
versionId,
59+
organizationId,
60+
defaultBuildParameters,
61+
defaultName,
62+
}: AutoCreateWorkspaceOptions) => {
63+
let templateVersionParameters;
64+
65+
if (versionId) {
66+
templateVersionParameters = { template_version_id: versionId };
67+
} else {
68+
const template = await API.getTemplateByName(
69+
organizationId,
70+
templateName,
71+
);
72+
templateVersionParameters = { template_id: template.id };
73+
}
74+
75+
return API.createWorkspace(organizationId, "me", {
76+
...templateVersionParameters,
77+
name: defaultName,
78+
rich_parameter_values: defaultBuildParameters,
79+
});
80+
},
81+
onSuccess: async () => {
82+
await queryClient.invalidateQueries(["workspaces"]);
83+
},
84+
};
85+
};
86+
887
export function workspacesKey(config: WorkspacesRequest = {}) {
988
const { q, limit } = config;
1089
return ["workspaces", { q, limit }] as const;

site/src/components/Stack/Stack.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { FC } from "react";
1+
import { forwardRef } from "react";
22
import type { CSSObject } from "@emotion/react";
33

44
export type StackProps = {
@@ -10,7 +10,7 @@ export type StackProps = {
1010
wrap?: CSSObject["flexWrap"];
1111
} & React.HTMLProps<HTMLDivElement>;
1212

13-
export const Stack: FC<StackProps> = (props) => {
13+
export const Stack = forwardRef<HTMLDivElement, StackProps>((props, ref) => {
1414
const {
1515
children,
1616
direction = "column",
@@ -24,6 +24,7 @@ export const Stack: FC<StackProps> = (props) => {
2424
return (
2525
<div
2626
{...divProps}
27+
ref={ref}
2728
css={(theme) => ({
2829
display: "flex",
2930
flexDirection: direction,
@@ -37,4 +38,4 @@ export const Stack: FC<StackProps> = (props) => {
3738
{children}
3839
</div>
3940
);
40-
};
41+
});

site/src/pages/CreateTemplatePage/DuplicateTemplateView.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ export const DuplicateTemplateView = () => {
2222
const templateByNameQuery = useQuery(
2323
templateByName(organizationId, searchParams.get("fromTemplate")!),
2424
);
25-
const activeVersionId =
26-
templateByNameQuery.data?.template.active_version_id ?? "";
25+
const activeVersionId = templateByNameQuery.data?.active_version_id ?? "";
2726
const templateVersionQuery = useQuery({
2827
...templateVersion(activeVersionId),
2928
enabled: templateByNameQuery.isSuccess,
@@ -63,7 +62,7 @@ export const DuplicateTemplateView = () => {
6362
return (
6463
<CreateTemplateForm
6564
{...formPermissions}
66-
copiedTemplate={templateByNameQuery.data!.template}
65+
copiedTemplate={templateByNameQuery.data!}
6766
error={createTemplateMutation.error}
6867
isSubmitting={createTemplateMutation.isLoading}
6968
variables={templateVersionVariablesQuery.data}

0 commit comments

Comments
 (0)