diff --git a/surfsense_web/components/assistant-ui/thread.tsx b/surfsense_web/components/assistant-ui/thread.tsx index ab25d28f8..7ef0f7f2a 100644 --- a/surfsense_web/components/assistant-ui/thread.tsx +++ b/surfsense_web/components/assistant-ui/thread.tsx @@ -24,6 +24,7 @@ import { RefreshCwIcon, SquareIcon, SquareLibrary, + Upload, } from "lucide-react"; import { useParams } from "next/navigation"; import { type FC, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; @@ -33,6 +34,7 @@ import { mentionedDocumentsAtom, sidebarSelectedDocumentsAtom, } from "@/atoms/chat/mentioned-documents.atom"; +import { connectorsAtom } from "@/atoms/connectors/connector-query.atoms"; import { documentsSidebarOpenAtom } from "@/atoms/documents/ui.atoms"; import { membersAtom } from "@/atoms/members/members-query.atoms"; import { @@ -42,6 +44,7 @@ import { } from "@/atoms/new-llm-config/new-llm-config-query.atoms"; import { currentUserAtom } from "@/atoms/user/user-query.atoms"; import { AssistantMessage } from "@/components/assistant-ui/assistant-message"; +import { useDocumentUploadDialog } from "@/components/assistant-ui/document-upload-popup"; import { ChatSessionStatus } from "@/components/assistant-ui/chat-session-status"; import { ConnectorIndicator, @@ -65,7 +68,12 @@ import { } from "@/components/new-chat/document-mention-picker"; import type { ThinkingStep } from "@/components/tool-ui/deepagent-thinking"; import { Button } from "@/components/ui/button"; -import { Popover, PopoverContent, PopoverTrigger } from "@/components/ui/popover"; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu"; import type { Document } from "@/contracts/types/document.types"; import { useBatchCommentsPreload } from "@/hooks/use-comments"; import { useCommentsElectric } from "@/hooks/use-comments-electric"; @@ -475,6 +483,9 @@ const ComposerAction: FC = ({ isBlockedByOtherUser = false const setDocumentsSidebarOpen = useSetAtom(documentsSidebarOpenAtom); const connectorRef = useRef(null); const [addMenuOpen, setAddMenuOpen] = useState(false); + const { openDialog: openUploadDialog } = useDocumentUploadDialog(); + const { data: connectors } = useAtomValue(connectorsAtom); + const connectorCount = connectors?.length ?? 0; const isComposerTextEmpty = useAssistantState(({ composer }) => { const text = composer.text?.trim() || ""; @@ -502,8 +513,8 @@ const ComposerAction: FC = ({ isBlockedByOtherUser = false return (
- - + + = ({ isBlockedByOtherUser = false > - - + -
- - -
-
-
+ { + setAddMenuOpen(false); + openUploadDialog(); + }} + > + + Upload files + + { + setAddMenuOpen(false); + setDocumentsSidebarOpen(true); + }} + > + + Documents + + { + setAddMenuOpen(false); + connectorRef.current?.open(); + }} + > + + Manage connectors + {connectorCount > 0 && ( + + {connectorCount} + + )} + + + {sidebarDocs.length > 0 && ( )} -

{t("title") || "Documents"}

+

{t("title") || "Documents"}

{!isMobile && onDockedChange && ( @@ -214,7 +214,7 @@ export function DocumentsSidebar({ open, onOpenChange, isDocked = false, onDocke
{/* Connected tools strip */} -
+