@bigfishtv/cockpit
Version:
154 lines (114 loc) • 6.12 kB
JavaScript
;
exports.__esModule = true;
exports.default = undefined;
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; };
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _plupload = require('../../../lib/plupload');
var _plupload2 = _interopRequireDefault(_plupload);
var _fileUtils = require('../../utils/fileUtils');
var _pluploadSettings = require('../../config/pluploadSettings');
var _pluploadSettings2 = _interopRequireDefault(_pluploadSettings);
var _Button = require('../button/Button');
var _Button2 = _interopRequireDefault(_Button);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
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; }
// 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 _react2.default.createElement(_Button2.default, _extends({}, this.props, { type: 'button' }));
};
return DefaultInput;
}(_react.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 = (0, _fileUtils.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({}, _pluploadSettings2.default, {
max_file_size: false, // validateFiles will handle this and show alert
browse_button: _reactDom2.default.findDOMNode(this.refs.button),
container: _reactDom2.default.findDOMNode(this.refs.container),
multi_selection: multiple,
filters: filters
});
this.uploader = new _plupload2.default.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 _react2.default.createElement(
'div',
{ ref: 'container' },
_react2.default.createElement(Input, _extends({ ref: 'button' }, buttonProps))
);
};
return Upload;
}(_react.Component), _class.propTypes = {
/** called once files have been selected and validated */
onReceivedFiles: _propTypes2.default.func,
/** allow multiple file select */
multiple: _propTypes2.default.bool,
/** style to be passed to button, e.g. primary, secondary, error, default */
style: _propTypes2.default.string,
/** text to be passed to button */
text: _propTypes2.default.string,
/** filters to be attached to plupload settings. See: http://www.plupload.com/docs/File-Filters */
filters: _propTypes2.default.oneOfType([_propTypes2.default.array, _propTypes2.default.object]),
/** Component to replace default button component */
Input: _propTypes2.default.func
}, _class.defaultProps = {
onReceivedFiles: function onReceivedFiles() {
return console.warn('[UploadButton] no onReceivedFiles prop');
},
multiple: false,
style: 'default',
text: 'Upload',
filters: {},
Input: DefaultInput
}, _temp2);
exports.default = Upload;