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() && (
}
onClick={resetChat}
>
新对话
)}
{/* 我的模型 & 历史记录 折叠框*/}
{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;