| | |
| | | import { memo, useCallback, useEffect, useImperativeHandle, useMemo } from 'react' |
| | | import { |
| | | forwardRef, |
| | | memo, |
| | | useCallback, |
| | | useEffect, |
| | | useImperativeHandle, |
| | | useMemo, |
| | | } from 'react' |
| | | import { useNodes } from 'reactflow' |
| | | import { BlockEnum } from '../../types' |
| | | import { |
| | |
| | | } from '@/service/debug' |
| | | import { useStore as useAppStore } from '@/app/components/app/store' |
| | | import { getLastAnswer, isValidGeneratedAnswer } from '@/app/components/base/chat/utils' |
| | | import type { FileEntity } from '@/app/components/base/file-uploader/types' |
| | | |
| | | type ChatWrapperProps = { |
| | | showConversationVariableModal: boolean |
| | |
| | | onHide: () => void |
| | | } |
| | | |
| | | const ChatWrapper = ( |
| | | { |
| | | ref, |
| | | showConversationVariableModal, |
| | | onConversationModalHide, |
| | | showInputsFieldsPanel, |
| | | onHide, |
| | | }: ChatWrapperProps & { |
| | | ref: React.RefObject<ChatWrapperRefType>; |
| | | }, |
| | | ) => { |
| | | const ChatWrapper = forwardRef<ChatWrapperRefType, ChatWrapperProps>(({ |
| | | showConversationVariableModal, |
| | | onConversationModalHide, |
| | | showInputsFieldsPanel, |
| | | onHide, |
| | | }, ref) => { |
| | | const nodes = useNodes<StartNodeType>() |
| | | const startNode = nodes.find(node => node.data.type === BlockEnum.Start) |
| | | const startVariables = startNode?.data.variables |
| | |
| | | ) |
| | | }, [handleSend, workflowStore, conversationId, chatList, appDetail]) |
| | | |
| | | const doRegenerate = useCallback((chatItem: ChatItemInTree, editedQuestion?: { message: string, files?: FileEntity[] }) => { |
| | | const question = editedQuestion ? chatItem : chatList.find(item => item.id === chatItem.parentMessageId)! |
| | | const doRegenerate = useCallback((chatItem: ChatItemInTree) => { |
| | | const question = chatList.find(item => item.id === chatItem.parentMessageId)! |
| | | const parentAnswer = chatList.find(item => item.id === question.parentMessageId) |
| | | doSend(editedQuestion ? editedQuestion.message : question.content, |
| | | editedQuestion ? editedQuestion.files : question.message_files, |
| | | true, |
| | | isValidGeneratedAnswer(parentAnswer) ? parentAnswer : null, |
| | | ) |
| | | doSend(question.content, question.message_files, true, isValidGeneratedAnswer(parentAnswer) ? parentAnswer : null) |
| | | }, [chatList, doSend]) |
| | | |
| | | useImperativeHandle(ref, () => { |
| | |
| | | )} |
| | | </> |
| | | ) |
| | | } |
| | | }) |
| | | |
| | | ChatWrapper.displayName = 'ChatWrapper' |
| | | |