UNPKG

feeles-ide

Version:

The hackable and serializable IDE to make learning material

135 lines (112 loc) 4.04 kB
import _Promise from 'babel-runtime/core-js/promise'; import _Array$from from 'babel-runtime/core-js/array/from'; import _Object$getPrototypeOf from 'babel-runtime/core-js/object/get-prototype-of'; import _classCallCheck from 'babel-runtime/helpers/classCallCheck'; import _createClass from 'babel-runtime/helpers/createClass'; import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn'; import _inherits from 'babel-runtime/helpers/inherits'; import React, { PureComponent } from 'react'; import PropTypes from 'prop-types'; import IconButton from 'material-ui/IconButton'; import { DropTarget } from 'react-dnd'; import HardwareComputer from 'material-ui/svg-icons/hardware/computer'; import { transparent } from 'material-ui/styles/colors'; import DragTypes from '../../utils/dragTypes'; var getStyles = function getStyles(props, context) { var isOver = props.isOver; var _context$muiTheme = context.muiTheme, palette = _context$muiTheme.palette, spacing = _context$muiTheme.spacing, prepareStyles = _context$muiTheme.prepareStyles; return { input: prepareStyles({ display: 'none' }), icon: { borderWidth: 0, borderTopWidth: isOver ? spacing.desktopGutterMini : 0, borderStyle: 'solid', borderColor: transparent, backgroundColor: isOver ? palette.disabledColor : transparent, borderRadius: 2 } }; }; var _DesktopFile = function (_PureComponent) { _inherits(_DesktopFile, _PureComponent); function _DesktopFile() { var _ref; var _temp, _this, _ret; _classCallCheck(this, _DesktopFile); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = _DesktopFile.__proto__ || _Object$getPrototypeOf(_DesktopFile)).call.apply(_ref, [this].concat(args))), _this), _this.handleChange = function (event) { _this.props.onOpen(_Array$from(event.target.files)); }, _temp), _possibleConstructorReturn(_this, _ret); } _createClass(_DesktopFile, [{ key: 'render', value: function render() { var _this2 = this; var connectDropTarget = this.props.connectDropTarget; var palette = this.context.muiTheme.palette; var _getStyles = getStyles(this.props, this.context), input = _getStyles.input, icon = _getStyles.icon; return connectDropTarget(React.createElement( 'div', null, React.createElement('input', { multiple: true, type: 'file', style: input, ref: function ref(_ref2) { return _ref2 && (_this2.input = _ref2); }, onChange: this.handleChange }), React.createElement( IconButton, { style: icon, onClick: function onClick() { return _this2.input && _this2.input.click(); } }, React.createElement(HardwareComputer, { color: palette.secondaryTextColor }) ) )); } }]); return _DesktopFile; }(PureComponent); _DesktopFile.propTypes = { onOpen: PropTypes.func.isRequired, saveAs: PropTypes.func.isRequired, connectDropTarget: PropTypes.func.isRequired, isOver: PropTypes.bool.isRequired }; _DesktopFile.contextTypes = { muiTheme: PropTypes.object.isRequired }; var spec = { drop: function drop(props, monitor, component) { var _monitor$getItem = monitor.getItem(), files = _monitor$getItem.files; files.reduce(function (p, c) { return p.then(function () { return component.props.saveAs(c); }); }, _Promise.resolve()); return {}; } }; var collect = function collect(connect, monitor) { return { connectDropTarget: connect.dropTarget(), isOver: monitor.isOver({ shallow: true }) }; }; var DesktopFile = DropTarget(DragTypes.File, spec, collect)(_DesktopFile); export default DesktopFile;