'use client'
import * as React from 'react'
import Loading from '@/app/components/base/loading'
import dynamic from '@/next/dynamic'
import { useFetchTextContent } from '../hooks/use-fetch-text-content'
import { useFileTypeInfo } from '../hooks/use-file-type-info'
import { getFileLanguage } from '../utils/file-utils'
import MediaFilePreview from './media-file-preview'
import UnsupportedFileDownload from './unsupported-file-download'
const ReadOnlyCodePreview = dynamic(
() => import('./read-only-code-preview'),
{ ssr: false, loading: () => },
)
const ReadOnlyMarkdownPreview = dynamic(
() => import('./read-only-markdown-preview'),
{ ssr: false, loading: () => },
)
const SQLiteFilePreview = dynamic(
() => import('./sqlite-file-preview'),
{ ssr: false, loading: () => },
)
const PdfFilePreview = dynamic(
() => import('./pdf-file-preview'),
{ ssr: false, loading: () => },
)
type ReadOnlyFilePreviewProps = {
downloadUrl: string
fileName: string
extension?: string | null
fileSize?: number | null
}
const ReadOnlyFilePreview = ({
downloadUrl,
fileName,
extension,
fileSize,
}: ReadOnlyFilePreviewProps) => {
const fileNode = React.useMemo(
() => ({ name: fileName, extension }),
[fileName, extension],
)
const { isMarkdown, isCodeOrText, isImage, isVideo, isPdf, isSQLite, isPreviewable } = useFileTypeInfo(fileNode)
const isTextFile = isPreviewable && (isMarkdown || isCodeOrText)
const { data: textContent, isLoading: isTextLoading } = useFetchTextContent(
isTextFile ? downloadUrl : undefined,
)
if (!isPreviewable) {
return (
)
}
if (isTextFile && isTextLoading)
return
if (isMarkdown)
return
if (isCodeOrText) {
return (
)
}
if (isImage || isVideo)
return
if (isSQLite)
return
if (isPdf)
return
return (
)
}
export default React.memo(ReadOnlyFilePreview)