"use client"; import { memo, useCallback, useEffect, useRef, useState } from "react"; import { useSettingsData } from "@/hooks/domains/settings/use-settings-data"; import { type ChatInputContainerHandle } from "@/components/task/chat/chat-input-container"; import { QueuedMessageIndicator, type QueuedMessageIndicatorHandle, } from "@/components/task/chat/queued-message-indicator"; import { MessageList } from "@/components/task/chat/message-list"; import { useChatPanelState } from "@/components/task/chat/use-chat-panel-state"; import { ChatInputArea, useSubmitHandler, useChatPanelHandlers, } from "@/components/task/chat/chat-input-area"; import { ClarificationInputOverlay } from "@/components/task/chat/clarification-input-overlay"; type QuickChatContentProps = { sessionId: string; minimalToolbar?: boolean; placeholderOverride?: string; initialPrompt?: string; onInitialPromptSent?: () => void; }; function useQuickChatState(sessionId: string) { const chatInputRef = useRef(null); const queuedMessageRef = useRef(null); useSettingsData(true); const panelState = useChatPanelState({ sessionId, onOpenFile: undefined, onOpenFileAtLine: undefined, }); const { isSending, handleSubmit } = useSubmitHandler(panelState, undefined); const { cancelQueue } = panelState; const { handleCancelTurn, handleCancelQueue, handleQueueEditComplete } = useChatPanelHandlers( panelState.resolvedSessionId, cancelQueue, chatInputRef, ); return { chatInputRef, queuedMessageRef, panelState, isSending, handleSubmit, handleCancelTurn, handleCancelQueue, handleQueueEditComplete, }; } export const QuickChatContent = memo(function QuickChatContent({ sessionId, minimalToolbar, placeholderOverride, initialPrompt, onInitialPromptSent, }: QuickChatContentProps) { const [clarificationKey, setClarificationKey] = useState(0); const initialPromptSent = useRef(false); const state = useQuickChatState(sessionId); const { chatInputRef, queuedMessageRef, panelState, isSending, handleSubmit, handleCancelTurn, handleCancelQueue, handleQueueEditComplete, } = state; const { taskId, pendingClarification, isQueued, queuedMessage, updateQueueContent } = panelState; useEffect(() => { const timer = setTimeout(() => chatInputRef.current?.focusInput(), 50); return () => clearTimeout(timer); }, [chatInputRef]); useEffect(() => { if (!initialPrompt || !taskId || initialPromptSent.current) return; initialPromptSent.current = true; handleSubmit(initialPrompt); onInitialPromptSent?.(); }, [initialPrompt, taskId, handleSubmit, onInitialPromptSent]); const handleClarificationResolved = useCallback(() => setClarificationKey((k) => k + 1), []); return (
{pendingClarification && (
)} {isQueued && queuedMessage && (
)}
); });