feeles-ide
Version:
The hackable and serializable IDE to make learning material
170 lines (138 loc) • 5.97 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 _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;