'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