diff --git a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx
index 3b32367512..17133b29de 100644
--- a/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx
+++ b/web/app/components/base/chat/chat-with-history/chat-wrapper.tsx
@@ -20,6 +20,7 @@ import {
import AppIcon from '@/app/components/base/app-icon'
import AnswerIcon from '@/app/components/base/answer-icon'
import SuggestedQuestions from '@/app/components/base/chat/chat/answer/suggested-questions'
+import { Markdown } from '@/app/components/base/markdown'
import cn from '@/utils/classnames'
const ChatWrapper = () => {
@@ -41,6 +42,9 @@ const ChatWrapper = () => {
appData,
themeBuilder,
sidebarCollapseState,
+ clearChatList,
+ setClearChatList,
+ setIsResponding,
} = useChatWithHistoryContext()
const appConfig = useMemo(() => {
const config = appParams || {}
@@ -60,7 +64,7 @@ const ChatWrapper = () => {
setTargetMessageId,
handleSend,
handleStop,
- isResponding,
+ isResponding: respondingState,
suggestedQuestions,
} = useChat(
appConfig,
@@ -70,6 +74,8 @@ const ChatWrapper = () => {
},
appPrevChatTree,
taskId => stopChatMessageResponding('', taskId, isInstalledApp, appId),
+ clearChatList,
+ setClearChatList,
)
const inputsFormValue = currentConversationId ? currentConversationItem?.inputs : newConversationInputsRef?.current
const inputDisabled = useMemo(() => {
@@ -110,6 +116,10 @@ const ChatWrapper = () => {
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [])
+ useEffect(() => {
+ setIsResponding(respondingState)
+ }, [respondingState, setIsResponding])
+
const doSend: OnSend = useCallback((message, files, isRegenerate = false, parentAnswer: ChatItem | null = null) => {
const data: any = {
query: message,
@@ -146,10 +156,10 @@ const ChatWrapper = () => {
}, [chatList, doSend])
const messageList = useMemo(() => {
- if (currentConversationId || isResponding)
+ if (currentConversationId)
return chatList
return chatList.filter(item => !item.isOpeningStatement)
- }, [chatList, currentConversationId, isResponding])
+ }, [chatList, currentConversationId])
const [collapsed, setCollapsed] = useState(!!currentConversationId)
@@ -168,7 +178,7 @@ const ChatWrapper = () => {
const welcome = useMemo(() => {
const welcomeMessage = chatList.find(item => item.isOpeningStatement)
- if (isResponding)
+ if (respondingState)
return null
if (currentConversationId)
return null
@@ -188,7 +198,7 @@ const ChatWrapper = () => {
imageUrl={appData?.site.icon_url}
/>
- {welcomeMessage.content}
+
@@ -204,10 +214,12 @@ const ChatWrapper = () => {
background={appData?.site.icon_background}
imageUrl={appData?.site.icon_url}
/>
- {welcomeMessage.content}
+
+
+
)
- }, [appData?.site.icon, appData?.site.icon_background, appData?.site.icon_type, appData?.site.icon_url, chatList, collapsed, currentConversationId, inputsForms.length, isResponding])
+ }, [appData?.site.icon, appData?.site.icon_background, appData?.site.icon_type, appData?.site.icon_url, chatList, collapsed, currentConversationId, inputsForms.length, respondingState])
const answerIcon = (appData?.site && appData.site.use_icon_as_answer_icon)
? {
appData={appData}
config={appConfig}
chatList={messageList}
- isResponding={isResponding}
- chatContainerInnerClassName={`mx-auto pt-6 w-full max-w-[720px] ${isMobile && 'px-4'}`}
+ isResponding={respondingState}
+ chatContainerInnerClassName={`mx-auto pt-6 w-full max-w-[768px] ${isMobile && 'px-4'}`}
chatFooterClassName='pb-4'
- chatFooterInnerClassName={`mx-auto w-full max-w-[720px] ${isMobile ? 'px-2' : 'px-4'}`}
+ chatFooterInnerClassName={`mx-auto w-full max-w-[768px] ${isMobile ? 'px-2' : 'px-4'}`}
onSend={doSend}
inputs={currentConversationId ? currentConversationItem?.inputs as any : newConversationInputs}
inputsForm={inputsForms}
diff --git a/web/app/components/base/chat/chat-with-history/context.tsx b/web/app/components/base/chat/chat-with-history/context.tsx
index 73e3d1398d..ed8c27e841 100644
--- a/web/app/components/base/chat/chat-with-history/context.tsx
+++ b/web/app/components/base/chat/chat-with-history/context.tsx
@@ -50,6 +50,10 @@ export type ChatWithHistoryContextValue = {
themeBuilder?: ThemeBuilder
sidebarCollapseState?: boolean
handleSidebarCollapse: (state: boolean) => void
+ clearChatList?: boolean
+ setClearChatList: (state: boolean) => void
+ isResponding?: boolean
+ setIsResponding: (state: boolean) => void,
}
export const ChatWithHistoryContext = createContext({
@@ -77,5 +81,9 @@ export const ChatWithHistoryContext = createContext
currentChatInstanceRef: { current: { handleStop: () => {} } },
sidebarCollapseState: false,
handleSidebarCollapse: () => {},
+ clearChatList: false,
+ setClearChatList: () => {},
+ isResponding: false,
+ setIsResponding: () => {},
})
export const useChatWithHistoryContext = () => useContext(ChatWithHistoryContext)
diff --git a/web/app/components/base/chat/chat-with-history/header/index.tsx b/web/app/components/base/chat/chat-with-history/header/index.tsx
index f0e4d085b9..22a2b65f9c 100644
--- a/web/app/components/base/chat/chat-with-history/header/index.tsx
+++ b/web/app/components/base/chat/chat-with-history/header/index.tsx
@@ -33,6 +33,7 @@ const Header = () => {
handleNewConversation,
sidebarCollapseState,
handleSidebarCollapse,
+ isResponding,
} = useChatWithHistoryContext()
const { t } = useTranslation()
const isSidebarCollapsed = sidebarCollapseState
@@ -111,7 +112,12 @@ const Header = () => {
popupContent={t('share.chat.newChatTip')}
>
diff --git a/web/app/components/base/chat/chat-with-history/hooks.tsx b/web/app/components/base/chat/chat-with-history/hooks.tsx
index dab7a7fd14..7b6780761a 100644
--- a/web/app/components/base/chat/chat-with-history/hooks.tsx
+++ b/web/app/components/base/chat/chat-with-history/hooks.tsx
@@ -150,6 +150,8 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => {
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))
@@ -310,20 +312,16 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => {
currentChatInstanceRef.current.handleStop()
setNewConversationId('')
handleConversationIdInfoChange(conversationId)
- }, [handleConversationIdInfoChange])
+ if (conversationId)
+ setClearChatList(false)
+ }, [handleConversationIdInfoChange, setClearChatList])
const handleNewConversation = useCallback(() => {
currentChatInstanceRef.current.handleStop()
- setNewConversationId('')
-
- if (showNewConversationItemInList) {
- handleChangeConversation('')
- }
- else if (currentConversationId) {
- handleConversationIdInfoChange('')
- setShowNewConversationItemInList(true)
- handleNewConversationInputsChange({})
- }
- }, [handleChangeConversation, currentConversationId, handleConversationIdInfoChange, setShowNewConversationItemInList, showNewConversationItemInList, handleNewConversationInputsChange])
+ setShowNewConversationItemInList(true)
+ handleChangeConversation('')
+ handleNewConversationInputsChange({})
+ setClearChatList(true)
+ }, [handleChangeConversation, setShowNewConversationItemInList, handleNewConversationInputsChange, setClearChatList])
const handleUpdateConversationList = useCallback(() => {
mutateAppConversationData()
mutateAppPinnedConversationData()
@@ -462,5 +460,9 @@ export const useChatWithHistory = (installedAppInfo?: InstalledApp) => {
currentChatInstanceRef,
sidebarCollapseState,
handleSidebarCollapse,
+ clearChatList,
+ setClearChatList,
+ isResponding,
+ setIsResponding,
}
}
diff --git a/web/app/components/base/chat/chat-with-history/index.tsx b/web/app/components/base/chat/chat-with-history/index.tsx
index ec7121e404..bff742fa9c 100644
--- a/web/app/components/base/chat/chat-with-history/index.tsx
+++ b/web/app/components/base/chat/chat-with-history/index.tsx
@@ -153,6 +153,10 @@ const ChatWithHistoryWrap: FC = ({
currentChatInstanceRef,
sidebarCollapseState,
handleSidebarCollapse,
+ clearChatList,
+ setClearChatList,
+ isResponding,
+ setIsResponding,
} = useChatWithHistory(installedAppInfo)
return (
@@ -190,6 +194,10 @@ const ChatWithHistoryWrap: FC = ({
themeBuilder,
sidebarCollapseState,
handleSidebarCollapse,
+ clearChatList,
+ setClearChatList,
+ isResponding,
+ setIsResponding,
}}>
diff --git a/web/app/components/base/chat/chat-with-history/sidebar/index.tsx b/web/app/components/base/chat/chat-with-history/sidebar/index.tsx
index a1fe28d4a0..9c29647e41 100644
--- a/web/app/components/base/chat/chat-with-history/sidebar/index.tsx
+++ b/web/app/components/base/chat/chat-with-history/sidebar/index.tsx
@@ -41,6 +41,7 @@ const Sidebar = ({ isPanel }: Props) => {
sidebarCollapseState,
handleSidebarCollapse,
isMobile,
+ isResponding,
} = useChatWithHistoryContext()
const isSidebarCollapsed = sidebarCollapseState
@@ -105,7 +106,7 @@ const Sidebar = ({ isPanel }: Props) => {
)}
-