UNPKG

wix-style-react

Version:
191 lines (156 loc) • 7.72 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 _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _Heading = _interopRequireDefault(require("../Heading")); var _Input = _interopRequireDefault(require("../Input/Input")); var _EditableTitleSt = require("./EditableTitle.st.css"); var _context = require("../WixStyleReactProvider/context"); var _constants = require("./constants"); function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } } var DEFAULT_MAX_LENGTH = 100; var EditableTitle = /*#__PURE__*/function (_React$Component) { (0, _inherits2["default"])(EditableTitle, _React$Component); var _super = _createSuper(EditableTitle); function EditableTitle(props) { var _this; (0, _classCallCheck2["default"])(this, EditableTitle); _this = _super.call(this, props); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onChange", function (e) { _this.setState({ value: e.target.value }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "showPlaceholder", function () { return !_this.state.value && _this.props.defaultValue; }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onFocus", function () { var value = _this.state.value || _this.props.defaultValue; var selectAll = !_this.state.focus; _this.setState({ focus: true, value: value }, function () { _this.wsrInput.focus(); selectAll && _this.wsrInput.select(); }); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onEnterPressed", function () { _this.wsrInput.blur(); }); (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "onValueSubmission", function () { var value = _this.state.value || _this.props.defaultValue; _this.setState({ value: value, focus: false }, function () { if (typeof _this.props.onSubmit === 'function') { _this.props.onSubmit(value); } }); }); _this.state = { focus: false, value: props.initialValue || '' }; return _this; } (0, _createClass2["default"])(EditableTitle, [{ key: "componentDidMount", value: function componentDidMount() { if (this.props.autoFocus) this.onFocus(); } }, { key: "render", value: function render() { var _this2 = this; var _this$props = this.props, dataHook = _this$props.dataHook, className = _this$props.className, maxLength = _this$props.maxLength; var focused = this.state.focus; return /*#__PURE__*/_react["default"].createElement(_context.WixStyleReactContext.Consumer, null, function (_ref) { var reducedSpacingAndImprovedLayout = _ref.reducedSpacingAndImprovedLayout; return /*#__PURE__*/_react["default"].createElement("div", { className: (0, _EditableTitleSt.st)(_EditableTitleSt.classes.root, { reducedSpacingAndImprovedLayout: reducedSpacingAndImprovedLayout }, className), "data-hook": dataHook, tabIndex: 0, onFocus: _this2.onFocus, onClick: _this2.onFocus }, /*#__PURE__*/_react["default"].createElement("div", { "data-hook": _constants.dataHooks.heading, className: (0, _EditableTitleSt.st)(_EditableTitleSt.classes.headingWrapper, { focused: focused, showPlaceholder: !!_this2.showPlaceholder() }) }, /*#__PURE__*/_react["default"].createElement(_Heading["default"], { ellipsis: true, appearance: "H1", className: _EditableTitleSt.classes.heading }, _this2.props.value || _this2.state.value || _this2.props.defaultValue)), /*#__PURE__*/_react["default"].createElement("div", { className: (0, _EditableTitleSt.st)(_EditableTitleSt.classes.activationIndicator, { focused: focused }) }, _this2.props.value || _this2.state.value || _this2.props.defaultValue), /*#__PURE__*/_react["default"].createElement("div", { className: (0, _EditableTitleSt.st)(_EditableTitleSt.classes.renamingField, { focused: focused }), "data-hook": _constants.dataHooks.renamingField, onFocus: function onFocus(e) { return (// input does not pass his event so we need to catch it e.stopPropagation() ); } }, /*#__PURE__*/_react["default"].createElement(_Input["default"], { autoSelect: false, textOverflow: "clip", maxLength: maxLength || DEFAULT_MAX_LENGTH, onChange: _this2.props.onChange ? _this2.props.onChange : _this2.onChange, value: _this2.props.value ? _this2.props.value : _this2.state.value, ref: function ref(wsrInput) { return _this2.wsrInput = wsrInput; }, onBlur: _this2.onValueSubmission, onEnterPressed: _this2.onEnterPressed }))); }); } }]); return EditableTitle; }(_react["default"].Component); EditableTitle.displayName = 'EditableTitle'; EditableTitle.defaultProps = { defaultValue: '' }; EditableTitle.propTypes = { /** Value - initial value to display */ initialValue: _propTypes["default"].string, /** default - value to display when empty, when clicked the input gets this value */ defaultValue: _propTypes["default"].string, /** onSubmit - invoked when done editing */ onSubmit: _propTypes["default"].func, /** length - maximum chars the input can get */ maxLength: _propTypes["default"].number, /** autoFocus - focus element on mount */ autoFocus: _propTypes["default"].bool, /** onChange-invoked when editing */ onChange: _propTypes["default"].func, /** value- the controlled value of the input */ value: _propTypes["default"].string }; var _default = EditableTitle; exports["default"] = _default;