UNPKG

shineout

Version:

Shein 前端组件库

217 lines (175 loc) 7.74 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _config = _interopRequireWildcard(require("../config")); var _component = require("../component"); var _styles = require("../Input/styles"); var _cleanProps = _interopRequireDefault(require("../utils/cleanProps")); var _InputTitle = _interopRequireDefault(require("../InputTitle")); var _styles2 = require("../InputTitle/styles"); var DefaultProps = { rows: 4, resize: false }; var Textarea = /*#__PURE__*/ function (_PureComponent) { (0, _inheritsLoose2.default)(Textarea, _PureComponent); function Textarea(props) { var _this; _this = _PureComponent.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "shadow", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "defaultInfo", function (value) { if (!value || value.length === 0) return null; var info = _this.props.info; var text = value.length + " / " + info; if (value.length <= info) return text; return new Error(text); }); _this.state = { height: 0 }; _this.bindShadow = _this.bindShadow.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleBlur = _this.handleBlur.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleChange = _this.handleChange.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleKeyUp = _this.handleKeyUp.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.resize = _this.resize.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.defaultInfo = _this.defaultInfo.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); return _this; } var _proto = Textarea.prototype; _proto.componentDidMount = function componentDidMount() { _PureComponent.prototype.componentDidMount.call(this); if (this.props.autosize) this.resize(); }; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { if (this.props.autosize && prevProps.value !== this.props.value) this.resize(this.props.value); }; _proto.getTrim = function getTrim() { var trim = this.props.trim; if (trim !== undefined) return trim; if (_config.default.trim !== undefined) return _config.default.trim; return false; }; _proto.bindShadow = function bindShadow(el) { this.shadow = el; }; _proto.resize = function resize(value) { if (value || value === '') this.shadow.value = value; var height = this.shadow ? this.shadow.scrollHeight : 0; this.setState({ height: height }); }; _proto.handleChange = function handleChange(e) { this.props.onChange(e.target.value); if (this.props.autosize) { this.resize(e.target.value); } }; _proto.handleKeyUp = function handleKeyUp(e) { var onEnterPress = this.props.onEnterPress; if (e.keyCode === 13 && onEnterPress) { onEnterPress(e.target.value, e); } }; _proto.handleBlur = function handleBlur(e) { var newValue = e.target.value; var _this$props = this.props, forceChange = _this$props.forceChange, onBlur = _this$props.onBlur; if (this.getTrim()) { newValue = newValue.trim(); e.target.value = newValue; } forceChange(newValue); if (onBlur) onBlur(e); }; _proto.renderFooter = function renderFooter() { var _this$props2 = this.props, renderFooter = _this$props2.renderFooter, value = _this$props2.value; if (!(renderFooter && typeof renderFooter === 'function')) return null; return _react.default.createElement("div", { key: "footer", className: (0, _styles.inputClass)('footer') }, renderFooter(value)); }; _proto.renderInfo = function renderInfo() { var info = this.props.info; var notNumber = typeof info !== 'number'; if (typeof info !== 'function' && notNumber) return null; var textInfo = notNumber ? info : this.defaultInfo; var res = textInfo(this.props.value); // empty if (!res) return null; var isError = res instanceof Error; var text = isError ? res.message : res; return _react.default.createElement("div", { key: "info", style: { minWidth: 'auto' }, className: (0, _styles.inputClass)((0, _config.isRTL)() ? 'bottom-left' : 'bottom-right', isError ? 'error' : 'tip') }, text); }; _proto.render = function render() { var _this$props3 = this.props, autosize = _this$props3.autosize, onChange = _this$props3.onChange, maxHeight = _this$props3.maxHeight, info = _this$props3.info, onEnterPress = _this$props3.onEnterPress, resize = _this$props3.resize, renderFooter = _this$props3.renderFooter, inputFocus = _this$props3.inputFocus, innerTitle = _this$props3.innerTitle, placeTitle = _this$props3.placeTitle, props = (0, _objectWithoutPropertiesLoose2.default)(_this$props3, ["autosize", "onChange", "maxHeight", "info", "onEnterPress", "resize", "renderFooter", "inputFocus", "innerTitle", "placeTitle"]); var value = props.value == null ? '' : props.value; var height = this.state.height || 'auto'; var footerEl = this.renderFooter(); var className = autosize ? (0, _styles.inputClass)('auto-size') : (0, _styles.inputClass)(resize && 'textarea-resize'); var cs = (0, _classnames.default)(className, innerTitle && (0, _styles2.inputTitleClass)('hidable', 'item')); var ts = [_react.default.createElement("textarea", (0, _extends2.default)({}, (0, _cleanProps.default)(props), { key: "t", value: value, className: cs, style: { height: height, maxHeight: maxHeight, overflow: 'auto' }, onChange: this.handleChange, onKeyUp: this.handleKeyUp, onBlur: this.handleBlur })), footerEl, this.renderInfo()]; var cs2 = (0, _classnames.default)((0, _styles.inputClass)('shadow'), innerTitle && (0, _styles2.inputTitleClass)('hidable', 'item')); if (autosize) { ts.push(_react.default.createElement("textarea", { key: "s", ref: this.bindShadow, className: cs2, rows: props.rows, defaultValue: value })); } return _react.default.createElement(_InputTitle.default, { innerTitle: innerTitle, open: !!value || !!inputFocus, placeTitle: placeTitle }, ts); }; return Textarea; }(_component.PureComponent); (0, _defineProperty2.default)(Textarea, "defaultProps", DefaultProps); var _default = Textarea; exports.default = _default;