rsuite 5.19.0 → 5.19.1

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 (52) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/cjs/Animation/Transition.d.ts +2 -2
  3. package/cjs/Cascader/Cascader.js +10 -5
  4. package/cjs/Cascader/utils.d.ts +1 -0
  5. package/cjs/Cascader/utils.js +11 -1
  6. package/cjs/CheckTreePicker/CheckTreePicker.js +32 -36
  7. package/cjs/CheckTreePicker/utils.d.ts +2 -2
  8. package/cjs/CheckTreePicker/utils.js +9 -10
  9. package/cjs/DOMHelper/index.d.ts +3 -2
  10. package/cjs/DatePicker/PredefinedRanges.js +5 -0
  11. package/cjs/DateRangePicker/DateRangePicker.js +9 -7
  12. package/cjs/MultiCascader/MultiCascader.js +10 -5
  13. package/cjs/MultiCascader/utils.d.ts +1 -0
  14. package/cjs/MultiCascader/utils.js +10 -0
  15. package/cjs/TreePicker/TreePicker.d.ts +0 -1
  16. package/cjs/TreePicker/TreePicker.js +13 -14
  17. package/cjs/locales/fr_FR.d.ts +105 -0
  18. package/cjs/locales/fr_FR.js +84 -0
  19. package/cjs/locales/index.d.ts +1 -0
  20. package/cjs/locales/index.js +6 -2
  21. package/cjs/utils/treeUtils.d.ts +7 -1
  22. package/cjs/utils/treeUtils.js +24 -5
  23. package/dist/rsuite-rtl.min.css +1 -1
  24. package/dist/rsuite-rtl.min.css.map +1 -1
  25. package/dist/rsuite.js +14 -14
  26. package/dist/rsuite.min.css +1 -1
  27. package/dist/rsuite.min.css.map +1 -1
  28. package/dist/rsuite.min.js +1 -1
  29. package/dist/rsuite.min.js.map +1 -1
  30. package/esm/Animation/Transition.d.ts +2 -2
  31. package/esm/Cascader/Cascader.js +10 -5
  32. package/esm/Cascader/utils.d.ts +1 -0
  33. package/esm/Cascader/utils.js +11 -1
  34. package/esm/CheckTreePicker/CheckTreePicker.js +34 -37
  35. package/esm/CheckTreePicker/utils.d.ts +2 -2
  36. package/esm/CheckTreePicker/utils.js +11 -12
  37. package/esm/DOMHelper/index.d.ts +3 -2
  38. package/esm/DatePicker/PredefinedRanges.js +5 -0
  39. package/esm/DateRangePicker/DateRangePicker.js +9 -7
  40. package/esm/MultiCascader/MultiCascader.js +10 -5
  41. package/esm/MultiCascader/utils.d.ts +1 -0
  42. package/esm/MultiCascader/utils.js +10 -0
  43. package/esm/TreePicker/TreePicker.d.ts +0 -1
  44. package/esm/TreePicker/TreePicker.js +13 -13
  45. package/esm/locales/fr_FR.d.ts +105 -0
  46. package/esm/locales/fr_FR.js +74 -0
  47. package/esm/locales/index.d.ts +1 -0
  48. package/esm/locales/index.js +2 -1
  49. package/esm/utils/treeUtils.d.ts +7 -1
  50. package/esm/utils/treeUtils.js +22 -5
  51. package/locales/fr_FR/package.json +7 -0
  52. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## [5.19.1](https://github.com/rsuite/rsuite/compare/v5.19.0...v5.19.1) (2022-10-13)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **Cascader,MultiCascader:** fix sub-columns not being removed when a leaf node is selected ([#2792](https://github.com/rsuite/rsuite/issues/2792)) ([619c7de](https://github.com/rsuite/rsuite/commit/619c7debfca63a58622a1ae4a4776544bebf3405))
6
+ - **CheckTreePicker:** fix children node can't uncheck when setting virtualized ([#2782](https://github.com/rsuite/rsuite/issues/2782)) ([#2783](https://github.com/rsuite/rsuite/issues/2783)) ([50f7b89](https://github.com/rsuite/rsuite/commit/50f7b89dbe1a2b59c212e021e1bc42c50e9ebb37))
7
+ - **DateRangePicker:** fix predefined range affecting calendar height ([#2794](https://github.com/rsuite/rsuite/issues/2794)) ([957ce4e](https://github.com/rsuite/rsuite/commit/957ce4e197355ecbb9a0aea6cb6c5906ab1e1a2a))
8
+ - **TreePicker, CheckTreePicker:** ignore backspace when setting cleanable=false or disabled=true ([#2798](https://github.com/rsuite/rsuite/issues/2798)) ([eefe0eb](https://github.com/rsuite/rsuite/commit/eefe0ebc396ee1764243a1e2c8ec432dc6ce39a5))
9
+ - **TreePicker,CheckTreePicker:** fix `renderExtraFooter` causing the … ([#2745](https://github.com/rsuite/rsuite/issues/2745)) ([d7279d1](https://github.com/rsuite/rsuite/commit/d7279d14877e4b3b0ac74abdfeb56836b3a07780)), closes [#2758](https://github.com/rsuite/rsuite/issues/2758)
10
+ - **TreePicker,CheckTreePicker:** fix value being cleared internally when value is controlled ([#2788](https://github.com/rsuite/rsuite/issues/2788)) ([4521a27](https://github.com/rsuite/rsuite/commit/4521a2730a7311b7fe095d85e39966a1d56f5d9d)), closes [#2784](https://github.com/rsuite/rsuite/issues/2784)
11
+
12
+ ### Features
13
+
14
+ - **i18n:** add fr_FR locale ([#2735](https://github.com/rsuite/rsuite/issues/2735)) ([087cfc8](https://github.com/rsuite/rsuite/commit/087cfc885252d764864e075b086f5d980f94db94))
15
+
16
+ ### Performance Improvements
17
+
18
+ - **CheckTreePicker:** improve performance when using large data ([#2767](https://github.com/rsuite/rsuite/issues/2767)) ([651a8a1](https://github.com/rsuite/rsuite/commit/651a8a1ebb0bf1c1e07e1541ca1f0a61a96a3df4))
19
+
1
20
  # [5.19.0](https://github.com/rsuite/rsuite/compare/v5.18.1...v5.19.0) (2022-09-23)
2
21
 
3
22
  ### Bug Fixes
@@ -36,7 +36,7 @@ interface TransitionState {
36
36
  }
37
37
  export declare const transitionPropTypes: {
38
38
  animation: PropTypes.Requireable<boolean>;
39
- children: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
39
+ children: PropTypes.Requireable<string | number | boolean | ((...args: any[]) => any) | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
40
40
  className: PropTypes.Requireable<string>;
41
41
  in: PropTypes.Requireable<boolean>;
42
42
  unmountOnExit: PropTypes.Requireable<boolean>;
@@ -59,7 +59,7 @@ declare type EventToken = {
59
59
  declare class Transition extends React.Component<TransitionProps, TransitionState> {
60
60
  static propTypes: {
61
61
  animation: PropTypes.Requireable<boolean>;
62
- children: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
62
+ children: PropTypes.Requireable<string | number | boolean | ((...args: any[]) => any) | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
63
63
  className: PropTypes.Requireable<string>;
64
64
  in: PropTypes.Requireable<boolean>;
65
65
  unmountOnExit: PropTypes.Requireable<boolean>;
@@ -117,6 +117,7 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
117
117
  valueToPaths = _usePaths.valueToPaths,
118
118
  columnData = _usePaths.columnData,
119
119
  addColumn = _usePaths.addColumn,
120
+ romoveColumnByIndex = _usePaths.romoveColumnByIndex,
120
121
  setValueToPaths = _usePaths.setValueToPaths,
121
122
  setColumnData = _usePaths.setColumnData,
122
123
  setSelectedPaths = _usePaths.setSelectedPaths,
@@ -280,9 +281,10 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
280
281
  var handleSelect = function handleSelect(node, cascadePaths, isLeafNode, event) {
281
282
  var _node$childrenKey, _node$childrenKey2, _triggerRef$current2;
282
283
 
283
- var nextValue = node[valueKey];
284
284
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
285
- setSelectedPaths(cascadePaths); // Lazy load node's children
285
+ setSelectedPaths(cascadePaths);
286
+ var nextValue = node[valueKey];
287
+ var columnIndex = cascadePaths.length; // Lazy load node's children
286
288
 
287
289
  if (typeof getChildren === 'function' && ((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) === 0) {
288
290
  node.loading = true;
@@ -294,16 +296,19 @@ var Cascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
294
296
  node[childrenKey] = data;
295
297
 
296
298
  if (targetRef.current) {
297
- addColumn(data, cascadePaths.length);
299
+ addColumn(data, columnIndex);
298
300
  }
299
301
  });
300
302
  } else {
301
303
  node.loading = false;
302
304
  node[childrenKey] = children;
303
- addColumn(children, cascadePaths.length);
305
+ addColumn(children, columnIndex);
304
306
  }
305
307
  } else if ((_node$childrenKey2 = node[childrenKey]) !== null && _node$childrenKey2 !== void 0 && _node$childrenKey2.length) {
306
- addColumn(node[childrenKey], cascadePaths.length);
308
+ addColumn(node[childrenKey], columnIndex);
309
+ } else {
310
+ // Removes subsequent columns of the current column when the clicked node is a leaf node.
311
+ romoveColumnByIndex(columnIndex);
307
312
  }
308
313
 
309
314
  if (isLeafNode) {
@@ -14,4 +14,5 @@ export declare function usePaths(props: CascaderProps): {
14
14
  setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[][]>>;
15
15
  setSelectedPaths: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[]>>;
16
16
  addColumn: (column: ItemDataType[], index: number) => void;
17
+ romoveColumnByIndex: (index: number) => void;
17
18
  };
@@ -125,6 +125,15 @@ function usePaths(props) {
125
125
  function addColumn(column, index) {
126
126
  setColumnData([].concat((0, _slice.default)(columnData, 0, index), [column]));
127
127
  }
128
+ /**
129
+ * Remove subsequent columns of the specified column
130
+ * @param index
131
+ */
132
+
133
+
134
+ function romoveColumnByIndex(index) {
135
+ setColumnData([].concat((0, _slice.default)(columnData, 0, index)));
136
+ }
128
137
  /**
129
138
  * Enforce update of columns and paths.
130
139
  * @param nextValue Selected value
@@ -160,6 +169,7 @@ function usePaths(props) {
160
169
  setValueToPaths: setValueToPaths,
161
170
  setColumnData: setColumnData,
162
171
  setSelectedPaths: setSelectedPaths,
163
- addColumn: addColumn
172
+ addColumn: addColumn,
173
+ romoveColumnByIndex: romoveColumnByIndex
164
174
  };
165
175
  }
@@ -43,8 +43,6 @@ var _Picker = require("../Picker");
43
43
 
44
44
  var _utils2 = require("./utils");
45
45
 
46
- var _TreePicker = require("../TreePicker/TreePicker");
47
-
48
46
  var emptyArray = [];
49
47
 
50
48
  var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
@@ -88,6 +86,8 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
88
86
  defaultExpandItemValues = _props$defaultExpandI === void 0 ? emptyArray : _props$defaultExpandI,
89
87
  _props$height = props.height,
90
88
  height = _props$height === void 0 ? 360 : _props$height,
89
+ _props$menuMaxHeight = props.menuMaxHeight,
90
+ menuMaxHeight = _props$menuMaxHeight === void 0 ? 320 : _props$menuMaxHeight,
91
91
  menuStyle = props.menuStyle,
92
92
  _props$searchable = props.searchable,
93
93
  searchable = _props$searchable === void 0 ? true : _props$searchable,
@@ -119,7 +119,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
119
119
  renderValue = props.renderValue,
120
120
  renderTreeIcon = props.renderTreeIcon,
121
121
  renderTreeNode = props.renderTreeNode,
122
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "data", "style", "appearance", "cleanable", "countable", "searchBy", "toggleAs", "searchKeyword", "showIndentLine", "locale", "cascade", "disabled", "valueKey", "labelKey", "placement", "childrenKey", "placeholder", "value", "defaultValue", "defaultExpandAll", "disabledItemValues", "expandItemValues", "defaultExpandItemValues", "height", "menuStyle", "searchable", "virtualized", "className", "classPrefix", "menuClassName", "menuAutoWidth", "uncheckableItemValues", "id", "listProps", "renderMenu", "getChildren", "renderExtraFooter", "onEntered", "onChange", "onClean", "onClose", "onExited", "onSearch", "onSelect", "onOpen", "onScroll", "onExpand", "renderValue", "renderTreeIcon", "renderTreeNode"]);
122
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "data", "style", "appearance", "cleanable", "countable", "searchBy", "toggleAs", "searchKeyword", "showIndentLine", "locale", "cascade", "disabled", "valueKey", "labelKey", "placement", "childrenKey", "placeholder", "value", "defaultValue", "defaultExpandAll", "disabledItemValues", "expandItemValues", "defaultExpandItemValues", "height", "menuMaxHeight", "menuStyle", "searchable", "virtualized", "className", "classPrefix", "menuClassName", "menuAutoWidth", "uncheckableItemValues", "id", "listProps", "renderMenu", "getChildren", "renderExtraFooter", "onEntered", "onChange", "onClean", "onClose", "onExited", "onSearch", "onSelect", "onOpen", "onScroll", "onExpand", "renderValue", "renderTreeIcon", "renderTreeNode"]);
123
123
 
124
124
  var _useContext = (0, _react.useContext)(_TreeContext.default),
125
125
  inline = _useContext.inline;
@@ -249,11 +249,11 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
249
249
  value: node[valueKey],
250
250
  label: node[labelKey],
251
251
  layer: layer,
252
- focus: (0, _utils.shallowEqual)(focusItemValue, node[valueKey]),
252
+ focus: focusItemValue === node[valueKey],
253
253
  expand: node.expand,
254
254
  visible: node.visible,
255
255
  loading: loadingNodeValues.some(function (item) {
256
- return (0, _utils.shallowEqual)(item, node[valueKey]);
256
+ return item === node[valueKey];
257
257
  }),
258
258
  disabled: (0, _utils2.getDisabledState)(flattenNodes, node, {
259
259
  disabledItemValues: disabledItemValues,
@@ -390,18 +390,6 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
390
390
  onChange === null || onChange === void 0 ? void 0 : onChange(selectedValues, event);
391
391
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, selectedValues, event);
392
392
  }, [cascade, valueKey, flattenNodes, isControlled, uncheckableItemValues, setValue, onChange, onSelect, toggleChecked, unSerializeList]);
393
-
394
- var hasValue = function hasValue() {
395
- var selectedValues = Object.keys(flattenNodes).map(function (refKey) {
396
- return flattenNodes[refKey][valueKey];
397
- }).filter(function (item) {
398
- return value.some(function (v) {
399
- return (0, _utils.shallowEqual)(v, item);
400
- });
401
- });
402
- return !!selectedValues.length;
403
- };
404
-
405
393
  var handleOpen = (0, _react.useCallback)(function () {
406
394
  var _triggerRef$current, _triggerRef$current$o;
407
395
 
@@ -453,22 +441,26 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
453
441
  var handleClean = (0, _react.useCallback)(function (event) {
454
442
  var target = event.target; // exclude searchBar
455
443
 
456
- if (target.matches('div[role="searchbox"] > input')) {
444
+ if (target.matches('div[role="searchbox"] > input') || disabled || !cleanable) {
457
445
  return;
458
446
  }
459
447
 
460
448
  setActiveNode(null);
461
- setValue([]);
462
449
  setFocusItemValue(null);
463
- unSerializeList({
464
- nodes: flattenNodes,
465
- key: 'check',
466
- value: [],
467
- cascade: cascade,
468
- uncheckableItemValues: uncheckableItemValues
469
- });
450
+
451
+ if (!isControlled) {
452
+ setValue([]);
453
+ unSerializeList({
454
+ nodes: flattenNodes,
455
+ key: 'check',
456
+ value: [],
457
+ cascade: cascade,
458
+ uncheckableItemValues: uncheckableItemValues
459
+ });
460
+ }
461
+
470
462
  onChange === null || onChange === void 0 ? void 0 : onChange([], event);
471
- }, [cascade, flattenNodes, onChange, setValue, unSerializeList, uncheckableItemValues]);
463
+ }, [cascade, cleanable, disabled, flattenNodes, onChange, setValue, unSerializeList, uncheckableItemValues, isControlled]);
472
464
  var handleFocusItem = (0, _react.useCallback)(function (key) {
473
465
  var focusableItems = (0, _treeUtils.getFocusableItems)(filteredData, {
474
466
  disabledItemValues: disabledItemValues,
@@ -593,7 +585,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
593
585
  var visibleChildren = (0, _isUndefined2.default)(searchKeywordState) || searchKeywordState.length === 0 ? !!children : (0, _treeUtils.hasVisibleChildren)(node, childrenKey);
594
586
  var nodeProps = (0, _extends2.default)({}, getTreeNodeProps((0, _extends2.default)({}, node, {
595
587
  /**
596
- * spread operator dont copy unenumerable properties
588
+ * spread operator don't copy unenumerable properties
597
589
  * so we need to copy them manually
598
590
  */
599
591
  parent: node.parent,
@@ -645,6 +637,11 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
645
637
  visible = node.visible;
646
638
  var expand = (0, _treeUtils.getExpandWhenSearching)(searchKeywordState, expandItemValues.includes(node[valueKey]));
647
639
  var nodeProps = (0, _extends2.default)({}, getTreeNodeProps((0, _extends2.default)({}, node, {
640
+ /**
641
+ * spread operator don't copy unenumerable properties
642
+ * so we need to copy them manually
643
+ */
644
+ parent: node.parent,
648
645
  expand: expand
649
646
  }), layer), {
650
647
  hasChildren: node.hasChildren
@@ -689,7 +686,7 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
689
686
  }, /*#__PURE__*/_react.default.createElement("div", {
690
687
  className: treeNodesClass
691
688
  }, virtualized ? /*#__PURE__*/_react.default.createElement(_VirtualizedList.AutoSizer, {
692
- defaultHeight: inline ? height : _TreePicker.maxTreeHeight,
689
+ defaultHeight: inline ? height : menuMaxHeight,
693
690
  style: {
694
691
  width: 'auto',
695
692
  height: 'auto'
@@ -718,13 +715,10 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
718
715
  left: left,
719
716
  top: top
720
717
  });
721
- var styles = virtualized ? (0, _extends2.default)({
722
- height: height
723
- }, mergedMenuStyle) : (0, _extends2.default)({}, mergedMenuStyle);
724
718
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
725
719
  autoWidth: menuAutoWidth,
726
720
  className: classes,
727
- style: styles,
721
+ style: mergedMenuStyle,
728
722
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
729
723
  onKeyDown: onPickerKeydown,
730
724
  target: triggerRef
@@ -735,15 +729,17 @@ var CheckTreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
735
729
  inputRef: searchInputRef
736
730
  }) : null, renderMenu ? renderMenu(renderCheckTree()) : renderCheckTree(), renderExtraFooter === null || renderExtraFooter === void 0 ? void 0 : renderExtraFooter());
737
731
  };
732
+
733
+ var selectedItems = (0, _react.useMemo)(function () {
734
+ return (0, _utils2.getSelectedItems)(flattenNodes, value);
735
+ }, [flattenNodes, value]);
738
736
  /**
739
737
  * 1.Have a value and the value is valid.
740
738
  * 2.Regardless of whether the value is valid, as long as renderValue is set, it is judged to have a value.
741
739
  */
742
740
 
743
-
744
- var hasValidValue = hasValue() || value.length > 0 && (0, _isFunction2.default)(renderValue);
741
+ var hasValidValue = selectedItems.length > 0 || value.length > 0 && (0, _isFunction2.default)(renderValue);
745
742
  var selectedElement = placeholder;
746
- var selectedItems = (0, _utils2.getSelectedItems)(flattenNodes, value, valueKey);
747
743
 
748
744
  if (hasValidValue) {
749
745
  selectedElement = /*#__PURE__*/_react.default.createElement(_Picker.SelectedElement, {
@@ -1,5 +1,5 @@
1
1
  /// <reference types="react" />
2
- import { CheckTreePickerProps } from './CheckTreePicker';
2
+ import { CheckTreePickerProps, ValueType } from './CheckTreePicker';
3
3
  import { CheckStateType } from '../utils';
4
4
  export interface TreeNodeType {
5
5
  uncheckable?: boolean;
@@ -40,5 +40,5 @@ export declare function isNodeUncheckable(node: any, props: Required<Pick<CheckT
40
40
  export declare function getFormattedTree(data: any[], nodes: TreeNodesType, props: Required<Pick<CheckTreePickerProps, 'childrenKey' | 'cascade'>>): any[];
41
41
  export declare function getDisabledState(nodes: TreeNodesType, node: TreeNodeType, props: Required<Pick<CheckTreePickerProps, 'disabledItemValues' | 'valueKey'>>): boolean;
42
42
  export declare function getCheckTreePickerDefaultValue(value: any[], uncheckableItemValues: any[]): any[];
43
- export declare function getSelectedItems(nodes: TreeNodesType, value: (string | number)[], valueKey: string): TreeNodeType[];
43
+ export declare function getSelectedItems(nodes: TreeNodesType, values: ValueType): TreeNodeType[];
44
44
  export declare function getNodeCheckState({ nodes, node, cascade, childrenKey }: any): CheckStateType;
@@ -126,7 +126,7 @@ function isNodeUncheckable(node, props) {
126
126
  uncheckableItemValues = _props$uncheckableIte === void 0 ? [] : _props$uncheckableIte,
127
127
  valueKey = props.valueKey;
128
128
  return uncheckableItemValues.some(function (value) {
129
- return (0, _utils.shallowEqual)(node[valueKey], value);
129
+ return node[valueKey] === value;
130
130
  });
131
131
  }
132
132
 
@@ -171,7 +171,7 @@ function getDisabledState(nodes, node, props) {
171
171
  }
172
172
 
173
173
  return disabledItemValues.some(function (value) {
174
- return node.refKey && (0, _utils.shallowEqual)(nodes[node.refKey][valueKey], value);
174
+ return node.refKey && nodes[node.refKey][valueKey] === value;
175
175
  });
176
176
  }
177
177
 
@@ -185,18 +185,17 @@ function getCheckTreePickerDefaultValue(value, uncheckableItemValues) {
185
185
  return [];
186
186
  }
187
187
 
188
- function getSelectedItems(nodes, value, valueKey) {
189
- var checkItems = [];
190
- Object.keys(nodes).map(function (refKey) {
188
+ function getSelectedItems(nodes, values) {
189
+ var checkedItems = [];
190
+ values.forEach(function (value) {
191
+ var refKey = (0, _treeUtils.getNodeFormattedRefKey)(value);
191
192
  var node = nodes[refKey];
192
193
 
193
- if (value.some(function (value) {
194
- return (0, _utils.shallowEqual)(node[valueKey], value);
195
- })) {
196
- checkItems.push(node);
194
+ if (!(0, _isNil2.default)(node)) {
195
+ checkedItems.push(node);
197
196
  }
198
197
  });
199
- return checkItems;
198
+ return checkedItems;
200
199
  }
201
200
 
202
201
  function getNodeCheckState(_ref) {
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import * as helpers from 'dom-lib';
2
3
  export * from 'dom-lib';
3
4
  declare const DOMHelper: {
@@ -10,8 +11,8 @@ declare const DOMHelper: {
10
11
  removeClass: (target: Element, className: string) => Element;
11
12
  hasClass: (target: Element, className: string) => boolean;
12
13
  toggleClass: (target: Element, className: string) => Element;
13
- cancelAnimationFramePolyfill: typeof clearTimeout;
14
- requestAnimationFramePolyfill: typeof requestAnimationFrame;
14
+ cancelAnimationFramePolyfill: typeof cancelAnimationFrame | typeof clearTimeout;
15
+ requestAnimationFramePolyfill: typeof requestAnimationFrame | ((callback: (t: number) => void) => NodeJS.Timeout);
15
16
  getAnimationEnd: typeof helpers.getAnimationEnd;
16
17
  ownerDocument: (node: Element | null) => Document;
17
18
  ownerWindow: (componentOrElement: Element) => Window;
@@ -45,6 +45,11 @@ var PredefinedRanges = /*#__PURE__*/_react.default.forwardRef(function (props, r
45
45
  return item.label === key;
46
46
  });
47
47
  }, [calendarDate]);
48
+
49
+ if (ranges.length === 0) {
50
+ return null;
51
+ }
52
+
48
53
  return /*#__PURE__*/_react.default.createElement(_Stack.default, (0, _extends2.default)({
49
54
  className: className,
50
55
  ref: ref,
@@ -601,6 +601,12 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
601
601
  onToggleMeridian: handleToggleMeridian,
602
602
  renderTitle: renderTitle
603
603
  };
604
+ var sideRanges = (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
605
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
606
+ })) || [];
607
+ var bottomRanges = ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
608
+ return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
609
+ });
604
610
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
605
611
  role: "dialog",
606
612
  className: classes,
@@ -611,13 +617,11 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
611
617
  className: panelClasses
612
618
  }, /*#__PURE__*/_react.default.createElement(_Stack.default, {
613
619
  alignItems: "flex-start"
614
- }, /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
620
+ }, sideRanges.length > 0 && /*#__PURE__*/_react.default.createElement(_PredefinedRanges.default, {
615
621
  direction: "column",
616
622
  spacing: 0,
617
623
  className: prefix('daterange-predefined'),
618
- ranges: (ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
619
- return (range === null || range === void 0 ? void 0 : range.placement) === 'left';
620
- })) || [],
624
+ ranges: sideRanges,
621
625
  calendarDate: calendarDate,
622
626
  locale: locale,
623
627
  disabledShortcut: disabledShortcutButton,
@@ -640,9 +644,7 @@ var DateRangePicker = /*#__PURE__*/_react.default.forwardRef(function (props, re
640
644
  hideOkBtn: oneTap,
641
645
  onOk: handleOK,
642
646
  onClickShortcut: handleShortcutPageDate,
643
- ranges: ranges === null || ranges === void 0 ? void 0 : ranges.filter(function (range) {
644
- return (range === null || range === void 0 ? void 0 : range.placement) === 'bottom' || (range === null || range === void 0 ? void 0 : range.placement) === undefined;
645
- })
647
+ ranges: bottomRanges
646
648
  })))));
647
649
  };
648
650
 
@@ -127,6 +127,7 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
127
127
  columnData = _useColumnData.columnData,
128
128
  setColumnData = _useColumnData.setColumnData,
129
129
  addColumn = _useColumnData.addColumn,
130
+ romoveColumnByIndex = _useColumnData.romoveColumnByIndex,
130
131
  enforceUpdateColumnData = _useColumnData.enforceUpdateColumnData;
131
132
 
132
133
  (0, _utils3.useUpdateEffect)(function () {
@@ -210,7 +211,8 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
210
211
  var _node$childrenKey, _node$childrenKey2, _triggerRef$current, _triggerRef$current$u;
211
212
 
212
213
  setSelectedPaths(cascadePaths);
213
- onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event); // Lazy load node's children
214
+ onSelect === null || onSelect === void 0 ? void 0 : onSelect(node, cascadePaths, event);
215
+ var columnIndex = cascadePaths.length; // Lazy load node's children
214
216
 
215
217
  if (typeof getChildren === 'function' && ((_node$childrenKey = node[childrenKey]) === null || _node$childrenKey === void 0 ? void 0 : _node$childrenKey.length) === 0) {
216
218
  node.loading = true;
@@ -223,21 +225,24 @@ var MultiCascader = /*#__PURE__*/_react.default.forwardRef(function (props, ref)
223
225
 
224
226
  if (targetRef.current) {
225
227
  addFlattenData(data, node);
226
- addColumn(data, cascadePaths.length);
228
+ addColumn(data, columnIndex);
227
229
  }
228
230
  });
229
231
  } else {
230
232
  node.loading = false;
231
233
  node[childrenKey] = children;
232
234
  addFlattenData(children, node);
233
- addColumn(children, cascadePaths.length);
235
+ addColumn(children, columnIndex);
234
236
  }
235
237
  } else if ((_node$childrenKey2 = node[childrenKey]) !== null && _node$childrenKey2 !== void 0 && _node$childrenKey2.length) {
236
- addColumn(node[childrenKey], cascadePaths.length);
238
+ addColumn(node[childrenKey], columnIndex);
239
+ } else {
240
+ // Removes subsequent columns of the current column when the clicked node is a leaf node.
241
+ romoveColumnByIndex(columnIndex);
237
242
  }
238
243
 
239
244
  (_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);
240
- }, [onSelect, getChildren, childrenKey, addColumn, addFlattenData]);
245
+ }, [onSelect, getChildren, childrenKey, addFlattenData, addColumn, romoveColumnByIndex]);
241
246
  var handleCheck = (0, _react.useCallback)(function (node, event, checked) {
242
247
  var nodeValue = node[valueKey];
243
248
  var nextValue = [];
@@ -48,6 +48,7 @@ export declare function useFlattenData(data: ItemDataType[], itemKeys: ItemKeys)
48
48
  export declare function useColumnData(flattenData: ItemType[]): {
49
49
  columnData: ItemDataType<string | number>[][];
50
50
  addColumn: (column: ItemDataType[], index: number) => void;
51
+ romoveColumnByIndex: (index: number) => void;
51
52
  setColumnData: import("react").Dispatch<import("react").SetStateAction<ItemDataType<string | number>[][]>>;
52
53
  enforceUpdateColumnData: (nextData: ItemDataType[]) => void;
53
54
  };
@@ -234,6 +234,15 @@ function useColumnData(flattenData) {
234
234
  function addColumn(column, index) {
235
235
  setColumnData([].concat((0, _slice.default)(columnData, 0, index), [column]));
236
236
  }
237
+ /**
238
+ * Remove subsequent columns of the specified column
239
+ * @param index
240
+ */
241
+
242
+
243
+ function romoveColumnByIndex(index) {
244
+ setColumnData([].concat((0, _slice.default)(columnData, 0, index)));
245
+ }
237
246
 
238
247
  function enforceUpdateColumnData(nextData) {
239
248
  var nextFlattenData = (0, _treeUtils.flattenTree)(nextData);
@@ -245,6 +254,7 @@ function useColumnData(flattenData) {
245
254
  return {
246
255
  columnData: columnData,
247
256
  addColumn: addColumn,
257
+ romoveColumnByIndex: romoveColumnByIndex,
248
258
  setColumnData: setColumnData,
249
259
  enforceUpdateColumnData: enforceUpdateColumnData
250
260
  };
@@ -3,7 +3,6 @@ import { PickerLocale } from '../locales';
3
3
  import { PickerComponent, PickerToggleProps } from '../Picker';
4
4
  import { TreeDragProps, TreeBaseProps } from '../Tree/Tree';
5
5
  import { FormControlPickerProps, ItemDataType } from '../@types/common';
6
- export declare const maxTreeHeight = 320;
7
6
  export interface TreePickerProps<T = number | string> extends TreeBaseProps<T, ItemDataType>, TreeDragProps, FormControlPickerProps<T, PickerLocale, ItemDataType>, Pick<PickerToggleProps, 'caretAs'> {
8
7
  /** The height of Dropdown */
9
8
  height?: number;
@@ -5,7 +5,7 @@ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWild
5
5
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
6
 
7
7
  exports.__esModule = true;
8
- exports.default = exports.maxTreeHeight = void 0;
8
+ exports.default = void 0;
9
9
 
10
10
  var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
11
11
 
@@ -37,9 +37,6 @@ var _Picker = require("../Picker");
37
37
 
38
38
  var _TreeContext = _interopRequireDefault(require("../Tree/TreeContext"));
39
39
 
40
- // default value for virtualized
41
- var maxTreeHeight = 320;
42
- exports.maxTreeHeight = maxTreeHeight;
43
40
  var emptyArray = [];
44
41
 
45
42
  var TreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
@@ -55,13 +52,15 @@ var TreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
55
52
  overrideLocale = props.locale,
56
53
  _props$height = props.height,
57
54
  height = _props$height === void 0 ? 360 : _props$height,
55
+ _props$menuMaxHeight = props.menuMaxHeight,
56
+ menuMaxHeight = _props$menuMaxHeight === void 0 ? 320 : _props$menuMaxHeight,
57
+ menuStyle = props.menuStyle,
58
58
  className = props.className,
59
59
  disabled = props.disabled,
60
60
  _props$placement = props.placement,
61
61
  placement = _props$placement === void 0 ? 'bottomStart' : _props$placement,
62
62
  _props$cleanable = props.cleanable,
63
63
  cleanable = _props$cleanable === void 0 ? true : _props$cleanable,
64
- menuStyle = props.menuStyle,
65
64
  _props$searchable = props.searchable,
66
65
  searchable = _props$searchable === void 0 ? true : _props$searchable,
67
66
  _props$virtualized = props.virtualized,
@@ -114,7 +113,7 @@ var TreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
114
113
  renderExtraFooter = props.renderExtraFooter,
115
114
  renderMenu = props.renderMenu,
116
115
  renderValue = props.renderValue,
117
- rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "data", "appearance", "style", "showIndentLine", "value", "locale", "height", "className", "disabled", "placement", "cleanable", "menuStyle", "searchable", "virtualized", "classPrefix", "defaultValue", "placeholder", "searchKeyword", "menuClassName", "menuAutoWidth", "searchBy", "toggleAs", "labelKey", "valueKey", "childrenKey", "draggable", "defaultExpandAll", "disabledItemValues", "expandItemValues", "defaultExpandItemValues", "id", "listProps", "getChildren", "renderTreeIcon", "renderTreeNode", "onExit", "onExited", "onClean", "onOpen", "onSearch", "onSelect", "onChange", "onEntered", "onClose", "onDragEnd", "onDragStart", "onDragEnter", "onDragLeave", "onDragOver", "onDrop", "onExpand", "renderExtraFooter", "renderMenu", "renderValue"]);
116
+ rest = (0, _objectWithoutPropertiesLoose2.default)(props, ["as", "data", "appearance", "style", "showIndentLine", "value", "locale", "height", "menuMaxHeight", "menuStyle", "className", "disabled", "placement", "cleanable", "searchable", "virtualized", "classPrefix", "defaultValue", "placeholder", "searchKeyword", "menuClassName", "menuAutoWidth", "searchBy", "toggleAs", "labelKey", "valueKey", "childrenKey", "draggable", "defaultExpandAll", "disabledItemValues", "expandItemValues", "defaultExpandItemValues", "id", "listProps", "getChildren", "renderTreeIcon", "renderTreeNode", "onExit", "onExited", "onClean", "onOpen", "onSearch", "onSelect", "onChange", "onEntered", "onClose", "onDragEnd", "onDragStart", "onDragEnter", "onDragLeave", "onDragOver", "onDrop", "onExpand", "renderExtraFooter", "renderMenu", "renderValue"]);
118
117
  var triggerRef = (0, _react.useRef)(null);
119
118
  var targetRef = (0, _react.useRef)(null);
120
119
  var listRef = (0, _react.useRef)(null);
@@ -502,13 +501,16 @@ var TreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
502
501
  var nullValue = null;
503
502
  var target = event.target; // exclude searchBar
504
503
 
505
- if (target.matches('div[role="searchbox"] > input')) {
504
+ if (target.matches('div[role="searchbox"] > input') || disabled || !cleanable) {
506
505
  return;
507
506
  }
508
507
 
509
- setValue(null);
508
+ if (!isControlled) {
509
+ setValue(null);
510
+ }
511
+
510
512
  onChange === null || onChange === void 0 ? void 0 : onChange(nullValue, event);
511
- }, [onChange, setValue]);
513
+ }, [cleanable, disabled, onChange, setValue, isControlled]);
512
514
  var onPickerKeydown = (0, _Picker.useToggleKeyDownEvent)((0, _extends2.default)({
513
515
  toggle: !activeNode || !active,
514
516
  triggerRef: triggerRef,
@@ -644,7 +646,7 @@ var TreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
644
646
  }, /*#__PURE__*/_react.default.createElement("div", {
645
647
  className: treePrefix('nodes')
646
648
  }, virtualized ? /*#__PURE__*/_react.default.createElement(_VirtualizedList.AutoSizer, {
647
- defaultHeight: inline ? height : maxTreeHeight,
649
+ defaultHeight: inline ? height : menuMaxHeight,
648
650
  style: {
649
651
  width: 'auto',
650
652
  height: 'auto'
@@ -673,13 +675,10 @@ var TreePicker = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
673
675
  left: left,
674
676
  top: top
675
677
  });
676
- var styles = virtualized ? (0, _extends2.default)({
677
- height: height
678
- }, mergedMenuStyle) : (0, _extends2.default)({}, mergedMenuStyle);
679
678
  return /*#__PURE__*/_react.default.createElement(_Picker.PickerOverlay, {
680
679
  autoWidth: menuAutoWidth,
681
680
  className: classes,
682
- style: styles,
681
+ style: mergedMenuStyle,
683
682
  ref: (0, _utils.mergeRefs)(overlayRef, speakerRef),
684
683
  onKeyDown: onPickerKeydown,
685
684
  target: triggerRef