openhands / src /hooks /mutation /use-delete-conversation.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
3d700dd verified
Raw History Blame Contribute Delete
1.85 kB
import { useMutation, useQueryClient } from "@tanstack/react-query";
import AgentServerConversationService from "#/api/conversation-service/agent-server-conversation-service.api";
import { clearConversationLocalStorage } from "#/utils/conversation-local-storage";
export const useDeleteConversation = () => {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (variables: { conversationId: string }) =>
AgentServerConversationService.deleteConversation(
variables.conversationId,
),
onMutate: async (variables) => {
await queryClient.cancelQueries({ queryKey: ["user", "conversations"] });
const previousConversations = queryClient.getQueryData([
"user",
"conversations",
]);
queryClient.setQueryData(
["user", "conversations"],
(old: { conversation_id: string }[] | undefined) =>
old?.filter(
(conv) => conv.conversation_id !== variables.conversationId,
),
);
return { previousConversations };
},
onSuccess: (_, variables) => {
clearConversationLocalStorage(variables.conversationId);
},
onError: (err, variables, context) => {
if (context?.previousConversations) {
queryClient.setQueryData(
["user", "conversations"],
context.previousConversations,
);
}
},
onSettled: () => {
queryClient.invalidateQueries({ queryKey: ["user", "conversations"] });
// Mirror useCreateConversation: cloud surfaces in-flight
// conversations via useStartTasks, so invalidate that key too so the
// panel refreshes regardless of whether the deleted item was a ready
// conversation or a still-provisioning start task.
queryClient.invalidateQueries({ queryKey: ["start-tasks"] });
},
});
};