diff --git a/src/components/Assistant/Chat.tsx b/src/components/Assistant/Chat.tsx index f88f89df..7dee4662 100644 --- a/src/components/Assistant/Chat.tsx +++ b/src/components/Assistant/Chat.tsx @@ -8,7 +8,6 @@ import { useState, useMemo, } from "react"; -import { MessageSquarePlus, PanelLeft } from "lucide-react"; import { isTauri } from "@tauri-apps/api/core"; import { useTranslation } from "react-i18next"; import { debounce } from "lodash-es"; @@ -20,7 +19,7 @@ import { useWebSocket } from "@/hooks/useWebSocket"; import { useChatStore } from "@/stores/chatStore"; import { useWindows } from "@/hooks/useWindows"; import { clientEnv } from "@/utils/env"; - +import { ChatHeader } from "./ChatHeader"; interface ChatAIProps { isTransitioned: boolean; isSearchActive?: boolean; @@ -249,7 +248,7 @@ const ChatAI = memo( console.error("Failed to fetch user data:", error); } }, - [activeChat?._id] + [activeChat?._id, isSearchActive, isDeepThinkActive] ); const chatClose = async () => { @@ -327,26 +326,10 @@ const ChatAI = memo( className={`h-full flex flex-col rounded-xl overflow-hidden`} > {isChatPage ? null : ( -
- - - -
+ )} {/* Chat messages */} diff --git a/src/components/Assistant/ChatHeader.tsx b/src/components/Assistant/ChatHeader.tsx new file mode 100644 index 00000000..eb83d8cc --- /dev/null +++ b/src/components/Assistant/ChatHeader.tsx @@ -0,0 +1,127 @@ +import { MessageSquarePlus, PanelLeft, Pin, MoreHorizontal } from "lucide-react"; +import { useState } from "react"; +import { Listbox, Popover } from "@headlessui/react"; + +interface Server { + id: string; + name: string; + status: 'online' | 'offline'; + assistantCount: number; +} + +interface ChatHeaderProps { + onCreateNewChat: () => void; + onOpenChatAI: () => void; +} + +export function ChatHeader({ onCreateNewChat, onOpenChatAI }: ChatHeaderProps) { + const [isPinned, setIsPinned] = useState(false); + const [showAI] = useState(false); + const [servers] = useState([ + { id: '1', name: 'Coco Cloud', status: 'online', assistantCount: 3 }, + { id: '2', name: 'Searchkit', status: 'online', assistantCount: 3 }, + { id: '3', name: 'INFINI Labs', status: 'online', assistantCount: 2 }, + { id: '4', name: 'Test server', status: 'offline', assistantCount: 1 }, + ]); + const [selectedServer, setSelectedServer] = useState(servers[0]); + + return ( +
+
+ + + {showAI ? +
+ +
+ + {selectedServer.name} +
+
+ + {servers.map((server) => ( + + `relative cursor-pointer select-none py-2 px-3 ${ + active ? 'bg-gray-100 dark:bg-gray-700' : '' + }` + } + > +
+
+ + {server.name} +
+
+ + + AI Assistant: {server.assistantCount} + +
+
+
+ ))} +
+
+
: null} + + +
+ +
+ + + + + + + + +
+

Servers

+
+ {servers.map(server => ( +
+
+ +
+
{server.name}
+
+ AI Assistant: {server.assistantCount} +
+
+
+ +
+ ))} +
+
+
+
+
+
+ ); +} \ No newline at end of file diff --git a/src/components/Assistant/SourceResult.tsx b/src/components/Assistant/SourceResult.tsx index 8cdd9ec6..52af2989 100644 --- a/src/components/Assistant/SourceResult.tsx +++ b/src/components/Assistant/SourceResult.tsx @@ -76,10 +76,10 @@ export function SourceResult({ text }: SourceResultProps) {
item.url && OpenURLWithBrowser(item.url)} - className="group flex items-center px-2 py-1 hover:bg-[#F7F7F7] dark:hover:bg-[#2C2C2C] border-b border-[#E6E6E6] dark:border-[#272626] last:border-b-0 cursor-pointer transition-colors" + className="group flex items-center p-2 hover:bg-[#F7F7F7] dark:hover:bg-[#2C2C2C] border-b border-[#E6E6E6] dark:border-[#272626] last:border-b-0 cursor-pointer transition-colors" >
-
+
{item.title || item.category}