| | |
| | | } from './context' |
| | | import { useChatWithHistory } from './hooks' |
| | | import Sidebar from './sidebar' |
| | | import Header from './header' |
| | | import HeaderInMobile from './header-in-mobile' |
| | | import ConfigPanel from './config-panel' |
| | | import ChatWrapper from './chat-wrapper' |
| | | import type { InstalledApp } from '@/models/explore' |
| | | import Loading from '@/app/components/base/loading' |
| | | import useBreakpoints, { MediaType } from '@/hooks/use-breakpoints' |
| | | import { checkOrSetAccessToken } from '@/app/components/share/utils' |
| | | import AppUnavailable from '@/app/components/base/app-unavailable' |
| | | import cn from '@/utils/classnames' |
| | | |
| | | type ChatWithHistoryProps = { |
| | | className?: string |
| | |
| | | appInfoError, |
| | | appData, |
| | | appInfoLoading, |
| | | appPrevChatTree, |
| | | showConfigPanelBeforeChat, |
| | | appChatListDataLoading, |
| | | chatShouldReloadKey, |
| | | isMobile, |
| | | themeBuilder, |
| | | sidebarCollapseState, |
| | | } = useChatWithHistoryContext() |
| | | const isSidebarCollapsed = sidebarCollapseState |
| | | |
| | | const chatReady = (!showConfigPanelBeforeChat || !!appPrevChatTree.length) |
| | | const customConfig = appData?.custom_config |
| | | const site = appData?.site |
| | | |
| | | const [showSidePanel, setShowSidePanel] = useState(false) |
| | | |
| | | useEffect(() => { |
| | | themeBuilder?.buildTheme(site?.chat_color_theme, site?.chat_color_theme_inverted) |
| | |
| | | } |
| | | |
| | | return ( |
| | | <div className={cn( |
| | | 'flex h-full bg-background-default-burn', |
| | | isMobile && 'flex-col', |
| | | className, |
| | | )}> |
| | | {!isMobile && ( |
| | | <div className={cn( |
| | | 'flex w-[236px] flex-col p-1 pr-0 transition-all duration-200 ease-in-out', |
| | | isSidebarCollapsed && 'w-0 overflow-hidden !p-0', |
| | | )}> |
| | | <div className={`h-full flex bg-white ${className} ${isMobile && 'flex-col'}`}> |
| | | { |
| | | !isMobile && ( |
| | | <Sidebar /> |
| | | </div> |
| | | )} |
| | | {isMobile && ( |
| | | <HeaderInMobile /> |
| | | )} |
| | | <div className={cn('relative grow p-2', isMobile && 'h-[calc(100%_-_56px)] p-0')}> |
| | | {isSidebarCollapsed && ( |
| | | <div |
| | | className={cn( |
| | | 'absolute top-0 z-20 flex h-full w-[256px] flex-col p-2 transition-all duration-500 ease-in-out', |
| | | showSidePanel ? 'left-0' : 'left-[-248px]', |
| | | )} |
| | | onMouseEnter={() => setShowSidePanel(true)} |
| | | onMouseLeave={() => setShowSidePanel(false)} |
| | | > |
| | | <Sidebar isPanel /> |
| | | </div> |
| | | )} |
| | | <div className={cn('flex h-full flex-col overflow-hidden border-[0,5px] border-components-panel-border-subtle bg-chatbot-bg', isMobile ? 'rounded-t-2xl' : 'rounded-2xl')}> |
| | | {!isMobile && <Header />} |
| | | {appChatListDataLoading && ( |
| | | ) |
| | | } |
| | | { |
| | | isMobile && ( |
| | | <HeaderInMobile /> |
| | | ) |
| | | } |
| | | <div className={`grow overflow-hidden ${showConfigPanelBeforeChat && !appPrevChatTree.length && 'flex items-center justify-center'}`}> |
| | | { |
| | | showConfigPanelBeforeChat && !appChatListDataLoading && !appPrevChatTree.length && ( |
| | | <div className={`flex w-full items-center justify-center h-full ${isMobile && 'px-4'}`}> |
| | | <ConfigPanel /> |
| | | </div> |
| | | ) |
| | | } |
| | | { |
| | | appChatListDataLoading && chatReady && ( |
| | | <Loading type='app' /> |
| | | )} |
| | | {!appChatListDataLoading && ( |
| | | ) |
| | | } |
| | | { |
| | | chatReady && !appChatListDataLoading && ( |
| | | <ChatWrapper key={chatShouldReloadKey} /> |
| | | )} |
| | | </div> |
| | | ) |
| | | } |
| | | </div> |
| | | </div> |
| | | ) |
| | |
| | | appPrevChatTree, |
| | | pinnedConversationList, |
| | | conversationList, |
| | | showConfigPanelBeforeChat, |
| | | newConversationInputs, |
| | | newConversationInputsRef, |
| | | handleNewConversationInputsChange, |
| | |
| | | appId, |
| | | handleFeedback, |
| | | currentChatInstanceRef, |
| | | sidebarCollapseState, |
| | | handleSidebarCollapse, |
| | | clearChatList, |
| | | setClearChatList, |
| | | isResponding, |
| | | setIsResponding, |
| | | currentConversationInputs, |
| | | setCurrentConversationInputs, |
| | | } = useChatWithHistory(installedAppInfo) |
| | | |
| | | return ( |
| | |
| | | appPrevChatTree, |
| | | pinnedConversationList, |
| | | conversationList, |
| | | showConfigPanelBeforeChat, |
| | | newConversationInputs, |
| | | newConversationInputsRef, |
| | | handleNewConversationInputsChange, |
| | |
| | | handleFeedback, |
| | | currentChatInstanceRef, |
| | | themeBuilder, |
| | | sidebarCollapseState, |
| | | handleSidebarCollapse, |
| | | clearChatList, |
| | | setClearChatList, |
| | | isResponding, |
| | | setIsResponding, |
| | | currentConversationInputs, |
| | | setCurrentConversationInputs, |
| | | }}> |
| | | <ChatWithHistory className={className} /> |
| | | </ChatWithHistoryContext.Provider> |