feeles-ide
Version:
The hackable and serializable IDE to make learning material
143 lines (110 loc) • 4.64 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf3 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _styles = require("@material-ui/core/styles");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _typestyle = require("typestyle");
var _IconButton = _interopRequireDefault(require("@material-ui/core/IconButton"));
var _reactDnd = require("react-dnd");
var _Computer = _interopRequireDefault(require("@material-ui/icons/Computer"));
var _dragTypes = _interopRequireDefault(require("../../utils/dragTypes"));
var _dec, _class, _class2, _temp;
var cn = {
input: (0, _typestyle.style)({
display: 'none'
})
};
var getCn = function getCn(props) {
return {
icon: (0, _typestyle.style)({
borderWidth: 0,
borderStyle: 'solid',
borderColor: 'transparent',
borderRadius: 2,
borderTopWidth: props.isOver ? props.theme.spacing.unit : 0,
backgroundColor: props.isOver ? props.theme.palette.disabledColor : 'transparent'
})
};
};
var _DesktopFile = (_dec = (0, _styles.withTheme)(), _dec(_class = (_temp = _class2 =
/*#__PURE__*/
function (_PureComponent) {
(0, _inherits2.default)(_DesktopFile, _PureComponent);
function _DesktopFile() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, _DesktopFile);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf2 = (0, _getPrototypeOf3.default)(_DesktopFile)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleChange", function (event) {
_this.props.onOpen(Array.from(event.target.files));
});
return _this;
}
(0, _createClass2.default)(_DesktopFile, [{
key: "render",
value: function render() {
var _this2 = this;
var dcn = getCn(this.props);
var connectDropTarget = this.props.connectDropTarget;
return connectDropTarget(_react.default.createElement("div", null, _react.default.createElement("input", {
multiple: true,
type: "file",
className: cn.input,
ref: function ref(_ref) {
return _ref && (_this2.input = _ref);
},
onChange: this.handleChange
}), _react.default.createElement(_IconButton.default, {
className: dcn.icon,
onClick: function onClick() {
return _this2.input && _this2.input.click();
}
}, _react.default.createElement(_Computer.default, null))));
}
}]);
return _DesktopFile;
}(_react.PureComponent), (0, _defineProperty2.default)(_class2, "propTypes", {
theme: _propTypes.default.object.isRequired,
onOpen: _propTypes.default.func.isRequired,
saveAs: _propTypes.default.func.isRequired,
connectDropTarget: _propTypes.default.func.isRequired,
isOver: _propTypes.default.bool.isRequired
}), _temp)) || _class);
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 = (0, _reactDnd.DropTarget)(_dragTypes.default.File, spec, collect)(_DesktopFile);
var _default = DesktopFile;
exports.default = _default;