import { cn } from '@/lib/utils'; import { Popover, PopoverButton, PopoverPanel, Transition, } from '@headlessui/react'; import { CopyPlus, File, LoaderCircle, Paperclip, Plus, Trash, } from 'lucide-react'; import { Fragment, useRef, useState } from 'react'; import { File as FileType } from '../ChatWindow'; import { useChat } from '@/lib/hooks/useChat'; const AttachSmall = () => { const { files, setFiles, setFileIds, fileIds } = useChat(); const [loading, setLoading] = useState(false); const fileInputRef = useRef(); const handleChange = async (e: React.ChangeEvent) => { setLoading(true); const data = new FormData(); for (let i = 0; i < e.target.files!.length; i++) { data.append('files', e.target.files![i]); } const embeddingModelProvider = localStorage.getItem( 'embeddingModelProviderId', ); const embeddingModel = localStorage.getItem('embeddingModelKey'); data.append('embedding_model_provider_id', embeddingModelProvider!); data.append('embedding_model_key', embeddingModel!); const res = await fetch(`/api/uploads`, { method: 'POST', body: data, }); const resData = await res.json(); setFiles([...files, ...resData.files]); setFileIds([...fileIds, ...resData.files.map((file: any) => file.fileId)]); setLoading(false); }; return loading ? (
) : files.length > 0 ? (

Attached files

{files.map((file, i) => (

{file.fileName.length > 25 ? file.fileName.replace(/\.\w+$/, '').substring(0, 25) + '...' + file.fileExtension : file.fileName}

))}
) : ( ); }; export default AttachSmall;