@easyv/react-components 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,7 @@
1
1
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
2
  var _excluded = ["value", "defaultValue", "enableEmpty", "autoSelect", "changeOnBlur", "bordered", "className", "onPressEnter", "onFocus", "onBlur", "onChange"],
3
- _excluded2 = ["onSearch"];
3
+ _excluded2 = ["onSearch"],
4
+ _excluded3 = ["value", "defaultValue", "changeOnBlur", "bordered", "className", "onPressEnter", "onFocus", "onBlur", "onChange"];
4
5
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
5
6
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
7
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
@@ -17,8 +18,8 @@ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) r
17
18
  import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
18
19
  import { Input } from '@arco-design/web-react';
19
20
  import { SearchCircleOutlined } from '@easyv/react-icons';
20
- import "./index.less";
21
21
  import classNames from 'classnames';
22
+ import "./index.less";
22
23
  import { jsx as _jsx } from "react/jsx-runtime";
23
24
  var XInput = /*#__PURE__*/forwardRef(function (props, ref) {
24
25
  var _halfControlledProps;
@@ -109,8 +110,77 @@ var InputSearch = /*#__PURE__*/forwardRef(function (_ref, ref) {
109
110
  onChange: onSearch
110
111
  }, restProps));
111
112
  });
113
+ var InputTextArea = /*#__PURE__*/forwardRef(function (props, ref) {
114
+ var _halfControlledProps2;
115
+ var value = props.value,
116
+ defaultValue = props.defaultValue,
117
+ changeOnBlur = props.changeOnBlur,
118
+ _props$bordered2 = props.bordered,
119
+ bordered = _props$bordered2 === void 0 ? true : _props$bordered2,
120
+ className = props.className,
121
+ onPressEnter = props.onPressEnter,
122
+ onFocus = props.onFocus,
123
+ onBlur = props.onBlur,
124
+ onChange = props.onChange,
125
+ restProps = _objectWithoutProperties(props, _excluded3);
126
+
127
+ // 用于 changeOnBlur 为 true 的模式,组件内存储,在失焦的时候,提交这个值
128
+ var _useState3 = useState('value' in props ? value : defaultValue),
129
+ _useState4 = _slicedToArray(_useState3, 2),
130
+ localValue = _useState4[0],
131
+ setLocalValue = _useState4[1];
132
+
133
+ // 为了让 onBlur 函数不要每次值更新都生成新的函数引用,这里用 ref 缓存 localValue 值,这样 onBlur 函数可以不依赖 localValue 的更新,直接在需要的时候读取 ref 的值
134
+ var refValue = useRef(localValue);
135
+ refValue.current = localValue;
136
+ useEffect(function () {
137
+ // 只在 changeOnBlur 为 true 的时候 value 变化才更新,防止 changeOnBlur 为 false 时不需要这个值,更新过于频繁
138
+ if (changeOnBlur && value !== localValue) {
139
+ setLocalValue(value);
140
+ }
141
+ }, [value, changeOnBlur]);
142
+
143
+ // 修改组件库的默认行为:按回车失去焦点
144
+ var handlePressEnter = useCallback(function (e) {
145
+ e.currentTarget.blur();
146
+ onPressEnter === null || onPressEnter === void 0 ? void 0 : onPressEnter(e);
147
+ }, [onPressEnter]);
148
+
149
+ // changeOnBlur 为 true 模式下,修改的值存本地
150
+ var handleChange = useCallback(function (value) {
151
+ setLocalValue(value);
152
+ }, [onChange]);
153
+
154
+ // changeOnBlur 为 true 模式下,失去焦点的时候才提交值的修改
155
+ var handleBlur = useCallback(function (e) {
156
+ if (refValue.current !== undefined && refValue.current !== value) {
157
+ if (refValue.current !== '') {
158
+ onChange === null || onChange === void 0 ? void 0 : onChange(refValue.current, e);
159
+ } else {
160
+ setLocalValue(value);
161
+ }
162
+ }
163
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
164
+ }, [value, onBlur]);
165
+ var halfControlledProps = (_halfControlledProps2 = {}, _defineProperty(_halfControlledProps2, 'value' in props ? 'value' : 'defaultValue', localValue), _defineProperty(_halfControlledProps2, "onChange", handleChange), _defineProperty(_halfControlledProps2, "onBlur", handleBlur), _halfControlledProps2);
166
+ return /*#__PURE__*/_jsx(Input.TextArea, _objectSpread(_objectSpread({
167
+ ref: ref,
168
+ onPressEnter: handlePressEnter,
169
+ className: classNames({
170
+ 'arco-textarea-borderless': !bordered
171
+ }, className)
172
+ }, changeOnBlur ? halfControlledProps : 'value' in props ? {
173
+ value: value,
174
+ onBlur: onBlur,
175
+ onChange: onChange
176
+ } : {
177
+ defaultValue: defaultValue,
178
+ onBlur: onBlur,
179
+ onChange: onChange
180
+ }), restProps));
181
+ });
112
182
  export default XInput;
113
183
  XInput.Search = InputSearch;
114
- XInput.TextArea = Input.TextArea;
184
+ XInput.TextArea = InputTextArea;
115
185
  XInput.Password = Input.Password;
116
186
  XInput.Group = Input.Group;
@@ -89,3 +89,10 @@
89
89
  input.arco-input {
90
90
  line-height: 1.5;
91
91
  }
92
+
93
+ .arco-textarea {
94
+ &.arco-textarea-borderless {
95
+ border: none;
96
+ box-shadow: none;
97
+ }
98
+ }
@@ -1,16 +1,19 @@
1
1
  import type { InputProps } from '@arco-design/web-react';
2
- import type { InputSearchProps, RefInputType } from '@arco-design/web-react/es/Input';
3
- interface XInputProps extends InputProps {
2
+ import type { InputSearchProps, RefInputType, RefTextAreaType, TextAreaProps } from '@arco-design/web-react/es/Input';
3
+ interface BaseInputProps {
4
+ /** 显示边框 */
5
+ bordered?: boolean;
6
+ /** 是否失去焦点时,触发 onChange 事件 */
7
+ changeOnBlur?: boolean;
8
+ }
9
+ interface XInputProps extends InputProps, BaseInputProps {
4
10
  /** 是否允许文本为空 */
5
11
  enableEmpty?: boolean;
6
12
  /** 是否聚焦后自动选中输入框的文本 */
7
13
  autoSelect?: boolean;
8
- /** 是否失去焦点时,触发 onChange 事件 */
9
- changeOnBlur?: boolean;
10
- /** 显示边框 */
11
- bordered?: boolean;
12
14
  }
13
- interface XInputSearchProps extends InputSearchProps {
14
- bordered?: boolean;
15
+ interface XInputSearchProps extends InputSearchProps, BaseInputProps {
16
+ }
17
+ interface XTextAreaProps extends TextAreaProps, BaseInputProps {
15
18
  }
16
- export type { XInputProps as InputProps, XInputSearchProps as InputSearchProps, RefInputType, };
19
+ export type { XInputProps as InputProps, XInputSearchProps as InputSearchProps, RefInputType, RefTextAreaType, XTextAreaProps as TextAreaProps, };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@easyv/react-components",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "a react component library base on arco design",
5
5
  "license": "MIT",
6
6
  "sideEffects": [