rsuite 5.2.2 → 5.2.3

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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [5.2.3](https://github.com/rsuite/rsuite/compare/v5.2.2...v5.2.3) (2021-11-26)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **useElementResize:** fix ResizeObserver being created repeatedly ([#2161](https://github.com/rsuite/rsuite/issues/2161)) ([32e2fa7](https://github.com/rsuite/rsuite/commit/32e2fa76a396945498f198d176b630ac09a4e20d))
6
+ - focus handler ([#2154](https://github.com/rsuite/rsuite/issues/2154)) ([3b17fbc](https://github.com/rsuite/rsuite/commit/3b17fbcae6da59ca58788c6b3aa60d79692dffa1))
7
+ - **TagPicker:** fix tag misplacement in plaintext mode ([#2152](https://github.com/rsuite/rsuite/issues/2152)) ([6d32c71](https://github.com/rsuite/rsuite/commit/6d32c714e1b9be743d57b3ae4f1622d006e0f52c))
8
+
9
+ ### Performance Improvements
10
+
11
+ - **Menu:** prevent uneccesary re-render when mouseove on menuitems ([#2148](https://github.com/rsuite/rsuite/issues/2148)) ([dc06498](https://github.com/rsuite/rsuite/commit/dc0649822fd68964281f44c4ec2daf84953edc63))
12
+
1
13
  ## [5.2.2](https://github.com/rsuite/rsuite/compare/v5.2.1...v5.2.2) (2021-11-19)
2
14
 
3
15
  ### Bug Fixes
@@ -83,10 +83,10 @@ var CheckboxGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
83
83
  }, [disabled, handleChange, inline, isControlled, name, plaintext, readOnly, value]);
84
84
  return /*#__PURE__*/_react.default.createElement(_CheckboxGroupContext.CheckboxGroupContext.Provider, {
85
85
  value: contextValue
86
- }, plaintext ? /*#__PURE__*/_react.default.createElement(_Plaintext.default, {
86
+ }, plaintext ? /*#__PURE__*/_react.default.createElement(_Plaintext.default, (0, _extends2.default)({
87
87
  ref: ref,
88
88
  localeKey: "notSelected"
89
- }, value !== null && value !== void 0 && value.length ? children : null) : /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
89
+ }, rest), value !== null && value !== void 0 && value.length ? children : null) : /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
90
90
  ref: ref,
91
91
  role: "group",
92
92
  className: classes
@@ -696,7 +696,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
696
696
  var plaintextProps = {}; // TagPicker has -6px margin-left on the plaintext wrapper
697
697
  // for fixing margin-left on tags from 2nd line on
698
698
 
699
- if (multi) {
699
+ if (multi && hasValue) {
700
700
  plaintextProps.style = {
701
701
  marginLeft: -6
702
702
  };
package/cjs/Menu/Menu.js CHANGED
@@ -21,7 +21,7 @@ var _useUniqueId = _interopRequireDefault(require("../utils/useUniqueId"));
21
21
 
22
22
  var _useMenu = _interopRequireDefault(require("./useMenu"));
23
23
 
24
- var _useFocus = _interopRequireDefault(require("../utils/useFocus"));
24
+ var _useFocus2 = _interopRequireDefault(require("../utils/useFocus"));
25
25
 
26
26
  var _useClickOutside = _interopRequireDefault(require("../utils/useClickOutside"));
27
27
 
@@ -60,7 +60,10 @@ function Menu(props) {
60
60
  rtl = _useCustom.rtl;
61
61
 
62
62
  var activeItem = (_items$activeItemInde = items[activeItemIndex]) === null || _items$activeItemInde === void 0 ? void 0 : _items$activeItemInde.element;
63
- var menuFocus = (0, _useFocus.default)(menuElementRef);
63
+
64
+ var _useFocus = (0, _useFocus2.default)(menuElementRef),
65
+ grabFocus = _useFocus.grab;
66
+
64
67
  var openMenu = (0, _react.useCallback)(function (event) {
65
68
  dispatch({
66
69
  type: _MenuContext.MenuActionTypes.OpenMenu
@@ -74,8 +77,8 @@ function Menu(props) {
74
77
  }
75
78
 
76
79
  onToggleMenu === null || onToggleMenu === void 0 ? void 0 : onToggleMenu(true, event);
77
- menuFocus.grab();
78
- }, [dispatch, onToggleMenu, menuFocus]);
80
+ grabFocus();
81
+ }, [dispatch, onToggleMenu, grabFocus]);
79
82
  var closeMenu = (0, _react.useCallback)(function (event, returnFocusToButton) {
80
83
  if (returnFocusToButton === void 0) {
81
84
  returnFocusToButton = true;
@@ -170,39 +173,48 @@ function Menu(props) {
170
173
  if (disabled) return;
171
174
  openMenu(event);
172
175
  }, [open, disabled, openMenu]);
173
- var buttonEventHandlers = {
174
- onKeyDown: handleButtonKeydown
175
- };
176
- /**
177
- * Bind event of trigger,
178
- * not used in in the expanded state of '<Sidenav>'
179
- */
180
-
181
- if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('click')) {
182
- buttonEventHandlers.onClick = handleButtonClick;
183
- }
176
+ var buttonEventHandlers = (0, _react.useMemo)(function () {
177
+ var buttonEventHandlers = {
178
+ onKeyDown: handleButtonKeydown
179
+ };
180
+ /**
181
+ * Bind event of trigger,
182
+ * not used in in the expanded state of '<Sidenav>'
183
+ */
184
+
185
+ if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('click')) {
186
+ buttonEventHandlers.onClick = handleButtonClick;
187
+ }
184
188
 
185
- if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('contextmenu')) {
186
- buttonEventHandlers.onContextMenu = handleButtonContextMenu;
187
- }
189
+ if (openMenuOn !== null && openMenuOn !== void 0 && openMenuOn.includes('contextmenu')) {
190
+ buttonEventHandlers.onContextMenu = handleButtonContextMenu;
191
+ }
188
192
 
193
+ return buttonEventHandlers;
194
+ }, [openMenuOn, handleButtonKeydown, handleButtonClick, handleButtonContextMenu]);
189
195
  var buttonId = (0, _useUniqueId.default)('menubutton-');
190
- var menuId = (0, _useUniqueId.default)('menu-'); // Ref: https://www.w3.org/TR/wai-aria-practices-1.2/#wai-aria-roles-states-and-properties-14
191
-
192
- var buttonAriaAttributes = {
193
- role: 'button',
194
- 'aria-haspopup': 'menu',
195
- 'aria-expanded': open || undefined,
196
- // it's recommend to remove aria-expanded when menu is hidden
197
- 'aria-controls': menuId
198
- };
199
- var buttonProps = (0, _extends2.default)({
200
- id: buttonId
201
- }, buttonAriaAttributes, buttonEventHandlers, {
202
- // render props
203
- open: open
204
- });
205
- var customMenuButton = renderMenuButton === null || renderMenuButton === void 0 ? void 0 : renderMenuButton(buttonProps, buttonElementRef);
196
+ var menuId = (0, _useUniqueId.default)('menu-');
197
+ var buttonAriaAttributes = (0, _react.useMemo)(function () {
198
+ // Ref: https://www.w3.org/TR/wai-aria-practices-1.2/#wai-aria-roles-states-and-properties-14
199
+ return {
200
+ role: 'button',
201
+ 'aria-haspopup': 'menu',
202
+ 'aria-expanded': open || undefined,
203
+ // it's recommend to remove aria-expanded when menu is hidden
204
+ 'aria-controls': menuId
205
+ };
206
+ }, [open, menuId]);
207
+ var buttonProps = (0, _react.useMemo)(function () {
208
+ return (0, _extends2.default)({
209
+ id: buttonId
210
+ }, buttonAriaAttributes, buttonEventHandlers, {
211
+ // render props
212
+ open: open
213
+ });
214
+ }, [buttonId, buttonAriaAttributes, buttonEventHandlers, open]);
215
+ var customMenuButton = (0, _react.useMemo)(function () {
216
+ return renderMenuButton === null || renderMenuButton === void 0 ? void 0 : renderMenuButton(buttonProps, buttonElementRef);
217
+ }, [renderMenuButton, buttonProps, buttonElementRef]);
206
218
  var buttonElement = customMenuButton !== null && customMenuButton !== void 0 ? customMenuButton : /*#__PURE__*/_react.default.createElement("button", (0, _extends2.default)({
207
219
  ref: buttonElementRef
208
220
  }, buttonProps), menuButtonText);
@@ -44,20 +44,24 @@ function MenuItem(props) {
44
44
  }, [disabled, onActivate]); // Gain/release focus on mousedown in `menubar`
45
45
 
46
46
  var handleMouseDown = (0, _react.useCallback)(function () {
47
- dispatch({
48
- type: _MenuContext.MenuActionTypes.MoveFocus,
49
- to: _MenuContext.MoveFocusTo.Specific,
50
- id: menuitemRef.current.id
51
- });
52
- }, [dispatch]); // Gain/release focus on mouseenter/mouseleave in `menu`
47
+ if (!hasFocus) {
48
+ dispatch({
49
+ type: _MenuContext.MenuActionTypes.MoveFocus,
50
+ to: _MenuContext.MoveFocusTo.Specific,
51
+ id: menuitemRef.current.id
52
+ });
53
+ }
54
+ }, [hasFocus, dispatch]); // Gain/release focus on mouseenter/mouseleave in `menu`
53
55
 
54
56
  var handleMouseMove = (0, _react.useCallback)(function () {
55
- dispatch({
56
- type: _MenuContext.MenuActionTypes.MoveFocus,
57
- to: _MenuContext.MoveFocusTo.Specific,
58
- id: menuitemRef.current.id
59
- });
60
- }, [dispatch]);
57
+ if (!hasFocus) {
58
+ dispatch({
59
+ type: _MenuContext.MenuActionTypes.MoveFocus,
60
+ to: _MenuContext.MoveFocusTo.Specific,
61
+ id: menuitemRef.current.id
62
+ });
63
+ }
64
+ }, [hasFocus, dispatch]);
61
65
  var handleMouseLeave = (0, _react.useCallback)(function () {
62
66
  dispatch({
63
67
  type: _MenuContext.MenuActionTypes.MoveFocus,
@@ -104,15 +104,17 @@ var PickerToggle = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
104
104
  onFocus === null || onFocus === void 0 ? void 0 : onFocus(event);
105
105
 
106
106
  if (input) {
107
- inputRef.current.focus();
107
+ var _inputRef$current;
108
+
109
+ (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
108
110
  }
109
111
  }, [input, onFocus]);
110
112
  var handleBlur = (0, _react.useCallback)(function (event) {
111
113
  if (document.activeElement !== inputRef.current) {
112
- var _inputRef$current;
114
+ var _inputRef$current2;
113
115
 
114
116
  setActive(false);
115
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.blur();
117
+ (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.blur();
116
118
  }
117
119
 
118
120
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(event);
@@ -73,10 +73,10 @@ var RadioGroup = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
73
73
  }, [disabled, handleChange, inline, isControlled, name, plaintext, readOnly, value]);
74
74
  return /*#__PURE__*/_react.default.createElement(RadioContext.Provider, {
75
75
  value: contextValue
76
- }, plaintext ? /*#__PURE__*/_react.default.createElement(_Plaintext.default, {
76
+ }, plaintext ? /*#__PURE__*/_react.default.createElement(_Plaintext.default, (0, _extends2.default)({
77
77
  ref: ref,
78
78
  localeKey: "notSelected"
79
- }, value ? children : null) : /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
79
+ }, rest), value ? children : null) : /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
80
80
  role: "radiogroup"
81
81
  }, rest, {
82
82
  ref: ref,
package/cjs/Rate/Rate.js CHANGED
@@ -15,6 +15,8 @@ var _react = _interopRequireWildcard(require("react"));
15
15
 
16
16
  var _propTypes = _interopRequireDefault(require("prop-types"));
17
17
 
18
+ var _isNil = _interopRequireDefault(require("lodash/isNil"));
19
+
18
20
  var _Star = _interopRequireDefault(require("@rsuite/icons/legacy/Star"));
19
21
 
20
22
  var _utils = require("../utils");
@@ -138,7 +140,7 @@ var Rate = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
138
140
  return /*#__PURE__*/_react.default.createElement(_Plaintext.default, {
139
141
  localeKey: "notSelected",
140
142
  className: className
141
- }, value + "(" + max + ")");
143
+ }, !(0, _isNil.default)(value) ? value + "(" + max + ")" : null);
142
144
  }
143
145
 
144
146
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({
@@ -17,9 +17,12 @@ var _resizeObserver = require("@juggle/resize-observer");
17
17
  function useElementResize(eventTarget, listener) {
18
18
  var resizeObserver = (0, _react.useRef)();
19
19
  (0, _react.useEffect)(function () {
20
- var target = typeof eventTarget === 'function' ? eventTarget() : eventTarget;
21
- resizeObserver.current = new _resizeObserver.ResizeObserver(listener);
22
- resizeObserver.current.observe(target);
20
+ if (!resizeObserver.current) {
21
+ var target = typeof eventTarget === 'function' ? eventTarget() : eventTarget;
22
+ resizeObserver.current = new _resizeObserver.ResizeObserver(listener);
23
+ resizeObserver.current.observe(target);
24
+ }
25
+
23
26
  return function () {
24
27
  var _resizeObserver$curre;
25
28