Skip to content

Commit c6965e5

Browse files
committed
fix: when inviting a user, the assigned role is not persisted
Fixes #2307
1 parent f72e0c1 commit c6965e5

File tree

3 files changed

+47
-38
lines changed

3 files changed

+47
-38
lines changed

src/api/query-hooks/useUserAPI.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
import { UserFormValue } from "@flanksource-ui/components/Users/UserForm";
22
import { useMutation, UseMutationOptions } from "@tanstack/react-query";
3-
import { deleteUser, updateUser } from "../services/users";
3+
import { AxiosError } from "axios";
4+
import {
5+
deleteUser,
6+
inviteUser,
7+
InviteUserPayload,
8+
updateUser
9+
} from "../services/users";
10+
11+
export function useInviteUser(
12+
options: UseMutationOptions<any, AxiosError, InviteUserPayload>
13+
) {
14+
return useMutation({
15+
...options,
16+
mutationFn: async (user: UserFormValue) => {
17+
const res = await inviteUser(user);
18+
return res.data ?? undefined;
19+
}
20+
});
21+
}
422

523
export function useDeleteUser(
624
options: UseMutationOptions<

src/api/services/users.ts

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,19 @@ export type InviteUserPayload = {
6767
firstName: string;
6868
lastName: string;
6969
email: string;
70+
role: string;
7071
};
7172

72-
export const inviteUser = ({ firstName, lastName, email }: InviteUserPayload) =>
73-
resolvePostGrestRequestWithPagination<{
74-
id: string;
75-
}>(Auth.post("/invite_user", { firstName, lastName, email }));
73+
export const inviteUser = ({
74+
firstName,
75+
lastName,
76+
email,
77+
role
78+
}: InviteUserPayload) => {
79+
return Auth.post<{
80+
link: string;
81+
}>("/invite_user", { firstName, lastName, email, role });
82+
};
7683

7784
export const getVersionInfo = () =>
7885
resolvePostGrestRequestWithPagination<VersionInfo>(

src/pages/UsersPage.tsx

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,14 @@
11
import useUpdateUser, {
2-
useDeleteUser
2+
useDeleteUser,
3+
useInviteUser
34
} from "@flanksource-ui/api/query-hooks/useUserAPI";
45
import { RegisteredUser } from "@flanksource-ui/api/types/users";
5-
import UserForm, {
6-
UserFormValue
7-
} from "@flanksource-ui/components/Users/UserForm";
6+
import UserForm from "@flanksource-ui/components/Users/UserForm";
87
import { SearchLayout } from "@flanksource-ui/ui/Layout/SearchLayout";
98
import { useQuery } from "@tanstack/react-query";
10-
import { useCallback, useRef, useState } from "react";
9+
import { useRef, useState } from "react";
1110
import { ImUserPlus } from "react-icons/im";
12-
import {
13-
getRegisteredUsers,
14-
inviteUser,
15-
updateUserRole
16-
} from "../api/services/users";
11+
import { getRegisteredUsers } from "../api/services/users";
1712
import { Modal } from "../components";
1813
import { AuthorizationAccessCheck } from "../components/Permissions/AuthorizationAccessCheck";
1914
import { toastError, toastSuccess } from "../components/Toast/toast";
@@ -41,32 +36,20 @@ export function UsersPage() {
4136
select: (data) => {
4237
return data.data || [];
4338
},
44-
cacheTime: 0
39+
cacheTime: 0,
40+
staleTime: 0
4541
});
4642

47-
const inviteUserFunction = useCallback(
48-
async (val: UserFormValue) => {
49-
try {
50-
await inviteUser({
51-
firstName: val.firstName,
52-
lastName: val.lastName,
53-
email: val.email
54-
});
55-
const userId = users.find((item) => item.email === val.email)?.id;
56-
if (userId) {
57-
await updateUserRole(userId, [val.role]);
58-
return;
59-
}
60-
const userName = `${val.firstName} ${val.lastName}`;
61-
toastSuccess(`${userName} invited successfully`);
62-
setIsOpen(false);
63-
refetch();
64-
} catch (ex) {
65-
toastError(ex as any);
66-
}
43+
const { mutate: inviteUserFunction, isLoading: isInviting } = useInviteUser({
44+
onSuccess: () => {
45+
refetch();
46+
toastSuccess(`user invited successfully`);
47+
setIsOpen(false);
6748
},
68-
[refetch, users]
69-
);
49+
onError: (error) => {
50+
toastError(error.message);
51+
}
52+
});
7053

7154
const { mutate: deleteUserFunction, isLoading: isDeleting } = useDeleteUser({
7255
onSuccess: () => {
@@ -159,6 +142,7 @@ export function UsersPage() {
159142
className="flex flex-col bg-white p-4"
160143
onSubmit={inviteUserFunction}
161144
onClose={() => setIsOpen(false)}
145+
isSubmitting={isInviting}
162146
/>
163147
</Modal>
164148

0 commit comments

Comments
 (0)