| 
                        12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
                        - 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 targetFiles = e.target.files
 - 
 -     if (targetFiles) {
 -       if (fileConfig.number_limits) {
 -         for (let i = 0; i < targetFiles.length; i++) {
 -           if (i + 1 + files.length <= fileConfig.number_limits)
 -             handleLocalFileUpload(targetFiles[i])
 -         }
 -       }
 -       else {
 -         handleLocalFileUpload(targetFiles[0])
 -       }
 -     }
 -   }
 - 
 -   const allowedFileTypes = fileConfig.allowed_file_types
 -   const isCustom = allowedFileTypes?.includes(SupportUploadFileTypes.custom)
 -   const exts = isCustom ? (fileConfig.allowed_file_extensions || []) : (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)}
 -       multiple={!!fileConfig.number_limits && fileConfig.number_limits > 1}
 -     />
 -   )
 - }
 - 
 - export default FileInput
 
 
  |