"use client"; import { MessageCircle } from "lucide-react"; import { useQuery } from "@tanstack/react-query"; import { cn } from "@multica/ui/lib/utils"; import { useChatStore } from "@multica/core/chat"; import { chatSessionsOptions, pendingChatTasksOptions } from "@multica/core/chat/queries"; import { useWorkspaceId } from "@multica/core/hooks"; import { createLogger } from "@multica/core/logger"; import { Tooltip, TooltipTrigger, TooltipContent, } from "@multica/ui/components/ui/tooltip"; const logger = createLogger("chat.ui"); export function ChatFab() { const wsId = useWorkspaceId(); const isOpen = useChatStore((s) => s.isOpen); const toggle = useChatStore((s) => s.toggle); const { data: sessions = [] } = useQuery(chatSessionsOptions(wsId)); const { data: pending } = useQuery(pendingChatTasksOptions(wsId)); if (isOpen) return null; const unreadSessionCount = sessions.filter((s) => s.has_unread).length; const isRunning = (pending?.tasks ?? []).length > 0; const handleClick = () => { logger.info("fab.click (open chat)", { unreadSessionCount, isRunning }); toggle(); }; // Tooltip text communicates the state that isn't carried by the icon/badge. const tooltip = isRunning ? "Multica is working..." : unreadSessionCount > 0 ? `${unreadSessionCount} unread ${unreadSessionCount === 1 ? "chat" : "chats"}` : "Ask Multica"; return ( {unreadSessionCount > 0 && ( {unreadSessionCount > 9 ? "9+" : unreadSessionCount} )} {tooltip} ); }