@bigfishtv/cockpit
Version:
131 lines (104 loc) • 5.43 kB
JavaScript
var _class, _temp2;
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; };
function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
import PropTypes from 'prop-types';
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import plupload from '../../../lib/plupload';
import { validateFiles } from '../../utils/fileUtils';
import pluploadSettings from '../../config/pluploadSettings';
import Button from '../button/Button';
// we define this because react-docgen fails when defaultProp directly references an imported component
var DefaultInput = function (_Component) {
_inherits(DefaultInput, _Component);
function DefaultInput() {
_classCallCheck(this, DefaultInput);
return _possibleConstructorReturn(this, _Component.apply(this, arguments));
}
DefaultInput.prototype.render = function render() {
return React.createElement(Button, _extends({}, this.props, { type: 'button' }));
};
return DefaultInput;
}(Component);
/**
* Upload button that uses plupload to file select
*/
var Upload = (_temp2 = _class = function (_Component2) {
_inherits(Upload, _Component2);
function Upload() {
var _temp, _this2, _ret;
_classCallCheck(this, Upload);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this2 = _possibleConstructorReturn(this, _Component2.call.apply(_Component2, [this].concat(args))), _this2), _this2.handleSelection = function (uploader, files) {
var nativeFiles = files.map(function (file) {
return file.getNative();
});
var validatedFiles = validateFiles(nativeFiles, _this2.props);
if (validatedFiles.length > 0) _this2.props.onReceivedFiles(validatedFiles);
}, _temp), _possibleConstructorReturn(_this2, _ret);
}
Upload.prototype.componentDidMount = function componentDidMount() {
var _props = this.props,
multiple = _props.multiple,
filters = _props.filters;
var uploaderSettings = _extends({}, pluploadSettings, {
max_file_size: false, // validateFiles will handle this and show alert
browse_button: ReactDOM.findDOMNode(this.refs.button),
container: ReactDOM.findDOMNode(this.refs.container),
multi_selection: multiple,
filters: filters
});
this.uploader = new plupload.Uploader(uploaderSettings);
this.uploader.bind('FilesAdded', this.handleSelection);
this.uploader.init();
};
Upload.prototype.render = function render() {
var _props2 = this.props,
Input = _props2.Input,
defaultAssetFolder = _props2.defaultAssetFolder,
fileTypes = _props2.fileTypes,
dispatch = _props2.dispatch,
extensions = _props2.extensions,
reorderable = _props2.reorderable,
subject = _props2.subject,
files = _props2.files,
onReceivedFiles = _props2.onReceivedFiles,
onFilesSelected = _props2.onFilesSelected,
filters = _props2.filters,
buttonProps = _objectWithoutProperties(_props2, ['Input', 'defaultAssetFolder', 'fileTypes', 'dispatch', 'extensions', 'reorderable', 'subject', 'files', 'onReceivedFiles', 'onFilesSelected', 'filters']);
return React.createElement(
'div',
{ ref: 'container' },
React.createElement(Input, _extends({ ref: 'button' }, buttonProps))
);
};
return Upload;
}(Component), _class.propTypes = {
/** called once files have been selected and validated */
onReceivedFiles: PropTypes.func,
/** allow multiple file select */
multiple: PropTypes.bool,
/** style to be passed to button, e.g. primary, secondary, error, default */
style: PropTypes.string,
/** text to be passed to button */
text: PropTypes.string,
/** filters to be attached to plupload settings. See: http://www.plupload.com/docs/File-Filters */
filters: PropTypes.oneOfType([PropTypes.array, PropTypes.object]),
/** Component to replace default button component */
Input: PropTypes.func
}, _class.defaultProps = {
onReceivedFiles: function onReceivedFiles() {
return console.warn('[UploadButton] no onReceivedFiles prop');
},
multiple: false,
style: 'default',
text: 'Upload',
filters: {},
Input: DefaultInput
}, _temp2);
export { Upload as default };