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/embedded-chatbot/index.tsx | 119 +++++++++++++++++++++-------------------------------------- 1 files changed, 42 insertions(+), 77 deletions(-) diff --git a/app/components/base/chat/embedded-chatbot/index.tsx b/app/components/base/chat/embedded-chatbot/index.tsx index 59c358a..703dde1 100644 --- a/app/components/base/chat/embedded-chatbot/index.tsx +++ b/app/components/base/chat/embedded-chatbot/index.tsx @@ -4,6 +4,7 @@ } from 'react' import { useAsyncEffect } from 'ahooks' import { useTranslation } from 'react-i18next' +import { RiLoopLeftLine } from '@remixicon/react' import { EmbeddedChatbotContext, useEmbeddedChatbotContext, @@ -11,31 +12,32 @@ import { useEmbeddedChatbot } from './hooks' import { isDify } from './utils' import { useThemeContext } from './theme/theme-context' -import { CssTransform } from './theme/utils' +import cn from '@/utils/classnames' import { checkOrSetAccessToken } from '@/app/components/share/utils' import AppUnavailable from '@/app/components/base/app-unavailable' import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' import Loading from '@/app/components/base/loading' import LogoHeader from '@/app/components/base/logo/logo-embedded-chat-header' import Header from '@/app/components/base/chat/embedded-chatbot/header' +import ConfigPanel from '@/app/components/base/chat/embedded-chatbot/config-panel' import ChatWrapper from '@/app/components/base/chat/embedded-chatbot/chat-wrapper' -import DifyLogo from '@/app/components/base/logo/dify-logo' -import cn from '@/utils/classnames' +import Tooltip from '@/app/components/base/tooltip' const Chatbot = () => { + const { t } = useTranslation() const { isMobile, - allowResetChat, appInfoError, appInfoLoading, appData, + appPrevChatList, + showConfigPanelBeforeChat, appChatListDataLoading, - chatShouldReloadKey, handleNewConversation, themeBuilder, } = useEmbeddedChatbotContext() - const { t } = useTranslation() + const chatReady = (!showConfigPanelBeforeChat || !!appPrevChatList.length) const customConfig = appData?.custom_config const site = appData?.site @@ -53,77 +55,52 @@ if (appInfoLoading) { return ( - <> - {!isMobile && <Loading type='app' />} - {isMobile && ( - <div className={cn('relative')}> - <div className={cn('flex h-[calc(100vh_-_60px)] flex-col rounded-2xl border-[0.5px] border-components-panel-border shadow-xs')}> - <Loading type='app' /> - </div> - </div> - )} - </> + <Loading type='app' /> ) } if (appInfoError) { return ( - <> - {!isMobile && <AppUnavailable />} - {isMobile && ( - <div className={cn('relative')}> - <div className={cn('flex h-[calc(100vh_-_60px)] flex-col rounded-2xl border-[0.5px] border-components-panel-border shadow-xs')}> - <AppUnavailable /> - </div> - </div> - )} - </> + <AppUnavailable /> ) } return ( - <div className='relative'> - <div - className={cn( - 'flex flex-col rounded-2xl border border-components-panel-border-subtle', - isMobile ? 'h-[calc(100vh_-_60px)] border-[0.5px] border-components-panel-border shadow-xs' : 'h-[100vh] bg-chatbot-bg', - )} - style={isMobile ? Object.assign({}, CssTransform(themeBuilder?.theme?.backgroundHeaderColorStyle ?? '')) : {}} - > - <Header - isMobile={isMobile} - allowResetChat={allowResetChat} - title={site?.title || ''} - customerIcon={isDify() ? difyIcon : ''} - theme={themeBuilder?.theme} - onCreateNewChat={handleNewConversation} - /> - <div className={cn('flex grow flex-col overflow-y-auto', isMobile && '!h-[calc(100vh_-_3rem)] rounded-2xl bg-chatbot-bg')}> - {appChatListDataLoading && ( + <div> + <Header + isMobile={isMobile} + title={site?.title || ''} + customerIcon={isDify() ? difyIcon : ''} + theme={themeBuilder?.theme} + onCreateNewChat={handleNewConversation} + /> + <div className='flex bg-white overflow-hidden'> + <div className={cn('h-[100vh] grow flex flex-col overflow-y-auto', isMobile && '!h-[calc(100vh_-_3rem)]')}> + {showConfigPanelBeforeChat && !appChatListDataLoading && !appPrevChatList.length && ( + <div className={cn('flex w-full items-center justify-center h-full tablet:px-4', isMobile && 'px-4')}> + <ConfigPanel /> + </div> + )} + {appChatListDataLoading && chatReady && ( <Loading type='app' /> )} - {!appChatListDataLoading && ( - <ChatWrapper key={chatShouldReloadKey} /> - )} - </div> - </div> - {/* powered by */} - {isMobile && ( - <div className='flex h-[60px] shrink-0 items-center pl-2'> - {!appData?.custom_config?.remove_webapp_brand && ( - <div className={cn( - 'flex shrink-0 items-center gap-1.5 px-2', - )}> - <div className='system-2xs-medium-uppercase text-text-tertiary'>{t('share.chat.poweredBy')}</div> - {appData?.custom_config?.replace_webapp_logo && ( - <img src={appData?.custom_config?.replace_webapp_logo} alt='logo' className='block h-5 w-auto' /> + {chatReady && !appChatListDataLoading && ( + <div className='relative h-full pt-8 mx-auto w-full max-w-[720px]'> + {!isMobile && ( + <div className='absolute top-2.5 right-3 z-20'> + <Tooltip + popupContent={t('share.chat.resetChat')} + > + <div className='p-1.5 bg-white border-[0.5px] border-gray-100 rounded-lg shadow-md cursor-pointer' onClick={handleNewConversation}> + <RiLoopLeftLine className="h-4 w-4 text-gray-500"/> + </div> + </Tooltip> + </div> )} - {!appData?.custom_config?.replace_webapp_logo && ( - <DifyLogo size='small' /> - )} + <ChatWrapper /> </div> )} </div> - )} + </div> </div> ) } @@ -145,6 +122,7 @@ appPrevChatList, pinnedConversationList, conversationList, + showConfigPanelBeforeChat, newConversationInputs, newConversationInputsRef, handleNewConversationInputsChange, @@ -155,16 +133,9 @@ handleNewConversationCompleted, chatShouldReloadKey, isInstalledApp, - allowResetChat, appId, handleFeedback, currentChatInstanceRef, - clearChatList, - setClearChatList, - isResponding, - setIsResponding, - currentConversationInputs, - setCurrentConversationInputs, } = useEmbeddedChatbot() return <EmbeddedChatbotContext.Provider value={{ @@ -179,6 +150,7 @@ appPrevChatList, pinnedConversationList, conversationList, + showConfigPanelBeforeChat, newConversationInputs, newConversationInputsRef, handleNewConversationInputsChange, @@ -190,17 +162,10 @@ chatShouldReloadKey, isMobile, isInstalledApp, - allowResetChat, appId, handleFeedback, currentChatInstanceRef, themeBuilder, - clearChatList, - setClearChatList, - isResponding, - setIsResponding, - currentConversationInputs, - setCurrentConversationInputs, }}> <Chatbot /> </EmbeddedChatbotContext.Provider> -- Gitblit v1.8.0