import message from '@/components/ui/message'; import { Spin } from '@/components/ui/spin'; import request from '@/utils/request'; import classNames from 'classnames'; import { useCallback, useEffect, useState } from 'react'; interface VideoPreviewerProps { className?: string; url: string; } export const VideoPreviewer: React.FC = ({ className, url, }) => { // const url = useGetDocumentUrl(); const [videoSrc, setVideoSrc] = useState(null); const [isLoading, setIsLoading] = useState(true); const fetchVideo = useCallback(async () => { setIsLoading(true); const res = await request(url, { method: 'GET', responseType: 'blob', onError: () => { message.error('Failed to load video'); setIsLoading(false); }, }); const objectUrl = URL.createObjectURL(res.data); setVideoSrc(objectUrl); setIsLoading(false); }, [url]); useEffect(() => { if (url) { fetchVideo(); } }, [url, fetchVideo]); useEffect(() => { return () => { if (videoSrc) { URL.revokeObjectURL(videoSrc); } }; }, [videoSrc]); return (
{isLoading && (
)} {!isLoading && videoSrc && (
)}
); };