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