UNPKG

feeles-ide

Version:

The hackable and serializable IDE to make learning material

262 lines (219 loc) 9.26 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); 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 _getPrototypeOf4 = _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 = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _typestyle = require("typestyle"); var _Button = _interopRequireDefault(require("@material-ui/core/Button")); var _Menu = _interopRequireDefault(require("@material-ui/core/Menu")); var _ArrowDropDown = _interopRequireDefault(require("@material-ui/icons/ArrowDropDown")); var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem")); var _Description = _interopRequireDefault(require("@material-ui/icons/Description")); var _Typography = _interopRequireDefault(require("@material-ui/core/Typography")); var _ArrowRight = _interopRequireDefault(require("@material-ui/icons/ArrowRight")); var _ = require("./"); var cn = { blank: (0, _typestyle.style)({ flex: '1 1 auto' }), menuSize: { paper: (0, _typestyle.style)({ width: 200 }) }, menuItem: (0, _typestyle.style)({ paddingTop: 4, paddingBottom: 4 }), icon: (0, _typestyle.style)({ width: 24, height: 24, marginRight: 4 }) }; var Icon = function Icon(props) { return props.iconUrl ? _react.default.createElement("img", { src: props.iconUrl, alt: "", className: cn.icon }) : _react.default.createElement(_Description.default, null); }; Icon.propTypes = { iconUrl: _propTypes.default.string }; var SelectTab = /*#__PURE__*/ function (_React$Component) { (0, _inherits2.default)(SelectTab, _React$Component); function SelectTab() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, SelectTab); 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, _getPrototypeOf4.default)(SelectTab)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "state", { anchorEl: null }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleClick", function (event) { _this.setState({ anchorEl: event.currentTarget }); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleClose", function () { _this.setState({ anchorEl: null }); }); return _this; } (0, _createClass2.default)(SelectTab, [{ key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { if (prevProps.filePath !== this.props.filePath) { // ファイルが選択されたので Popout は閉じる this.handleClose(); } } }, { key: "render", value: function render() { var anchorEl = this.state.anchorEl; // 現在選択中のタブの情報を filePath (ファイル名) から調べる. tabs の中にはない(nullになる)こともある var selected = _.Tab.find(this.props.tabs, this.props.filePath); return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_Button.default, { variant: "text", onClick: this.handleClick, className: this.props.className }, selected ? _react.default.createElement(Icon, { iconUrl: selected.iconUrl }) : null, _react.default.createElement(_ArrowDropDown.default, null)), _react.default.createElement(_Menu.default, { id: "file-select-menu", anchorEl: anchorEl, open: Boolean(anchorEl), classes: cn.menuSize, onClose: this.handleClose }, _react.default.createElement(NestedMenus, { tabs: this.props.tabs, localization: this.props.localization, filePath: this.props.filePath, globalEvent: this.props.globalEvent }))); } }]); return SelectTab; }(_react.default.Component); exports.default = SelectTab; (0, _defineProperty2.default)(SelectTab, "propTypes", { className: _propTypes.default.string.isRequired, localization: _propTypes.default.object.isRequired, tabs: _propTypes.default.array.isRequired, filePath: _propTypes.default.string.isRequired, globalEvent: _propTypes.default.object.isRequired }); var NestedMenus = /*#__PURE__*/ function (_React$Component2) { (0, _inherits2.default)(NestedMenus, _React$Component2); function NestedMenus() { var _getPrototypeOf3; var _this2; (0, _classCallCheck2.default)(this, NestedMenus); for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { args[_key2] = arguments[_key2]; } _this2 = (0, _possibleConstructorReturn2.default)(this, (_getPrototypeOf3 = (0, _getPrototypeOf4.default)(NestedMenus)).call.apply(_getPrototypeOf3, [this].concat(args))); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this2)), "state", { anchorEl: null, selectedIndex: -1 }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this2)), "handleMenuItemClick", function (filePath) { _this2.props.globalEvent.emit('message.editor', { data: { value: filePath } }); _this2.handleClose(); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this2)), "handleOpen", function (event, index) { _this2.setState({ anchorEl: event.currentTarget, selectedIndex: index }); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this2)), "handleClose", function () { _this2.setState({ anchorEl: null, selectedIndex: -1 }); }); return _this2; } (0, _createClass2.default)(NestedMenus, [{ key: "render", value: function render() { var _this3 = this; var anchorEl = this.state.anchorEl; return _react.default.createElement(_react.default.Fragment, null, this.props.tabs.map(function (tab, index) { return tab.filePath ? _react.default.createElement(_MenuItem.default, { key: index, selected: tab.filePath === _this3.props.filePath, className: cn.menuItem, onClick: function onClick() { return _this3.handleMenuItemClick(tab.filePath); } }, _react.default.createElement(Icon, { iconUrl: tab.iconUrl }), _react.default.createElement(_Typography.default, { variant: "body2" }, tab.label)) : tab.tabs ? _react.default.createElement(_react.default.Fragment, { key: index }, _react.default.createElement(_MenuItem.default, { selected: index === _this3.state.selectedIndex, className: cn.menuItem, onClick: function onClick(event) { return _this3.handleOpen(event, index); } }, _react.default.createElement(Icon, { iconUrl: tab.iconUrl }), _react.default.createElement(_Typography.default, { variant: "body2" }, tab.label), _react.default.createElement("div", { className: cn.blank }), _react.default.createElement(_ArrowRight.default, null)), _react.default.createElement(_Menu.default, { id: "file-select-menu-".concat(tab.label), classes: cn.menuSize, open: index === _this3.state.selectedIndex, anchorEl: anchorEl, onClose: _this3.handleClose, anchorOrigin: { horizontal: 'right', vertical: 'top' } }, _react.default.createElement(NestedMenus, { tabs: tab.tabs, localization: _this3.props.localization, filePath: _this3.props.filePath, globalEvent: _this3.props.globalEvent }))) : null; })); } }]); return NestedMenus; }(_react.default.Component); (0, _defineProperty2.default)(NestedMenus, "propTypes", { tabs: _propTypes.default.array.isRequired, localization: _propTypes.default.object.isRequired, filePath: _propTypes.default.string.isRequired, globalEvent: _propTypes.default.object.isRequired });