feeles-ide
Version:
The hackable and serializable IDE to make learning material
135 lines (112 loc) • 4.04 kB
JavaScript
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;