You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
InternshipProject/node_modules/antd/lib/input/TextArea.js

253 lines
11 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
var _typeof3 = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var React = _interopRequireWildcard(require("react"));
var _rcTextarea = _interopRequireDefault(require("rc-textarea"));
var _omit = _interopRequireDefault(require("rc-util/lib/omit"));
var _classnames = _interopRequireDefault(require("classnames"));
var _useMergedState3 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
var _ClearableLabeledInput = _interopRequireDefault(require("./ClearableLabeledInput"));
var _configProvider = require("../config-provider");
var _Input = require("./Input");
var _SizeContext = _interopRequireDefault(require("../config-provider/SizeContext"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof3(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
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;
};
function fixEmojiLength(value, maxLength) {
return (0, _toConsumableArray2["default"])(value || '').slice(0, maxLength).join('');
}
function setTriggerValue(isCursorInEnd, preValue, triggerValue, maxLength) {
var newTriggerValue = triggerValue;
if (isCursorInEnd) {
// 光标在尾部,直接截断
newTriggerValue = fixEmojiLength(triggerValue, maxLength);
} else if ((0, _toConsumableArray2["default"])(preValue || '').length < triggerValue.length && (0, _toConsumableArray2["default"])(triggerValue || '').length > maxLength) {
// 光标在中间,如果最后的值超过最大值,则采用原先的值
newTriggerValue = preValue;
}
return newTriggerValue;
}
var TextArea = /*#__PURE__*/React.forwardRef(function (_a, ref) {
var _classNames;
var customizePrefixCls = _a.prefixCls,
_a$bordered = _a.bordered,
bordered = _a$bordered === void 0 ? true : _a$bordered,
_a$showCount = _a.showCount,
showCount = _a$showCount === void 0 ? false : _a$showCount,
maxLength = _a.maxLength,
className = _a.className,
style = _a.style,
customizeSize = _a.size,
onCompositionStart = _a.onCompositionStart,
onCompositionEnd = _a.onCompositionEnd,
onChange = _a.onChange,
props = __rest(_a, ["prefixCls", "bordered", "showCount", "maxLength", "className", "style", "size", "onCompositionStart", "onCompositionEnd", "onChange"]);
var _React$useContext = React.useContext(_configProvider.ConfigContext),
getPrefixCls = _React$useContext.getPrefixCls,
direction = _React$useContext.direction;
var size = React.useContext(_SizeContext["default"]);
var innerRef = React.useRef(null);
var clearableInputRef = React.useRef(null);
var _React$useState = React.useState(false),
_React$useState2 = (0, _slicedToArray2["default"])(_React$useState, 2),
compositing = _React$useState2[0],
setCompositing = _React$useState2[1];
var oldCompositionValueRef = React.useRef();
var oldSelectionStartRef = React.useRef(0);
var _useMergedState = (0, _useMergedState3["default"])(props.defaultValue, {
value: props.value
}),
_useMergedState2 = (0, _slicedToArray2["default"])(_useMergedState, 2),
value = _useMergedState2[0],
setValue = _useMergedState2[1];
var hidden = props.hidden;
var handleSetValue = function handleSetValue(val, callback) {
if (props.value === undefined) {
setValue(val);
callback === null || callback === void 0 ? void 0 : callback();
}
}; // =========================== Value Update ===========================
// Max length value
var hasMaxLength = Number(maxLength) > 0;
var onInternalCompositionStart = function onInternalCompositionStart(e) {
setCompositing(true); // 拼音输入前保存一份旧值
oldCompositionValueRef.current = value; // 保存旧的光标位置
oldSelectionStartRef.current = e.currentTarget.selectionStart;
onCompositionStart === null || onCompositionStart === void 0 ? void 0 : onCompositionStart(e);
};
var onInternalCompositionEnd = function onInternalCompositionEnd(e) {
var _a;
setCompositing(false);
var triggerValue = e.currentTarget.value;
if (hasMaxLength) {
var isCursorInEnd = oldSelectionStartRef.current >= maxLength + 1 || oldSelectionStartRef.current === ((_a = oldCompositionValueRef.current) === null || _a === void 0 ? void 0 : _a.length);
triggerValue = setTriggerValue(isCursorInEnd, oldCompositionValueRef.current, triggerValue, maxLength);
} // Patch composition onChange when value changed
if (triggerValue !== value) {
handleSetValue(triggerValue);
(0, _Input.resolveOnChange)(e.currentTarget, e, onChange, triggerValue);
}
onCompositionEnd === null || onCompositionEnd === void 0 ? void 0 : onCompositionEnd(e);
};
var handleChange = function handleChange(e) {
var triggerValue = e.target.value;
if (!compositing && hasMaxLength) {
// 1. 复制粘贴超过maxlength的情况 2.未超过maxlength的情况
var isCursorInEnd = e.target.selectionStart >= maxLength + 1 || e.target.selectionStart === triggerValue.length || !e.target.selectionStart;
triggerValue = setTriggerValue(isCursorInEnd, value, triggerValue, maxLength);
}
handleSetValue(triggerValue);
(0, _Input.resolveOnChange)(e.currentTarget, e, onChange, triggerValue);
}; // ============================== Reset ===============================
var handleReset = function handleReset(e) {
var _a, _b;
handleSetValue('', function () {
var _a;
(_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.focus();
});
(0, _Input.resolveOnChange)((_b = (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea) === null || _b === void 0 ? void 0 : _b.textArea, e, onChange);
};
var prefixCls = getPrefixCls('input', customizePrefixCls);
React.useImperativeHandle(ref, function () {
var _a;
return {
resizableTextArea: (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea,
focus: function focus(option) {
var _a, _b;
(0, _Input.triggerFocus)((_b = (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.resizableTextArea) === null || _b === void 0 ? void 0 : _b.textArea, option);
},
blur: function blur() {
var _a;
return (_a = innerRef.current) === null || _a === void 0 ? void 0 : _a.blur();
}
};
});
var textArea = /*#__PURE__*/React.createElement(_rcTextarea["default"], (0, _extends2["default"])({}, (0, _omit["default"])(props, ['allowClear']), {
className: (0, _classnames["default"])((_classNames = {}, (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-borderless"), !bordered), (0, _defineProperty2["default"])(_classNames, className, className && !showCount), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-sm"), size === 'small' || customizeSize === 'small'), (0, _defineProperty2["default"])(_classNames, "".concat(prefixCls, "-lg"), size === 'large' || customizeSize === 'large'), _classNames)),
style: showCount ? undefined : style,
prefixCls: prefixCls,
onCompositionStart: onInternalCompositionStart,
onChange: handleChange,
onCompositionEnd: onInternalCompositionEnd,
ref: innerRef
}));
var val = (0, _Input.fixControlledValue)(value);
if (!compositing && hasMaxLength && (props.value === null || props.value === undefined)) {
// fix #27612 将value转为数组进行截取解决 '😂'.length === 2 等emoji表情导致的截取乱码的问题
val = fixEmojiLength(val, maxLength);
} // TextArea
var textareaNode = /*#__PURE__*/React.createElement(_ClearableLabeledInput["default"], (0, _extends2["default"])({}, props, {
prefixCls: prefixCls,
direction: direction,
inputType: "text",
value: val,
element: textArea,
handleReset: handleReset,
ref: clearableInputRef,
bordered: bordered,
style: showCount ? undefined : style
})); // Only show text area wrapper when needed
if (showCount) {
var valueLength = (0, _toConsumableArray2["default"])(val).length;
var dataCount = '';
if ((0, _typeof2["default"])(showCount) === 'object') {
dataCount = showCount.formatter({
count: valueLength,
maxLength: maxLength
});
} else {
dataCount = "".concat(valueLength).concat(hasMaxLength ? " / ".concat(maxLength) : '');
}
return /*#__PURE__*/React.createElement("div", {
hidden: hidden,
className: (0, _classnames["default"])("".concat(prefixCls, "-textarea"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-textarea-rtl"), direction === 'rtl'), "".concat(prefixCls, "-textarea-show-count"), className),
style: style,
"data-count": dataCount
}, textareaNode);
}
return textareaNode;
});
var _default = TextArea;
exports["default"] = _default;