UNPKG

@bigfishtv/cockpit

Version:

196 lines (155 loc) 6.46 kB
'use strict'; 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]); } } }