import PropTypes from 'prop-types'
import { ApiServerContext } from '../context/ApiServerContext'
import {
useCallback,
useContext,
useEffect,
useState,
memo,
useRef
} from 'react'
import LoadingPlaceholder from './LoadingPlaceholder'
import GCodePreview from './GCodePreview'
import ThreeDPreview from './ThreeDPreview'
import { AuthContext } from '../context/AuthContext'
const FilePreview = ({ file, style = {} }) => {
useEffect(() => {
console.log('FILEPREVIEWFILE', file)
}, [file])
const { token } = useContext(AuthContext)
const { fetchFileContent } = useContext(ApiServerContext)
const [fileObjectUrl, setFileObjectUrl] = useState(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState(null)
const currentId = useRef(null)
const fetchPreview = useCallback(async () => {
if (error != null) {
return
}
setLoading(true)
const objectUrl = await fetchFileContent(file, false)
if (objectUrl == null) {
setLoading(false)
console.error('Failed to fetch file content', file)
setError('Failed to fetch file content')
return
}
setFileObjectUrl(objectUrl)
setLoading(false)
}, [file, fetchFileContent, error])
useEffect(() => {
if (file?.type && token != null && file._id !== currentId.current) {
currentId.current = file._id
fetchPreview()
}
}, [file._id, file?.type, fetchPreview, token])
if (loading == true || !file?.type) {
return