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/sidebar/index.tsx | 144 ++++++++++++++++++----------------------------- 1 files changed, 55 insertions(+), 89 deletions(-) diff --git a/app/components/base/chat/chat-with-history/sidebar/index.tsx b/app/components/base/chat/chat-with-history/sidebar/index.tsx index dc4e864..69716f9 100644 --- a/app/components/base/chat/chat-with-history/sidebar/index.tsx +++ b/app/components/base/chat/chat-with-history/sidebar/index.tsx @@ -3,34 +3,22 @@ useState, } from 'react' import { useTranslation } from 'react-i18next' -import { - RiEditBoxLine, - RiExpandRightLine, - RiLayoutLeft2Line, -} from '@remixicon/react' import { useChatWithHistoryContext } from '../context' +import List from './list' import AppIcon from '@/app/components/base/app-icon' -import ActionButton from '@/app/components/base/action-button' import Button from '@/app/components/base/button' -import List from '@/app/components/base/chat/chat-with-history/sidebar/list' -import MenuDropdown from '@/app/components/share/text-generation/menu-dropdown' +import { Edit05 } from '@/app/components/base/icons/src/vender/line/general' +import type { ConversationItem } from '@/models/share' import Confirm from '@/app/components/base/confirm' import RenameModal from '@/app/components/base/chat/chat-with-history/sidebar/rename-modal' -import DifyLogo from '@/app/components/base/logo/dify-logo' -import type { ConversationItem } from '@/models/share' -import cn from '@/utils/classnames' -type Props = { - isPanel?: boolean -} - -const Sidebar = ({ isPanel }: Props) => { +const Sidebar = () => { const { t } = useTranslation() const { appData, - handleNewConversation, pinnedConversationList, conversationList, + handleNewConversation, currentConversationId, handleChangeConversation, handlePinConversation, @@ -38,13 +26,8 @@ conversationRenaming, handleRenameConversation, handleDeleteConversation, - sidebarCollapseState, - handleSidebarCollapse, isMobile, - isResponding, } = useChatWithHistoryContext() - const isSidebarCollapsed = sidebarCollapseState - const [showConfirm, setShowConfirm] = useState<ConversationItem | null>(null) const [showRename, setShowRename] = useState<ConversationItem | null>(null) @@ -77,83 +60,66 @@ }, [showRename, handleRenameConversation, handleCancelRename]) return ( - <div className={cn( - 'flex w-full grow flex-col', - isPanel && 'rounded-xl border-[0.5px] border-components-panel-border-subtle bg-components-panel-bg shadow-lg', - )}> - <div className={cn( - 'flex shrink-0 items-center gap-3 p-3 pr-2', - )}> - <div className='shrink-0'> - <AppIcon - size='large' - iconType={appData?.site.icon_type} - icon={appData?.site.icon} - background={appData?.site.icon_background} - imageUrl={appData?.site.icon_url} - /> - </div> - <div className={cn('system-md-semibold grow truncate text-text-secondary')}>{appData?.site.title}</div> - {!isMobile && isSidebarCollapsed && ( - <ActionButton size='l' onClick={() => handleSidebarCollapse(false)}> - <RiExpandRightLine className='h-[18px] w-[18px]' /> - </ActionButton> - )} - {!isMobile && !isSidebarCollapsed && ( - <ActionButton size='l' onClick={() => handleSidebarCollapse(true)}> - <RiLayoutLeft2Line className='h-[18px] w-[18px]' /> - </ActionButton> - )} - </div> - <div className='shrink-0 px-3 py-4'> - <Button variant='secondary-accent' disabled={isResponding} className='w-full justify-center' onClick={handleNewConversation}> - <RiEditBoxLine className='mr-1 h-4 w-4' /> + <div className='shrink-0 h-full flex flex-col w-[240px] border-r border-r-gray-100'> + { + !isMobile && ( + <div className='shrink-0 flex p-4'> + <AppIcon + className='mr-3' + size='small' + iconType={appData?.site.icon_type} + icon={appData?.site.icon} + background={appData?.site.icon_background} + imageUrl={appData?.site.icon_url} + /> + <div className='py-1 text-base font-semibold text-gray-800'> + {appData?.site.title} + </div> + </div> + ) + } + <div className='shrink-0 p-4'> + <Button + variant='secondary-accent' + className='justify-start w-full' + onClick={handleNewConversation} + > + <Edit05 className='mr-2 w-4 h-4' /> {t('share.chat.newChat')} </Button> </div> - <div className='h-0 grow space-y-2 overflow-y-auto px-3 pt-4'> - {/* pinned list */} - {!!pinnedConversationList.length && ( - <div className='mb-4'> + <div className='grow px-4 py-2 overflow-y-auto'> + { + !!pinnedConversationList.length && ( + <div className='mb-4'> + <List + isPin + title={t('share.chat.pinnedTitle') || ''} + list={pinnedConversationList} + onChangeConversation={handleChangeConversation} + onOperate={handleOperate} + currentConversationId={currentConversationId} + /> + </div> + ) + } + { + !!conversationList.length && ( <List - isPin - title={t('share.chat.pinnedTitle') || ''} - list={pinnedConversationList} + title={(pinnedConversationList.length && t('share.chat.unpinnedTitle')) || ''} + list={conversationList} onChangeConversation={handleChangeConversation} onOperate={handleOperate} currentConversationId={currentConversationId} /> - </div> - )} - {!!conversationList.length && ( - <List - title={(pinnedConversationList.length && t('share.chat.unpinnedTitle')) || ''} - list={conversationList} - onChangeConversation={handleChangeConversation} - onOperate={handleOperate} - currentConversationId={currentConversationId} - /> - )} + ) + } </div> - <div className='flex shrink-0 items-center justify-between p-3'> - <MenuDropdown placement='top-start' data={appData?.site} /> - {/* powered by */} - <div className='shrink-0'> - {!appData?.custom_config?.remove_webapp_brand && ( - <div className={cn( - 'flex shrink-0 items-center gap-1.5 px-1', - )}> - <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' /> - )} - {!appData?.custom_config?.replace_webapp_logo && ( - <DifyLogo size='small' /> - )} - </div> - )} + {appData?.site.copyright && ( + <div className='px-4 pb-4 text-xs text-gray-400'> + 漏 {(new Date()).getFullYear()} {appData?.site.copyright} </div> - </div> + )} {!!showConfirm && ( <Confirm title={t('share.chat.deleteConversation.title')} -- Gitblit v1.8.0