import { useMutation, useQueryClient } from "@tanstack/react-query"; import { useNavigate } from "react-router"; import posthog from "posthog-js"; import { useDispatch, useSelector } from "react-redux"; import OpenHands from "#/api/open-hands"; import { setInitialQuery } from "#/state/initial-query-slice"; import { RootState } from "#/store"; import { useAuth } from "#/context/auth-context"; export const useCreateConversation = () => { const navigate = useNavigate(); const dispatch = useDispatch(); const { gitHubToken } = useAuth(); const queryClient = useQueryClient(); const { selectedRepository, files, importedProjectZip } = useSelector( (state: RootState) => state.initialQuery, ); return useMutation({ mutationFn: (variables: { q?: string }) => { if ( !variables.q?.trim() && !selectedRepository && files.length === 0 && !importedProjectZip ) { throw new Error("No query provided"); } if (variables.q) dispatch(setInitialQuery(variables.q)); return OpenHands.createConversation( gitHubToken || undefined, selectedRepository || undefined, ); }, onSuccess: async ({ conversation_id: conversationId }, { q }) => { posthog.capture("initial_query_submitted", { entry_point: "task_form", query_character_length: q?.length, has_repository: !!selectedRepository, has_files: files.length > 0, }); await queryClient.invalidateQueries({ queryKey: ["user", "conversations"], }); navigate(`/conversations/${conversationId}`); }, }); };