mirror of
https://github.com/sqlchat/sqlchat.git
synced 2025-07-28 17:53:21 +08:00
59 lines
2.1 KiB
TypeScript
59 lines
2.1 KiB
TypeScript
import Link from "next/link";
|
|
import { useEffect, useState } from "react";
|
|
import { useChatStore, useUserStore } from "../../store";
|
|
import { Chat, User } from "../../types";
|
|
import Icon from "../Icon";
|
|
|
|
const Sidebar = () => {
|
|
const userStore = useUserStore();
|
|
const chatStore = useChatStore();
|
|
const [currentChat, setCurrentChat] = useState<Chat | null>(null);
|
|
|
|
useEffect(() => {
|
|
setCurrentChat(chatStore.currentChat);
|
|
}, [chatStore.currentChat]);
|
|
|
|
const handleAssistantClick = (user: User) => {
|
|
for (const chat of chatStore.chatList) {
|
|
if (chat.userId === user.id) {
|
|
chatStore.setCurrentChat(chat);
|
|
return;
|
|
}
|
|
}
|
|
chatStore.createChat(user);
|
|
};
|
|
|
|
return (
|
|
<div className="w-52 lg:w-64 h-full transition-all shrink-0 border-r px-3 flex flex-col justify-start items-center sticky top-0">
|
|
<h2 className="py-4 w-full flex flex-row justify-center items-center">
|
|
<Icon.Io.IoIosChatbubbles className="text-gray-600 mr-2 w-6 h-auto" /> Assistant list
|
|
</h2>
|
|
<div className="w-full mt-2 flex flex-col justify-start items-start">
|
|
{userStore.assistantList.map((assistant) => (
|
|
<div
|
|
className={`w-full py-2 px-3 rounded-md mb-2 cursor-pointer hover:opacity-80 hover:bg-gray-100 ${
|
|
currentChat?.userId === assistant.id && "shadow bg-gray-100 font-medium"
|
|
}`}
|
|
onClick={() => handleAssistantClick(assistant)}
|
|
key={assistant.id}
|
|
>
|
|
{assistant.name}
|
|
</div>
|
|
))}
|
|
</div>
|
|
<div className="grow w-full flex flex-col justify-end items-center pb-6">
|
|
<div className="w-full flex flex-row justify-center items-center space-x-3">
|
|
<Link href="/" className="p-1 rounded-md hover:shadow hover:bg-gray-100">
|
|
<Icon.Io.IoMdHome className="text-gray-600 w-6 h-auto" />
|
|
</Link>
|
|
<a href="https://github.com/bytebase/chatdba" target="_blank" className="p-1 rounded-md hover:shadow hover:bg-gray-100">
|
|
<Icon.Io.IoLogoGithub className="text-gray-600 w-6 h-auto" />
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default Sidebar;
|