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.
Files changed (30) hide show
  1. package/README.md +12 -3
  2. package/lib/commonjs/TreeView.js +13 -3
  3. package/lib/commonjs/TreeView.js.map +1 -1
  4. package/lib/commonjs/helpers/expandCollapse.helper.js +88 -21
  5. package/lib/commonjs/helpers/expandCollapse.helper.js.map +1 -1
  6. package/lib/commonjs/helpers/toggleCheckbox.helper.js +0 -1
  7. package/lib/commonjs/helpers/toggleCheckbox.helper.js.map +1 -1
  8. package/lib/commonjs/utils/usePreviousState.js +20 -0
  9. package/lib/commonjs/utils/usePreviousState.js.map +1 -0
  10. package/lib/module/TreeView.js +14 -4
  11. package/lib/module/TreeView.js.map +1 -1
  12. package/lib/module/helpers/expandCollapse.helper.js +86 -21
  13. package/lib/module/helpers/expandCollapse.helper.js.map +1 -1
  14. package/lib/module/helpers/toggleCheckbox.helper.js +0 -1
  15. package/lib/module/helpers/toggleCheckbox.helper.js.map +1 -1
  16. package/lib/module/utils/usePreviousState.js +15 -0
  17. package/lib/module/utils/usePreviousState.js.map +1 -0
  18. package/lib/typescript/TreeView.d.ts.map +1 -1
  19. package/lib/typescript/helpers/expandCollapse.helper.d.ts +12 -0
  20. package/lib/typescript/helpers/expandCollapse.helper.d.ts.map +1 -1
  21. package/lib/typescript/types/treeView.types.d.ts +3 -0
  22. package/lib/typescript/types/treeView.types.d.ts.map +1 -1
  23. package/lib/typescript/utils/usePreviousState.d.ts +7 -0
  24. package/lib/typescript/utils/usePreviousState.d.ts.map +1 -0
  25. package/package.json +2 -2
  26. package/src/TreeView.tsx +25 -4
  27. package/src/helpers/expandCollapse.helper.ts +82 -21
  28. package/src/helpers/toggleCheckbox.helper.ts +1 -1
  29. package/src/types/treeView.types.ts +5 -0
  30. 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
- [![npm version](https://img.shields.io/npm/v/react-native-tree-multi-select)](https://badge.fury.io/js/react-native-tree-multi-select) [![License](https://img.shields.io/github/license/JairajJangle/react-native-tree-multi-select)](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [![Workflow Status](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml/badge.svg)](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [![Supported Platform Badge](https://img.shields.io/badge/platform-android%20%26%20ios-blue)](https://github.com/JairajJangle/react-native-tree-multi-select/tree/main/example) [![GitHub issues](https://img.shields.io/github/issues/JairajJangle/react-native-tree-multi-select)](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue) [![cov](https://raw.githubusercontent.com/JairajJangle/react-native-tree-multi-select/gh-pages/badges/coverage.svg)](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml)
5
+ [![npm version](https://img.shields.io/npm/v/react-native-tree-multi-select)](https://badge.fury.io/js/react-native-tree-multi-select) [![License](https://img.shields.io/github/license/JairajJangle/react-native-tree-multi-select)](https://github.com/JairajJangle/react-native-tree-multi-select/blob/main/LICENSE) [![Workflow Status](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml/badge.svg)](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) [![Supported Platform Badge](https://img.shields.io/badge/platform-android%20%26%20ios-blue)](https://github.com/JairajJangle/react-native-tree-multi-select/tree/main/example) [![GitHub issues](https://img.shields.io/github/issues/JairajJangle/react-native-tree-multi-select)](https://github.com/JairajJangle/react-native-tree-multi-select/issues?q=is%3Aopen+is%3Aissue) [![cov](https://raw.githubusercontent.com/JairajJangle/react-native-tree-multi-select/gh-pages/badges/coverage.svg)](https://github.com/JairajJangle/react-native-tree-multi-select/actions/workflows/ci.yml) ![TS](https://img.shields.io/badge/TypeScript-strict_💪-blue)
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 preselected |
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
- - [ ] Ref function to programatically expand/collapse a certain node
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
 
@@ -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 preselected nodes
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":"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","ignoreList":[]}
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","nodes","found","undefined","has","add","expandAll","nodeMap","keys","collapseAll"],"sourceRoot":"../../../src","sources":["helpers/expandCollapse.helper.ts"],"mappings":";;;;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,EAAU,EAAE;EAC3C,MAAM;IACFC,mBAAmB;IACnBC,QAAQ;IACRC;EACJ,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;;EAE/B;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACL,QAAQ,CAAC;;EAErC;AACJ;AACA;AACA;AACA;EACI,SAASM,0BAA0BA,CAACC,IAAc,EAAE;IAChD,IAAIA,IAAI,CAACC,QAAQ,EAAE;MACf,KAAK,IAAIC,KAAK,IAAIF,IAAI,CAACC,QAAQ,EAAE;QAC7BJ,WAAW,CAACM,MAAM,CAACD,KAAK,CAACX,EAAE,CAAC;QAC5BQ,0BAA0B,CAACG,KAAK,CAAC;MACrC;IACJ;EACJ;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACI,SAASE,QAAQA,CAACC,KAAiB,EAAwB;IACvD,KAAK,IAAIL,IAAI,IAAIK,KAAK,EAAE;MACpB,IAAIL,IAAI,CAACT,EAAE,KAAKA,EAAE,EAAE;QAChB,OAAOS,IAAI;MACf,CAAC,MAAM,IAAIA,IAAI,CAACC,QAAQ,EAAE;QACtB,MAAMK,KAAK,GAAGF,QAAQ,CAACJ,IAAI,CAACC,QAAQ,CAAC;QACrC,IAAIK,KAAK,EAAE;UACP,OAAOA,KAAK;QAChB;MACJ;IACJ;IACA,OAAOC,SAAS;EACpB;;EAEA;EACA,MAAMP,IAAI,GAAGI,QAAQ,CAACZ,mBAAmB,CAAC;EAE1C,IAAIC,QAAQ,CAACe,GAAG,CAACjB,EAAE,CAAC,EAAE;IAClB;IACAM,WAAW,CAACM,MAAM,CAACZ,EAAE,CAAC;IACtB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAIS,IAAI,EAAE;MACND,0BAA0B,CAACC,IAAI,CAAC;IACpC;EACJ,CAAC,MAAM;IACH;IACAH,WAAW,CAACY,GAAG,CAAClB,EAAE,CAAC;EACvB;;EAEA;EACAG,cAAc,CAACG,WAAW,CAAC;AAC/B;AAAC;;AAED;AACA;AACA;AACO,SAASa,SAASA,CAAA,EAAG;EACxB,MAAM;IAAEC,OAAO;IAAEjB;EAAe,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;EAC/D;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACa,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EAC3ClB,cAAc,CAACG,WAAW,CAAC;AAC/B;AAAC;;AAED;AACA;AACA;AACO,SAASgB,WAAWA,CAAA,EAAG;EAC1B,MAAM;IAAEnB;EAAe,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;EACtD;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAS,CAAC;EACrCJ,cAAc,CAACG,WAAW,CAAC;AAC/B;AAAC","ignoreList":[]}
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":";;;;;;;;;;AACA,IAAAA,SAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,EAAU,EAAE;EAC3C,MAAM;IACFC,mBAAmB;IACnBC,QAAQ;IACRC;EACJ,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;;EAE/B;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACL,QAAQ,CAAC;;EAErC;AACJ;AACA;AACA;AACA;EACI,SAASM,0BAA0BA,CAACC,IAAc,EAAE;IAChD,IAAIA,IAAI,CAACC,QAAQ,EAAE;MACf,KAAK,IAAIC,KAAK,IAAIF,IAAI,CAACC,QAAQ,EAAE;QAC7BJ,WAAW,CAACM,MAAM,CAACD,KAAK,CAACX,EAAE,CAAC;QAC5BQ,0BAA0B,CAACG,KAAK,CAAC;MACrC;IACJ;EACJ;;EAEA;EACA,MAAMF,IAAI,GAAGI,QAAQ,CAACZ,mBAAmB,EAAED,EAAE,CAAC;EAE9C,IAAIE,QAAQ,CAACY,GAAG,CAACd,EAAE,CAAC,EAAE;IAClB;IACAM,WAAW,CAACM,MAAM,CAACZ,EAAE,CAAC;IACtB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAIS,IAAI,EAAE;MACND,0BAA0B,CAACC,IAAI,CAAC;IACpC;EACJ,CAAC,MAAM;IACH;IACAH,WAAW,CAACS,GAAG,CAACf,EAAE,CAAC;EACvB;;EAEA;EACAG,cAAc,CAACG,WAAW,CAAC;AAC/B;AAAC;;AAED;AACA;AACA;AACO,SAASU,SAASA,CAAA,EAAG;EACxB,MAAM;IAAEC,OAAO;IAAEd;EAAe,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;EAC/D;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACU,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EAC3Cf,cAAc,CAACG,WAAW,CAAC;AAC/B;AAAC;;AAED;AACA;AACA;AACO,SAASa,WAAWA,CAAA,EAAG;EAC1B,MAAM;IAAEhB;EAAe,CAAC,GAAGC,0BAAgB,CAACC,QAAQ,CAAC,CAAC;EACtD;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAS,CAAC;EACrCJ,cAAc,CAACG,WAAW,CAAC;AAC/B;AAAC;;AAED;AACA;AACA;AACA;AACA;AACO,SAASc,WAAWA,CAACC,GAAa,EAAE;EACvC,MAAM;IAAEnB,QAAQ;IAAEC,cAAc;IAAEmB;EAAiB,CAAC,GAAGlB,0BAAgB,CAACC,QAAQ,CAAC,CAAC;EAClF,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACL,QAAQ,CAAC;EACrC,MAAMqB,gBAAgB,GAAG,IAAIhB,GAAG,CAAC,CAAC,CAAC,CAAE;;EAErCc,GAAG,CAACG,OAAO,CAACxB,EAAE,IAAI;IACdM,WAAW,CAACS,GAAG,CAACf,EAAE,CAAC,CAAC,CAAE;IACtB,IAAIyB,SAAS,GAAGzB,EAAE;IAElB,OAAOyB,SAAS,IAAIH,gBAAgB,CAACR,GAAG,CAACW,SAAS,CAAC,IAAI,CAACF,gBAAgB,CAACT,GAAG,CAACW,SAAS,CAAC,EAAE;MACrF,MAAMC,QAAQ,GAAGJ,gBAAgB,CAACK,GAAG,CAACF,SAAS,CAAC;MAChD,IAAIC,QAAQ,EAAE;QACV,IAAI,CAACpB,WAAW,CAACQ,GAAG,CAACY,QAAQ,CAAC,EAAE;UAC5BpB,WAAW,CAACS,GAAG,CAACW,QAAQ,CAAC,CAAC,CAAE;UAC5BH,gBAAgB,CAACR,GAAG,CAACW,QAAQ,CAAC;QAClC;QACAD,SAAS,GAAGC,QAAQ,CAAC,CAAE;MAC3B,CAAC,MAAM;QACH,MAAM,CAAE;MACZ;IACJ;EACJ,CAAC,CAAC;EAEFvB,cAAc,CAACG,WAAW,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASsB,aAAaA,CAACP,GAAa,EAAE;EACzC,MAAM;IAAEnB,QAAQ;IAAEC,cAAc;IAAEc;EAAQ,CAAC,GAAGb,0BAAgB,CAACC,QAAQ,CAAC,CAAC;EACzE,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACL,QAAQ,CAAC;;EAErC;EACA,MAAMM,0BAA0B,GAAGA,CAACqB,MAAc,EAAEC,OAAO,GAAG,IAAIvB,GAAG,CAAC,CAAC,KAAK;IAAA,IAAAwB,cAAA;IACxE,IAAID,OAAO,CAAChB,GAAG,CAACe,MAAM,CAAC,EAAE,OAAO,CAAC;IACjCC,OAAO,CAACf,GAAG,CAACc,MAAM,CAAC;IAEnB,MAAMpB,IAAI,GAAGQ,OAAO,CAACU,GAAG,CAACE,MAAM,CAAC;IAChCpB,IAAI,aAAJA,IAAI,gBAAAsB,cAAA,GAAJtB,IAAI,CAAEC,QAAQ,cAAAqB,cAAA,eAAdA,cAAA,CAAgBP,OAAO,CAACb,KAAK,IAAI;MAC7BL,WAAW,CAACM,MAAM,CAACD,KAAK,CAACX,EAAE,CAAC;MAC5BQ,0BAA0B,CAACG,KAAK,CAACX,EAAE,EAAE8B,OAAO,CAAC;IACjD,CAAC,CAAC;EACN,CAAC;EAEDT,GAAG,CAACG,OAAO,CAACxB,EAAE,IAAI;IACd;IACAM,WAAW,CAACM,MAAM,CAACZ,EAAE,CAAC;IACtBQ,0BAA0B,CAACR,EAAE,CAAC;EAClC,CAAC,CAAC;EAEFG,cAAc,CAACG,WAAW,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,SAASO,QAAQA,CAACmB,KAAiB,EAAEN,QAAgB,EAAwB;EACzE,KAAK,IAAIjB,IAAI,IAAIuB,KAAK,EAAE;IACpB,IAAIvB,IAAI,CAACT,EAAE,KAAK0B,QAAQ,EAAE;MACtB,OAAOjB,IAAI;IACf,CAAC,MAAM,IAAIA,IAAI,CAACC,QAAQ,EAAE;MACtB,MAAMuB,KAAK,GAAGpB,QAAQ,CAACJ,IAAI,CAACC,QAAQ,EAAEgB,QAAQ,CAAC;MAC/C,IAAIO,KAAK,EAAE;QACP,OAAOA,KAAK;MAChB;IACJ;EACJ;EACA,OAAOC,SAAS;AACpB","ignoreList":[]}
@@ -166,5 +166,4 @@ function toggleCheckboxes(ids, forceCheck) {
166
166
  updateChecked(tempChecked);
167
167
  updateIndeterminate(tempIndeterminate);
168
168
  }
169
- ;
170
169
  //# sourceMappingURL=toggleCheckbox.helper.js.map
@@ -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":"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","ignoreList":[]}
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":"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","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":[]}
@@ -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 preselected nodes
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":"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","ignoreList":[]}
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","nodes","found","undefined","has","add","expandAll","nodeMap","keys","collapseAll"],"sourceRoot":"../../../src","sources":["helpers/expandCollapse.helper.ts"],"mappings":"AACA,SAASA,gBAAgB,QAAQ,yBAAyB;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,EAAU,EAAE;EAC3C,MAAM;IACFC,mBAAmB;IACnBC,QAAQ;IACRC;EACJ,CAAC,GAAGL,gBAAgB,CAACM,QAAQ,CAAC,CAAC;;EAE/B;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACJ,QAAQ,CAAC;;EAErC;AACJ;AACA;AACA;AACA;EACI,SAASK,0BAA0BA,CAACC,IAAc,EAAE;IAChD,IAAIA,IAAI,CAACC,QAAQ,EAAE;MACf,KAAK,IAAIC,KAAK,IAAIF,IAAI,CAACC,QAAQ,EAAE;QAC7BJ,WAAW,CAACM,MAAM,CAACD,KAAK,CAACV,EAAE,CAAC;QAC5BO,0BAA0B,CAACG,KAAK,CAAC;MACrC;IACJ;EACJ;;EAEA;AACJ;AACA;AACA;AACA;AACA;EACI,SAASE,QAAQA,CAACC,KAAiB,EAAwB;IACvD,KAAK,IAAIL,IAAI,IAAIK,KAAK,EAAE;MACpB,IAAIL,IAAI,CAACR,EAAE,KAAKA,EAAE,EAAE;QAChB,OAAOQ,IAAI;MACf,CAAC,MAAM,IAAIA,IAAI,CAACC,QAAQ,EAAE;QACtB,MAAMK,KAAK,GAAGF,QAAQ,CAACJ,IAAI,CAACC,QAAQ,CAAC;QACrC,IAAIK,KAAK,EAAE;UACP,OAAOA,KAAK;QAChB;MACJ;IACJ;IACA,OAAOC,SAAS;EACpB;;EAEA;EACA,MAAMP,IAAI,GAAGI,QAAQ,CAACX,mBAAmB,CAAC;EAE1C,IAAIC,QAAQ,CAACc,GAAG,CAAChB,EAAE,CAAC,EAAE;IAClB;IACAK,WAAW,CAACM,MAAM,CAACX,EAAE,CAAC;IACtB;AACR;AACA;AACA;AACA;AACA;AACA;IACQ,IAAIQ,IAAI,EAAE;MACND,0BAA0B,CAACC,IAAI,CAAC;IACpC;EACJ,CAAC,MAAM;IACH;IACAH,WAAW,CAACY,GAAG,CAACjB,EAAE,CAAC;EACvB;;EAEA;EACAG,cAAc,CAACE,WAAW,CAAC;AAC/B;AAAC;;AAED;AACA;AACA;AACA,OAAO,SAASa,SAASA,CAAA,EAAG;EACxB,MAAM;IAAEC,OAAO;IAAEhB;EAAe,CAAC,GAAGL,gBAAgB,CAACM,QAAQ,CAAC,CAAC;EAC/D;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAACa,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;EAC3CjB,cAAc,CAACE,WAAW,CAAC;AAC/B;AAAC;;AAED;AACA;AACA;AACA,OAAO,SAASgB,WAAWA,CAAA,EAAG;EAC1B,MAAM;IAAElB;EAAe,CAAC,GAAGL,gBAAgB,CAACM,QAAQ,CAAC,CAAC;EACtD;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAS,CAAC;EACrCH,cAAc,CAACE,WAAW,CAAC;AAC/B;AAAC","ignoreList":[]}
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":[]}
@@ -161,5 +161,4 @@ export function toggleCheckboxes(ids, forceCheck) {
161
161
  updateChecked(tempChecked);
162
162
  updateIndeterminate(tempIndeterminate);
163
163
  }
164
- ;
165
164
  //# sourceMappingURL=toggleCheckbox.helper.js.map
@@ -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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","ignoreList":[]}
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;AAqIhC,eAAO,MAAM,QAAQ,8GAAwB,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,QAmE5C;AAED;;GAEG;AACH,wBAAgB,SAAS,SAKxB;AAED;;GAEG;AACH,wBAAgB,WAAW,SAK1B"}
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":"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"}
1
+ {"version":3,"file":"treeView.types.d.ts","sourceRoot":"","sources":["../../../src/types/treeView.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Get previous value of a state
3
+ * @param value state
4
+ * @returns previous value of @param value after it's updated
5
+ */
6
+ export default function usePreviousState<T>(value: T): T | undefined;
7
+ //# sourceMappingURL=usePreviousState.d.ts.map
@@ -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.0",
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": "^yarn@1.22.15",
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 preselected nodes
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
- }, [getIds, initialTreeViewData, searchText, updateExpanded]);
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
+ }
@@ -163,4 +163,4 @@ export function toggleCheckboxes(ids: string[], forceCheck?: boolean) {
163
163
  // Update the state object with the new checked and indeterminate sets.
164
164
  updateChecked(tempChecked);
165
165
  updateIndeterminate(tempIndeterminate);
166
- };
166
+ }
@@ -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
+ }