index.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. 'use client'
  2. import React, { useState, useEffect } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import type { File } from '@/models/datasets'
  5. import { fetchFilePreview } from '@/service/common'
  6. import cn from 'classnames'
  7. import s from './index.module.css'
  8. type IProps = {
  9. file?: File,
  10. }
  11. const FilePreview = ({
  12. file,
  13. }: IProps) => {
  14. const { t } = useTranslation()
  15. const [previewContent, setPreviewContent] = useState('')
  16. const [loading, setLoading] = useState(true)
  17. const getPreviewContent = async (fileID: string) => {
  18. try {
  19. const res = await fetchFilePreview({ fileID })
  20. setPreviewContent(res.content)
  21. setLoading(false)
  22. }
  23. catch {}
  24. }
  25. const getFileName = (currentFile?: File) => {
  26. if (!currentFile) {
  27. return ''
  28. }
  29. const arr = currentFile.name.split('.')
  30. return arr.slice(0, -1).join()
  31. }
  32. useEffect(() => {
  33. if (file) {
  34. getPreviewContent(file.id)
  35. }
  36. }, [file])
  37. return (
  38. <div className={cn(s.filePreview)}>
  39. <div className={cn(s.previewHeader)}>
  40. <div className={cn(s.title)}>{t('datasetCreation.stepOne.filePreview')}</div>
  41. <div className={cn(s.fileName)}>
  42. <span>{getFileName(file)}</span><span className={cn(s.filetype)}>.{file?.extension}</span>
  43. </div>
  44. </div>
  45. <div className={cn(s.previewContent)}>
  46. {loading && <div className={cn(s.loading)}/>}
  47. {!loading && (
  48. <div className={cn(s.fileContent)}>{previewContent}</div>
  49. )}
  50. </div>
  51. </div>
  52. )
  53. }
  54. export default FilePreview