Skip to content

Commit f424a70

Browse files
committed
Extract adding user
1 parent 8f5f6da commit f424a70

File tree

4 files changed

+39
-56
lines changed

4 files changed

+39
-56
lines changed

site/src/api/api.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ export const getTemplateACL = async (
947947
export const updateTemplateACL = async (
948948
templateId: string,
949949
data: TypesGen.UpdateTemplateACL,
950-
): Promise<TypesGen.TemplateACL> => {
950+
): Promise<{ message: string }> => {
951951
const response = await axios.patch(
952952
`/api/v2/templates/${templateId}/acl`,
953953
data,

site/src/api/queries/templates.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,13 @@ import {
66
type TemplateVersion,
77
CreateTemplateRequest,
88
ProvisionerJob,
9+
TemplateRole,
910
} from "api/typesGenerated";
10-
import { type QueryClient, type QueryOptions } from "react-query";
11+
import {
12+
MutationOptions,
13+
type QueryClient,
14+
type QueryOptions,
15+
} from "react-query";
1116
import { delay } from "utils/delay";
1217

1318
export const templateByNameKey = (orgId: string, name: string) => [
@@ -43,6 +48,26 @@ export const templateACL = (templateId: string) => {
4348
};
4449
};
4550

51+
export const addUserToTemplateACL = (
52+
queryClient: QueryClient,
53+
): MutationOptions<
54+
Awaited<ReturnType<typeof API.updateTemplateACL>>,
55+
unknown,
56+
{ templateId: string; userId: string; role: TemplateRole }
57+
> => {
58+
return {
59+
mutationFn: ({ templateId, userId, role }) =>
60+
API.updateTemplateACL(templateId, {
61+
user_perms: {
62+
[userId]: role,
63+
},
64+
}),
65+
onSuccess: async (templateAcl, { templateId }) => {
66+
await queryClient.invalidateQueries(["templateAcl", templateId]);
67+
},
68+
};
69+
};
70+
4671
export const templateExamples = (orgId: string) => {
4772
return {
4873
queryKey: [...getTemplatesQueryKey(orgId), "examples"],

site/src/pages/TemplateSettingsPage/TemplatePermissionsPage/TemplatePermissionsPage.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ import { templateACLMachine } from "xServices/template/templateACLXService";
1313
import { useTemplateSettings } from "../TemplateSettingsLayout";
1414
import { TemplatePermissionsPageView } from "./TemplatePermissionsPageView";
1515
import { docs } from "utils/docs";
16-
import { useQuery } from "react-query";
17-
import { templateACL } from "api/queries/templates";
16+
import { useMutation, useQuery, useQueryClient } from "react-query";
17+
import { addUserToTemplateACL, templateACL } from "api/queries/templates";
1818

1919
export const TemplatePermissionsPage: FC<
2020
React.PropsWithChildren<unknown>
@@ -32,6 +32,8 @@ export const TemplatePermissionsPage: FC<
3232
send({ type: "LOAD", data });
3333
},
3434
});
35+
const queryClient = useQueryClient();
36+
const addUserMutation = useMutation(addUserToTemplateACL(queryClient));
3537

3638
return (
3739
<>
@@ -68,10 +70,15 @@ export const TemplatePermissionsPage: FC<
6870
templateID={template.id}
6971
templateACL={templateACLQuery.data}
7072
canUpdatePermissions={Boolean(permissions?.canUpdateTemplate)}
71-
onAddUser={(user, role, reset) => {
72-
send("ADD_USER", { user, role, onDone: reset });
73+
onAddUser={async (user, role, reset) => {
74+
await addUserMutation.mutateAsync({
75+
templateId: template.id,
76+
userId: user.id,
77+
role,
78+
});
79+
reset();
7380
}}
74-
isAddingUser={state.matches("addingUser")}
81+
isAddingUser={addUserMutation.isLoading}
7582
onUpdateUser={(user, role) => {
7683
send("UPDATE_USER_ROLE", { user, role });
7784
}}

site/src/xServices/template/templateACLXService.ts

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export const templateACLMachine = createMachine(
1515
templateId: string;
1616
templateACL?: TemplateACL;
1717
// User
18-
userToBeAdded?: TemplateUser;
1918
userToBeUpdated?: TemplateUser;
2019
addUserCallback?: () => void;
2120
// Group
@@ -28,9 +27,6 @@ export const templateACLMachine = createMachine(
2827
data: TemplateACL;
2928
};
3029
// User
31-
addUser: {
32-
data: unknown;
33-
};
3430
updateUser: {
3531
data: unknown;
3632
};
@@ -47,12 +43,6 @@ export const templateACLMachine = createMachine(
4743
type: "LOAD";
4844
data: TemplateACL;
4945
}
50-
| {
51-
type: "ADD_USER";
52-
user: TemplateUser;
53-
role: TemplateRole;
54-
onDone: () => void;
55-
}
5646
| {
5747
type: "UPDATE_USER_ROLE";
5848
user: TemplateUser;
@@ -94,7 +84,6 @@ export const templateACLMachine = createMachine(
9484
idle: {
9585
on: {
9686
// User
97-
ADD_USER: { target: "addingUser", actions: ["assignUserToBeAdded"] },
9887
UPDATE_USER_ROLE: {
9988
target: "updatingUser",
10089
actions: ["assignUserToBeUpdated"],
@@ -119,15 +108,6 @@ export const templateACLMachine = createMachine(
119108
},
120109
},
121110
// User
122-
addingUser: {
123-
invoke: {
124-
src: "addUser",
125-
onDone: {
126-
target: "idle",
127-
actions: ["addUserToTemplateACL", "runAddUserCallback"],
128-
},
129-
},
130-
},
131111
updatingUser: {
132112
invoke: {
133113
src: "updateUser",
@@ -187,12 +167,6 @@ export const templateACLMachine = createMachine(
187167
{
188168
services: {
189169
// User
190-
addUser: ({ templateId }, { user, role }) =>
191-
updateTemplateACL(templateId, {
192-
user_perms: {
193-
[user.id]: role,
194-
},
195-
}),
196170
updateUser: ({ templateId }, { user, role }) =>
197171
updateTemplateACL(templateId, {
198172
user_perms: {
@@ -230,29 +204,6 @@ export const templateACLMachine = createMachine(
230204
templateACL: (_, { data }) => data,
231205
}),
232206
// User
233-
assignUserToBeAdded: assign({
234-
userToBeAdded: (_, { user, role }) => ({ ...user, role }),
235-
addUserCallback: (_, { onDone }) => onDone,
236-
}),
237-
addUserToTemplateACL: assign({
238-
templateACL: ({ templateACL, userToBeAdded }) => {
239-
if (!userToBeAdded) {
240-
throw new Error("No user to be added");
241-
}
242-
if (!templateACL) {
243-
throw new Error("Template ACL is not loaded yet");
244-
}
245-
return {
246-
...templateACL,
247-
users: [...templateACL.users, userToBeAdded],
248-
};
249-
},
250-
}),
251-
runAddUserCallback: ({ addUserCallback }) => {
252-
if (addUserCallback) {
253-
addUserCallback();
254-
}
255-
},
256207
assignUserToBeUpdated: assign({
257208
userToBeUpdated: (_, { user, role }) => ({ ...user, role }),
258209
}),

0 commit comments

Comments
 (0)