Spaces:
Build error
Build error
import { useFile } from './hooks' | |
import { useStore } from './store' | |
import type { FileUpload } from '@/app/components/base/features/types' | |
import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants' | |
import { SupportUploadFileTypes } from '@/app/components/workflow/types' | |
type FileInputProps = { | |
fileConfig: FileUpload | |
} | |
const FileInput = ({ | |
fileConfig, | |
}: FileInputProps) => { | |
const files = useStore(s => s.files) | |
const { handleLocalFileUpload } = useFile(fileConfig) | |
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => { | |
const file = e.target.files?.[0] | |
if (file) | |
handleLocalFileUpload(file) | |
} | |
const allowedFileTypes = fileConfig.allowed_file_types | |
const isCustom = allowedFileTypes?.includes(SupportUploadFileTypes.custom) | |
const exts = isCustom ? (fileConfig.allowed_file_extensions?.map(item => `.${item}`) || []) : (allowedFileTypes?.map(type => FILE_EXTS[type]) || []).flat().map(item => `.${item}`) | |
const accept = exts.join(',') | |
return ( | |
<input | |
className='absolute block inset-0 opacity-0 text-[0] w-full disabled:cursor-not-allowed cursor-pointer' | |
onClick={e => ((e.target as HTMLInputElement).value = '')} | |
type='file' | |
onChange={handleChange} | |
accept={accept} | |
disabled={!!(fileConfig.number_limits && files.length >= fileConfig?.number_limits)} | |
/> | |
) | |
} | |
export default FileInput | |