Complete basic pre-cleaned group member assignment/unassignment

This commit is contained in:
Tuan Dang
2024-03-19 18:23:52 -07:00
parent 2a134b9dc2
commit 686b88fc97
18 changed files with 642 additions and 18 deletions
+6 -1
View File
@@ -1,4 +1,9 @@
export {
useCreateGroup,
useCreateGroupUserMembership,
useDeleteGroup,
useUpdateGroup} from "./mutations";
useDeleteGroupUserMembership,
useUpdateGroup} from "./mutations";
export {
useGetGroupUserMemberships
} from "./queries";
@@ -3,6 +3,7 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request";
import { organizationKeys } from "../organization/queries";
import { groupKeys } from "./queries";
import { TGroup } from "./types";
export const useCreateGroup = () => {
@@ -84,4 +85,48 @@ export const useDeleteGroup = () => {
queryClient.invalidateQueries(organizationKeys.getOrgGroups(orgId));
}
});
};
export const useCreateGroupUserMembership = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({
slug,
username
}: {
slug: string;
username: string;
}) => {
const {
data
} = await apiRequest.post<TGroup>(`/api/v1/groups/${slug}/users/${username}`);
return data;
},
onSuccess: (_, { slug }) => {
queryClient.invalidateQueries(groupKeys.getGroupUserMembership(slug));
}
});
};
export const useDeleteGroupUserMembership = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: async ({
slug,
username
}: {
slug: string;
username: string;
}) => {
const {
data
} = await apiRequest.delete<TGroup>(`/api/v1/groups/${slug}/users/${username}`);
return data;
},
onSuccess: (_, { slug }) => {
queryClient.invalidateQueries(groupKeys.getGroupUserMembership(slug));
}
});
};
+29
View File
@@ -0,0 +1,29 @@
import { useQuery } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request";
export const groupKeys = {
getGroupUserMembership: (slug: string) => [{ slug }, "group-user-memberships"] as const
}
type TUser = {
id: string;
email: string;
username: string;
firstName: string;
lastName: string;
isPartOfGroup: boolean;
}
export const useGetGroupUserMemberships = (groupSlug: string) => {
return useQuery({
queryKey: groupKeys.getGroupUserMembership(groupSlug),
queryFn: async () => {
const {
data: users
} = await apiRequest.get<TUser[]>(`/api/v1/groups/${groupSlug}/users`);
return users;
}
});
};