|
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}`);
|
|
},
|
|
});
|
|
};
|
|
|