import React, { useState, useEffect } from 'react'; import { AddIcon, ChatIcon, DeleteIcon, MoonIcon, SunIcon } from '@chakra-ui/icons'; import { Box, Button, Accordion, AccordionItem, AccordionButton, AccordionPanel, AccordionIcon, Flex, Divider, IconButton, Modal, ModalOverlay, ModalContent, ModalHeader, ModalFooter, ModalBody, ModalCloseButton, useDisclosure, useColorMode } from '@chakra-ui/react'; import { useUserStore } from '@/store/user'; import { useChatStore } from '@/store/chat'; import { useQuery } from '@tanstack/react-query'; import { useRouter } from 'next/router'; import { getToken } from '@/utils/user'; import MyIcon from '@/components/Icon'; import { useCopyData } from '@/utils/tools'; import Markdown from '@/components/Markdown'; import { shareHint } from '@/constants/common'; import { getChatSiteId } from '@/api/chat'; const SlideBar = ({ name, chatId, modelId, resetChat, onClose }: { name?: string; chatId: string; modelId: string; resetChat: () => void; onClose: () => void; }) => { const router = useRouter(); const { colorMode, toggleColorMode } = useColorMode(); const { copyData } = useCopyData(); const { myModels, getMyModels } = useUserStore(); const { chatHistory, removeChatHistoryByWindowId } = useChatStore(); const [hasReady, setHasReady] = useState(false); const { isOpen: isOpenShare, onOpen: onOpenShare, onClose: onCloseShare } = useDisclosure(); const { isSuccess } = useQuery(['init'], getMyModels, { cacheTime: 5 * 60 * 1000 }); useEffect(() => { setHasReady(true); }, []); const RenderHistory = () => ( <> {chatHistory.map((item) => ( { if (item.chatId === chatId) return; router.push(`/chat?chatId=${item.chatId}`); onClose(); }} > {item.title} } variant={'unstyled'} aria-label={'edit'} size={'xs'} onClick={(e) => { removeChatHistoryByWindowId(item.chatId); e.stopPropagation(); }} /> ))} ); const RenderButton = ({ onClick, children }: { onClick: () => void; children: JSX.Element }) => ( {children} ); return ( {/* 新对话 */} {getToken() && ( )} {/* 我的模型 & 历史记录 折叠框*/} {isSuccess && ( 其他模型 {myModels.map((item) => ( { if (item.name === name) return; router.push(`/chat?chatId=${await getChatSiteId(item._id)}`); onClose(); }} > {item.name} ))} )} 历史记录 {hasReady && } router.push('/')}> <> 首页 <> 分享 : } aria-label={''} variant={'outline'} w={'16px'} colorScheme={'white'} _hover={{ backgroundColor: 'rgba(255,255,255,0.2)' }} onClick={toggleColorMode} /> {/* 分享提示modal */} 分享对话 {getToken() && ( )} ); }; export default SlideBar;