wix-style-react
Version:
191 lines (156 loc) • 7.72 kB
JavaScript
;
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;