import { useQueryClient } from "@tanstack/react-query"; import { addComment, deleteComment, updateComment } from "../api"; export function addCommentMutationOptions() { const queryClient = useQueryClient() return { mutationFn: (comment: AddPluginComment): Promise<{ comment: PluginComment }> => { return addComment(comment); }, onSettled: (data: { comment: PluginComment } | undefined, error: Error | null, variables: AddPluginComment) => { if (data) { queryClient.invalidateQueries({ queryKey: ['comments', variables.plugin_slug] }) } } }; }; export function deleteCommentMutationOptions() { const queryClient = useQueryClient() return { mutationFn: (comment: PluginComment) => deleteComment(comment?.id ?? 0), onMutate: (comment: PluginComment) => { queryClient.setQueryData(['comments', comment.plugin_slug], (old: PluginComment[]) => { return old.filter((c) => c.id !== comment.id) }) }, onSettled: (data: { deleted: boolean } | undefined, error: Error | null, variables: PluginComment) => { if (data) { queryClient.invalidateQueries({ queryKey: ['comments', variables.plugin_slug] }); } }, }; } export function updateCommentMutationOptions() { const queryClient = useQueryClient() return { mutationFn: (args: { comment_id: number, comment_content: string, plugin_slug: string }): Promise<{ comment: PluginComment }> => { return updateComment(args); }, onMutate: (args: { comment_id: number, comment_content: string, plugin_slug: string }) => { queryClient.setQueryData(['comments', args.plugin_slug], (old: PluginComment[]) => { return old.map((c) => c.id === args.comment_id ? { ...c, comment_content: args.comment_content } : c) }) }, onSettled: (data: { comment: PluginComment } | undefined, error: Error | null, variables: { comment_id: number, comment_content: string, plugin_slug: string }) => { queryClient.invalidateQueries({ queryKey: ['comments', variables.plugin_slug] }); }, } }