@bigfishtv/cockpit
Version:
196 lines (155 loc) • 6.46 kB
JavaScript
;
exports.__esModule = true;
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /**
* Tank Upload API
* @module API/tankUpload
*/
exports.getIdFromTemp = getIdFromTemp;
exports.getUploader = getUploader;
exports.init = init;
exports.addFile = addFile;
var _plupload = require('../../lib/plupload');
var _plupload2 = _interopRequireDefault(_plupload);
var _axios = require('axios');
var _reactForms = require('@bigfishtv/react-forms');
var _pluploadSettings = require('../config/pluploadSettings');
var _pluploadSettings2 = _interopRequireDefault(_pluploadSettings);
var _notifications = require('../actions/notifications');
var _maximumUploadSize = require('../actions/maximumUploadSize');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// eslint-disable-next-line no-unused-vars
var QUEUED = _plupload2.default.QUEUED,
UPLOADING = _plupload2.default.UPLOADING,
FAILED = _plupload2.default.FAILED,
DONE = _plupload2.default.DONE;
var uploader = null;
var store = null;
var oldState = {};
var tempIdFolders = [];
var tempIds = [];
var uploaderSettings = _extends({}, _pluploadSettings2.default, {
browse_button: document.createElement('div'),
multi_selection: true,
init: {
PostInit: PostInit,
FilesAdded: FilesAdded,
BeforeUpload: BeforeUpload,
UploadProgress: UploadProgress,
FileUploaded: FileUploaded,
Error: Error
}
/**
* Gets real asset id from tempIds array
* @param {String} tempId
* @return {String}
*/
});function getIdFromTemp(tempId) {
return tempIds[tempId] || false;
}
/**
* Returns plupload instance
* @return {Plupload}
*/
function getUploader() {
if (!uploader) return;
return uploader;
}
/**
* Makes reference to redux store and inits plupload instance
* @param {Object} _store
* @param {Object} settings
* @param {String} settings.max_file_size - default '10mb'
* @param {String} settings.runtimes - default 'html5,flash,html4'
* @param {String} settings.url - default '/tank/assets/upload/'
* @param {String} settings.flash_swf_url - default '/tank/lib/plupload/Moxie.swf'
* @param {Boolean} settings.urlstream_upload - default true
* @param {Boolean} settings.multi_selection - default true
* @param {DOM} settings.browse_button
* @param {Object} settings.init
* @return {Plupload}
*/
function init(_store) {
var settings = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : uploaderSettings;
if (uploader !== null) {
return;
}
store = _store;
settings = (0, _reactForms.update)(settings, ['headers', 'X-CSRF-Token'], store.getState().csrfToken);
uploader = new _plupload2.default.Uploader(settings);
uploader.init();
oldState = store.getState();
store.subscribe(function () {
var newState = store.getState();
if (oldState.maximumUploadSize !== newState.maximumUploadSize) {
uploader.setOption('max_file_size', newState.maximumUploadSize / 1024 / 1024 + 'mb');
}
oldState = newState;
});
(0, _axios.get)('/tank/assets/maximumUploadSize').then(function (response) {
if (typeof response.data == 'number') store.dispatch((0, _maximumUploadSize.updateMaximumUploadSize)(response.data));
});
return uploader;
}
/**
* Add native file to plupload instance and start uploading
* @param {Object} file - native file
* @param {Number} [folder_id=null]
* @return {String} - returns temporary asset id
*/
function addFile(file) {
var folder_id = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
uploader.addFile(file);
var lastFile = uploader.files[uploader.files.length - 1];
tempIdFolders[lastFile.id] = folder_id;
uploader.start();
return lastFile.id;
}
function PostInit() {}
function FilesAdded(uploader, files) {}
/**
* Before upload begins we request a file id from tank and then begin upload upon asset request approval
* @param {Plupload} uploader
* @param {Object} file
*/
function BeforeUpload(uploader, file) {
var folder_id = tempIdFolders[file.id];
(0, _axios.post)('/tank/assets/create', { filename: file.name, tempId: file.id, folder_id: folder_id }).then(function (response) {
tempIds[file.id] = response.data.id;
file.asset = response.data;
uploader.settings.multipart_params.asset = response.data;
file.status = _plupload2.default.UPLOADING;
uploader.trigger('UploadFile', file);
}, function (error) {
uploader.removeFile(file);
store.dispatch((0, _notifications.notifyFailure)('Uploader error requesting asset admittance (' + error.status + ') - ' + error.statusText));
});
return false;
}
function UploadProgress(uploader, file) {}
function FileUploaded(uploader, file, response) {
var allDone = true;
for (var _iterator = uploader.files, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var _file = _ref;
if (_file.status !== DONE) allDone = false;
}
if (allDone) uploader.splice();
}
function Error(uploader, error) {
store.dispatch((0, _notifications.notifyFailure)('Uploader error (' + error.status + ') - ' + error.message));
var badFile = error.file;
if (badFile) {
uploader.removeFile(badFile);
if (badFile.asset) {
(0, _axios.post)('/tank/assets/delete.json', [badFile.asset.id]);
}
}
}