import clsx from 'clsx'; import {useEffect, useRef, useState} from 'react'; import {FilePreviewProps} from './file-preview-props'; import {DefaultFilePreview} from './default-file-preview'; import {ProgressCircle} from '../../../ui/progress/progress-circle'; import {FileEntry} from '../../file-entry'; import {useFileEntryUrls} from '../../hooks/file-entry-urls'; import {useTrans} from '../../../i18n/use-trans'; import {apiClient} from '../../../http/query-client'; export function WordDocumentFilePreview(props: FilePreviewProps) { const {entry, className} = props; const {trans} = useTrans(); const ref = useRef(null); const [showDefault, setShowDefault] = useState(false); const timeoutId = useRef(); const [isLoading, setIsLoading] = useState(false); const {previewUrl} = useFileEntryUrls(entry); useEffect(() => { // Google Docs viewer only supports files up to 25MB if (!previewUrl) { setShowDefault(true); } else if (entry.file_size && entry.file_size > 25000000) { setShowDefault(true); } else if (ref.current) { ref.current.onload = () => { clearTimeout(timeoutId.current); setIsLoading(false); }; buildPreviewUrl(previewUrl, entry).then(url => { if (ref.current) { ref.current.src = url; } }); // if preview iframe is not loaded // after 5 seconds, bail and show default preview timeoutId.current = setTimeout(() => { setShowDefault(true); }, 5000); } }, [entry, previewUrl]); if (showDefault) { return ; } return (
{isLoading && }