acud
Version:
acg react 组件库
198 lines (197 loc) • 9.69 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _rcTextarea = _interopRequireDefault(require("rc-textarea"));
var _classnames = _interopRequireDefault(require("classnames"));
var _MultiToneClear = _interopRequireDefault(require("acud-icon/lib/icons/MultiToneClear"));
var _configProvider = require("../config-provider");
var _useMergedState3 = _interopRequireDefault(require("../_util/hooks/useMergedState"));
var _Input = require("./Input");
var _popover = _interopRequireDefault(require("../popover"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
/**
* @file TextArea component
* @author liyanan19
*/
var __rest = void 0 && (void 0).__rest || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];
}
return t;
};
// const TextArea:React.FC<TextAreaProps> = props => {
var TextArea = /*#__PURE__*/_react["default"].forwardRef(function (props, ref) {
var customizePrefixCls = props.prefixCls,
_props$placeholder = props.placeholder,
placeholder = _props$placeholder === void 0 ? '请输入内容' : _props$placeholder,
className = props.className,
style = props.style,
width = props.width,
limitLength = props.limitLength,
readonly = props.readonly,
autoSize = props.autoSize,
_props$disabled = props.disabled,
disabled = _props$disabled === void 0 ? false : _props$disabled,
onPressEnter = props.onPressEnter,
onKeyDown = props.onKeyDown,
onFocus = props.onFocus,
onBlur = props.onBlur,
_props$allowClear = props.allowClear,
allowClear = _props$allowClear === void 0 ? true : _props$allowClear,
_props$forbidIfLimit = props.forbidIfLimit,
forbidIfLimit = _props$forbidIfLimit === void 0 ? false : _props$forbidIfLimit,
warningPopover = props.warningPopover,
warningText = props.warningText,
onCompositionStart = props.onCompositionStart,
onCompositionEnd = props.onCompositionEnd,
rest = __rest(props, ["prefixCls", "placeholder", "className", "style", "width", "limitLength", "readonly", "autoSize", "disabled", "onPressEnter", "onKeyDown", "onFocus", "onBlur", "allowClear", "forbidIfLimit", "warningPopover", "warningText", "onCompositionStart", "onCompositionEnd"]);
var _useMergedState = (0, _useMergedState3["default"])(props.defaultValue, {
value: props.value
}),
_useMergedState2 = (0, _slicedToArray2["default"])(_useMergedState, 2),
value = _useMergedState2[0],
setValue = _useMergedState2[1];
var _useState = (0, _react.useState)('#D4D6D9'),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
clearIconColor = _useState2[0],
setClearIconColor = _useState2[1];
var currentLength = (0, _react.useMemo)(function () {
return (value === null || value === void 0 ? void 0 : value.length) || 0;
}, [value]);
var _useState3 = (0, _react.useState)(''),
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
focusClass = _useState4[0],
setFocusClass = _useState4[1];
var composedRef = _react["default"].useRef(false);
var _useState5 = (0, _react.useState)(''),
_useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
composingValue = _useState6[0],
setComposingValue = _useState6[1];
var handleOnChange = function handleOnChange(e) {
var _a;
if (readonly) {
return;
}
var newVal = e.target.value;
if (composedRef.current) {
setComposingValue(newVal);
} else {
if (forbidIfLimit && limitLength && newVal.length >= limitLength) {
setComposingValue(newVal.slice(0, limitLength));
setValue(newVal.slice(0, limitLength));
e.target.value = e.target.value.slice(0, limitLength);
}
setComposingValue(newVal);
setValue(newVal);
(_a = props.onChange) === null || _a === void 0 ? void 0 : _a.call(props, e);
}
};
var handleOnKeyDown = function handleOnKeyDown(e) {
if (onPressEnter && e.key === 'Enter') {
onPressEnter(e);
// setValue('');
}
if (onKeyDown) {
onKeyDown(e);
}
};
var handleFocus = function handleFocus(e) {
if (readonly) {
return;
}
setFocusClass('focus');
if (onFocus) {
onFocus(e);
}
};
var handleBlur = function handleBlur(e) {
if (readonly) {
return;
}
setFocusClass('');
if (onBlur) {
onBlur(e);
}
};
var hoverClear = function hoverClear() {
setClearIconColor('#A7ABB5');
};
var clearMouseLeave = function clearMouseLeave() {
setClearIconColor('#D4D6D9');
};
var handleOnCompositionStart = function handleOnCompositionStart(e) {
composedRef.current = true;
onCompositionStart === null || onCompositionStart === void 0 ? void 0 : onCompositionStart(e);
};
var handleOnCompositionEnd = function handleOnCompositionEnd(e) {
if (composedRef.current) {
composedRef.current = false;
handleOnChange(e);
}
onCompositionEnd === null || onCompositionEnd === void 0 ? void 0 : onCompositionEnd(e);
};
var _React$useContext = _react["default"].useContext(_configProvider.ConfigContext),
getPrefixCls = _React$useContext.getPrefixCls;
var prefixCls = getPrefixCls('input-textarea', customizePrefixCls);
var classes = (0, _classnames["default"])(prefixCls, (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-autosize"), autoSize), "".concat(prefixCls, "-readonly"), readonly), "".concat(prefixCls, "-span-focus"), focusClass), "".concat(prefixCls, "-limit"), currentLength > limitLength), "".concat(prefixCls, "-no-limit"), !!limitLength), "".concat(prefixCls, "-no-clear"), !allowClear), "".concat(prefixCls, "-error"), warningPopover));
var limitClassName = (0, _classnames["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-warning"), currentLength > limitLength));
var limitBoxClassName = (0, _classnames["default"])((0, _defineProperty2["default"])({}, "".concat(prefixCls, "-limit-box-readonly"), readonly));
var clearContent = function clearContent(e) {
// setValue('');
// 参考 input
handleOnChange((0, _Input.resolveTargetValue)(e, ''));
};
var innerValue = composedRef.current ? composingValue : value !== null && value !== void 0 ? value : '';
var textAreaContent = /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])("".concat(prefixCls, "-outer"), className),
style: {
width: width
}
}, /*#__PURE__*/_react["default"].createElement(_rcTextarea["default"], (0, _extends2["default"])({}, rest, {
ref: ref,
style: style,
placeholder: placeholder,
className: (0, _classnames["default"])(classes),
onChange: handleOnChange,
onKeyDown: handleOnKeyDown,
onFocus: handleFocus,
onBlur: handleBlur,
value: innerValue,
autoSize: autoSize,
disabled: disabled,
onCompositionStart: handleOnCompositionStart,
onCompositionEnd: handleOnCompositionEnd
})), value && allowClear && !readonly && /*#__PURE__*/_react["default"].createElement("div", {
onClick: clearContent,
className: "".concat(prefixCls, "-outer-icon-clear"),
onMouseEnter: hoverClear,
onMouseLeave: clearMouseLeave
}, /*#__PURE__*/_react["default"].createElement(_MultiToneClear["default"], {
width: 16,
color: clearIconColor
})), limitLength && /*#__PURE__*/_react["default"].createElement("div", {
className: (0, _classnames["default"])(limitBoxClassName, "".concat(prefixCls, "-limit-box"))
}, /*#__PURE__*/_react["default"].createElement("span", {
className: (0, _classnames["default"])(limitClassName, 'limit')
}, currentLength, "/", limitLength)));
return /*#__PURE__*/_react["default"].createElement(_popover["default"], (0, _extends2["default"])({
content: /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-warning-popover-text")
}, warningText)
}, warningPopover && !!warningText ? {} : {
visible: false
}, {
placement: "bottomLeft"
}), textAreaContent);
});
var _default = exports["default"] = TextArea;