UNPKG

@bigfishtv/cockpit

Version:

131 lines (104 loc) 5.43 kB
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 };