import {__, _x, _n, _nx} from '@wordpress/i18n'; import {useState, useEffect, useRef} from '@wordpress/element'; import Container from 'react-bootstrap/Container'; import Modal from 'react-bootstrap/Modal'; import Button from 'react-bootstrap/Button'; import Uppy from '@uppy/core'; import Tus from '@uppy/tus'; import {DragDrop, StatusBar, useUppy} from '@uppy/react'; import UppyCreateVid from '../../block/edit-uppy-plugin'; import '@uppy/core/dist/style.css'; import '@uppy/drag-drop/dist/style.css'; import '@uppy/status-bar/dist/style.css'; export default function UploadModal({getVideos}) { const [show, setShow] = useState(false); const uploadAuth = useRef(null); const uploaded = useRef({}); const handleShow = () => { setShow(true); }; const handleClose = () => { setShow(false); }; const uppy = useUppy(() => { return new Uppy({ debug: true, restrictions: { maxNumberOfFiles: null, allowedFileTypes: ['video/*'], }, autoProceed: true, allowMultipleUploadBatches: true, onBeforeUpload: (files) => { //TODO trigger error if video_id is null }, }) .use(Tus, { endpoint: 'https://video.bunnycdn.com/tusupload', retryDelays: [0, 1000, 3000, 5000, 10000], onBeforeRequest: (req, file) => { //console.log('Video Auth:', uploadAuth.current[file.id]); if (!uploadAuth.current[file.id]) { throw new Error('Error fetching auth.'); return false; } req.setHeader( 'AuthorizationSignature', uploadAuth.current[file.id].AuthorizationSignature ); req.setHeader( 'AuthorizationExpire', uploadAuth.current[file.id].AuthorizationExpire ); req.setHeader('VideoId', uploadAuth.current[file.id].VideoId); req.setHeader('LibraryId', IUP_VIDEO.libraryId); }, }) .use(UppyCreateVid, {uploadAuth}); //our custom plugin }); uppy.on('error', (error) => { console.error(error.stack); }); uppy.on('upload-error', (file, error, response) => { console.log('error with file:', file.id); console.log('error message:', error); }); uppy.on('upload-success', (file, response) => { if (!uploaded.current[file.id]) { //make sure it only triggers once getVideos(); uploaded.current = {...uploaded.current, [file.id]: true}; } }); return ( <> {__('Upload Videos', 'infinite-uploads')}
); }