import { useCallback, } from 'react' import { RiLink, RiUploadCloud2Line, } from '@remixicon/react' import { useTranslation } from 'react-i18next' import FileFromLinkOrLocal from '../file-from-link-or-local' import { FileContextProvider, useStore, } from '../store' import type { FileEntity } from '../types' import FileInput from '../file-input' import { useFile } from '../hooks' import FileItem from './file-item' import Button from '@/app/components/base/button' import cn from '@/utils/classnames' import type { FileUpload } from '@/app/components/base/features/types' import { TransferMethod } from '@/types/app' type Option = { value: string label: string icon: JSX.Element } type FileUploaderInAttachmentProps = { fileConfig: FileUpload } const FileUploaderInAttachment = ({ fileConfig, }: FileUploaderInAttachmentProps) => { const { t } = useTranslation() const files = useStore(s => s.files) const { handleRemoveFile, handleReUploadFile, } = useFile(fileConfig) const options = [ { value: TransferMethod.local_file, label: t('common.fileUploader.uploadFromComputer'), icon: , }, { value: TransferMethod.remote_url, label: t('common.fileUploader.pasteFileLink'), icon: , }, ] const renderButton = useCallback((option: Option, open?: boolean) => { return ( ) }, [fileConfig, files.length]) const renderTrigger = useCallback((option: Option) => { return (open: boolean) => renderButton(option, open) }, [renderButton]) const renderOption = useCallback((option: Option) => { if (option.value === TransferMethod.local_file && fileConfig?.allowed_file_upload_methods?.includes(TransferMethod.local_file)) return renderButton(option) if (option.value === TransferMethod.remote_url && fileConfig?.allowed_file_upload_methods?.includes(TransferMethod.remote_url)) { return ( ) } }, [renderButton, renderTrigger, fileConfig]) return (
{options.map(renderOption)}
{ files.map(file => ( handleRemoveFile(file.id)} onReUpload={() => handleReUploadFile(file.id)} /> )) }
) } type FileUploaderInAttachmentWrapperProps = { value?: FileEntity[] onChange: (files: FileEntity[]) => void fileConfig: FileUpload } const FileUploaderInAttachmentWrapper = ({ value, onChange, fileConfig, }: FileUploaderInAttachmentWrapperProps) => { return ( ) } export default FileUploaderInAttachmentWrapper