Spaces:
Build error
Build error
'use client' | |
import React, { useEffect, useState } from 'react' | |
import { useTranslation } from 'react-i18next' | |
import { XMarkIcon } from '@heroicons/react/20/solid' | |
import s from './index.module.css' | |
import cn from '@/utils/classnames' | |
import type { CustomFile as File } from '@/models/datasets' | |
import { fetchFilePreview } from '@/service/common' | |
type IProps = { | |
file?: File | |
hidePreview: () => void | |
} | |
const FilePreview = ({ | |
file, | |
hidePreview, | |
}: IProps) => { | |
const { t } = useTranslation() | |
const [previewContent, setPreviewContent] = useState('') | |
const [loading, setLoading] = useState(true) | |
const getPreviewContent = async (fileID: string) => { | |
try { | |
const res = await fetchFilePreview({ fileID }) | |
setPreviewContent(res.content) | |
setLoading(false) | |
} | |
catch { } | |
} | |
const getFileName = (currentFile?: File) => { | |
if (!currentFile) | |
return '' | |
const arr = currentFile.name.split('.') | |
return arr.slice(0, -1).join() | |
} | |
useEffect(() => { | |
if (file?.id) { | |
setLoading(true) | |
getPreviewContent(file.id) | |
} | |
}, [file]) | |
return ( | |
<div className={cn(s.filePreview)}> | |
<div className={cn(s.previewHeader)}> | |
<div className={cn(s.title)}> | |
<span>{t('datasetCreation.stepOne.filePreview')}</span> | |
<div className='flex items-center justify-center w-6 h-6 cursor-pointer' onClick={hidePreview}> | |
<XMarkIcon className='h-4 w-4'></XMarkIcon> | |
</div> | |
</div> | |
<div className={cn(s.fileName)}> | |
<span>{getFileName(file)}</span><span className={cn(s.filetype)}>.{file?.extension}</span> | |
</div> | |
</div> | |
<div className={cn(s.previewContent)}> | |
{loading && <div className={cn(s.loading)} />} | |
{!loading && ( | |
<div className={cn(s.fileContent)}>{previewContent}</div> | |
)} | |
</div> | |
</div> | |
) | |
} | |
export default FilePreview | |