mirror of
				https://github.com/langgenius/dify.git
				synced 2025-10-31 02:42:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			40 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | 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 |