mirror of
https://github.com/langgenius/dify.git
synced 2026-03-16 20:37:42 +08:00
75 lines
2.0 KiB
TypeScript
75 lines
2.0 KiB
TypeScript
import type { ChatConfig } from './types'
|
|
import type { InputForm } from '@/app/components/base/chat/chat/type'
|
|
import type { ChatItemInTree, Inputs } from '@/app/components/base/chat/types'
|
|
import { useEffect, useRef } from 'react'
|
|
import { useStore } from '../../../store'
|
|
import { useChatFlowControl } from './use-chat-flow-control'
|
|
import { useChatList } from './use-chat-list'
|
|
import { useChatMessageSender } from './use-chat-message-sender'
|
|
import { useChatTreeOperations } from './use-chat-tree-operations'
|
|
|
|
export function useChat(
|
|
config: ChatConfig | undefined,
|
|
formSettings?: {
|
|
inputs: Inputs
|
|
inputsForm: InputForm[]
|
|
},
|
|
prevChatTree?: ChatItemInTree[],
|
|
stopChat?: (taskId: string) => void,
|
|
) {
|
|
const chatTree = useStore(s => s.chatTree)
|
|
const conversationId = useStore(s => s.conversationId)
|
|
const isResponding = useStore(s => s.isResponding)
|
|
const suggestedQuestions = useStore(s => s.suggestedQuestions)
|
|
const targetMessageId = useStore(s => s.targetMessageId)
|
|
const updateChatTree = useStore(s => s.updateChatTree)
|
|
const setTargetMessageId = useStore(s => s.setTargetMessageId)
|
|
|
|
const initialChatTreeRef = useRef(prevChatTree)
|
|
useEffect(() => {
|
|
const initialChatTree = initialChatTreeRef.current
|
|
if (!initialChatTree || initialChatTree.length === 0)
|
|
return
|
|
updateChatTree(currentChatTree => (currentChatTree.length === 0 ? initialChatTree : currentChatTree))
|
|
}, [updateChatTree])
|
|
|
|
const { updateCurrentQAOnTree } = useChatTreeOperations(updateChatTree)
|
|
|
|
const {
|
|
handleResponding,
|
|
handleStop,
|
|
handleRestart,
|
|
} = useChatFlowControl({
|
|
stopChat,
|
|
})
|
|
|
|
const {
|
|
threadMessages,
|
|
chatList,
|
|
} = useChatList({
|
|
chatTree,
|
|
targetMessageId,
|
|
config,
|
|
formSettings,
|
|
})
|
|
|
|
const { handleSend } = useChatMessageSender({
|
|
threadMessages,
|
|
config,
|
|
formSettings,
|
|
handleResponding,
|
|
updateCurrentQAOnTree,
|
|
})
|
|
|
|
return {
|
|
conversationId,
|
|
chatList,
|
|
setTargetMessageId,
|
|
handleSend,
|
|
handleStop,
|
|
handleRestart,
|
|
isResponding,
|
|
suggestedQuestions,
|
|
}
|
|
}
|