|
|
@@ -113,15 +113,21 @@ export default class TextAreaFoundation extends BaseFoundation<TextAreaAdapter>
|
|
|
*/
|
|
|
handleVisibleMaxLength(value: string) {
|
|
|
const { maxLength, getValueLength } = this._adapter.getProps();
|
|
|
- if (isNumber(maxLength) && maxLength >= 0 && isFunction(getValueLength) && isString(value)) {
|
|
|
- const valueLength = getValueLength(value);
|
|
|
- if (valueLength > maxLength) {
|
|
|
- console.warn('[Semi TextArea] The input character is truncated because the input length exceeds the maximum length limit');
|
|
|
- const truncatedValue = this.handleTruncateValue(value, maxLength);
|
|
|
- return truncatedValue;
|
|
|
+ if (isNumber(maxLength) && maxLength >= 0 && isString(value)) {
|
|
|
+ if (isFunction(getValueLength)) {
|
|
|
+ const valueLength = getValueLength(value);
|
|
|
+ if (valueLength > maxLength) {
|
|
|
+ console.warn('[Semi TextArea] The input character is truncated because the input length exceeds the maximum length limit');
|
|
|
+ const truncatedValue = this.handleTruncateValue(value, maxLength);
|
|
|
+ return truncatedValue;
|
|
|
+ }
|
|
|
} else {
|
|
|
- return value;
|
|
|
+ if (value.length > maxLength) {
|
|
|
+ console.warn('[Semi TextArea] The input character is truncated because the input length exceeds the maximum length limit');
|
|
|
+ return value.slice(0, maxLength);
|
|
|
+ }
|
|
|
}
|
|
|
+ return value;
|
|
|
}
|
|
|
return undefined;
|
|
|
}
|
|
|
@@ -158,8 +164,26 @@ export default class TextAreaFoundation extends BaseFoundation<TextAreaAdapter>
|
|
|
|
|
|
handleBlur(e: any) {
|
|
|
const { value } = this.getStates();
|
|
|
+ const { maxLength } = this.getProps();
|
|
|
+ let realValue = value;
|
|
|
+ if (maxLength) {
|
|
|
+ // 如果设置了 maxLength,在中文输输入过程中,如果点击外部触发 blur,则拼音字符的所有内容会回显,
|
|
|
+ // 该表现不符合 maxLength 规定,因此需要在 blur 的时候二次确认
|
|
|
+ // 详情见 https://github.com/DouyinFE/semi-design/issues/2005
|
|
|
+ // If maxLength is set, during the Chinese input process, if you click outside to trigger blur,
|
|
|
+ // all the contents of the Pinyin characters will be echoed.
|
|
|
+ // This behavior does not meet the maxLength requirement, so we need to confirm twice when blurring。
|
|
|
+ // For details, see https://github.com/DouyinFE/semi-design/issues/2005
|
|
|
+ realValue = this.handleVisibleMaxLength(value);
|
|
|
+ if (realValue !== value) {
|
|
|
+ if (!this._isControlledComponent()) {
|
|
|
+ this._adapter.setValue(realValue);
|
|
|
+ }
|
|
|
+ this._adapter.notifyChange(realValue, e);
|
|
|
+ }
|
|
|
+ }
|
|
|
this._adapter.toggleFocusing(false);
|
|
|
- this._adapter.notifyBlur(value, e);
|
|
|
+ this._adapter.notifyBlur(realValue, e);
|
|
|
}
|
|
|
|
|
|
handleKeyDown(e: any) {
|