// ChatInput.jsx (간단한 상태 기반 데모 컴포넌트) // ----------------------------------------------------------------------------- // • inputText / inputImage 상태 관리 // • ChatHandler 호출 후 messages 배열에 push // • very minimal UI (실제 서비스에서는 스타일·UX 개선 필요) // ----------------------------------------------------------------------------- import React, { useState } from 'react'; import ChatHandler from './ChatHandler'; const ChatInput = () => { // ---------------- state ---------------- const [inputText, setInputText] = useState(''); const [selectedFiles, setSelectedFiles] = useState([]); // File[] const [messages, setMessages] = useState([]); // {text, files, sender} const [loading, setLoading] = useState(false); // ------------- handlers --------------- const handleTextChange = e => setInputText(e.target.value); const handleFilesChange = e => { const files = Array.from(e.target.files || []); if (files.length) { setSelectedFiles(prev => [...prev, ...files]); } }; const handleFileRemove = idx => { setSelectedFiles(prev => prev.filter((_, i) => i !== idx)); }; // 채팅 보내기 const handleSend = async () => { if (!inputText && selectedFiles.length === 0) return; setLoading(true); // 1) 사용자 메시지 화면에 표시 const userMessage = { text: inputText, files: selectedFiles, sender: 'user' }; setMessages(prev => [...prev, userMessage]); // 2) ChatHandler 로 AI 답변 요청 const { response } = await ChatHandler({ text : inputText, files : selectedFiles, toolId : 'dev_chatbot', // 데모용 고정 }); // 3) AI 응답 메시지 push setMessages(prev => [...prev, userMessage, { text: response, sender: 'ai' }]); // 4) 입력 초기화 setInputText(''); setSelectedFiles([]); setLoading(false); }; // ---------------- render -------------- return (
{messages.map((msg, idx) => (
{msg.sender === 'user' ? '나' : 'AI'}: {msg.text} {msg.files && msg.files.length > 0 && (
    {msg.files.map((file, fIdx) => (
  • {file.name}
  • ))}
)}
))} {loading &&
AI가 응답을 생성하고 있습니다...
}
{/* 입력 영역 */} {selectedFiles.length > 0 && ( )}
); }; export default ChatInput;