From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001 From: wwf <yearningwang@iqtogether.com> Date: 星期三, 04 六月 2025 15:17:49 +0800 Subject: [PATCH] 初始化 --- app/components/base/chat/chat-with-history/hooks.tsx | 99 ++++++++++++++++--------------------------------- 1 files changed, 32 insertions(+), 67 deletions(-) diff --git a/app/components/base/chat/chat-with-history/hooks.tsx b/app/components/base/chat/chat-with-history/hooks.tsx index 91ceaff..64dbb13 100644 --- a/app/components/base/chat/chat-with-history/hooks.tsx +++ b/app/components/base/chat/chat-with-history/hooks.tsx @@ -16,7 +16,7 @@ Feedback, } from '../types' import { CONVERSATION_ID_INFO } from '../constants' -import { buildChatItemTree, getProcessedSystemVariablesFromUrlParams } from '../utils' +import { buildChatItemTree } from '../utils' import { addFileInfos, sortAgentSorts } from '../../../tools/utils' import { getProcessedFilesFromResponse } from '@/app/components/base/file-uploader/utils' import { @@ -42,7 +42,6 @@ import { useAppFavicon } from '@/hooks/use-app-favicon' import { InputVarType } from '@/app/components/workflow/types' import { TransferMethod } from '@/types/app' -import { noop } from 'lodash-es' function getFormattedChatList(messages: any[]) { const newChatList: ChatItem[] = [] @@ -52,7 +51,7 @@ id: `question-${item.id}`, content: item.query, isAnswer: false, - message_files: getProcessedFilesFromResponse(questionFiles.map((item: any) => ({ ...item, related_id: item.id, upload_file_id: item.upload_file_id }))), + message_files: getProcessedFilesFromResponse(questionFiles.map((item: any) => ({ ...item, related_id: item.id }))), parentMessageId: item.parent_message_id || undefined, }) const answerFiles = item.message_files?.filter((file: any) => file.belongs_to === 'assistant') || [] @@ -63,7 +62,7 @@ feedback: item.feedback, isAnswer: true, citation: item.retriever_resources, - message_files: getProcessedFilesFromResponse(answerFiles.map((item: any) => ({ ...item, related_id: item.id, upload_file_id: item.upload_file_id }))), + message_files: getProcessedFilesFromResponse(answerFiles.map((item: any) => ({ ...item, related_id: item.id }))), parentMessageId: `question-${item.id}`, }) }) @@ -106,49 +105,24 @@ }, [isInstalledApp, installedAppInfo, appInfo]) const appId = useMemo(() => appData?.app_id, [appData]) - const [userId, setUserId] = useState<string>() - useEffect(() => { - getProcessedSystemVariablesFromUrlParams().then(({ user_id }) => { - setUserId(user_id) - }) - }, []) - useEffect(() => { if (appData?.site.default_language) changeLanguage(appData.site.default_language) }, [appData]) - const [sidebarCollapseState, setSidebarCollapseState] = useState<boolean>(false) - const handleSidebarCollapse = useCallback((state: boolean) => { - if (appId) { - setSidebarCollapseState(state) - localStorage.setItem('webappSidebarCollapse', state ? 'collapsed' : 'expanded') - } - }, [appId, setSidebarCollapseState]) - useEffect(() => { - if (appId) { - const localState = localStorage.getItem('webappSidebarCollapse') - setSidebarCollapseState(localState === 'collapsed') - } - }, [appId]) - const [conversationIdInfo, setConversationIdInfo] = useLocalStorageState<Record<string, Record<string, string>>>(CONVERSATION_ID_INFO, { + const [conversationIdInfo, setConversationIdInfo] = useLocalStorageState<Record<string, string>>(CONVERSATION_ID_INFO, { defaultValue: {}, }) - const currentConversationId = useMemo(() => conversationIdInfo?.[appId || '']?.[userId || 'DEFAULT'] || '', [appId, conversationIdInfo, userId]) + const currentConversationId = useMemo(() => conversationIdInfo?.[appId || ''] || '', [appId, conversationIdInfo]) const handleConversationIdInfoChange = useCallback((changeConversationId: string) => { if (appId) { - let prevValue = conversationIdInfo?.[appId || ''] - if (typeof prevValue === 'string') - prevValue = {} setConversationIdInfo({ ...conversationIdInfo, - [appId || '']: { - ...prevValue, - [userId || 'DEFAULT']: changeConversationId, - }, + [appId || '']: changeConversationId, }) } - }, [appId, conversationIdInfo, setConversationIdInfo, userId]) + }, [appId, conversationIdInfo, setConversationIdInfo]) + const [showConfigPanelBeforeChat, setShowConfigPanelBeforeChat] = useState(true) const [newConversationId, setNewConversationId] = useState('') const chatShouldReloadKey = useMemo(() => { @@ -164,8 +138,6 @@ const { data: appConversationData, isLoading: appConversationDataLoading, mutate: mutateAppConversationData } = useSWR(['appConversationData', isInstalledApp, appId, false], () => fetchConversations(isInstalledApp, appId, undefined, false, 100)) const { data: appChatListData, isLoading: appChatListDataLoading } = useSWR(chatShouldReloadKey ? ['appChatList', chatShouldReloadKey, isInstalledApp, appId] : null, () => fetchChatList(chatShouldReloadKey, isInstalledApp, appId)) - const [clearChatList, setClearChatList] = useState(false) - const [isResponding, setIsResponding] = useState(false) const appPrevChatTree = useMemo( () => (currentConversationId && appChatListData?.data.length) ? buildChatItemTree(getFormattedChatList(appChatListData.data)) @@ -277,17 +249,6 @@ return conversationItem }, [conversationList, currentConversationId, pinnedConversationList]) - const currentConversationLatestInputs = useMemo(() => { - if (!currentConversationId || !appChatListData?.data.length) - return newConversationInputsRef.current || {} - return appChatListData.data.slice().pop().inputs || {} - }, [appChatListData, currentConversationId]) - const [currentConversationInputs, setCurrentConversationInputs] = useState<Record<string, any>>(currentConversationLatestInputs || {}) - useEffect(() => { - if (currentConversationItem) - setCurrentConversationInputs(currentConversationLatestInputs || {}) - }, [currentConversationItem, currentConversationLatestInputs]) - const { notify } = useToastContext() const checkInputsRequired = useCallback((silent?: boolean) => { let hasEmptyInput = '' @@ -326,27 +287,37 @@ return true }, [inputsForms, notify, t]) - const handleStartChat = useCallback((callback: any) => { + const handleStartChat = useCallback(() => { if (checkInputsRequired()) { + setShowConfigPanelBeforeChat(false) setShowNewConversationItemInList(true) - callback?.() } - }, [setShowNewConversationItemInList, checkInputsRequired]) - const currentChatInstanceRef = useRef<{ handleStop: () => void }>({ handleStop: noop }) + }, [setShowConfigPanelBeforeChat, setShowNewConversationItemInList, checkInputsRequired]) + const currentChatInstanceRef = useRef<{ handleStop: () => void }>({ handleStop: () => { } }) const handleChangeConversation = useCallback((conversationId: string) => { currentChatInstanceRef.current.handleStop() setNewConversationId('') handleConversationIdInfoChange(conversationId) - if (conversationId) - setClearChatList(false) - }, [handleConversationIdInfoChange, setClearChatList]) + + if (conversationId === '' && !checkInputsRequired(true)) + setShowConfigPanelBeforeChat(true) + else + setShowConfigPanelBeforeChat(false) + }, [handleConversationIdInfoChange, setShowConfigPanelBeforeChat, checkInputsRequired]) const handleNewConversation = useCallback(() => { currentChatInstanceRef.current.handleStop() - setShowNewConversationItemInList(true) - handleChangeConversation('') - handleNewConversationInputsChange({}) - setClearChatList(true) - }, [handleChangeConversation, setShowNewConversationItemInList, handleNewConversationInputsChange, setClearChatList]) + setNewConversationId('') + + if (showNewConversationItemInList) { + handleChangeConversation('') + } + else if (currentConversationId) { + handleConversationIdInfoChange('') + setShowConfigPanelBeforeChat(true) + setShowNewConversationItemInList(true) + handleNewConversationInputsChange({}) + } + }, [handleChangeConversation, currentConversationId, handleConversationIdInfoChange, setShowConfigPanelBeforeChat, setShowNewConversationItemInList, showNewConversationItemInList, handleNewConversationInputsChange]) const handleUpdateConversationList = useCallback(() => { mutateAppConversationData() mutateAppPinnedConversationData() @@ -464,6 +435,8 @@ appPrevChatTree, pinnedConversationList, conversationList, + showConfigPanelBeforeChat, + setShowConfigPanelBeforeChat, setShowNewConversationItemInList, newConversationInputs, newConversationInputsRef, @@ -483,13 +456,5 @@ chatShouldReloadKey, handleFeedback, currentChatInstanceRef, - sidebarCollapseState, - handleSidebarCollapse, - clearChatList, - setClearChatList, - isResponding, - setIsResponding, - currentConversationInputs, - setCurrentConversationInputs, } } -- Gitblit v1.8.0