Update mutations.tsx

This commit is contained in:
Daniel Hougaard
2024-09-08 19:27:31 +04:00
parent 556ae168dd
commit 6bdf3455f5
+82 -106
View File
@@ -3,128 +3,104 @@ import { useMutation, useQueryClient } from "@tanstack/react-query";
import { apiRequest } from "@app/config/request"; import { apiRequest } from "@app/config/request";
import { organizationKeys } from "../organization/queries"; import { organizationKeys } from "../organization/queries";
import { userKeys } from "../users/queries";
import { groupKeys } from "./queries"; import { groupKeys } from "./queries";
import { TGroup } from "./types"; import { TGroup } from "./types";
export const useCreateGroup = () => { export const useCreateGroup = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
mutationFn: async ({ mutationFn: async ({
name, name,
slug, slug,
role role
}: { }: {
name: string; name: string;
slug: string; slug: string;
organizationId: string; organizationId: string;
role?: string; role?: string;
}) => { }) => {
const { const { data: group } = await apiRequest.post<TGroup>("/api/v1/groups", {
data: group name,
} = await apiRequest.post<TGroup>("/api/v1/groups", { slug,
name, role
slug, });
role
}); return group;
},
return group; onSuccess: (_, { organizationId }) => {
}, queryClient.invalidateQueries(organizationKeys.getOrgGroups(organizationId));
onSuccess: (_, { organizationId }) => { }
queryClient.invalidateQueries(organizationKeys.getOrgGroups(organizationId)); });
}
});
}; };
export const useUpdateGroup = () => { export const useUpdateGroup = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
mutationFn: async ({ mutationFn: async ({
currentSlug, currentSlug,
name, name,
slug, slug,
role role
}: { }: {
currentSlug: string; currentSlug: string;
name?: string; name?: string;
slug?: string; slug?: string;
role?: string; role?: string;
}) => { }) => {
const { const { data: group } = await apiRequest.patch<TGroup>(`/api/v1/groups/${currentSlug}`, {
data: group name,
} = await apiRequest.patch<TGroup>(`/api/v1/groups/${currentSlug}`, { slug,
name, role
slug, });
role
}); return group;
},
return group; onSuccess: ({ orgId }) => {
}, queryClient.invalidateQueries(organizationKeys.getOrgGroups(orgId));
onSuccess: ({ orgId }) => { }
queryClient.invalidateQueries(organizationKeys.getOrgGroups(orgId)); });
}
});
}; };
export const useDeleteGroup = () => { export const useDeleteGroup = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
mutationFn: async ({ mutationFn: async ({ slug }: { slug: string }) => {
slug const { data: group } = await apiRequest.delete<TGroup>(`/api/v1/groups/${slug}`);
}: {
slug: string;
}) => {
const {
data: group
} = await apiRequest.delete<TGroup>(`/api/v1/groups/${slug}`);
return group; return group;
}, },
onSuccess: ({ orgId }) => { onSuccess: ({ orgId }) => {
queryClient.invalidateQueries(organizationKeys.getOrgGroups(orgId)); queryClient.invalidateQueries(organizationKeys.getOrgGroups(orgId));
} }
}); });
}; };
export const useAddUserToGroup = () => { export const useAddUserToGroup = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
mutationFn: async ({ mutationFn: async ({ slug, username }: { slug: string; username: string }) => {
slug, const { data } = await apiRequest.post<TGroup>(`/api/v1/groups/${slug}/users/${username}`);
username
}: {
slug: string;
username: string;
}) => {
const {
data
} = await apiRequest.post<TGroup>(`/api/v1/groups/${slug}/users/${username}`);
return data; return data;
}, },
onSuccess: (_, { slug }) => { onSuccess: (_, { slug }) => {
queryClient.invalidateQueries(groupKeys.forGroupUserMemberships(slug)); queryClient.invalidateQueries(groupKeys.forGroupUserMemberships(slug));
} }
}); });
}; };
export const useRemoveUserFromGroup = () => { export const useRemoveUserFromGroup = () => {
const queryClient = useQueryClient(); const queryClient = useQueryClient();
return useMutation({ return useMutation({
mutationFn: async ({ mutationFn: async ({ slug, username }: { slug: string; username: string }) => {
slug, const { data } = await apiRequest.delete<TGroup>(`/api/v1/groups/${slug}/users/${username}`);
username
}: {
slug: string;
username: string;
}) => {
const {
data
} = await apiRequest.delete<TGroup>(`/api/v1/groups/${slug}/users/${username}`);
return data; return data;
}, },
onSuccess: (_, { slug }) => { onSuccess: (_, { slug, username }) => {
queryClient.invalidateQueries(groupKeys.forGroupUserMemberships(slug)); queryClient.invalidateQueries(groupKeys.forGroupUserMemberships(slug));
} queryClient.invalidateQueries(userKeys.listUserGroupMemberships(username));
}); }
}; });
};