Implementar conversación con HOOKS #111

This commit is contained in:
2026-02-17 15:47:32 -06:00
parent 8444f2a87e
commit cd16b3cb4f
3 changed files with 432 additions and 166 deletions

View File

@@ -1,29 +1,94 @@
import { useMutation } from "@tanstack/react-query";
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import {
ai_plan_chat,
ai_plan_chat_v2,
ai_plan_improve,
ai_subject_chat,
ai_subject_improve,
archive_conversation,
create_conversation,
get_chat_history,
getConversationByPlan,
library_search,
} from "../api/ai.api";
} from '../api/ai.api'
export function useAIPlanImprove() {
return useMutation({ mutationFn: ai_plan_improve });
return useMutation({ mutationFn: ai_plan_improve })
}
export function useAIPlanChat() {
return useMutation({ mutationFn: ai_plan_chat });
return useMutation({
mutationFn: async (payload: {
planId: UUID
content: string
campos?: Array<string>
conversacionId?: string
}) => {
let currentId = payload.conversacionId
// 1. Si no hay ID, creamos la conversación
if (!currentId) {
const response = await create_conversation(payload.planId)
// CAMBIO AQUÍ: Accedemos a la estructura correcta según tu consola
currentId = response.conversation_plan.id
console.log('Nuevo ID extraído:', currentId)
}
// 2. Ahora enviamos el mensaje con el ID garantizado
const result = await ai_plan_chat_v2({
conversacionId: currentId!,
content: payload.content,
campos: payload.campos,
})
// Retornamos el resultado del chat y el ID para el estado del componente
return { ...result, conversacionId: currentId }
},
})
}
export function useChatHistory(conversacionId?: string) {
return useQuery({
queryKey: ['chat-history', conversacionId],
queryFn: async () => {
console.log('--- EJECUTANDO QUERY FN ---')
console.log('ID RECIBIDO:', conversacionId)
return get_chat_history(conversacionId!)
},
// Simplificamos el enabled para probar
enabled: Boolean(conversacionId),
})
}
export function useArchiveConversation() {
const queryClient = useQueryClient()
return useMutation({
mutationFn: (id: string) => archive_conversation(id),
onSuccess: () => {
// Opcional: limpiar datos viejos de la caché
queryClient.invalidateQueries({ queryKey: ['chat-history'] })
},
})
}
export function useConversationByPlan(planId: string | null) {
return useQuery({
queryKey: ['conversation-by-plan', planId],
queryFn: () => getConversationByPlan(planId!),
enabled: !!planId, // solo ejecuta si existe planId
})
}
export function useAISubjectImprove() {
return useMutation({ mutationFn: ai_subject_improve });
return useMutation({ mutationFn: ai_subject_improve })
}
export function useAISubjectChat() {
return useMutation({ mutationFn: ai_subject_chat });
return useMutation({ mutationFn: ai_subject_chat })
}
export function useLibrarySearch() {
return useMutation({ mutationFn: library_search });
return useMutation({ mutationFn: library_search })
}