rsuite 5.31.1 → 5.33.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.
- package/CHANGELOG.md +17 -0
- package/cjs/Calendar/CalendarContainer.d.ts +2 -0
- package/cjs/Calendar/CalendarContainer.js +4 -1
- package/cjs/Calendar/MonthDropdown.js +1 -1
- package/cjs/Cascader/Cascader.d.ts +2 -2
- package/cjs/Cascader/Cascader.js +83 -71
- package/cjs/Cascader/DropdownMenu.d.ts +6 -2
- package/cjs/Cascader/DropdownMenu.js +8 -4
- package/cjs/Cascader/utils.d.ts +43 -17
- package/cjs/Cascader/utils.js +60 -145
- package/cjs/CheckTreePicker/CheckTreePicker.js +16 -3
- package/cjs/DatePicker/DatePicker.d.ts +3 -1
- package/cjs/DatePicker/DatePicker.js +4 -1
- package/cjs/DateRangePicker/Calendar.d.ts +1 -0
- package/cjs/DateRangePicker/Calendar.js +4 -1
- package/cjs/DateRangePicker/DateRangePicker.d.ts +3 -1
- package/cjs/DateRangePicker/DateRangePicker.js +4 -1
- package/cjs/MultiCascader/DropdownMenu.d.ts +2 -2
- package/cjs/MultiCascader/MultiCascader.d.ts +1 -1
- package/cjs/MultiCascader/MultiCascader.js +12 -7
- package/cjs/MultiCascader/utils.d.ts +2 -2
- package/cjs/MultiCascader/utils.js +3 -3
- package/cjs/Picker/utils.d.ts +4 -3
- package/cjs/Picker/utils.js +8 -4
- package/cjs/Tree/Tree.d.ts +2 -0
- package/cjs/TreePicker/TreePicker.js +16 -3
- package/cjs/utils/getDataGroupBy.js +1 -1
- package/cjs/utils/treeUtils.d.ts +23 -1
- package/cjs/utils/treeUtils.js +109 -6
- package/cjs/utils/useMap.d.ts +6 -0
- package/cjs/utils/useMap.js +35 -0
- package/dist/rsuite.js +189 -17
- package/dist/rsuite.js.map +1 -1
- package/dist/rsuite.min.js +1 -1
- package/dist/rsuite.min.js.map +1 -1
- package/esm/Calendar/CalendarContainer.d.ts +2 -0
- package/esm/Calendar/CalendarContainer.js +4 -1
- package/esm/Calendar/MonthDropdown.js +1 -1
- package/esm/Cascader/Cascader.d.ts +2 -2
- package/esm/Cascader/Cascader.js +84 -74
- package/esm/Cascader/DropdownMenu.d.ts +6 -2
- package/esm/Cascader/DropdownMenu.js +8 -4
- package/esm/Cascader/utils.d.ts +43 -17
- package/esm/Cascader/utils.js +64 -142
- package/esm/CheckTreePicker/CheckTreePicker.js +17 -4
- package/esm/DatePicker/DatePicker.d.ts +3 -1
- package/esm/DatePicker/DatePicker.js +4 -1
- package/esm/DateRangePicker/Calendar.d.ts +1 -0
- package/esm/DateRangePicker/Calendar.js +4 -1
- package/esm/DateRangePicker/DateRangePicker.d.ts +3 -1
- package/esm/DateRangePicker/DateRangePicker.js +4 -1
- package/esm/MultiCascader/DropdownMenu.d.ts +2 -2
- package/esm/MultiCascader/MultiCascader.d.ts +1 -1
- package/esm/MultiCascader/MultiCascader.js +12 -7
- package/esm/MultiCascader/utils.d.ts +2 -2
- package/esm/MultiCascader/utils.js +4 -4
- package/esm/Picker/utils.d.ts +4 -3
- package/esm/Picker/utils.js +8 -4
- package/esm/Tree/Tree.d.ts +2 -0
- package/esm/TreePicker/TreePicker.js +18 -5
- package/esm/utils/getDataGroupBy.js +2 -2
- package/esm/utils/treeUtils.d.ts +23 -1
- package/esm/utils/treeUtils.js +103 -6
- package/esm/utils/useMap.d.ts +6 -0
- package/esm/utils/useMap.js +29 -0
- package/package.json +2 -1
|
@@ -5,11 +5,11 @@ import _isNil from "lodash/isNil";
|
|
|
5
5
|
import _isUndefined from "lodash/isUndefined";
|
|
6
6
|
import _omit from "lodash/omit";
|
|
7
7
|
import _pick from "lodash/pick";
|
|
8
|
-
import React, { useState, useRef, useEffect, useCallback, useContext } from 'react';
|
|
8
|
+
import React, { useState, useRef, useEffect, useCallback, useContext, useMemo } from 'react';
|
|
9
9
|
import PropTypes from 'prop-types';
|
|
10
10
|
import { List, AutoSizer } from '../Windowing';
|
|
11
11
|
import TreeNode from './TreeNode';
|
|
12
|
-
import { createDragPreview, getTreeNodeIndent, removeDragPreview, stringifyTreeNodeLabel } from '../utils/treeUtils';
|
|
12
|
+
import { createDragPreview, getKeyParentMap, getPathTowardsItem, getTreeNodeIndent, removeDragPreview, stringifyTreeNodeLabel } from '../utils/treeUtils';
|
|
13
13
|
import { createChainedFunction, useClassNames, useCustom, useControlled, TREE_NODE_DROP_POSITION, KEY_VALUES, mergeRefs, shallowEqual } from '../utils';
|
|
14
14
|
import { getExpandWhenSearching, hasVisibleChildren, getDragNodeKeys, calDropNodePosition, createUpdateTreeDataFunction, useTreeDrag, useFlattenTreeData, getTreeActiveNode, getDefaultExpandItemValues, useTreeNodeRefs, useTreeSearch, focusPreviousItem, getFocusableItems, focusNextItem, getActiveItem, toggleExpand, useGetTreeNodeChildren, focusToActiveTreeNode, leftArrowHandler, focusTreeNode, rightArrowHandler, isSearching } from '../utils/treeUtils';
|
|
15
15
|
import { PickerToggle, PickerOverlay, SearchBar, PickerToggleTrigger, createConcatChildrenFunction, usePickerClassName, onMenuKeyDown as _onMenuKeyDown, usePublicMethods, listPickerPropTypes, pickTriggerPropKeys, omitTriggerPropKeys, useToggleKeyDownEvent } from '../Picker';
|
|
@@ -81,6 +81,7 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
81
81
|
onOpen = props.onOpen,
|
|
82
82
|
onSearch = props.onSearch,
|
|
83
83
|
onSelect = props.onSelect,
|
|
84
|
+
onSelectItem = props.onSelectItem,
|
|
84
85
|
onChange = props.onChange,
|
|
85
86
|
onEntered = props.onEntered,
|
|
86
87
|
onClose = props.onClose,
|
|
@@ -94,7 +95,7 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
94
95
|
renderExtraFooter = props.renderExtraFooter,
|
|
95
96
|
renderMenu = props.renderMenu,
|
|
96
97
|
renderValue = props.renderValue,
|
|
97
|
-
rest = _objectWithoutPropertiesLoose(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"]);
|
|
98
|
+
rest = _objectWithoutPropertiesLoose(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", "onSelectItem", "onChange", "onEntered", "onClose", "onDragEnd", "onDragStart", "onDragEnter", "onDragLeave", "onDragOver", "onDrop", "onExpand", "renderExtraFooter", "renderMenu", "renderValue"]);
|
|
98
99
|
|
|
99
100
|
var triggerRef = useRef(null);
|
|
100
101
|
var targetRef = useRef(null);
|
|
@@ -291,8 +292,17 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
291
292
|
onRenderTreeNode: renderTreeNode,
|
|
292
293
|
onRenderTreeIcon: renderTreeIcon
|
|
293
294
|
};
|
|
294
|
-
};
|
|
295
|
+
}; // TODO-Doma
|
|
296
|
+
// Replace `getKeyParentMap` with `getParentMap`
|
|
297
|
+
|
|
295
298
|
|
|
299
|
+
var itemParentMap = useMemo(function () {
|
|
300
|
+
return getKeyParentMap(data, function (node) {
|
|
301
|
+
return node[valueKey];
|
|
302
|
+
}, function (node) {
|
|
303
|
+
return node[childrenKey];
|
|
304
|
+
});
|
|
305
|
+
}, [childrenKey, data, valueKey]);
|
|
296
306
|
var handleSelect = useCallback(function (nodeData, event) {
|
|
297
307
|
var _targetRef$current, _triggerRef$current, _triggerRef$current$c;
|
|
298
308
|
|
|
@@ -309,9 +319,12 @@ var TreePicker = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
|
309
319
|
setFocusItemValue(nodeData[valueKey]);
|
|
310
320
|
onChange === null || onChange === void 0 ? void 0 : onChange(nodeValue, event);
|
|
311
321
|
onSelect === null || onSelect === void 0 ? void 0 : onSelect(nodeData, nodeValue, event);
|
|
322
|
+
onSelectItem === null || onSelectItem === void 0 ? void 0 : onSelectItem(nodeData, getPathTowardsItem(nodeData, function (item) {
|
|
323
|
+
return itemParentMap.get(item[valueKey]);
|
|
324
|
+
}));
|
|
312
325
|
(_targetRef$current = targetRef.current) === null || _targetRef$current === void 0 ? void 0 : _targetRef$current.focus();
|
|
313
326
|
(_triggerRef$current = triggerRef.current) === null || _triggerRef$current === void 0 ? void 0 : (_triggerRef$current$c = _triggerRef$current.close) === null || _triggerRef$current$c === void 0 ? void 0 : _triggerRef$current$c.call(_triggerRef$current);
|
|
314
|
-
}, [valueKey, isControlled, onChange, onSelect, setValue]);
|
|
327
|
+
}, [valueKey, isControlled, onChange, onSelect, onSelectItem, setValue, itemParentMap]);
|
|
315
328
|
var handleExpand = useCallback(function (node) {
|
|
316
329
|
var nextExpandItemValues = toggleExpand({
|
|
317
330
|
node: node,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import _get from "lodash/get";
|
|
2
|
-
import {
|
|
2
|
+
import { UNSAFE_flattenTree } from '../utils/treeUtils';
|
|
3
3
|
var hasSymbol = typeof Symbol === 'function';
|
|
4
4
|
export var KEY_GROUP = hasSymbol ? Symbol('_$grouped') : '_$grouped';
|
|
5
5
|
export var KEY_GROUP_TITLE = 'groupTitle';
|
|
@@ -37,5 +37,5 @@ export default function getDataGroupBy(data, key, sort) {
|
|
|
37
37
|
nextData = nextData.sort(sort(true));
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
return
|
|
40
|
+
return UNSAFE_flattenTree(nextData);
|
|
41
41
|
}
|
package/esm/utils/treeUtils.d.ts
CHANGED
|
@@ -16,8 +16,12 @@ export declare function shouldShowNodeByParentExpanded<T>(expandItemValues?: T[]
|
|
|
16
16
|
* @param {*} tree
|
|
17
17
|
* @param {*} childrenKey
|
|
18
18
|
* @param {*} executor
|
|
19
|
+
*
|
|
20
|
+
* @deprecated This {@link UNSAFE_flattenTree} function is considered unsafe because it mutates `tree` argument in-place
|
|
21
|
+
* Use {@link flattenTree} instead.
|
|
19
22
|
*/
|
|
20
|
-
export declare function
|
|
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[];
|
|
21
25
|
/**
|
|
22
26
|
* get all ancestor nodes of given node
|
|
23
27
|
* @param {*} node
|
|
@@ -274,3 +278,21 @@ export declare function createDragPreview(name: string, className: string): HTML
|
|
|
274
278
|
*/
|
|
275
279
|
export declare function removeDragPreview(): void;
|
|
276
280
|
export declare function stringifyTreeNodeLabel(label: string | React.ReactNode): string;
|
|
281
|
+
/**
|
|
282
|
+
* Returns a WeakMap that maps each item in `items` to its parent
|
|
283
|
+
* indicated by `getChildren` function
|
|
284
|
+
*/
|
|
285
|
+
export declare function getParentMap<T extends Record<string, unknown>>(items: readonly T[], getChildren: (item: T) => readonly T[] | undefined): WeakMap<T, T>;
|
|
286
|
+
/**
|
|
287
|
+
* Returns a Map that maps each item's "key", indicated by `getKey` function,
|
|
288
|
+
* to its parent indicated by `getChildren` function
|
|
289
|
+
*
|
|
290
|
+
* NOTICE:
|
|
291
|
+
* Using this function is discouraged.
|
|
292
|
+
* Use {@link getParentMap} whenever possible.
|
|
293
|
+
*/
|
|
294
|
+
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
|
+
/**
|
|
296
|
+
* Returns an array indicating the hirearchy path from root towards `target` item
|
|
297
|
+
*/
|
|
298
|
+
export declare function getPathTowardsItem<T>(target: T | undefined, getParent: (item: T) => T | undefined): T[];
|
package/esm/utils/treeUtils.js
CHANGED
|
@@ -6,6 +6,13 @@ import _isArray from "lodash/isArray";
|
|
|
6
6
|
import _omit from "lodash/omit";
|
|
7
7
|
import _isUndefined from "lodash/isUndefined";
|
|
8
8
|
import _intersection from "lodash/intersection";
|
|
9
|
+
|
|
10
|
+
function _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
+
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
|
|
14
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
15
|
+
|
|
9
16
|
import React, { useRef, useState, useEffect, useCallback } from 'react';
|
|
10
17
|
import shallowEqualArray from '../utils/shallowEqualArray';
|
|
11
18
|
import { getNodeCheckState } from '../CheckTreePicker/utils';
|
|
@@ -44,9 +51,12 @@ export function shouldShowNodeByParentExpanded(expandItemValues, parentKeys) {
|
|
|
44
51
|
* @param {*} tree
|
|
45
52
|
* @param {*} childrenKey
|
|
46
53
|
* @param {*} executor
|
|
54
|
+
*
|
|
55
|
+
* @deprecated This {@link UNSAFE_flattenTree} function is considered unsafe because it mutates `tree` argument in-place
|
|
56
|
+
* Use {@link flattenTree} instead.
|
|
47
57
|
*/
|
|
48
58
|
|
|
49
|
-
export function
|
|
59
|
+
export function UNSAFE_flattenTree(tree, childrenKey, executor) {
|
|
50
60
|
if (childrenKey === void 0) {
|
|
51
61
|
childrenKey = 'children';
|
|
52
62
|
}
|
|
@@ -71,11 +81,32 @@ export function flattenTree(tree, childrenKey, executor) {
|
|
|
71
81
|
traverse(tree, null);
|
|
72
82
|
return flattenData;
|
|
73
83
|
}
|
|
84
|
+
export function flattenTree(rootNodes, getChildren) {
|
|
85
|
+
var result = [];
|
|
86
|
+
walkTree(rootNodes, getChildren, function (node) {
|
|
87
|
+
return result.push(node);
|
|
88
|
+
});
|
|
89
|
+
return result;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function walkTree(rootNodes, getChildren, callback) {
|
|
93
|
+
for (var queue = [].concat(rootNodes); queue.length > 0;) {
|
|
94
|
+
var _node = queue.shift();
|
|
95
|
+
|
|
96
|
+
callback(_node);
|
|
97
|
+
var children = getChildren(_node);
|
|
98
|
+
|
|
99
|
+
if (children) {
|
|
100
|
+
queue.push.apply(queue, children);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
74
104
|
/**
|
|
75
105
|
* get all ancestor nodes of given node
|
|
76
106
|
* @param {*} node
|
|
77
107
|
*/
|
|
78
108
|
|
|
109
|
+
|
|
79
110
|
export function getNodeParents(node, parentKey, valueKey) {
|
|
80
111
|
if (parentKey === void 0) {
|
|
81
112
|
parentKey = 'parent';
|
|
@@ -148,7 +179,7 @@ export function getDefaultExpandItemValues(data, props) {
|
|
|
148
179
|
defaultExpandItemValues = _props$defaultExpandI === void 0 ? [] : _props$defaultExpandI;
|
|
149
180
|
|
|
150
181
|
if (defaultExpandAll) {
|
|
151
|
-
return
|
|
182
|
+
return UNSAFE_flattenTree(data, childrenKey).filter(function (item) {
|
|
152
183
|
return Array.isArray(item[childrenKey]) && item[childrenKey].length > 0;
|
|
153
184
|
}).map(function (item) {
|
|
154
185
|
return item[valueKey];
|
|
@@ -311,10 +342,10 @@ export function findNodeOfTree(data, check) {
|
|
|
311
342
|
var _item3 = nodes[i];
|
|
312
343
|
|
|
313
344
|
if (_isArray(_item3.children)) {
|
|
314
|
-
var
|
|
345
|
+
var _node2 = findNode(_item3.children);
|
|
315
346
|
|
|
316
|
-
if (
|
|
317
|
-
return
|
|
347
|
+
if (_node2) {
|
|
348
|
+
return _node2;
|
|
318
349
|
}
|
|
319
350
|
}
|
|
320
351
|
|
|
@@ -780,7 +811,7 @@ export function useFlattenTreeData(_ref8) {
|
|
|
780
811
|
var formatVirtualizedTreeData = function formatVirtualizedTreeData(nodes, data, expandItemValues, options) {
|
|
781
812
|
var cascade = options.cascade,
|
|
782
813
|
searchKeyword = options.searchKeyword;
|
|
783
|
-
return
|
|
814
|
+
return UNSAFE_flattenTree(data, childrenKey, function (node) {
|
|
784
815
|
var formatted = {};
|
|
785
816
|
var curNode = nodes === null || nodes === void 0 ? void 0 : nodes[node.refKey];
|
|
786
817
|
var parentKeys = getNodeParentKeys(nodes, curNode, valueKey);
|
|
@@ -1067,4 +1098,70 @@ export function stringifyTreeNodeLabel(label) {
|
|
|
1067
1098
|
}
|
|
1068
1099
|
|
|
1069
1100
|
return '';
|
|
1101
|
+
}
|
|
1102
|
+
/**
|
|
1103
|
+
* Returns a WeakMap that maps each item in `items` to its parent
|
|
1104
|
+
* indicated by `getChildren` function
|
|
1105
|
+
*/
|
|
1106
|
+
|
|
1107
|
+
export function getParentMap(items, getChildren) {
|
|
1108
|
+
var map = new WeakMap();
|
|
1109
|
+
|
|
1110
|
+
for (var queue = [].concat(items); queue.length > 0;) {
|
|
1111
|
+
var _item5 = queue.shift();
|
|
1112
|
+
|
|
1113
|
+
var children = getChildren(_item5);
|
|
1114
|
+
|
|
1115
|
+
if (children) {
|
|
1116
|
+
for (var _iterator = _createForOfIteratorHelperLoose(children), _step; !(_step = _iterator()).done;) {
|
|
1117
|
+
var child = _step.value;
|
|
1118
|
+
map.set(child, _item5);
|
|
1119
|
+
queue.push(child);
|
|
1120
|
+
}
|
|
1121
|
+
}
|
|
1122
|
+
}
|
|
1123
|
+
|
|
1124
|
+
return map;
|
|
1125
|
+
}
|
|
1126
|
+
/**
|
|
1127
|
+
* Returns a Map that maps each item's "key", indicated by `getKey` function,
|
|
1128
|
+
* to its parent indicated by `getChildren` function
|
|
1129
|
+
*
|
|
1130
|
+
* NOTICE:
|
|
1131
|
+
* Using this function is discouraged.
|
|
1132
|
+
* Use {@link getParentMap} whenever possible.
|
|
1133
|
+
*/
|
|
1134
|
+
|
|
1135
|
+
export function getKeyParentMap(items, getKey, getChildren) {
|
|
1136
|
+
var map = new Map();
|
|
1137
|
+
|
|
1138
|
+
for (var queue = [].concat(items); queue.length > 0;) {
|
|
1139
|
+
var _item6 = queue.shift();
|
|
1140
|
+
|
|
1141
|
+
var children = getChildren(_item6);
|
|
1142
|
+
|
|
1143
|
+
if (children) {
|
|
1144
|
+
for (var _iterator2 = _createForOfIteratorHelperLoose(children), _step2; !(_step2 = _iterator2()).done;) {
|
|
1145
|
+
var child = _step2.value;
|
|
1146
|
+
map.set(getKey(child), _item6);
|
|
1147
|
+
queue.push(child);
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
return map;
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* Returns an array indicating the hirearchy path from root towards `target` item
|
|
1156
|
+
*/
|
|
1157
|
+
|
|
1158
|
+
export function getPathTowardsItem(target, getParent) {
|
|
1159
|
+
if (!target) return [];
|
|
1160
|
+
var path = [target];
|
|
1161
|
+
|
|
1162
|
+
for (var parent = getParent(target); !!parent; parent = getParent(parent)) {
|
|
1163
|
+
path.unshift(parent);
|
|
1164
|
+
}
|
|
1165
|
+
|
|
1166
|
+
return path;
|
|
1070
1167
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { useMemo, useState } from 'react';
|
|
2
|
+
export function useMap() {
|
|
3
|
+
var _useState = useState(function () {
|
|
4
|
+
return new Map();
|
|
5
|
+
}),
|
|
6
|
+
map = _useState[0],
|
|
7
|
+
setMap = _useState[1];
|
|
8
|
+
|
|
9
|
+
return useMemo(function () {
|
|
10
|
+
return {
|
|
11
|
+
has: function has(key) {
|
|
12
|
+
return map.has(key);
|
|
13
|
+
},
|
|
14
|
+
get: function get(key) {
|
|
15
|
+
return map.get(key);
|
|
16
|
+
},
|
|
17
|
+
set: function set(key, value) {
|
|
18
|
+
setMap(function (prev) {
|
|
19
|
+
var copy = new Map(prev);
|
|
20
|
+
copy.set(key, value);
|
|
21
|
+
return copy;
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
clear: function clear() {
|
|
25
|
+
setMap(new Map());
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}, [map]);
|
|
29
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rsuite",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.33.0",
|
|
4
4
|
"description": "A suite of react components",
|
|
5
5
|
"main": "cjs/index.js",
|
|
6
6
|
"module": "esm/index.js",
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"dom-lib": "^3.1.3",
|
|
37
37
|
"lodash": "^4.17.11",
|
|
38
38
|
"prop-types": "^15.8.1",
|
|
39
|
+
"react-use-set": "^1.0.0",
|
|
39
40
|
"react-window": "^1.8.8",
|
|
40
41
|
"rsuite-table": "^5.10.3",
|
|
41
42
|
"schema-typed": "^2.1.2"
|