diff --git a/.gitignore b/.gitignore index fae21c2..f55f526 100644 --- a/.gitignore +++ b/.gitignore @@ -41,4 +41,5 @@ yarn-error.log* next-env.d.ts #cloudflare -.open-next +.open-next +package-lock.json \ No newline at end of file diff --git a/frontend/components/ChatInput.tsx b/frontend/components/ChatInput.tsx index 0630f3b..84f77e5 100644 --- a/frontend/components/ChatInput.tsx +++ b/frontend/components/ChatInput.tsx @@ -1,5 +1,5 @@ -import { ChevronDown, Check, ArrowUpIcon } from 'lucide-react'; -import { memo, useCallback, useMemo } from 'react'; +import { ChevronDown, Check, ArrowUpIcon, Plus, CircleX } from 'lucide-react'; +import { memo, useCallback, useMemo, useRef, useState } from 'react'; import { Textarea } from '@/frontend/components/ui/textarea'; import { cn } from '@/lib/utils'; import { Button } from '@/frontend/components/ui/button'; @@ -18,11 +18,12 @@ import { useAPIKeyStore } from '@/frontend/stores/APIKeyStore'; import { useModelStore } from '@/frontend/stores/ModelStore'; import { AI_MODELS, AIModel, getModelConfig } from '@/lib/models'; import KeyPrompt from '@/frontend/components/KeyPrompt'; -import { UIMessage } from 'ai'; +import { UIMessage } from 'ai'; import { v4 as uuidv4 } from 'uuid'; -import { StopIcon } from './ui/icons'; -import { toast } from 'sonner'; +import { StopIcon } from './ui/icons'; import { useMessageSummary } from '../hooks/useMessageSummary'; +import { useFileHandler } from '../hooks/useFileHandler'; +import FilePreview from './filePreview'; interface ChatInputProps { threadId: string; @@ -65,6 +66,9 @@ function PureChatInput({ maxHeight: 200, }); + const { fileList, fileUrls, contentTypes, handlePaste, handleFileChange, clearFiles , handleDragOver , handleDrop} = useFileHandler(); + + const navigate = useNavigate(); const { id } = useParams(); @@ -99,10 +103,11 @@ function PureChatInput({ const userMessage = createUserMessage(messageId, currentInput.trim()); await createMessage(threadId, userMessage); - - append(userMessage); + append(userMessage, { experimental_attachments: fileList }) setInput(''); + clearFiles(); adjustHeight(true); + }, [ input, status, @@ -113,7 +118,8 @@ function PureChatInput({ textareaRef, threadId, complete, - ]); + ]); + if (!canChat) { return ; @@ -137,6 +143,14 @@ function PureChatInput({
+ + +