rsuite 5.33.0 → 5.34.0

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.
Files changed (62) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/DatePicker/styles/index.less +1 -0
  3. package/Timeline/styles/index.less +1 -1
  4. package/cjs/Carousel/Carousel.js +12 -2
  5. package/cjs/CheckPicker/CheckPicker.js +6 -2
  6. package/cjs/DatePicker/DatePicker.js +1 -1
  7. package/cjs/InputPicker/InputPicker.js +7 -2
  8. package/cjs/MultiCascader/MultiCascader.js +1 -0
  9. package/cjs/Picker/DropdownMenu.d.ts +1 -0
  10. package/cjs/Picker/DropdownMenu.js +19 -6
  11. package/cjs/Picker/utils.d.ts +2 -0
  12. package/cjs/Picker/utils.js +8 -1
  13. package/cjs/SelectPicker/SelectPicker.js +7 -2
  14. package/cjs/Timeline/Timeline.d.ts +9 -0
  15. package/cjs/Timeline/Timeline.js +12 -1
  16. package/cjs/Timeline/TimelineItem.d.ts +18 -1
  17. package/cjs/Timeline/TimelineItem.js +5 -3
  18. package/cjs/Windowing/List.js +11 -2
  19. package/cjs/utils/getDataGroupBy.d.ts +4 -1
  20. package/cjs/utils/getDataGroupBy.js +12 -24
  21. package/cjs/utils/index.d.ts +0 -1
  22. package/cjs/utils/index.js +1 -6
  23. package/cjs/utils/treeUtils.d.ts +8 -2
  24. package/cjs/utils/treeUtils.js +48 -14
  25. package/dist/rsuite-no-reset-rtl.css +1 -1
  26. package/dist/rsuite-no-reset-rtl.min.css +1 -1
  27. package/dist/rsuite-no-reset-rtl.min.css.map +1 -1
  28. package/dist/rsuite-no-reset.css +1 -1
  29. package/dist/rsuite-no-reset.min.css +1 -1
  30. package/dist/rsuite-no-reset.min.css.map +1 -1
  31. package/dist/rsuite-rtl.css +1 -1
  32. package/dist/rsuite-rtl.min.css +1 -1
  33. package/dist/rsuite-rtl.min.css.map +1 -1
  34. package/dist/rsuite.css +1 -1
  35. package/dist/rsuite.js +59 -19
  36. package/dist/rsuite.js.map +1 -1
  37. package/dist/rsuite.min.css +1 -1
  38. package/dist/rsuite.min.css.map +1 -1
  39. package/dist/rsuite.min.js +1 -1
  40. package/dist/rsuite.min.js.map +1 -1
  41. package/esm/Carousel/Carousel.js +13 -3
  42. package/esm/CheckPicker/CheckPicker.js +5 -2
  43. package/esm/DatePicker/DatePicker.js +1 -1
  44. package/esm/InputPicker/InputPicker.js +6 -2
  45. package/esm/MultiCascader/MultiCascader.js +1 -0
  46. package/esm/Picker/DropdownMenu.d.ts +1 -0
  47. package/esm/Picker/DropdownMenu.js +17 -5
  48. package/esm/Picker/utils.d.ts +2 -0
  49. package/esm/Picker/utils.js +8 -1
  50. package/esm/SelectPicker/SelectPicker.js +6 -2
  51. package/esm/Timeline/Timeline.d.ts +9 -0
  52. package/esm/Timeline/Timeline.js +13 -1
  53. package/esm/Timeline/TimelineItem.d.ts +18 -1
  54. package/esm/Timeline/TimelineItem.js +5 -3
  55. package/esm/Windowing/List.js +12 -3
  56. package/esm/utils/getDataGroupBy.d.ts +4 -1
  57. package/esm/utils/getDataGroupBy.js +13 -24
  58. package/esm/utils/index.d.ts +0 -1
  59. package/esm/utils/index.js +0 -1
  60. package/esm/utils/treeUtils.d.ts +8 -2
  61. package/esm/utils/treeUtils.js +43 -15
  62. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ # [5.34.0](https://github.com/rsuite/rsuite/compare/v5.33.1...v5.34.0) (2023-05-19)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **DatePicker:** added stack styles to datepicker styles ([#3195](https://github.com/rsuite/rsuite/issues/3195)) ([b3ed580](https://github.com/rsuite/rsuite/commit/b3ed580867db2e5205e71475c593e7d17ff04b49))
6
+ - **SelectPicker:** prevent error when listProps.itemSize is a number ([#3193](https://github.com/rsuite/rsuite/issues/3193)) ([151df47](https://github.com/rsuite/rsuite/commit/151df474b15ab4651d4ee5777b66018e58837816))
7
+
8
+ ### Features
9
+
10
+ - **Timeline:** add isItemActive prop ([#3198](https://github.com/rsuite/rsuite/issues/3198)) ([377930f](https://github.com/rsuite/rsuite/commit/377930f3498c59834a424417c136499866aacec2))
11
+
12
+ ## [5.33.1](https://github.com/rsuite/rsuite/compare/v5.33.0...v5.33.1) (2023-05-12)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **Carousel:** fix index not being reset when children change ([#3185](https://github.com/rsuite/rsuite/issues/3185)) ([3afb746](https://github.com/rsuite/rsuite/commit/3afb7460f5d12b34eb0e7944fa9f5a461b663028))
17
+ - **CheckPicker:** avoid mutating data when groupBy is specified ([#3173](https://github.com/rsuite/rsuite/issues/3173)) ([1a9805a](https://github.com/rsuite/rsuite/commit/1a9805a00cffcb8e527fbeb1df3a346da9a707f0))
18
+ - **DatePicker:** fix defaultValue not changing month on calendar ([#3183](https://github.com/rsuite/rsuite/issues/3183)) ([b0a2b5f](https://github.com/rsuite/rsuite/commit/b0a2b5f5cfe6ea94c1c13f8e9451c5d60f7f5b80))
19
+ - **pickers:** fix keyboard events still responding when readOnly ([#3184](https://github.com/rsuite/rsuite/issues/3184)) ([56e7563](https://github.com/rsuite/rsuite/commit/56e7563b2035be767f5ed8429cd8c3622708abe8))
20
+
1
21
  # [5.33.0](https://github.com/rsuite/rsuite/compare/v5.32.0...v5.33.0) (2023-04-28)
2
22
 
3
23
  ### Features
@@ -2,6 +2,7 @@
2
2
  @import '../../styles/mixins/listbox';
3
3
  @import '../../Button/styles/mixin';
4
4
  @import '../../Picker/styles/mixin';
5
+ @import '../../Stack/styles/index';
5
6
  @import 'mixin';
6
7
 
7
8
  // DatePicker Picker
@@ -42,7 +42,7 @@
42
42
  }
43
43
  }
44
44
 
45
- &-item-last &-item-dot::before {
45
+ &-item-active &-item-dot::before {
46
46
  background-color: var(--rs-timeline-indicator-active-bg);
47
47
  }
48
48
 
@@ -59,13 +59,23 @@ var Carousel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
59
59
 
60
60
  var _useControlled = (0, _utils.useControlled)(activeIndexProp, defaultActiveIndex),
61
61
  activeIndex = _useControlled[0],
62
- setActiveIndex = _useControlled[1];
62
+ setActiveIndex = _useControlled[1],
63
+ isControlled = _useControlled[2];
63
64
 
64
65
  var _useState = (0, _react.useState)(0),
65
66
  lastIndex = _useState[0],
66
67
  setLastIndex = _useState[1];
67
68
 
68
- var rootRef = (0, _react.useRef)(null); // Set a timer for automatic playback.
69
+ var rootRef = (0, _react.useRef)(null);
70
+ (0, _utils.useUpdateEffect)(function () {
71
+ // When the index is controlled, the index is not updated when the number of children changes.
72
+ if (isControlled) {
73
+ return;
74
+ } // Reset the index when the number of children changes.
75
+
76
+
77
+ setActiveIndex(0);
78
+ }, [children, isControlled]); // Set a timer for automatic playback.
69
79
  // `autoplay` needs to be cast to boolean type to avoid undefined parameters.
70
80
 
71
81
  var _useTimeout = (0, _utils.useTimeout)(function () {
@@ -35,6 +35,8 @@ var _treeUtils = require("../utils/treeUtils");
35
35
 
36
36
  var _utils = require("../utils");
37
37
 
38
+ var _getDataGroupBy = require("../utils/getDataGroupBy");
39
+
38
40
  var _Picker = require("../Picker");
39
41
 
40
42
  var _templateObject;
@@ -323,7 +325,7 @@ var CheckPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
323
325
 
324
326
 
325
327
  if (groupBy) {
326
- items = (0, _utils.getDataGroupBy)(items, groupBy, sort);
328
+ items = (0, _getDataGroupBy.getDataGroupBy)(items, groupBy, sort);
327
329
  } else if (typeof sort === 'function') {
328
330
  items = items.sort(sort(false));
329
331
  }
@@ -342,8 +344,10 @@ var CheckPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
342
344
  dropdownMenuItemAs: _Picker.DropdownMenuCheckItem,
343
345
  activeItemValues: value,
344
346
  focusItemValue: focusItemValue,
345
- data: [].concat(filteredStickyItems, items),
347
+ data: [].concat(filteredStickyItems, items) // `group` is redundant so long as `groupBy` exists
348
+ ,
346
349
  group: !(0, _isUndefined.default)(groupBy),
350
+ groupBy: groupBy,
347
351
  onSelect: handleItemSelect,
348
352
  onGroupTitleClick: onGroupTitleClick,
349
353
  virtualized: virtualized
@@ -117,7 +117,7 @@ var DatePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
117
117
  value = _useControlled[0],
118
118
  setValue = _useControlled[1];
119
119
 
120
- var _useCalendarDate = (0, _useCalendarDate2.default)(valueProp, calendarDefaultDate),
120
+ var _useCalendarDate = (0, _useCalendarDate2.default)(value, calendarDefaultDate),
121
121
  calendarDate = _useCalendarDate.calendarDate,
122
122
  setCalendarDate = _useCalendarDate.setCalendarDate,
123
123
  resetCalendarDate = _useCalendarDate.resetCalendarDate;
@@ -43,6 +43,8 @@ var _Plaintext = _interopRequireDefault(require("../Plaintext"));
43
43
 
44
44
  var _utils = require("../utils");
45
45
 
46
+ var _getDataGroupBy = require("../utils/getDataGroupBy");
47
+
46
48
  var _Picker = require("../Picker");
47
49
 
48
50
  var _Tag = _interopRequireDefault(require("../Tag"));
@@ -629,7 +631,7 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
629
631
 
630
632
 
631
633
  if (groupBy) {
632
- items = (0, _utils.getDataGroupBy)(items, groupBy, sort);
634
+ items = (0, _getDataGroupBy.getDataGroupBy)(items, groupBy, sort);
633
635
  } else if (typeof sort === 'function') {
634
636
  items = items.sort(sort(false));
635
637
  }
@@ -653,8 +655,11 @@ var InputPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
653
655
  activeItemValues: multi ? value : [value],
654
656
  focusItemValue: focusItemValue,
655
657
  maxHeight: menuMaxHeight,
656
- data: items,
658
+ data: items // FIXME-Doma
659
+ // `group` is redundant so long as `groupBy` exists
660
+ ,
657
661
  group: !(0, _isUndefined.default)(groupBy),
662
+ groupBy: groupBy,
658
663
  onSelect: multi ? handleCheckTag : handleSelectItem // fixme don't use any
659
664
  ,
660
665
  renderMenuGroup: renderMenuGroup,
@@ -249,6 +249,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
249
249
  (_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$u = _triggerRef$current.updatePosition) === null || _triggerRef$current$u === void 0 ? void 0 : _triggerRef$current$u.call(_triggerRef$current);
250
250
  }, [onSelect, getChildren, childrenKey, inline, addFlattenData, addColumn, removeColumnByIndex]);
251
251
  var handleCheck = (0, _react.useCallback)(function (node, event, checked) {
252
+ console.log('handleCheck');
252
253
  var nodeValue = node[valueKey];
253
254
  var nextValue = [];
254
255
 
@@ -6,6 +6,7 @@ export interface DropdownMenuProps<Multiple = false> extends StandardProps, Omit
6
6
  classPrefix: string;
7
7
  data?: ItemDataType[];
8
8
  group?: boolean;
9
+ groupBy?: string;
9
10
  disabledItemValues?: any[];
10
11
  activeItemValues?: any[];
11
12
  focusItemValue?: any;
@@ -11,6 +11,8 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
11
11
 
12
12
  var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
13
13
 
14
+ var _get2 = _interopRequireDefault(require("lodash/get"));
15
+
14
16
  var _react = _interopRequireWildcard(require("react"));
15
17
 
16
18
  var _propTypes = _interopRequireDefault(require("prop-types"));
@@ -47,6 +49,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
47
49
  var _props$data = props.data,
48
50
  data = _props$data === void 0 ? [] : _props$data,
49
51
  group = props.group,
52
+ groupBy = props.groupBy,
50
53
  _props$maxHeight = props.maxHeight,
51
54
  maxHeight = _props$maxHeight === void 0 ? 320 : _props$maxHeight,
52
55
  _props$activeItemValu = props.activeItemValues,
@@ -75,7 +78,7 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
75
78
  renderMenuItem = props.renderMenuItem,
76
79
  onGroupTitleClick = props.onGroupTitleClick,
77
80
  onSelect = props.onSelect,
78
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["data", "group", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "listRef", "className", "style", "focusItemValue", "dropdownMenuItemClassPrefix", "dropdownMenuItemAs", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
81
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["data", "group", "groupBy", "maxHeight", "activeItemValues", "disabledItemValues", "classPrefix", "valueKey", "labelKey", "virtualized", "listProps", "listRef", "className", "style", "focusItemValue", "dropdownMenuItemClassPrefix", "dropdownMenuItemAs", "rowHeight", "rowGroupHeight", "renderMenuGroup", "renderMenuItem", "onGroupTitleClick", "onSelect"]);
79
82
 
80
83
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
81
84
  withClassPrefix = _useClassNames.withClassPrefix,
@@ -205,11 +208,21 @@ var DropdownMenu = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
205
208
  };
206
209
 
207
210
  var filteredItems = group ? data.filter(function (item) {
208
- return !(foldedGroupKeys !== null && foldedGroupKeys !== void 0 && foldedGroupKeys.some(function (key) {
209
- var _item$parent;
210
-
211
- return key === ((_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[_getDataGroupBy.KEY_GROUP_TITLE]);
212
- }));
211
+ var _item$parent;
212
+
213
+ // Display group title items
214
+ if (item[_getDataGroupBy.KEY_GROUP]) return true; // Display items under the unfolded group
215
+ // FIXME-Doma
216
+ // `groupBy` is bound to be string when `group` is true
217
+ // because `group` is actually redundant as a prop
218
+ // It could simply be derived from `groupBy` value
219
+
220
+ var groupValue = (0, _get2.default)(item, groupBy, '') || ( // FIXME-Doma
221
+ // Usage of `item.parent` is strongly discouraged
222
+ // It's only here for legacy support
223
+ // Remove once `item.parent` is completely removed across related components
224
+ (_item$parent = item.parent) === null || _item$parent === void 0 ? void 0 : _item$parent[_getDataGroupBy.KEY_GROUP_TITLE]);
225
+ return !foldedGroupKeys.includes(groupValue);
213
226
  }) : data;
214
227
  var rowCount = filteredItems.length;
215
228
  (0, _utils.useMount)(function () {
@@ -73,6 +73,8 @@ export interface ToggleKeyDownEventProps {
73
73
  overlayRef?: React.RefObject<any>;
74
74
  searchInputRef?: React.RefObject<any>;
75
75
  active?: boolean;
76
+ readOnly?: boolean;
77
+ disabled?: boolean;
76
78
  onExit?: (event: any) => void;
77
79
  onKeyDown?: (event: any) => void;
78
80
  onOpen?: () => void;
@@ -433,6 +433,8 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
433
433
  overlayRef = props.overlayRef,
434
434
  searchInputRef = props.searchInputRef,
435
435
  active = props.active,
436
+ readOnly = props.readOnly,
437
+ disabled = props.disabled,
436
438
  onExit = props.onExit,
437
439
  onOpen = props.onOpen,
438
440
  onClose = props.onClose,
@@ -461,6 +463,11 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
461
463
  handleOpen();
462
464
  }, [active, handleOpen, handleClose]);
463
465
  var onToggle = (0, _react.useCallback)(function (event) {
466
+ // Keyboard events should not be processed when readOnly and disabled are set.
467
+ if (readOnly || disabled) {
468
+ return;
469
+ }
470
+
464
471
  if (event.target === (targetRef === null || targetRef === void 0 ? void 0 : targetRef.current)) {
465
472
  // enter
466
473
  if (toggle && event.key === _utils.KEY_VALUES.ENTER) {
@@ -510,7 +517,7 @@ var useToggleKeyDownEvent = function useToggleKeyDownEvent(props) {
510
517
 
511
518
 
512
519
  onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(event);
513
- }, [handleClose, handleToggleDropdown, overlayRef, onExit, onKeyDown, onMenuKeyDown, onMenuPressBackspace, onMenuPressEnter, toggle, targetRef, searchInputRef]);
520
+ }, [readOnly, disabled, targetRef, overlayRef, onKeyDown, toggle, handleToggleDropdown, onExit, onMenuKeyDown, searchInputRef, onMenuPressEnter, onMenuPressBackspace, handleClose]);
514
521
  return onToggle;
515
522
  };
516
523
 
@@ -29,6 +29,8 @@ var _omit = _interopRequireDefault(require("lodash/omit"));
29
29
 
30
30
  var _utils = require("../utils");
31
31
 
32
+ var _getDataGroupBy = require("../utils/getDataGroupBy");
33
+
32
34
  var _Picker = require("../Picker");
33
35
 
34
36
  var _templateObject;
@@ -258,7 +260,7 @@ var SelectPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
258
260
  var items = filteredData; // Create a tree structure data when set `groupBy`
259
261
 
260
262
  if (groupBy) {
261
- items = (0, _utils.getDataGroupBy)(items, groupBy, sort);
263
+ items = (0, _getDataGroupBy.getDataGroupBy)(items, groupBy, sort);
262
264
  } else if (typeof sort === 'function') {
263
265
  items = items.sort(sort(false));
264
266
  }
@@ -278,8 +280,11 @@ var SelectPicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
278
280
  dropdownMenuItemAs: _Picker.DropdownMenuItem,
279
281
  activeItemValues: [value],
280
282
  focusItemValue: focusItemValue,
281
- data: items,
283
+ data: items // FIXME-Doma
284
+ // `group` is redundant so long as `groupBy` exists
285
+ ,
282
286
  group: !(0, _isUndefined.default)(groupBy),
287
+ groupBy: groupBy,
283
288
  onSelect: handleItemSelect,
284
289
  onGroupTitleClick: onGroupTitleClick,
285
290
  virtualized: virtualized
@@ -8,9 +8,18 @@ export interface TimelineProps extends WithAsProps {
8
8
  align?: 'left' | 'right' | 'alternate';
9
9
  /** Timeline endless **/
10
10
  endless?: boolean;
11
+ /**
12
+ * Whether an item is active (with highlighted dot).
13
+ *
14
+ * @default
15
+ * The last item is marked active.
16
+ */
17
+ isItemActive?: (index: number, totalItemsCount: number) => boolean;
11
18
  }
12
19
  interface TimelineComponent extends RsRefForwardingComponent<'div', TimelineProps> {
13
20
  Item: typeof TimelineItem;
21
+ ACTIVE_FIRST: (index: number, totalItemsCount: number) => boolean;
22
+ ACTIVE_LAST: (index: number, totalItemsCount: number) => boolean;
14
23
  }
15
24
  declare const Timeline: TimelineComponent;
16
25
  export default Timeline;
@@ -29,7 +29,9 @@ var Timeline = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
29
29
  _props$align = props.align,
30
30
  align = _props$align === void 0 ? 'left' : _props$align,
31
31
  endless = props.endless,
32
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["children", "as", "classPrefix", "className", "align", "endless"]);
32
+ _props$isItemActive = props.isItemActive,
33
+ isItemActive = _props$isItemActive === void 0 ? Timeline.ACTIVE_LAST : _props$isItemActive,
34
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["children", "as", "classPrefix", "className", "align", "endless", "isItemActive"]);
33
35
 
34
36
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
35
37
  merge = _useClassNames.merge,
@@ -52,11 +54,20 @@ var Timeline = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
52
54
  }), _utils.ReactChildren.mapCloneElement(children, function (_child, index) {
53
55
  return {
54
56
  last: index + 1 === count,
57
+ INTERNAL_active: isItemActive(index, count),
55
58
  align: align
56
59
  };
57
60
  }));
58
61
  });
59
62
 
63
+ Timeline.ACTIVE_FIRST = function (index) {
64
+ return index === 0;
65
+ };
66
+
67
+ Timeline.ACTIVE_LAST = function (index, totalItemsCount) {
68
+ return index === totalItemsCount - 1;
69
+ };
70
+
60
71
  Timeline.Item = _TimelineItem.default;
61
72
  Timeline.displayName = 'Timeline';
62
73
  Timeline.propTypes = {
@@ -1,7 +1,18 @@
1
1
  import React from 'react';
2
2
  import { WithAsProps, RsRefForwardingComponent } from '../@types/common';
3
3
  export interface TimelineItemProps extends WithAsProps {
4
- /** Whether the last item */
4
+ /**
5
+ * Whether the last item
6
+ *
7
+ * @internal
8
+ * This props is supposed to be used only by Timeline component internally
9
+ * User should never rely on this prop
10
+ *
11
+ * @deprecated
12
+ * This prop was used to indicate whether an item is the last item so that it gets highlighted.
13
+ * Now we can specify whether an item should be highlighted individually.
14
+ * Use {@link INTERNAL_active} instead
15
+ */
5
16
  last?: boolean;
6
17
  /** Customizing the Timeline item */
7
18
  dot?: React.ReactNode;
@@ -11,6 +22,12 @@ export interface TimelineItemProps extends WithAsProps {
11
22
  as?: React.ElementType;
12
23
  /** Customized time of timeline **/
13
24
  time?: React.ReactNode;
25
+ /**
26
+ * @internal
27
+ * This props is supposed to be used only by Timeline component internally
28
+ * User should never rely on this prop
29
+ */
30
+ INTERNAL_active?: boolean;
14
31
  }
15
32
  declare const TimelineItem: RsRefForwardingComponent<'div', TimelineItemProps>;
16
33
  export default TimelineItem;
@@ -21,11 +21,12 @@ var TimelineItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
21
21
  children = props.children,
22
22
  _props$classPrefix = props.classPrefix,
23
23
  classPrefix = _props$classPrefix === void 0 ? 'timeline-item' : _props$classPrefix,
24
- last = props.last,
24
+ DEPRECATED_last = props.last,
25
25
  className = props.className,
26
26
  dot = props.dot,
27
27
  time = props.time,
28
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "children", "classPrefix", "last", "className", "dot", "time"]);
28
+ INTERNAL_active = props.INTERNAL_active,
29
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "children", "classPrefix", "last", "className", "dot", "time", "INTERNAL_active"]);
29
30
 
30
31
  var _useClassNames = (0, _utils.useClassNames)(classPrefix),
31
32
  merge = _useClassNames.merge,
@@ -33,7 +34,8 @@ var TimelineItem = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
33
34
  prefix = _useClassNames.prefix;
34
35
 
35
36
  var classes = merge(className, withClassPrefix({
36
- last: last
37
+ last: DEPRECATED_last,
38
+ active: INTERNAL_active
37
39
  }));
38
40
  return /*#__PURE__*/_react.default.createElement(Component, (0, _extends2.default)({}, rest, {
39
41
  ref: ref,
@@ -21,7 +21,8 @@ var List = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
21
21
  var rowHeight = props.rowHeight,
22
22
  _props$as = props.as,
23
23
  Component = _props$as === void 0 ? _reactWindow.VariableSizeList : _props$as,
24
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["rowHeight", "as"]);
24
+ itemSizeProp = props.itemSize,
25
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["rowHeight", "as", "itemSize"]);
25
26
  var listRef = (0, _react.useRef)(null);
26
27
 
27
28
  var _useCustom = (0, _utils.useCustom)(),
@@ -56,7 +57,15 @@ var List = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
56
57
  index: index
57
58
  }) : rowHeight || 0;
58
59
  }, [rowHeight]);
59
- var compatibleProps = (0, _extends2.default)({}, rest);
60
+ var itemSize = (0, _react.useMemo)(function () {
61
+ if (typeof itemSizeProp === 'function') return itemSizeProp;
62
+ return function () {
63
+ return itemSizeProp;
64
+ };
65
+ }, [itemSizeProp]);
66
+ var compatibleProps = (0, _extends2.default)({
67
+ itemSize: itemSize
68
+ }, rest);
60
69
 
61
70
  if (rowHeight) {
62
71
  compatibleProps.itemSize = Component === _reactWindow.VariableSizeList ? setRowHeight : rowHeight;
@@ -1,3 +1,6 @@
1
1
  export declare const KEY_GROUP: string | symbol;
2
2
  export declare const KEY_GROUP_TITLE = "groupTitle";
3
- export default function getDataGroupBy(data: any[] | undefined, key: string, sort?: any): any[];
3
+ export declare function getDataGroupBy<T>(data: readonly T[], key: string, sort?: (isGroup: boolean) => <T>(a: T, b: T) => number): (T | {
4
+ groupTitle: string;
5
+ children: T[];
6
+ })[];
@@ -3,10 +3,10 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
 
5
5
  exports.__esModule = true;
6
- exports.default = getDataGroupBy;
6
+ exports.getDataGroupBy = getDataGroupBy;
7
7
  exports.KEY_GROUP_TITLE = exports.KEY_GROUP = void 0;
8
8
 
9
- var _get2 = _interopRequireDefault(require("lodash/get"));
9
+ var _groupBy2 = _interopRequireDefault(require("lodash/groupBy"));
10
10
 
11
11
  var _treeUtils = require("../utils/treeUtils");
12
12
 
@@ -17,26 +17,9 @@ var KEY_GROUP_TITLE = 'groupTitle';
17
17
  exports.KEY_GROUP_TITLE = KEY_GROUP_TITLE;
18
18
 
19
19
  function getDataGroupBy(data, key, sort) {
20
- if (data === void 0) {
21
- data = [];
22
- }
23
-
24
- var tempData = {};
20
+ var groupMap = (0, _groupBy2.default)(data, key);
25
21
  var isSort = typeof sort === 'function';
26
- data.forEach(function (item) {
27
- // this will allow getting data using dot notation
28
- // i.e groupBy="country.name" as country will be a nested object
29
- // to the item and the name will be nested key to the country object
30
- // can be used with values in arrays, i.e groupBy="addresses.0.country.name"
31
- var groupByValue = (0, _get2.default)(item, key, '');
32
-
33
- if (!tempData[groupByValue]) {
34
- tempData[groupByValue] = [];
35
- }
36
-
37
- tempData[groupByValue].push(item);
38
- });
39
- var nextData = Object.entries(tempData).map(function (_ref) {
22
+ var groups = Object.entries(groupMap).map(function (_ref) {
40
23
  var _ref2;
41
24
 
42
25
  var groupTitle = _ref[0],
@@ -47,8 +30,13 @@ function getDataGroupBy(data, key, sort) {
47
30
  });
48
31
 
49
32
  if (isSort) {
50
- nextData = nextData.sort(sort(true));
51
- }
33
+ groups.sort(sort(true));
34
+ } // Use DFS traverse
35
+ // Because I want the result to be [group, child, child, group, child, child]
36
+ // rather than [group, group, child, child, child, child]
37
+
52
38
 
53
- return (0, _treeUtils.UNSAFE_flattenTree)(nextData);
39
+ return (0, _treeUtils.flattenTree)(groups, function (group) {
40
+ return group.children;
41
+ }, _treeUtils.WalkTreeStrategy.DFS);
54
42
  }
@@ -12,7 +12,6 @@ export { default as ReactChildren } from './ReactChildren';
12
12
  export { default as tplTransform } from './tplTransform';
13
13
  export { default as ajaxUpload } from './ajaxUpload';
14
14
  export { default as previewFile } from './previewFile';
15
- export { default as getDataGroupBy } from './getDataGroupBy';
16
15
  export { default as clone } from './clone';
17
16
  export { default as placementPolyfill } from './placementPolyfill';
18
17
  export { default as getDOMNode } from './getDOMNode';
@@ -14,7 +14,6 @@ var _exportNames = {
14
14
  tplTransform: true,
15
15
  ajaxUpload: true,
16
16
  previewFile: true,
17
- getDataGroupBy: true,
18
17
  clone: true,
19
18
  placementPolyfill: true,
20
19
  getDOMNode: true,
@@ -49,7 +48,7 @@ var _exportNames = {
49
48
  DateUtils: true,
50
49
  TypeChecker: true
51
50
  };
52
- exports.TypeChecker = exports.DateUtils = exports.globalKey = exports.getClassNamePrefix = exports.defaultClassPrefix = exports.useMount = exports.useIsMounted = exports.useUpdateEffect = exports.useWillUnmount = exports.useUpdatedRef = exports.useEventCallback = exports.stringToObject = exports.getSafeRegExpString = exports.useRootClose = exports.useControlled = exports.useTimeout = exports.createComponent = exports.usePortal = exports.useCustom = exports.useElementResize = exports.useEventListener = exports.useClassNames = exports.render = exports.appendTooltip = exports.scrollTopAnimation = exports.reactToString = exports.composeFunctions = exports.shallowEqualArray = exports.shallowEqual = exports.mergeRefs = exports.getDOMNode = exports.placementPolyfill = exports.clone = exports.getDataGroupBy = exports.previewFile = exports.ajaxUpload = exports.tplTransform = exports.ReactChildren = exports.isOneOf = exports.createChainedFunction = exports.prefix = exports.guid = void 0;
51
+ exports.TypeChecker = exports.DateUtils = exports.globalKey = exports.getClassNamePrefix = exports.defaultClassPrefix = exports.useMount = exports.useIsMounted = exports.useUpdateEffect = exports.useWillUnmount = exports.useUpdatedRef = exports.useEventCallback = exports.stringToObject = exports.getSafeRegExpString = exports.useRootClose = exports.useControlled = exports.useTimeout = exports.createComponent = exports.usePortal = exports.useCustom = exports.useElementResize = exports.useEventListener = exports.useClassNames = exports.render = exports.appendTooltip = exports.scrollTopAnimation = exports.reactToString = exports.composeFunctions = exports.shallowEqualArray = exports.shallowEqual = exports.mergeRefs = exports.getDOMNode = exports.placementPolyfill = exports.clone = exports.previewFile = exports.ajaxUpload = exports.tplTransform = exports.ReactChildren = exports.isOneOf = exports.createChainedFunction = exports.prefix = exports.guid = void 0;
53
52
 
54
53
  var _BrowserDetection = require("./BrowserDetection");
55
54
 
@@ -130,10 +129,6 @@ var _previewFile = _interopRequireDefault(require("./previewFile"));
130
129
 
131
130
  exports.previewFile = _previewFile.default;
132
131
 
133
- var _getDataGroupBy = _interopRequireDefault(require("./getDataGroupBy"));
134
-
135
- exports.getDataGroupBy = _getDataGroupBy.default;
136
-
137
132
  var _clone = _interopRequireDefault(require("./clone"));
138
133
 
139
134
  exports.clone = _clone.default;
@@ -21,7 +21,13 @@ export declare function shouldShowNodeByParentExpanded<T>(expandItemValues?: T[]
21
21
  * Use {@link flattenTree} instead.
22
22
  */
23
23
  export declare function UNSAFE_flattenTree<TItem>(tree: TItem[], childrenKey?: string, executor?: (node: any, index: number) => any): TItem[];
24
- export declare function flattenTree<T>(rootNodes: readonly T[], getChildren: (node: T) => readonly T[] | undefined): T[];
24
+ export declare enum WalkTreeStrategy {
25
+ DFS = 0,
26
+ BFS = 1
27
+ }
28
+ export declare function flattenTree<T>(rootNodes: readonly T[], getChildren: (node: T) => readonly T[] | undefined, walkStrategy?: WalkTreeStrategy): T[];
29
+ export declare function walkTreeBfs<T>(rootNodes: readonly T[], getChildren: (node: T) => readonly T[] | undefined, callback: (node: T) => void): void;
30
+ export declare function walkTreeDfs<T>(rootNodes: readonly T[], getChildren: (node: T) => readonly T[] | undefined, callback: (node: T) => void): void;
25
31
  /**
26
32
  * get all ancestor nodes of given node
27
33
  * @param {*} node
@@ -293,6 +299,6 @@ export declare function getParentMap<T extends Record<string, unknown>>(items: r
293
299
  */
294
300
  export declare function getKeyParentMap<T extends Record<string, unknown>, K = React.Key>(items: readonly T[], getKey: (item: T) => K, getChildren: (item: T) => readonly T[] | undefined): Map<K, T>;
295
301
  /**
296
- * Returns an array indicating the hirearchy path from root towards `target` item
302
+ * Returns an array indicating the hierarchy path from root towards `target` item
297
303
  */
298
304
  export declare function getPathTowardsItem<T>(target: T | undefined, getParent: (item: T) => T | undefined): T[];