| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | 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 inset-0 block w-full cursor-pointer text-[0] opacity-0 disabled:cursor-not-allowed'      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
 |