import type { FC } from 'react' import type { ImageFile, VisionSettings } from '@/types/app' import { Popover, PopoverContent, PopoverTrigger } from '@langgenius/dify-ui/popover' import { Fragment, useEffect, useState } from 'react' import { useTranslation } from 'react-i18next' import { Link03 } from '@/app/components/base/icons/src/vender/line/general' import { ImagePlus } from '@/app/components/base/icons/src/vender/line/images' import { TransferMethod } from '@/types/app' import { useImageFiles } from './hooks' import ImageLinkInput from './image-link-input' import ImageList from './image-list' import Uploader from './uploader' type PasteImageLinkButtonProps = { onUpload: (imageFile: ImageFile) => void disabled?: boolean } const PasteImageLinkButton: FC = ({ onUpload, disabled }) => { const { t } = useTranslation() const [open, setOpen] = useState(false) const handleUpload = (imageFile: ImageFile) => { setOpen(false) onUpload(imageFile) } return ( { if (disabled) return setOpen(nextOpen) }} > {t(($) => $['imageUploader.pasteImageLink'], { ns: 'common' })} } />
) } type TextGenerationImageUploaderProps = { settings: VisionSettings onFilesChange: (files: ImageFile[]) => void disabled?: boolean } const TextGenerationImageUploader: FC = ({ settings, onFilesChange, disabled, }) => { const { t } = useTranslation() const { files, onUpload, onRemove, onImageLinkLoadError, onImageLinkLoadSuccess, onReUpload } = useImageFiles() useEffect(() => { onFilesChange(files) }, [files]) const localUpload = ( = settings.number_limits || disabled} limit={+settings.image_file_size_limit!} > {(hovering) => (
{t(($) => $['imageUploader.uploadFromComputer'], { ns: 'common' })}
)}
) const urlUpload = ( = settings.number_limits || disabled} /> ) return (
{settings.transfer_methods.map((method) => { if (method === TransferMethod.local_file) return {localUpload} if (method === TransferMethod.remote_url) return {urlUpload} return null })}
) } export default TextGenerationImageUploader