balibabu
Feat: Display the input parameters of begin in the output result table #3355 (#3534)
1b32c2b
| import { MessageType } from '@/constants/chat'; | |
| import { useFetchFlow } from '@/hooks/flow-hooks'; | |
| import { | |
| useHandleMessageInputChange, | |
| useSelectDerivedMessages, | |
| useSendMessageWithSse, | |
| } from '@/hooks/logic-hooks'; | |
| import { Message } from '@/interfaces/database/chat'; | |
| import api from '@/utils/api'; | |
| import { message } from 'antd'; | |
| import trim from 'lodash/trim'; | |
| import { useCallback, useEffect } from 'react'; | |
| import { useParams } from 'umi'; | |
| import { v4 as uuid } from 'uuid'; | |
| import { receiveMessageError } from '../utils'; | |
| const antMessage = message; | |
| export const useSelectNextMessages = () => { | |
| const { data: flowDetail, loading } = useFetchFlow(); | |
| const reference = flowDetail.dsl.reference; | |
| const { | |
| derivedMessages, | |
| ref, | |
| addNewestQuestion, | |
| addNewestAnswer, | |
| removeLatestMessage, | |
| removeMessageById, | |
| removeMessagesAfterCurrentMessage, | |
| } = useSelectDerivedMessages(); | |
| return { | |
| reference, | |
| loading, | |
| derivedMessages, | |
| ref, | |
| addNewestQuestion, | |
| addNewestAnswer, | |
| removeLatestMessage, | |
| removeMessageById, | |
| removeMessagesAfterCurrentMessage, | |
| }; | |
| }; | |
| export const useSendNextMessage = () => { | |
| const { | |
| reference, | |
| loading, | |
| derivedMessages, | |
| ref, | |
| addNewestQuestion, | |
| addNewestAnswer, | |
| removeLatestMessage, | |
| removeMessageById, | |
| } = useSelectNextMessages(); | |
| const { id: flowId } = useParams(); | |
| const { handleInputChange, value, setValue } = useHandleMessageInputChange(); | |
| const { refetch } = useFetchFlow(); | |
| const { send, answer, done } = useSendMessageWithSse(api.runCanvas); | |
| const sendMessage = useCallback( | |
| async ({ message }: { message: Message; messages?: Message[] }) => { | |
| const params: Record<string, unknown> = { | |
| id: flowId, | |
| }; | |
| if (message.content) { | |
| params.message = message.content; | |
| params.message_id = message.id; | |
| } | |
| const res = await send(params); | |
| if (receiveMessageError(res)) { | |
| antMessage.error(res?.data?.message); | |
| // cancel loading | |
| setValue(message.content); | |
| removeLatestMessage(); | |
| } else { | |
| refetch(); // pull the message list after sending the message successfully | |
| } | |
| }, | |
| [flowId, send, setValue, removeLatestMessage, refetch], | |
| ); | |
| const handleSendMessage = useCallback( | |
| async (message: Message) => { | |
| sendMessage({ message }); | |
| }, | |
| [sendMessage], | |
| ); | |
| useEffect(() => { | |
| if (answer.answer) { | |
| addNewestAnswer(answer); | |
| } | |
| }, [answer, addNewestAnswer]); | |
| const handlePressEnter = useCallback(() => { | |
| if (trim(value) === '') return; | |
| const id = uuid(); | |
| if (done) { | |
| setValue(''); | |
| handleSendMessage({ id, content: value.trim(), role: MessageType.User }); | |
| } | |
| addNewestQuestion({ | |
| content: value, | |
| id, | |
| role: MessageType.User, | |
| }); | |
| }, [addNewestQuestion, handleSendMessage, done, setValue, value]); | |
| const fetchPrologue = useCallback(async () => { | |
| // fetch prologue | |
| const sendRet = await send({ id: flowId }); | |
| if (receiveMessageError(sendRet)) { | |
| message.error(sendRet?.data?.message); | |
| } else { | |
| refetch(); | |
| } | |
| }, [flowId, refetch, send]); | |
| useEffect(() => { | |
| fetchPrologue(); | |
| }, [fetchPrologue]); | |
| return { | |
| handlePressEnter, | |
| handleInputChange, | |
| value, | |
| sendLoading: !done, | |
| reference, | |
| loading, | |
| derivedMessages, | |
| ref, | |
| removeMessageById, | |
| }; | |
| }; | |