File size: 1,999 Bytes
3d700dd | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | import { useMutation, useQueryClient } from "@tanstack/react-query";
import AgentServerConversationService from "#/api/conversation-service/agent-server-conversation-service.api";
export const useUpdateConversation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (variables: { conversationId: string; newTitle: string }) =>
AgentServerConversationService.updateConversationTitle(
variables.conversationId,
variables.newTitle,
),
onMutate: async (variables) => {
await queryClient.cancelQueries({ queryKey: ["user", "conversations"] });
const previousConversations = queryClient.getQueryData([
"user",
"conversations",
]);
queryClient.setQueryData(
["user", "conversations"],
(old: { id: string; title: string }[] | undefined) =>
old?.map((conv) =>
conv.id === variables.conversationId
? { ...conv, title: variables.newTitle }
: conv,
),
);
// Also optimistically update the active conversation query
queryClient.setQueryData(
["user", "conversation", variables.conversationId],
(old: { title: string } | undefined) =>
old ? { ...old, title: variables.newTitle } : old,
);
return { previousConversations };
},
onError: (err, variables, context) => {
if (context?.previousConversations) {
queryClient.setQueryData(
["user", "conversations"],
context.previousConversations,
);
}
},
onSettled: (data, error, variables) => {
// Invalidate and refetch the conversation list to show the updated title
queryClient.invalidateQueries({
queryKey: ["user", "conversations"],
});
// Also invalidate the specific conversation query
queryClient.invalidateQueries({
queryKey: ["user", "conversation", variables.conversationId],
});
},
});
};
|