import { useCallback, useState, } from 'react' import { FileContextProvider, } from '../store' import type { FileEntity } from '../types' import { useUpload } from '../hooks/use-upload' import ImageInput from './image-input' import cn from '@/utils/classnames' import { useTranslation } from 'react-i18next' import { useFileStoreWithSelector } from '../store' import ImageItem from './image-item' import type { ImageInfo } from '@/app/components/datasets/common/image-previewer' import ImagePreviewer from '@/app/components/datasets/common/image-previewer' type ImageUploaderInRetrievalTestingProps = { textArea: React.ReactNode actionButton: React.ReactNode showUploader?: boolean className?: string actionAreaClassName?: string } const ImageUploaderInRetrievalTesting = ({ textArea, actionButton, showUploader = true, className, actionAreaClassName, }: ImageUploaderInRetrievalTestingProps) => { const { t } = useTranslation() const files = useFileStoreWithSelector(s => s.files) const [previewIndex, setPreviewIndex] = useState(0) const [previewImages, setPreviewImages] = useState([]) const { dragging, dragRef, dropRef, handleRemoveFile, handleReUploadFile, } = useUpload() const handleImagePreview = useCallback((fileId: string) => { const index = files.findIndex(item => item.id === fileId) if (index === -1) return setPreviewIndex(index) setPreviewImages(files.map(item => ({ url: item.base64Url || item.sourceUrl || '', name: item.name, size: item.size, }))) }, [files]) const handleClosePreview = useCallback(() => { setPreviewImages([]) }, []) return (
{dragging && (
{t('datasetHitTesting.imageUploader.dropZoneTip')}
)} {textArea} { showUploader && !!files.length && (
{ files.map(file => ( )) }
) }
{showUploader && } {actionButton}
{previewImages.length > 0 && ( )}
) } export type ImageUploaderInRetrievalTestingWrapperProps = { value?: FileEntity[] onChange: (files: FileEntity[]) => void } & ImageUploaderInRetrievalTestingProps const ImageUploaderInRetrievalTestingWrapper = ({ value, onChange, ...props }: ImageUploaderInRetrievalTestingWrapperProps) => { return ( ) } export default ImageUploaderInRetrievalTestingWrapper