| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | '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
 |