feeles-ide
Version:
The hackable and serializable IDE to make learning material
240 lines (198 loc) • 8.14 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
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 _propTypes = _interopRequireDefault(require("prop-types"));
var _typestyle = require("typestyle");
var _CardWindow = _interopRequireDefault(require("../CardWindow"));
var _CardContent = _interopRequireDefault(require("@material-ui/core/CardContent"));
var _CardActions = _interopRequireDefault(require("@material-ui/core/CardActions"));
var _Select = _interopRequireDefault(require("@material-ui/core/Select"));
var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem"));
var _CardFloatingBar = _interopRequireDefault(require("../CardFloatingBar"));
var _Readme = _interopRequireDefault(require("./Readme"));
var _EditFile = _interopRequireDefault(require("../EditFile"));
var _shallowEqual = _interopRequireDefault(require("../../utils/shallowEqual"));
var cn = {
text: (0, _typestyle.style)({
flex: 1,
paddingTop: 0,
overflowX: 'hidden',
overflowY: 'scroll'
})
};
var ReadmeCard =
/*#__PURE__*/
function (_PureComponent) {
(0, _inherits2.default)(ReadmeCard, _PureComponent);
function ReadmeCard() {
var _getPrototypeOf2;
var _this;
(0, _classCallCheck2.default)(this, ReadmeCard);
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)(ReadmeCard)).call.apply(_getPrototypeOf2, [this].concat(args)));
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "state", {
selectedFile: null,
completes: []
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleComplete", function (event) {
var value = event.data.value;
if (!(0, _shallowEqual.default)(value, _this.state.completes)) {
_this.setState({
completes: value
});
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleReadme", function (event) {
var value = event.data.value;
if (value) {
// feeles.openReamde()
var selectedFile = _this.props.findFile(value);
if (!selectedFile) {
throw new Error("Not Found Error: feeles.openReamde(\"".concat(value, "\")"));
}
_this.setState({
selectedFile: selectedFile
});
_this.props.setCardVisibility('ReadmeCard', true);
} else {
// feeles.closeReadme()
_this.props.setCardVisibility('ReadmeCard', false);
}
});
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleSelect", function (event) {
_this.setState({
selectedFile: _this.resolveFile(event.target.value)
});
});
return _this;
}
(0, _createClass2.default)(ReadmeCard, [{
key: "componentDidMount",
value: function componentDidMount() {
var globalEvent = this.props.globalEvent;
globalEvent.on('message.complete', this.handleComplete);
globalEvent.on('message.readme', this.handleReadme);
try {
var init = this.props.cardProps.ReadmeCard.init;
if (init && init.fileName) {
this.setState({
selectedFile: this.props.findFile(init.fileName)
});
}
} catch (e) {// continue regardless of error
}
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
if (prevProps.files !== this.props.files) {
// TODO: watch file
if (this.state.selectedFile) {
this.setState({
selectedFile: this.resolveFile(this.state.selectedFile.key)
});
}
}
}
}, {
key: "resolveFile",
value: function resolveFile(key) {
if (!key) {
return null;
}
return this.props.findFile(function (item) {
return item.key === key;
});
}
}, {
key: "renderDropDownMenu",
value: function renderDropDownMenu() {
var localization = this.props.localization;
var selectedFile = this.state.selectedFile;
var markdowns = this.props.files.filter(function (item) {
return item.is('markdown');
}).sort(function (a, b) {
return a.header > b.header ? 1 : -1;
});
var styles = {
index: {
marginLeft: 16,
fontSize: '.5rem'
},
dropDown: {
verticalAlign: 'bottom'
}
};
return [_react.default.createElement("span", {
key: "index",
className: styles.index
}, localization.readmeCard.index), _react.default.createElement(_Select.default, {
key: "dropDown",
value: selectedFile.key,
className: styles.dropDown,
onChange: this.handleSelect
}, markdowns.map(function (file) {
return _react.default.createElement(_MenuItem.default, {
key: file.key,
value: file.key
}, file.header);
}))];
}
}, {
key: "render",
value: function render() {
var localization = this.props.localization;
var selectedFile = this.state.selectedFile;
if (!selectedFile) {
return null;
}
return _react.default.createElement(_CardWindow.default, (0, _extends2.default)({}, this.props.cardPropsBag, {
fit: true
}), _react.default.createElement(_CardFloatingBar.default, null, this.props.localization.readmeCard.title), _react.default.createElement(_CardContent.default, {
className: cn.text
}, _react.default.createElement(_Readme.default, {
file: selectedFile,
findFile: this.props.findFile,
addFile: this.props.addFile,
getConfig: this.props.getConfig,
localization: this.props.localization,
completes: this.state.completes,
setLocation: this.props.setLocation,
globalEvent: this.props.globalEvent
})), _react.default.createElement(_CardActions.default, null, this.renderDropDownMenu(), _react.default.createElement(_EditFile.default, {
filePath: selectedFile.name,
globalEvent: this.props.globalEvent,
localization: localization
})));
}
}]);
return ReadmeCard;
}(_react.PureComponent);
exports.default = ReadmeCard;
(0, _defineProperty2.default)(ReadmeCard, "propTypes", {
cardPropsBag: _propTypes.default.object.isRequired,
files: _propTypes.default.array.isRequired,
findFile: _propTypes.default.func.isRequired,
addFile: _propTypes.default.func.isRequired,
getConfig: _propTypes.default.func.isRequired,
localization: _propTypes.default.object.isRequired,
setLocation: _propTypes.default.func.isRequired,
setCardVisibility: _propTypes.default.func.isRequired,
cardProps: _propTypes.default.object.isRequired,
globalEvent: _propTypes.default.object.isRequired
});