import { useCallback, useState, } from 'react' import { useTranslation } from 'react-i18next' import { useChatWithHistoryContext } from '../context' import List from './list' import AppIcon from '@/app/components/base/app-icon' import Button from '@/app/components/base/button' 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 './rename-modal' import { useRouter } from 'next/navigation' const Sidebar = ({ userStr = 'no-user' }: any) => { const router = useRouter() const { t } = useTranslation() const { appData, pinnedConversationList, conversationList, handleNewConversation, currentConversationId, handleChangeConversation, handlePinConversation, handleUnpinConversation, conversationRenaming, handleRenameConversation, handleDeleteConversation, isMobile, } = useChatWithHistoryContext() const [showConfirm, setShowConfirm] = useState(null) const [showRename, setShowRename] = useState(null) const [showLogoutConfirm, setShowLogoutConfirm] = useState(false) const handleOperate = useCallback((type: string, item: ConversationItem) => { if (type === 'pin') handlePinConversation(item.id) if (type === 'unpin') handleUnpinConversation(item.id) if (type === 'delete') setShowConfirm(item) if (type === 'rename') setShowRename(item) }, [handlePinConversation, handleUnpinConversation]) const handleCancelConfirm = useCallback(() => { setShowConfirm(null) }, []) const handleDelete = useCallback(() => { if (showConfirm) handleDeleteConversation(showConfirm.id, { onSuccess: handleCancelConfirm }) }, [showConfirm, handleDeleteConversation, handleCancelConfirm]) const handleCancelRename = useCallback(() => { setShowRename(null) }, []) const handleRename = useCallback((newName: string) => { if (showRename) handleRenameConversation(showRename.id, newName, { onSuccess: handleCancelRename }) }, [showRename, handleRenameConversation, handleCancelRename]) const handleLogoutConfirm = useCallback(() => { localStorage.removeItem('token') router.replace('/login') location.reload() }, [router]) const handleLogout = useCallback(() => { setShowLogoutConfirm(true) }, []) const handleCancelLogout = useCallback(() => { setShowLogoutConfirm(false) }, []) return (
{ !isMobile && (
{appData?.site?.title}
) }
{/* TODO 置顶接口暂不支持 */} {/* { !!pinnedConversationList.length && (
) } */} { !!conversationList.length && ( ) }
{userStr}
{appData?.site?.copyright && (
© {(new Date()).getFullYear()} {appData?.site?.copyright}
)} {!!showConfirm && ( )} {!!showLogoutConfirm && ( )} {showRename && ( )}
) } export default Sidebar