UNPKG

feeles-ide

Version:

The hackable and serializable IDE to make learning material

170 lines (138 loc) 5.97 kB
"use strict"; 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 _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 _styles = require("@material-ui/core/styles"); var _propTypes = _interopRequireDefault(require("prop-types")); var _typestyle = require("typestyle"); var _TextField = _interopRequireDefault(require("@material-ui/core/TextField")); var _Typography = _interopRequireDefault(require("@material-ui/core/Typography")); var _Create = _interopRequireDefault(require("@material-ui/icons/Create")); var _dec, _class, _class2, _temp; var cn = { hint: (0, _typestyle.style)({ fontStyle: 'italic' }) }; var getCn = function getCn(props) { return { label: (0, _typestyle.style)({ fontSize: 16, color: props.theme.palette.text.secondary, borderBottom: "1px dashed ".concat(props.theme.palette.text.secondary) }) }; }; var EditableLabel = (_dec = (0, _styles.withTheme)(), _dec(_class = (_temp = _class2 = /*#__PURE__*/ function (_PureComponent) { (0, _inherits2.default)(EditableLabel, _PureComponent); function EditableLabel() { var _getPrototypeOf2; var _this; (0, _classCallCheck2.default)(this, EditableLabel); 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)(EditableLabel)).call.apply(_getPrototypeOf2, [this].concat(args))); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "state", { isEditing: _this.props.openImmediately }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "touched", false); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleTouch", function () { if (_this.touched) { _this.setState({ isEditing: true }); } _this.touched = true; setTimeout(function () { return _this.touched = false; }, 200); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleBlur", function () { _this.setState({ isEditing: false }); }); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleKeyPress", function () { if (event.key === 'Enter') { _this.setState({ isEditing: false }); } }); return _this; } (0, _createClass2.default)(EditableLabel, [{ key: "componentDidMount", value: function componentDidMount() { if (this.props.openImmediately && this.input) { this.input.focus(); } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps, prevState) { if (!this.input) return; if (!prevState.isEditing && this.state.isEditing) { this.input.focus(); } if (prevState.isEditing && !this.state.isEditing) { this.props.onEditEnd(this.input.value); } } }, { key: "render", value: function render() { var _this2 = this; var dcn = getCn(this.props); var isEditing = this.state.isEditing; var _this$props = this.props, value = _this$props.value, defaultValue = _this$props.defaultValue; var labelText = value || defaultValue; var props = Object.assign({}, this.props); delete props.onEditEnd; delete props.tapTwiceQuickly; delete props.openImmediately; return isEditing ? _react.default.createElement(_TextField.default, (0, _extends2.default)({}, props, { ref: function ref(_ref) { return _ref && (_this2.input = _ref.input); }, onBlur: this.handleBlur, onKeyPress: this.handleKeyPress })) : labelText ? _react.default.createElement("div", { className: dcn.label, style: this.props.style, onClick: this.handleTouch }, labelText) : _react.default.createElement(_Typography.default, { variant: "caption", className: cn.hint, onClick: this.handleTouch }, _react.default.createElement(_Create.default, null), this.props.tapTwiceQuickly); } }]); return EditableLabel; }(_react.PureComponent), (0, _defineProperty2.default)(_class2, "propTypes", Object.assign({ theme: _propTypes.default.object.isRequired, openImmediately: _propTypes.default.bool.isRequired, tapTwiceQuickly: _propTypes.default.string.isRequired, onEditEnd: _propTypes.default.func }, _TextField.default.propTypes)), (0, _defineProperty2.default)(_class2, "defaultProps", { openImmediately: false, tapTwiceQuickly: 'Tap twice quickly' }), _temp)) || _class); exports.default = EditableLabel;