95 lines
2.4 KiB
JavaScript

/*
* Because of the way Uppy is designed, we can't use onBeforeUpload to set the video_id as it does not support async.
* So this custom plugin is used to set the video_id before the upload starts.
*
* @see https://uppy.io/docs/writing-plugins/#Example-of-a-custom-plugin
*/
import {UIPlugin} from '@uppy/core';
class UppyCreateVid extends UIPlugin {
constructor(uppy, opts) {
super(uppy, {...{}, ...opts});
this.id = this.opts.id || 'CreateVid';
this.type = 'modifier';
}
createVideo(title) {
return new Promise((resolve, reject) => {
const formData = new FormData();
formData.append('title', title);
formData.append('nonce', IUP_VIDEO.nonce);
const options = {
method: 'POST',
headers: {
Accept: 'application/json',
},
body: formData,
};
fetch(
`${ajaxurl}?action=infinite-uploads-video-create`,
options
)
.then((response) => response.json())
.then((data) => {
console.log(data);
if (data.success) {
resolve(data.data);
} else {
reject(data.data);
}
})
.catch((error) => {
console.log('Error:', error);
return reject(error);
});
});
}
prepareUpload = (fileIDs) => {
const promises = fileIDs.map((fileID) => {
const file = this.uppy.getFile(fileID);
//get the title from the file name and remove the extension
const title = file.name.replace(/\.[^/.]+$/, '');
return this.createVideo(title)
.then((upload) => {
console.log(`Video ${upload.VideoId} created`);
this.opts.uploadAuth.current = {...this.opts.uploadAuth.current, [fileID]: upload};
})
.catch((err) => {
this.uppy.log(
`Video could not be created ${file.id}:`,
'warning'
);
this.uppy.log(err, 'warning');
});
});
const emitPreprocessCompleteForAll = () => {
fileIDs.forEach((fileID) => {
const file = this.uppy.getFile(fileID);
this.uppy.emit('preprocess-complete', file);
});
};
// Why emit `preprocess-complete` for all files at once, instead of
// above when each is processed?
// Because it leads to StatusBar showing a weird “upload 6 files” button,
// while waiting for all the files to complete pre-processing.
return Promise.all(promises).then(emitPreprocessCompleteForAll);
};
install() {
this.uppy.addPreProcessor(this.prepareUpload);
}
uninstall() {
this.uppy.removePreProcessor(this.prepareUpload);
}
}
export default UppyCreateVid;