react-native-tree-multi-select 1.2.0 → 1.2.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.
- package/README.md +12 -3
- package/lib/commonjs/TreeView.js +13 -3
- package/lib/commonjs/TreeView.js.map +1 -1
- package/lib/commonjs/helpers/expandCollapse.helper.js +88 -21
- package/lib/commonjs/helpers/expandCollapse.helper.js.map +1 -1
- package/lib/commonjs/helpers/toggleCheckbox.helper.js +0 -1
- package/lib/commonjs/helpers/toggleCheckbox.helper.js.map +1 -1
- package/lib/commonjs/utils/usePreviousState.js +20 -0
- package/lib/commonjs/utils/usePreviousState.js.map +1 -0
- package/lib/module/TreeView.js +14 -4
- package/lib/module/TreeView.js.map +1 -1
- package/lib/module/helpers/expandCollapse.helper.js +86 -21
- package/lib/module/helpers/expandCollapse.helper.js.map +1 -1
- package/lib/module/helpers/toggleCheckbox.helper.js +0 -1
- package/lib/module/helpers/toggleCheckbox.helper.js.map +1 -1
- package/lib/module/utils/usePreviousState.js +15 -0
- package/lib/module/utils/usePreviousState.js.map +1 -0
- package/lib/typescript/TreeView.d.ts.map +1 -1
- package/lib/typescript/helpers/expandCollapse.helper.d.ts +12 -0
- package/lib/typescript/helpers/expandCollapse.helper.d.ts.map +1 -1
- package/lib/typescript/types/treeView.types.d.ts +3 -0
- package/lib/typescript/types/treeView.types.d.ts.map +1 -1
- package/lib/typescript/utils/usePreviousState.d.ts +7 -0
- package/lib/typescript/utils/usePreviousState.d.ts.map +1 -0
- package/package.json +2 -2
- package/src/TreeView.tsx +25 -4
- package/src/helpers/expandCollapse.helper.ts +82 -21
- package/src/helpers/toggleCheckbox.helper.ts +1 -1
- package/src/types/treeView.types.ts +5 -0
- package/src/utils/usePreviousState.ts +16 -0
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
⚡️Super-fast Tree view with multi-selection capabilities, using checkboxes and search filtering.
|
|
4
4
|
|
|
5
|
-
[](https://badge.fury.io/js/react-native-tree-multi-select) [](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [](https://github.com/JairajJangle/react-native-tree-multi-select/tree/main/example) [](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml)
|
|
5
|
+
[](https://badge.fury.io/js/react-native-tree-multi-select) [](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [](https://github.com/JairajJangle/react-native-tree-multi-select/tree/main/example) [](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue) [](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) 
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
|
|
@@ -68,6 +68,12 @@ export function TreeViewUsageExample(){
|
|
|
68
68
|
// Expand collapse calls using ref
|
|
69
69
|
const expandAllPress = () => treeViewRef.current?.expandAll?.();
|
|
70
70
|
const collapseAllPress = () => treeViewRef.current?.collapseAll?.();
|
|
71
|
+
const expandNodes = (idsToExpand: string[]) => treeViewRef.current?.expandNodes?.(
|
|
72
|
+
idsToExpand
|
|
73
|
+
);
|
|
74
|
+
const collapseNodes = (idsToCollapse: string[]) => treeViewRef.current?.collapseNodes?.(
|
|
75
|
+
idsToCollapse
|
|
76
|
+
);
|
|
71
77
|
|
|
72
78
|
// Multi-selection function calls using ref
|
|
73
79
|
const onSelectAllPress = () => treeViewRef.current?.selectAll?.();
|
|
@@ -94,7 +100,8 @@ export function TreeViewUsageExample(){
|
|
|
94
100
|
| `data` | `TreeNode[]` | Yes | An array of `TreeNode` objects |
|
|
95
101
|
| `onCheck` | `(checkedIds: string[]) => void` | No | Callback when a checkbox is checked |
|
|
96
102
|
| `onExpand` | `(expandedIds: string[]) => void` | No | Callback when a node is expanded |
|
|
97
|
-
| `preselectedIds` | `string[]` | No | An array of `id`s that should be
|
|
103
|
+
| `preselectedIds` | `string[]` | No | An array of `id`s that should be pre-selected |
|
|
104
|
+
| `preExpandedIds` | `string[]` | No | An array of `id`s that should be pre-expanded |
|
|
98
105
|
| `indentationMultiplier` | `number` | No | Indentation (`marginStart`) per level (defaults to 15) |
|
|
99
106
|
| `treeFlashListProps` | `TreeFlatListProps` | No | Props for the flash list |
|
|
100
107
|
| `checkBoxViewStyleProps` | `BuiltInCheckBoxViewStyleProps` | No | Props for the checkbox view |
|
|
@@ -135,7 +142,9 @@ export function TreeViewUsageExample(){
|
|
|
135
142
|
| `selectAllFiltered` | `() => void` | Selects all **filtered** nodes |
|
|
136
143
|
| `unselectAllFiltered` | `() => void` | Unselects all **filtered** nodes |
|
|
137
144
|
| `expandAll` | `() => void` | Expands all nodes |
|
|
145
|
+
| `expandNodes` | `() => void` | Expands specified nodes
|
|
138
146
|
| `collapseAll` | `() => void` | Collapses all nodes |
|
|
147
|
+
| `collapseNodes` | `() => void` | Collapses specified nodes
|
|
139
148
|
| `setSearchText` | `(searchText: string, searchKeys?: string[]) => void` | Set the search text and optionally the search keys. Default search key is "name"<br /><br />Recommended to call this inside a debounced function if you find any performance issue otherwise. |
|
|
140
149
|
|
|
141
150
|
---
|
|
@@ -202,7 +211,7 @@ Type: `boolean` OR ` "indeterminate"`
|
|
|
202
211
|
- [x] Row Item full-customization
|
|
203
212
|
- [ ] Prop to set the maximum checked item limit
|
|
204
213
|
- [ ] Prop to disable certain nodes from getting checked
|
|
205
|
-
- [
|
|
214
|
+
- [x] Ref function to programatically expand/collapse a certain node
|
|
206
215
|
- [ ] Ref function to programatically un/check a certain node
|
|
207
216
|
- [ ] Ref function to auto-scroll to a certain node's position
|
|
208
217
|
|
package/lib/commonjs/TreeView.js
CHANGED
|
@@ -9,6 +9,7 @@ var _reactNative = require("react-native");
|
|
|
9
9
|
var _NodeList = _interopRequireDefault(require("./components/NodeList"));
|
|
10
10
|
var _helpers = require("./helpers");
|
|
11
11
|
var _treeView = require("./store/treeView.store");
|
|
12
|
+
var _usePreviousState = _interopRequireDefault(require("./utils/usePreviousState"));
|
|
12
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
14
|
const _TreeView = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
14
15
|
const {
|
|
@@ -16,6 +17,7 @@ const _TreeView = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
16
17
|
onCheck,
|
|
17
18
|
onExpand,
|
|
18
19
|
preselectedIds = [],
|
|
20
|
+
preExpandedIds = [],
|
|
19
21
|
treeFlashListProps,
|
|
20
22
|
checkBoxViewStyleProps,
|
|
21
23
|
indentationMultiplier,
|
|
@@ -42,8 +44,11 @@ const _TreeView = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
42
44
|
unselectAllFiltered: _helpers.unselectAllFiltered,
|
|
43
45
|
expandAll: _helpers.expandAll,
|
|
44
46
|
collapseAll: _helpers.collapseAll,
|
|
47
|
+
expandNodes: _helpers.expandNodes,
|
|
48
|
+
collapseNodes: _helpers.collapseNodes,
|
|
45
49
|
setSearchText
|
|
46
50
|
}));
|
|
51
|
+
const prevSearchText = (0, _usePreviousState.default)(searchText);
|
|
47
52
|
function setSearchText(text, keys = ["name"]) {
|
|
48
53
|
updateSearchText(text);
|
|
49
54
|
updateSearchKeys(keys);
|
|
@@ -52,8 +57,11 @@ const _TreeView = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
52
57
|
updateInitialTreeViewData(data);
|
|
53
58
|
(0, _helpers.initializeNodeMaps)(data);
|
|
54
59
|
|
|
55
|
-
// Check any
|
|
60
|
+
// Check any pre-selected nodes
|
|
56
61
|
(0, _helpers.toggleCheckboxes)(preselectedIds, true);
|
|
62
|
+
|
|
63
|
+
// Expand pre-expanded nodes
|
|
64
|
+
(0, _helpers.expandNodes)(preExpandedIds);
|
|
57
65
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
58
66
|
}, []);
|
|
59
67
|
const getIds = _react.default.useCallback(node => {
|
|
@@ -74,12 +82,14 @@ const _TreeView = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
|
|
|
74
82
|
_reactNative.InteractionManager.runAfterInteractions(() => {
|
|
75
83
|
updateExpanded(new Set(initialTreeViewData.flatMap(item => getIds(item))));
|
|
76
84
|
});
|
|
77
|
-
} else {
|
|
85
|
+
} else if (prevSearchText && prevSearchText !== "") {
|
|
86
|
+
/* Collapse all nodes only if previous search query was non-empty: this is
|
|
87
|
+
done to prevent node collapse on first render if preExpandedIds is provided */
|
|
78
88
|
_reactNative.InteractionManager.runAfterInteractions(() => {
|
|
79
89
|
updateExpanded(new Set());
|
|
80
90
|
});
|
|
81
91
|
}
|
|
82
|
-
}, [getIds, initialTreeViewData, searchText, updateExpanded]);
|
|
92
|
+
}, [getIds, initialTreeViewData, prevSearchText, searchText, updateExpanded]);
|
|
83
93
|
_react.default.useEffect(() => {
|
|
84
94
|
return () => {
|
|
85
95
|
cleanUpTreeViewStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_NodeList","_helpers","_treeView","obj","__esModule","default","_TreeView","React","forwardRef","props","ref","data","onCheck","onExpand","preselectedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","cleanUpTreeViewStore","useTreeViewStore","useImperativeHandle","selectAll","unselectAll","selectAllFiltered","unselectAllFiltered","expandAll","collapseAll","setSearchText","text","keys","useEffect","initializeNodeMaps","toggleCheckboxes","getIds","useCallback","node","children","length","id","flatMap","item","Array","from","InteractionManager","runAfterInteractions","Set","createElement","TreeView","exports","memo"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAMA,IAAAE,SAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactNative","_NodeList","_helpers","_treeView","_usePreviousState","obj","__esModule","default","_TreeView","React","forwardRef","props","ref","data","onCheck","onExpand","preselectedIds","preExpandedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","cleanUpTreeViewStore","useTreeViewStore","useImperativeHandle","selectAll","unselectAll","selectAllFiltered","unselectAllFiltered","expandAll","collapseAll","expandNodes","collapseNodes","setSearchText","prevSearchText","usePreviousState","text","keys","useEffect","initializeNodeMaps","toggleCheckboxes","getIds","useCallback","node","children","length","id","flatMap","item","Array","from","InteractionManager","runAfterInteractions","Set","createElement","TreeView","exports","memo"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.collapseAll = collapseAll;
|
|
7
|
+
exports.collapseNodes = collapseNodes;
|
|
7
8
|
exports.expandAll = expandAll;
|
|
9
|
+
exports.expandNodes = expandNodes;
|
|
8
10
|
exports.handleToggleExpand = handleToggleExpand;
|
|
9
11
|
var _treeView = require("../store/treeView.store");
|
|
10
12
|
/**
|
|
@@ -39,28 +41,8 @@ function handleToggleExpand(id) {
|
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
|
|
42
|
-
/**
|
|
43
|
-
* Finds a node in the tree by its ID.
|
|
44
|
-
*
|
|
45
|
-
* @param nodes - The array of tree nodes to search through.
|
|
46
|
-
* @returns The found tree node, or undefined if not found.
|
|
47
|
-
*/
|
|
48
|
-
function findNode(nodes) {
|
|
49
|
-
for (let node of nodes) {
|
|
50
|
-
if (node.id === id) {
|
|
51
|
-
return node;
|
|
52
|
-
} else if (node.children) {
|
|
53
|
-
const found = findNode(node.children);
|
|
54
|
-
if (found) {
|
|
55
|
-
return found;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
return undefined;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
44
|
// Find the node to expand or collapse
|
|
63
|
-
const node = findNode(initialTreeViewData);
|
|
45
|
+
const node = findNode(initialTreeViewData, id);
|
|
64
46
|
if (expanded.has(id)) {
|
|
65
47
|
// If the node is currently expanded, collapse it and its descendants
|
|
66
48
|
newExpanded.delete(id);
|
|
@@ -110,4 +92,89 @@ function collapseAll() {
|
|
|
110
92
|
updateExpanded(newExpanded);
|
|
111
93
|
}
|
|
112
94
|
;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Expand tree nodes of given ids. If the id is of a child, it also expands
|
|
98
|
+
* the parent which it belongs to.
|
|
99
|
+
* @param ids Ids of nodes to expand.
|
|
100
|
+
*/
|
|
101
|
+
function expandNodes(ids) {
|
|
102
|
+
const {
|
|
103
|
+
expanded,
|
|
104
|
+
updateExpanded,
|
|
105
|
+
childToParentMap
|
|
106
|
+
} = _treeView.useTreeViewStore.getState();
|
|
107
|
+
const newExpanded = new Set(expanded);
|
|
108
|
+
const processedParents = new Set(); // To track already processed parents
|
|
109
|
+
|
|
110
|
+
ids.forEach(id => {
|
|
111
|
+
newExpanded.add(id); // Start by adding the node ID to the set
|
|
112
|
+
let currentId = id;
|
|
113
|
+
while (currentId && childToParentMap.has(currentId) && !processedParents.has(currentId)) {
|
|
114
|
+
const parentId = childToParentMap.get(currentId);
|
|
115
|
+
if (parentId) {
|
|
116
|
+
if (!newExpanded.has(parentId)) {
|
|
117
|
+
newExpanded.add(parentId); // Add the parent ID only if not already processed
|
|
118
|
+
processedParents.add(parentId);
|
|
119
|
+
}
|
|
120
|
+
currentId = parentId; // Move up to the next parent
|
|
121
|
+
} else {
|
|
122
|
+
break; // Break the loop if there's no further parent
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
updateExpanded(newExpanded);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Collapse tree nodes of given ids. If the id is of a parent, it also collapses
|
|
131
|
+
* the children inside it.
|
|
132
|
+
* @param ids Ids of nodes to collapse.
|
|
133
|
+
*/
|
|
134
|
+
function collapseNodes(ids) {
|
|
135
|
+
const {
|
|
136
|
+
expanded,
|
|
137
|
+
updateExpanded,
|
|
138
|
+
nodeMap
|
|
139
|
+
} = _treeView.useTreeViewStore.getState();
|
|
140
|
+
const newExpanded = new Set(expanded);
|
|
141
|
+
|
|
142
|
+
// Function to recursively remove child nodes from the expanded set
|
|
143
|
+
const deleteChildrenFromExpanded = (nodeId, visited = new Set()) => {
|
|
144
|
+
var _node$children;
|
|
145
|
+
if (visited.has(nodeId)) return; // Prevent redundant processing
|
|
146
|
+
visited.add(nodeId);
|
|
147
|
+
const node = nodeMap.get(nodeId);
|
|
148
|
+
node === null || node === void 0 || (_node$children = node.children) === null || _node$children === void 0 || _node$children.forEach(child => {
|
|
149
|
+
newExpanded.delete(child.id);
|
|
150
|
+
deleteChildrenFromExpanded(child.id, visited);
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
ids.forEach(id => {
|
|
154
|
+
// Remove the node ID from the set and all its children
|
|
155
|
+
newExpanded.delete(id);
|
|
156
|
+
deleteChildrenFromExpanded(id);
|
|
157
|
+
});
|
|
158
|
+
updateExpanded(newExpanded);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Finds a node in the tree by its ID.
|
|
163
|
+
*
|
|
164
|
+
* @param nodes - The array of tree nodes to search through.
|
|
165
|
+
* @returns The found tree node, or undefined if not found.
|
|
166
|
+
*/
|
|
167
|
+
function findNode(nodes, parentId) {
|
|
168
|
+
for (let node of nodes) {
|
|
169
|
+
if (node.id === parentId) {
|
|
170
|
+
return node;
|
|
171
|
+
} else if (node.children) {
|
|
172
|
+
const found = findNode(node.children, parentId);
|
|
173
|
+
if (found) {
|
|
174
|
+
return found;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return undefined;
|
|
179
|
+
}
|
|
113
180
|
//# sourceMappingURL=expandCollapse.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_treeView","require","handleToggleExpand","id","initialTreeViewData","expanded","updateExpanded","useTreeViewStore","getState","newExpanded","Set","deleteChildrenFromExpanded","node","children","child","delete","findNode","
|
|
1
|
+
{"version":3,"names":["_treeView","require","handleToggleExpand","id","initialTreeViewData","expanded","updateExpanded","useTreeViewStore","getState","newExpanded","Set","deleteChildrenFromExpanded","node","children","child","delete","findNode","has","add","expandAll","nodeMap","keys","collapseAll","expandNodes","ids","childToParentMap","processedParents","forEach","currentId","parentId","get","collapseNodes","nodeId","visited","_node$children","nodes","found","undefined"],"sourceRoot":"../../../src","sources":["helpers/expandCollapse.helper.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_treeView","require","toggleCheckboxes","ids","forceCheck","checked","updateChecked","indeterminate","updateIndeterminate","nodeMap","childToParentMap","useTreeViewStore","getState","tempChecked","Set","tempIndeterminate","memoAllDescendantsChecked","Map","memoAnyDescendantsChecked","toggleNodeAndChildren","nodeId","isChecked","_node$children","add","delete","node","get","children","forEach","childNode","id","areAllDescendantsChecked","has","allChecked","set","areAnyDescendantsChecked","anyChecked","updateNodeAndAncestorsState","every","undefined","currentNodeId"],"sourceRoot":"../../../src","sources":["helpers/toggleCheckbox.helper.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAACC,GAAa,EAAEC,UAAoB,EAAE;EAClE,MAAM;IACFC,OAAO;IACPC,aAAa;IAEbC,aAAa;IACbC,mBAAmB;IAEnBC,OAAO;IACPC;EACJ,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;;EAE/B;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACT,OAAO,CAAC;EACpC,MAAMU,iBAAiB,GAAG,IAAID,GAAG,CAACP,aAAa,CAAC;;EAEhD;EACA,MAAMS,yBAAyB,GAAG,IAAIC,GAAG,CAAC,CAAC;EAC3C,MAAMC,yBAAyB,GAAG,IAAID,GAAG,CAAC,CAAC;;EAE3C;AACJ;AACA;AACA;AACA;EACI,MAAME,qBAAqB,GAAGA,CAACC,MAAc,EAAEC,SAAkB,KAAK;IAAA,IAAAC,cAAA;IAClE;IACA,IAAID,SAAS,EAAE;MACXR,WAAW,CAACU,GAAG,CAACH,MAAM,CAAC;MACvBL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;IACpC,CAAC,MAAM;MACHP,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;IAC9B;;IAEA;IACA,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;IAChCK,IAAI,aAAJA,IAAI,gBAAAH,cAAA,GAAJG,IAAI,CAAEE,QAAQ,cAAAL,cAAA,eAAdA,cAAA,CAAgBM,OAAO,CAAEC,SAAS,IAAK;MACnC,IAAIR,SAAS,EAAEN,iBAAiB,CAACS,MAAM,CAACK,SAAS,CAACC,EAAE,CAAC;MACrDX,qBAAqB,CAACU,SAAS,CAACC,EAAE,EAAET,SAAS,CAAC;IAClD,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;EACI,MAAMU,wBAAwB,GAAIX,MAAc,IAAc;IAC1D;IACA,IAAIJ,yBAAyB,CAACgB,GAAG,CAACZ,MAAM,CAAC,EAAE;MACvC,OAAOJ,yBAAyB,CAACU,GAAG,CAACN,MAAM,CAAC;IAChD;IAEA,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;IAChC,IAAIa,UAAU,GAAG,IAAI;IACrB,IAAIR,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,QAAQ,EAAE;MAChB;MACA,KAAK,MAAME,SAAS,IAAIJ,IAAI,CAACE,QAAQ,EAAE;QACnCM,UAAU,GAAGA,UAAU,IAAIF,wBAAwB,CAACF,SAAS,CAACC,EAAE,CAAC;MACrE;IACJ,CAAC,MAAM;MACH;MACAG,UAAU,GAAGpB,WAAW,CAACmB,GAAG,CAACZ,MAAM,CAAC;IACxC;;IAEA;IACAJ,yBAAyB,CAACkB,GAAG,CAACd,MAAM,EAAEa,UAAU,CAAC;IACjD,OAAOA,UAAU;EACrB,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;EACI,MAAME,wBAAwB,GAAIf,MAAc,IAAc;IAC1D;IACA,IAAIF,yBAAyB,CAACc,GAAG,CAACZ,MAAM,CAAC,EAAE;MACvC,OAAOF,yBAAyB,CAACQ,GAAG,CAACN,MAAM,CAAC;IAChD;IAEA,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;IAChC,IAAIgB,UAAU,GAAG,KAAK;IACtB,IAAIX,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,QAAQ,EAAE;MAChB;MACA,KAAK,MAAME,SAAS,IAAIJ,IAAI,CAACE,QAAQ,EAAE;QACnCS,UAAU,GAAGA,UAAU,IAAID,wBAAwB,CAACN,SAAS,CAACC,EAAE,CAAC;MACrE;IACJ,CAAC,MAAM;MACH;MACAM,UAAU,GAAGvB,WAAW,CAACmB,GAAG,CAACZ,MAAM,CAAC;IACxC;;IAEA;IACAF,yBAAyB,CAACgB,GAAG,CAACd,MAAM,EAAEgB,UAAU,CAAC;IACjD,OAAOA,UAAU;EACrB,CAAC;;EAED;AACJ;AACA;AACA;EACI,MAAMC,2BAA2B,GAAIjB,MAAc,IAAK;IACpD,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;;IAEhC;IACA,IAAIW,wBAAwB,CAACX,MAAM,CAAC,EAAE;MAClCP,WAAW,CAACU,GAAG,CAACH,MAAM,CAAC;MACvBL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;IACpC,CAAC,MAAM,IAAIe,wBAAwB,CAACf,MAAM,CAAC,EAAE;MACzC;;MAEA;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACY,IAAIK,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,QAAQ,IAAIF,IAAI,CAACE,QAAQ,CAACW,KAAK,CAACT,SAAS,IAAIE,wBAAwB,CAACF,SAAS,CAACC,EAAE,CAAC,CAAC,EAAE;QAC5F;QACA;QACAjB,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;QAC1BL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;MACpC,CAAC,MAAM;QACHP,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;QAC1BL,iBAAiB,CAACQ,GAAG,CAACH,MAAM,CAAC;MACjC;IACJ,CAAC,MAAM;MACHP,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;MAC1BL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;IACpC;EACJ,CAAC;;EAED;EACAjB,GAAG,CAACyB,OAAO,CAAEE,EAAE,IAAK;IAChB,MAAMT,SAAS,GAAGR,WAAW,CAACmB,GAAG,CAACF,EAAE,CAAC;IACrCX,qBAAqB,CAACW,EAAE,EAAE1B,UAAU,KAAKmC,SAAS,GAAG,CAAClB,SAAS,GAAGjB,UAAU,CAAC;EACjF,CAAC,CAAC;;EAEF;EACAD,GAAG,CAACyB,OAAO,CAAEE,EAAE,IAAK;IAChB,IAAIU,aAAiC,GAAGV,EAAE;IAC1C,OAAOU,aAAa,EAAE;MAClBH,2BAA2B,CAACG,aAAa,CAAC;MAC1CA,aAAa,GAAG9B,gBAAgB,CAACgB,GAAG,CAACc,aAAa,CAAC;IACvD;EACJ,CAAC,CAAC;;EAEF;EACAlC,aAAa,CAACO,WAAW,CAAC;EAC1BL,mBAAmB,CAACO,iBAAiB,CAAC;AAC1C
|
|
1
|
+
{"version":3,"names":["_treeView","require","toggleCheckboxes","ids","forceCheck","checked","updateChecked","indeterminate","updateIndeterminate","nodeMap","childToParentMap","useTreeViewStore","getState","tempChecked","Set","tempIndeterminate","memoAllDescendantsChecked","Map","memoAnyDescendantsChecked","toggleNodeAndChildren","nodeId","isChecked","_node$children","add","delete","node","get","children","forEach","childNode","id","areAllDescendantsChecked","has","allChecked","set","areAnyDescendantsChecked","anyChecked","updateNodeAndAncestorsState","every","undefined","currentNodeId"],"sourceRoot":"../../../src","sources":["helpers/toggleCheckbox.helper.ts"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,gBAAgBA,CAACC,GAAa,EAAEC,UAAoB,EAAE;EAClE,MAAM;IACFC,OAAO;IACPC,aAAa;IAEbC,aAAa;IACbC,mBAAmB;IAEnBC,OAAO;IACPC;EACJ,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;;EAE/B;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACT,OAAO,CAAC;EACpC,MAAMU,iBAAiB,GAAG,IAAID,GAAG,CAACP,aAAa,CAAC;;EAEhD;EACA,MAAMS,yBAAyB,GAAG,IAAIC,GAAG,CAAC,CAAC;EAC3C,MAAMC,yBAAyB,GAAG,IAAID,GAAG,CAAC,CAAC;;EAE3C;AACJ;AACA;AACA;AACA;EACI,MAAME,qBAAqB,GAAGA,CAACC,MAAc,EAAEC,SAAkB,KAAK;IAAA,IAAAC,cAAA;IAClE;IACA,IAAID,SAAS,EAAE;MACXR,WAAW,CAACU,GAAG,CAACH,MAAM,CAAC;MACvBL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;IACpC,CAAC,MAAM;MACHP,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;IAC9B;;IAEA;IACA,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;IAChCK,IAAI,aAAJA,IAAI,gBAAAH,cAAA,GAAJG,IAAI,CAAEE,QAAQ,cAAAL,cAAA,eAAdA,cAAA,CAAgBM,OAAO,CAAEC,SAAS,IAAK;MACnC,IAAIR,SAAS,EAAEN,iBAAiB,CAACS,MAAM,CAACK,SAAS,CAACC,EAAE,CAAC;MACrDX,qBAAqB,CAACU,SAAS,CAACC,EAAE,EAAET,SAAS,CAAC;IAClD,CAAC,CAAC;EACN,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;EACI,MAAMU,wBAAwB,GAAIX,MAAc,IAAc;IAC1D;IACA,IAAIJ,yBAAyB,CAACgB,GAAG,CAACZ,MAAM,CAAC,EAAE;MACvC,OAAOJ,yBAAyB,CAACU,GAAG,CAACN,MAAM,CAAC;IAChD;IAEA,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;IAChC,IAAIa,UAAU,GAAG,IAAI;IACrB,IAAIR,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,QAAQ,EAAE;MAChB;MACA,KAAK,MAAME,SAAS,IAAIJ,IAAI,CAACE,QAAQ,EAAE;QACnCM,UAAU,GAAGA,UAAU,IAAIF,wBAAwB,CAACF,SAAS,CAACC,EAAE,CAAC;MACrE;IACJ,CAAC,MAAM;MACH;MACAG,UAAU,GAAGpB,WAAW,CAACmB,GAAG,CAACZ,MAAM,CAAC;IACxC;;IAEA;IACAJ,yBAAyB,CAACkB,GAAG,CAACd,MAAM,EAAEa,UAAU,CAAC;IACjD,OAAOA,UAAU;EACrB,CAAC;;EAED;AACJ;AACA;AACA;AACA;AACA;EACI,MAAME,wBAAwB,GAAIf,MAAc,IAAc;IAC1D;IACA,IAAIF,yBAAyB,CAACc,GAAG,CAACZ,MAAM,CAAC,EAAE;MACvC,OAAOF,yBAAyB,CAACQ,GAAG,CAACN,MAAM,CAAC;IAChD;IAEA,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;IAChC,IAAIgB,UAAU,GAAG,KAAK;IACtB,IAAIX,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,QAAQ,EAAE;MAChB;MACA,KAAK,MAAME,SAAS,IAAIJ,IAAI,CAACE,QAAQ,EAAE;QACnCS,UAAU,GAAGA,UAAU,IAAID,wBAAwB,CAACN,SAAS,CAACC,EAAE,CAAC;MACrE;IACJ,CAAC,MAAM;MACH;MACAM,UAAU,GAAGvB,WAAW,CAACmB,GAAG,CAACZ,MAAM,CAAC;IACxC;;IAEA;IACAF,yBAAyB,CAACgB,GAAG,CAACd,MAAM,EAAEgB,UAAU,CAAC;IACjD,OAAOA,UAAU;EACrB,CAAC;;EAED;AACJ;AACA;AACA;EACI,MAAMC,2BAA2B,GAAIjB,MAAc,IAAK;IACpD,MAAMK,IAAI,GAAGhB,OAAO,CAACiB,GAAG,CAACN,MAAM,CAAC;;IAEhC;IACA,IAAIW,wBAAwB,CAACX,MAAM,CAAC,EAAE;MAClCP,WAAW,CAACU,GAAG,CAACH,MAAM,CAAC;MACvBL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;IACpC,CAAC,MAAM,IAAIe,wBAAwB,CAACf,MAAM,CAAC,EAAE;MACzC;;MAEA;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACY,IAAIK,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,QAAQ,IAAIF,IAAI,CAACE,QAAQ,CAACW,KAAK,CAACT,SAAS,IAAIE,wBAAwB,CAACF,SAAS,CAACC,EAAE,CAAC,CAAC,EAAE;QAC5F;QACA;QACAjB,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;QAC1BL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;MACpC,CAAC,MAAM;QACHP,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;QAC1BL,iBAAiB,CAACQ,GAAG,CAACH,MAAM,CAAC;MACjC;IACJ,CAAC,MAAM;MACHP,WAAW,CAACW,MAAM,CAACJ,MAAM,CAAC;MAC1BL,iBAAiB,CAACS,MAAM,CAACJ,MAAM,CAAC;IACpC;EACJ,CAAC;;EAED;EACAjB,GAAG,CAACyB,OAAO,CAAEE,EAAE,IAAK;IAChB,MAAMT,SAAS,GAAGR,WAAW,CAACmB,GAAG,CAACF,EAAE,CAAC;IACrCX,qBAAqB,CAACW,EAAE,EAAE1B,UAAU,KAAKmC,SAAS,GAAG,CAAClB,SAAS,GAAGjB,UAAU,CAAC;EACjF,CAAC,CAAC;;EAEF;EACAD,GAAG,CAACyB,OAAO,CAAEE,EAAE,IAAK;IAChB,IAAIU,aAAiC,GAAGV,EAAE;IAC1C,OAAOU,aAAa,EAAE;MAClBH,2BAA2B,CAACG,aAAa,CAAC;MAC1CA,aAAa,GAAG9B,gBAAgB,CAACgB,GAAG,CAACc,aAAa,CAAC;IACvD;EACJ,CAAC,CAAC;;EAEF;EACAlC,aAAa,CAACO,WAAW,CAAC;EAC1BL,mBAAmB,CAACO,iBAAiB,CAAC;AAC1C","ignoreList":[]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = usePreviousState;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
/**
|
|
9
|
+
* Get previous value of a state
|
|
10
|
+
* @param value state
|
|
11
|
+
* @returns previous value of @param value after it's updated
|
|
12
|
+
*/
|
|
13
|
+
function usePreviousState(value) {
|
|
14
|
+
const ref = (0, _react.useRef)();
|
|
15
|
+
(0, _react.useEffect)(() => {
|
|
16
|
+
ref.current = value;
|
|
17
|
+
}, [value]);
|
|
18
|
+
return ref.current;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=usePreviousState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_react","require","usePreviousState","value","ref","useRef","useEffect","current"],"sourceRoot":"../../../src","sources":["utils/usePreviousState.ts"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACe,SAASC,gBAAgBA,CAAIC,KAAQ,EAAE;EACpD,MAAMC,GAAG,GAAG,IAAAC,aAAM,EAAI,CAAC;EAEvB,IAAAC,gBAAS,EAAC,MAAM;IACdF,GAAG,CAACG,OAAO,GAAGJ,KAAK;EACrB,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,OAAOC,GAAG,CAACG,OAAO;AACpB","ignoreList":[]}
|
package/lib/module/TreeView.js
CHANGED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { InteractionManager } from 'react-native';
|
|
3
3
|
import NodeList from './components/NodeList';
|
|
4
|
-
import { selectAll, selectAllFiltered, unselectAll, unselectAllFiltered, initializeNodeMaps, expandAll, collapseAll, toggleCheckboxes } from './helpers';
|
|
4
|
+
import { selectAll, selectAllFiltered, unselectAll, unselectAllFiltered, initializeNodeMaps, expandAll, collapseAll, toggleCheckboxes, expandNodes, collapseNodes } from './helpers';
|
|
5
5
|
import { useTreeViewStore } from './store/treeView.store';
|
|
6
|
+
import usePreviousState from './utils/usePreviousState';
|
|
6
7
|
const _TreeView = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
7
8
|
const {
|
|
8
9
|
data,
|
|
9
10
|
onCheck,
|
|
10
11
|
onExpand,
|
|
11
12
|
preselectedIds = [],
|
|
13
|
+
preExpandedIds = [],
|
|
12
14
|
treeFlashListProps,
|
|
13
15
|
checkBoxViewStyleProps,
|
|
14
16
|
indentationMultiplier,
|
|
@@ -35,8 +37,11 @@ const _TreeView = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
35
37
|
unselectAllFiltered,
|
|
36
38
|
expandAll,
|
|
37
39
|
collapseAll,
|
|
40
|
+
expandNodes,
|
|
41
|
+
collapseNodes,
|
|
38
42
|
setSearchText
|
|
39
43
|
}));
|
|
44
|
+
const prevSearchText = usePreviousState(searchText);
|
|
40
45
|
function setSearchText(text, keys = ["name"]) {
|
|
41
46
|
updateSearchText(text);
|
|
42
47
|
updateSearchKeys(keys);
|
|
@@ -45,8 +50,11 @@ const _TreeView = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
45
50
|
updateInitialTreeViewData(data);
|
|
46
51
|
initializeNodeMaps(data);
|
|
47
52
|
|
|
48
|
-
// Check any
|
|
53
|
+
// Check any pre-selected nodes
|
|
49
54
|
toggleCheckboxes(preselectedIds, true);
|
|
55
|
+
|
|
56
|
+
// Expand pre-expanded nodes
|
|
57
|
+
expandNodes(preExpandedIds);
|
|
50
58
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
59
|
}, []);
|
|
52
60
|
const getIds = React.useCallback(node => {
|
|
@@ -67,12 +75,14 @@ const _TreeView = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
67
75
|
InteractionManager.runAfterInteractions(() => {
|
|
68
76
|
updateExpanded(new Set(initialTreeViewData.flatMap(item => getIds(item))));
|
|
69
77
|
});
|
|
70
|
-
} else {
|
|
78
|
+
} else if (prevSearchText && prevSearchText !== "") {
|
|
79
|
+
/* Collapse all nodes only if previous search query was non-empty: this is
|
|
80
|
+
done to prevent node collapse on first render if preExpandedIds is provided */
|
|
71
81
|
InteractionManager.runAfterInteractions(() => {
|
|
72
82
|
updateExpanded(new Set());
|
|
73
83
|
});
|
|
74
84
|
}
|
|
75
|
-
}, [getIds, initialTreeViewData, searchText, updateExpanded]);
|
|
85
|
+
}, [getIds, initialTreeViewData, prevSearchText, searchText, updateExpanded]);
|
|
76
86
|
React.useEffect(() => {
|
|
77
87
|
return () => {
|
|
78
88
|
cleanUpTreeViewStore();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","InteractionManager","NodeList","selectAll","selectAllFiltered","unselectAll","unselectAllFiltered","initializeNodeMaps","expandAll","collapseAll","toggleCheckboxes","useTreeViewStore","_TreeView","forwardRef","props","ref","data","onCheck","onExpand","preselectedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","cleanUpTreeViewStore","useImperativeHandle","setSearchText","text","keys","useEffect","getIds","useCallback","node","children","length","id","flatMap","item","Array","from","runAfterInteractions","Set","createElement","TreeView","memo"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,kBAAkB,QAAQ,cAAc;AAMjD,OAAOC,QAAQ,MAAM,uBAAuB;AAC5C,SACEC,SAAS,EACTC,iBAAiB,EACjBC,WAAW,EACXC,mBAAmB,EACnBC,kBAAkB,EAClBC,SAAS,EACTC,WAAW,EACXC,gBAAgB,
|
|
1
|
+
{"version":3,"names":["React","InteractionManager","NodeList","selectAll","selectAllFiltered","unselectAll","unselectAllFiltered","initializeNodeMaps","expandAll","collapseAll","toggleCheckboxes","expandNodes","collapseNodes","useTreeViewStore","usePreviousState","_TreeView","forwardRef","props","ref","data","onCheck","onExpand","preselectedIds","preExpandedIds","treeFlashListProps","checkBoxViewStyleProps","indentationMultiplier","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","CustomNodeRowComponent","expanded","updateExpanded","initialTreeViewData","updateInitialTreeViewData","searchText","updateSearchText","updateSearchKeys","checked","cleanUpTreeViewStore","useImperativeHandle","setSearchText","prevSearchText","text","keys","useEffect","getIds","useCallback","node","children","length","id","flatMap","item","Array","from","runAfterInteractions","Set","createElement","TreeView","memo"],"sourceRoot":"../../src","sources":["TreeView.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -32,28 +32,8 @@ export function handleToggleExpand(id) {
|
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
/**
|
|
36
|
-
* Finds a node in the tree by its ID.
|
|
37
|
-
*
|
|
38
|
-
* @param nodes - The array of tree nodes to search through.
|
|
39
|
-
* @returns The found tree node, or undefined if not found.
|
|
40
|
-
*/
|
|
41
|
-
function findNode(nodes) {
|
|
42
|
-
for (let node of nodes) {
|
|
43
|
-
if (node.id === id) {
|
|
44
|
-
return node;
|
|
45
|
-
} else if (node.children) {
|
|
46
|
-
const found = findNode(node.children);
|
|
47
|
-
if (found) {
|
|
48
|
-
return found;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return undefined;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
35
|
// Find the node to expand or collapse
|
|
56
|
-
const node = findNode(initialTreeViewData);
|
|
36
|
+
const node = findNode(initialTreeViewData, id);
|
|
57
37
|
if (expanded.has(id)) {
|
|
58
38
|
// If the node is currently expanded, collapse it and its descendants
|
|
59
39
|
newExpanded.delete(id);
|
|
@@ -103,4 +83,89 @@ export function collapseAll() {
|
|
|
103
83
|
updateExpanded(newExpanded);
|
|
104
84
|
}
|
|
105
85
|
;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Expand tree nodes of given ids. If the id is of a child, it also expands
|
|
89
|
+
* the parent which it belongs to.
|
|
90
|
+
* @param ids Ids of nodes to expand.
|
|
91
|
+
*/
|
|
92
|
+
export function expandNodes(ids) {
|
|
93
|
+
const {
|
|
94
|
+
expanded,
|
|
95
|
+
updateExpanded,
|
|
96
|
+
childToParentMap
|
|
97
|
+
} = useTreeViewStore.getState();
|
|
98
|
+
const newExpanded = new Set(expanded);
|
|
99
|
+
const processedParents = new Set(); // To track already processed parents
|
|
100
|
+
|
|
101
|
+
ids.forEach(id => {
|
|
102
|
+
newExpanded.add(id); // Start by adding the node ID to the set
|
|
103
|
+
let currentId = id;
|
|
104
|
+
while (currentId && childToParentMap.has(currentId) && !processedParents.has(currentId)) {
|
|
105
|
+
const parentId = childToParentMap.get(currentId);
|
|
106
|
+
if (parentId) {
|
|
107
|
+
if (!newExpanded.has(parentId)) {
|
|
108
|
+
newExpanded.add(parentId); // Add the parent ID only if not already processed
|
|
109
|
+
processedParents.add(parentId);
|
|
110
|
+
}
|
|
111
|
+
currentId = parentId; // Move up to the next parent
|
|
112
|
+
} else {
|
|
113
|
+
break; // Break the loop if there's no further parent
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
updateExpanded(newExpanded);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Collapse tree nodes of given ids. If the id is of a parent, it also collapses
|
|
122
|
+
* the children inside it.
|
|
123
|
+
* @param ids Ids of nodes to collapse.
|
|
124
|
+
*/
|
|
125
|
+
export function collapseNodes(ids) {
|
|
126
|
+
const {
|
|
127
|
+
expanded,
|
|
128
|
+
updateExpanded,
|
|
129
|
+
nodeMap
|
|
130
|
+
} = useTreeViewStore.getState();
|
|
131
|
+
const newExpanded = new Set(expanded);
|
|
132
|
+
|
|
133
|
+
// Function to recursively remove child nodes from the expanded set
|
|
134
|
+
const deleteChildrenFromExpanded = (nodeId, visited = new Set()) => {
|
|
135
|
+
var _node$children;
|
|
136
|
+
if (visited.has(nodeId)) return; // Prevent redundant processing
|
|
137
|
+
visited.add(nodeId);
|
|
138
|
+
const node = nodeMap.get(nodeId);
|
|
139
|
+
node === null || node === void 0 || (_node$children = node.children) === null || _node$children === void 0 || _node$children.forEach(child => {
|
|
140
|
+
newExpanded.delete(child.id);
|
|
141
|
+
deleteChildrenFromExpanded(child.id, visited);
|
|
142
|
+
});
|
|
143
|
+
};
|
|
144
|
+
ids.forEach(id => {
|
|
145
|
+
// Remove the node ID from the set and all its children
|
|
146
|
+
newExpanded.delete(id);
|
|
147
|
+
deleteChildrenFromExpanded(id);
|
|
148
|
+
});
|
|
149
|
+
updateExpanded(newExpanded);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Finds a node in the tree by its ID.
|
|
154
|
+
*
|
|
155
|
+
* @param nodes - The array of tree nodes to search through.
|
|
156
|
+
* @returns The found tree node, or undefined if not found.
|
|
157
|
+
*/
|
|
158
|
+
function findNode(nodes, parentId) {
|
|
159
|
+
for (let node of nodes) {
|
|
160
|
+
if (node.id === parentId) {
|
|
161
|
+
return node;
|
|
162
|
+
} else if (node.children) {
|
|
163
|
+
const found = findNode(node.children, parentId);
|
|
164
|
+
if (found) {
|
|
165
|
+
return found;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return undefined;
|
|
170
|
+
}
|
|
106
171
|
//# sourceMappingURL=expandCollapse.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useTreeViewStore","handleToggleExpand","id","initialTreeViewData","expanded","updateExpanded","getState","newExpanded","Set","deleteChildrenFromExpanded","node","children","child","delete","findNode","
|
|
1
|
+
{"version":3,"names":["useTreeViewStore","handleToggleExpand","id","initialTreeViewData","expanded","updateExpanded","getState","newExpanded","Set","deleteChildrenFromExpanded","node","children","child","delete","findNode","has","add","expandAll","nodeMap","keys","collapseAll","expandNodes","ids","childToParentMap","processedParents","forEach","currentId","parentId","get","collapseNodes","nodeId","visited","_node$children","nodes","found","undefined"],"sourceRoot":"../../../src","sources":["helpers/expandCollapse.helper.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useTreeViewStore","toggleCheckboxes","ids","forceCheck","checked","updateChecked","indeterminate","updateIndeterminate","nodeMap","childToParentMap","getState","tempChecked","Set","tempIndeterminate","memoAllDescendantsChecked","Map","memoAnyDescendantsChecked","toggleNodeAndChildren","nodeId","isChecked","_node$children","add","delete","node","get","children","forEach","childNode","id","areAllDescendantsChecked","has","allChecked","set","areAnyDescendantsChecked","anyChecked","updateNodeAndAncestorsState","every","undefined","currentNodeId"],"sourceRoot":"../../../src","sources":["helpers/toggleCheckbox.helper.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"names":["useTreeViewStore","toggleCheckboxes","ids","forceCheck","checked","updateChecked","indeterminate","updateIndeterminate","nodeMap","childToParentMap","getState","tempChecked","Set","tempIndeterminate","memoAllDescendantsChecked","Map","memoAnyDescendantsChecked","toggleNodeAndChildren","nodeId","isChecked","_node$children","add","delete","node","get","children","forEach","childNode","id","areAllDescendantsChecked","has","allChecked","set","areAnyDescendantsChecked","anyChecked","updateNodeAndAncestorsState","every","undefined","currentNodeId"],"sourceRoot":"../../../src","sources":["helpers/toggleCheckbox.helper.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get previous value of a state
|
|
5
|
+
* @param value state
|
|
6
|
+
* @returns previous value of @param value after it's updated
|
|
7
|
+
*/
|
|
8
|
+
export default function usePreviousState(value) {
|
|
9
|
+
const ref = useRef();
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
ref.current = value;
|
|
12
|
+
}, [value]);
|
|
13
|
+
return ref.current;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=usePreviousState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","usePreviousState","value","ref","current"],"sourceRoot":"../../../src","sources":["utils/usePreviousState.ts"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;;AAEzC;AACA;AACA;AACA;AACA;AACA,eAAe,SAASC,gBAAgBA,CAAIC,KAAQ,EAAE;EACpD,MAAMC,GAAG,GAAGH,MAAM,CAAI,CAAC;EAEvBD,SAAS,CAAC,MAAM;IACdI,GAAG,CAACC,OAAO,GAAGF,KAAK;EACrB,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEX,OAAOC,GAAG,CAACC,OAAO;AACpB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../src/TreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAEV,aAAa,EACb,WAAW,EACZ,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"TreeView.d.ts","sourceRoot":"","sources":["../../src/TreeView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAEV,aAAa,EACb,WAAW,EACZ,MAAM,wBAAwB,CAAC;AA0JhC,eAAO,MAAM,QAAQ,8GAAwB,CAAC"}
|
|
@@ -15,4 +15,16 @@ export declare function expandAll(): void;
|
|
|
15
15
|
* Collapse all nodes in the tree.
|
|
16
16
|
*/
|
|
17
17
|
export declare function collapseAll(): void;
|
|
18
|
+
/**
|
|
19
|
+
* Expand tree nodes of given ids. If the id is of a child, it also expands
|
|
20
|
+
* the parent which it belongs to.
|
|
21
|
+
* @param ids Ids of nodes to expand.
|
|
22
|
+
*/
|
|
23
|
+
export declare function expandNodes(ids: string[]): void;
|
|
24
|
+
/**
|
|
25
|
+
* Collapse tree nodes of given ids. If the id is of a parent, it also collapses
|
|
26
|
+
* the children inside it.
|
|
27
|
+
* @param ids Ids of nodes to collapse.
|
|
28
|
+
*/
|
|
29
|
+
export declare function collapseNodes(ids: string[]): void;
|
|
18
30
|
//# sourceMappingURL=expandCollapse.helper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expandCollapse.helper.d.ts","sourceRoot":"","sources":["../../../src/helpers/expandCollapse.helper.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"expandCollapse.helper.d.ts","sourceRoot":"","sources":["../../../src/helpers/expandCollapse.helper.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,QA+C5C;AAED;;GAEG;AACH,wBAAgB,SAAS,SAKxB;AAED;;GAEG;AACH,wBAAgB,WAAW,SAK1B;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAwBxC;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAuB1C"}
|
|
@@ -44,6 +44,7 @@ export interface TreeViewProps extends NodeListProps {
|
|
|
44
44
|
onCheck?: (checkedIds: string[]) => void;
|
|
45
45
|
onExpand?: (expandedIds: string[]) => void;
|
|
46
46
|
preselectedIds?: string[];
|
|
47
|
+
preExpandedIds?: string[];
|
|
47
48
|
}
|
|
48
49
|
type CheckboxProps = Omit<RNPaperCheckboxAndroidProps, "onPress" | "status">;
|
|
49
50
|
export interface CheckBoxViewProps {
|
|
@@ -66,6 +67,8 @@ export interface TreeViewRef {
|
|
|
66
67
|
unselectAllFiltered: () => void;
|
|
67
68
|
expandAll: () => void;
|
|
68
69
|
collapseAll: () => void;
|
|
70
|
+
expandNodes: (ids: string[]) => void;
|
|
71
|
+
collapseNodes: (ids: string[]) => void;
|
|
69
72
|
setSearchText: (searchText: string, searchKeys?: string[]) => void;
|
|
70
73
|
}
|
|
71
74
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"treeView.types.d.ts","sourceRoot":"","sources":["../../../src/types/treeView.types.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EACR,SAAS,EACT,SAAS,EACT,qBAAqB,EACrB,SAAS,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EACH,KAAK,KAAK,IAAI,2BAA2B,EAC5C,MAAM,4DAA4D,CAAC;AAEpE,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,eAAe,CAAC;AAE1D,MAAM,WAAW,eAAe;IAC5B,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,qBAAsB,SAAQ,QAAQ;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,MAAM,iBAAiB,CAAC,KAAK,GAAG,GAAG,IAAI,IAAI,CAC7C,cAAc,CAAC,KAAK,CAAC,EACrB,MAAM,GACJ,YAAY,CACjB,CAAC;AAEF,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IAEd,YAAY,EAAE,iBAAiB,CAAC;IAChC,UAAU,EAAE,OAAO,CAAC;IAEpB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACnC,sBAAsB,CAAC,EAAE,6BAA6B,CAAC;IAEvD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B,iBAAiB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAC3D,2BAA2B,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IACnE,gCAAgC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAE9E,sBAAsB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,SAAU,SAAQ,sBAAsB;IACrD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAc,SAAQ,sBAAsB;IACzD,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;CAC1C;AAED,MAAM,WAAW,aAAc,SAAQ,aAAa;IAChD,IAAI,EAAE,QAAQ,EAAE,CAAC;IAEjB,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAE3C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,KAAK,aAAa,GAAG,IAAI,CAAC,2BAA2B,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAC;AAE7E,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,iBAAiB,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,6BAA6B;IAE1C,wBAAwB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,uBAAuB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAG1C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;CACzB;AAED,MAAM,MAAM,wBAAwB,GAChC,iBAAiB,GACf,6BAA6B,CAAC;AAEpC,MAAM,WAAW,WAAW;IACxB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAEhC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB,aAAa,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CACtE"}
|
|
1
|
+
{"version":3,"file":"treeView.types.d.ts","sourceRoot":"","sources":["../../../src/types/treeView.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreviousState.d.ts","sourceRoot":"","sources":["../../../src/utils/usePreviousState.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,iBAQnD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-tree-multi-select",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Super-fast Tree view with multi-selection capabilities, using checkboxes and search filtering.",
|
|
5
5
|
"main": "lib/commonjs/index",
|
|
6
6
|
"module": "lib/module/index",
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
"engines": {
|
|
120
120
|
"node": ">= 16.0.0"
|
|
121
121
|
},
|
|
122
|
-
"packageManager": "
|
|
122
|
+
"packageManager": "yarn@1.22.22",
|
|
123
123
|
"jest": {
|
|
124
124
|
"preset": "react-native",
|
|
125
125
|
"setupFilesAfterEnv": [
|
package/src/TreeView.tsx
CHANGED
|
@@ -14,9 +14,12 @@ import {
|
|
|
14
14
|
initializeNodeMaps,
|
|
15
15
|
expandAll,
|
|
16
16
|
collapseAll,
|
|
17
|
-
toggleCheckboxes
|
|
17
|
+
toggleCheckboxes,
|
|
18
|
+
expandNodes,
|
|
19
|
+
collapseNodes
|
|
18
20
|
} from './helpers';
|
|
19
21
|
import { useTreeViewStore } from './store/treeView.store';
|
|
22
|
+
import usePreviousState from './utils/usePreviousState';
|
|
20
23
|
|
|
21
24
|
const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
22
25
|
(props, ref) => {
|
|
@@ -28,6 +31,8 @@ const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
|
28
31
|
|
|
29
32
|
preselectedIds = [],
|
|
30
33
|
|
|
34
|
+
preExpandedIds = [],
|
|
35
|
+
|
|
31
36
|
treeFlashListProps,
|
|
32
37
|
checkBoxViewStyleProps,
|
|
33
38
|
indentationMultiplier,
|
|
@@ -66,9 +71,14 @@ const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
|
66
71
|
expandAll,
|
|
67
72
|
collapseAll,
|
|
68
73
|
|
|
74
|
+
expandNodes,
|
|
75
|
+
collapseNodes,
|
|
76
|
+
|
|
69
77
|
setSearchText
|
|
70
78
|
}));
|
|
71
79
|
|
|
80
|
+
const prevSearchText = usePreviousState(searchText);
|
|
81
|
+
|
|
72
82
|
function setSearchText(text: string, keys: string[] = ["name"]) {
|
|
73
83
|
updateSearchText(text);
|
|
74
84
|
updateSearchKeys(keys);
|
|
@@ -79,8 +89,11 @@ const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
|
79
89
|
|
|
80
90
|
initializeNodeMaps(data);
|
|
81
91
|
|
|
82
|
-
// Check any
|
|
92
|
+
// Check any pre-selected nodes
|
|
83
93
|
toggleCheckboxes(preselectedIds, true);
|
|
94
|
+
|
|
95
|
+
// Expand pre-expanded nodes
|
|
96
|
+
expandNodes(preExpandedIds);
|
|
84
97
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
85
98
|
}, []);
|
|
86
99
|
|
|
@@ -108,12 +121,20 @@ const _TreeView = React.forwardRef<TreeViewRef, TreeViewProps>(
|
|
|
108
121
|
)));
|
|
109
122
|
});
|
|
110
123
|
}
|
|
111
|
-
else {
|
|
124
|
+
else if (prevSearchText && prevSearchText !== "") {
|
|
125
|
+
/* Collapse all nodes only if previous search query was non-empty: this is
|
|
126
|
+
done to prevent node collapse on first render if preExpandedIds is provided */
|
|
112
127
|
InteractionManager.runAfterInteractions(() => {
|
|
113
128
|
updateExpanded(new Set());
|
|
114
129
|
});
|
|
115
130
|
}
|
|
116
|
-
}, [
|
|
131
|
+
}, [
|
|
132
|
+
getIds,
|
|
133
|
+
initialTreeViewData,
|
|
134
|
+
prevSearchText,
|
|
135
|
+
searchText,
|
|
136
|
+
updateExpanded
|
|
137
|
+
]);
|
|
117
138
|
|
|
118
139
|
React.useEffect(() => {
|
|
119
140
|
return () => {
|
|
@@ -33,28 +33,8 @@ export function handleToggleExpand(id: string) {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
/**
|
|
37
|
-
* Finds a node in the tree by its ID.
|
|
38
|
-
*
|
|
39
|
-
* @param nodes - The array of tree nodes to search through.
|
|
40
|
-
* @returns The found tree node, or undefined if not found.
|
|
41
|
-
*/
|
|
42
|
-
function findNode(nodes: TreeNode[]): TreeNode | undefined {
|
|
43
|
-
for (let node of nodes) {
|
|
44
|
-
if (node.id === id) {
|
|
45
|
-
return node;
|
|
46
|
-
} else if (node.children) {
|
|
47
|
-
const found = findNode(node.children);
|
|
48
|
-
if (found) {
|
|
49
|
-
return found;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return undefined;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
36
|
// Find the node to expand or collapse
|
|
57
|
-
const node = findNode(initialTreeViewData);
|
|
37
|
+
const node = findNode(initialTreeViewData, id);
|
|
58
38
|
|
|
59
39
|
if (expanded.has(id)) {
|
|
60
40
|
// If the node is currently expanded, collapse it and its descendants
|
|
@@ -97,3 +77,84 @@ export function collapseAll() {
|
|
|
97
77
|
const newExpanded = new Set<string>();
|
|
98
78
|
updateExpanded(newExpanded);
|
|
99
79
|
};
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Expand tree nodes of given ids. If the id is of a child, it also expands
|
|
83
|
+
* the parent which it belongs to.
|
|
84
|
+
* @param ids Ids of nodes to expand.
|
|
85
|
+
*/
|
|
86
|
+
export function expandNodes(ids: string[]) {
|
|
87
|
+
const { expanded, updateExpanded, childToParentMap } = useTreeViewStore.getState();
|
|
88
|
+
const newExpanded = new Set(expanded);
|
|
89
|
+
const processedParents = new Set(); // To track already processed parents
|
|
90
|
+
|
|
91
|
+
ids.forEach(id => {
|
|
92
|
+
newExpanded.add(id); // Start by adding the node ID to the set
|
|
93
|
+
let currentId = id;
|
|
94
|
+
|
|
95
|
+
while (currentId && childToParentMap.has(currentId) && !processedParents.has(currentId)) {
|
|
96
|
+
const parentId = childToParentMap.get(currentId);
|
|
97
|
+
if (parentId) {
|
|
98
|
+
if (!newExpanded.has(parentId)) {
|
|
99
|
+
newExpanded.add(parentId); // Add the parent ID only if not already processed
|
|
100
|
+
processedParents.add(parentId);
|
|
101
|
+
}
|
|
102
|
+
currentId = parentId; // Move up to the next parent
|
|
103
|
+
} else {
|
|
104
|
+
break; // Break the loop if there's no further parent
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
updateExpanded(newExpanded);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Collapse tree nodes of given ids. If the id is of a parent, it also collapses
|
|
114
|
+
* the children inside it.
|
|
115
|
+
* @param ids Ids of nodes to collapse.
|
|
116
|
+
*/
|
|
117
|
+
export function collapseNodes(ids: string[]) {
|
|
118
|
+
const { expanded, updateExpanded, nodeMap } = useTreeViewStore.getState();
|
|
119
|
+
const newExpanded = new Set(expanded);
|
|
120
|
+
|
|
121
|
+
// Function to recursively remove child nodes from the expanded set
|
|
122
|
+
const deleteChildrenFromExpanded = (nodeId: string, visited = new Set()) => {
|
|
123
|
+
if (visited.has(nodeId)) return; // Prevent redundant processing
|
|
124
|
+
visited.add(nodeId);
|
|
125
|
+
|
|
126
|
+
const node = nodeMap.get(nodeId);
|
|
127
|
+
node?.children?.forEach(child => {
|
|
128
|
+
newExpanded.delete(child.id);
|
|
129
|
+
deleteChildrenFromExpanded(child.id, visited);
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
ids.forEach(id => {
|
|
134
|
+
// Remove the node ID from the set and all its children
|
|
135
|
+
newExpanded.delete(id);
|
|
136
|
+
deleteChildrenFromExpanded(id);
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
updateExpanded(newExpanded);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Finds a node in the tree by its ID.
|
|
144
|
+
*
|
|
145
|
+
* @param nodes - The array of tree nodes to search through.
|
|
146
|
+
* @returns The found tree node, or undefined if not found.
|
|
147
|
+
*/
|
|
148
|
+
function findNode(nodes: TreeNode[], parentId: string): TreeNode | undefined {
|
|
149
|
+
for (let node of nodes) {
|
|
150
|
+
if (node.id === parentId) {
|
|
151
|
+
return node;
|
|
152
|
+
} else if (node.children) {
|
|
153
|
+
const found = findNode(node.children, parentId);
|
|
154
|
+
if (found) {
|
|
155
|
+
return found;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
@@ -72,6 +72,8 @@ export interface TreeViewProps extends NodeListProps {
|
|
|
72
72
|
onExpand?: (expandedIds: string[]) => void;
|
|
73
73
|
|
|
74
74
|
preselectedIds?: string[];
|
|
75
|
+
|
|
76
|
+
preExpandedIds?: string[];
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
type CheckboxProps = Omit<RNPaperCheckboxAndroidProps, "onPress" | "status">;
|
|
@@ -107,5 +109,8 @@ export interface TreeViewRef {
|
|
|
107
109
|
expandAll: () => void;
|
|
108
110
|
collapseAll: () => void;
|
|
109
111
|
|
|
112
|
+
expandNodes: (ids: string[]) => void;
|
|
113
|
+
collapseNodes: (ids: string[]) => void;
|
|
114
|
+
|
|
110
115
|
setSearchText: (searchText: string, searchKeys?: string[]) => void;
|
|
111
116
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { useEffect, useRef } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get previous value of a state
|
|
5
|
+
* @param value state
|
|
6
|
+
* @returns previous value of @param value after it's updated
|
|
7
|
+
*/
|
|
8
|
+
export default function usePreviousState<T>(value: T) {
|
|
9
|
+
const ref = useRef<T>();
|
|
10
|
+
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
ref.current = value;
|
|
13
|
+
}, [value]);
|
|
14
|
+
|
|
15
|
+
return ref.current;
|
|
16
|
+
}
|