react-native-tree-multi-select 0.5.3 → 0.8.3
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 +5 -6
- package/lib/commonjs/TreeView.js +42 -48
- package/lib/commonjs/TreeView.js.map +1 -1
- package/lib/commonjs/components/NodeList.js +98 -92
- package/lib/commonjs/components/NodeList.js.map +1 -1
- package/lib/commonjs/helpers/expandCollapse.helper.js +21 -8
- package/lib/commonjs/helpers/expandCollapse.helper.js.map +1 -1
- package/lib/commonjs/helpers/initNodeMap.helper.js +14 -3
- package/lib/commonjs/helpers/initNodeMap.helper.js.map +1 -1
- package/lib/commonjs/helpers/selectAll.helper.js +32 -14
- package/lib/commonjs/helpers/selectAll.helper.js.map +1 -1
- package/lib/commonjs/helpers/toggleCheckbox.helper.js +34 -27
- package/lib/commonjs/helpers/toggleCheckbox.helper.js.map +1 -1
- package/lib/commonjs/store/global.store.js +92 -0
- package/lib/commonjs/store/global.store.js.map +1 -0
- package/lib/module/TreeView.js +42 -46
- package/lib/module/TreeView.js.map +1 -1
- package/lib/module/components/NodeList.js +96 -92
- package/lib/module/components/NodeList.js.map +1 -1
- package/lib/module/helpers/expandCollapse.helper.js +21 -8
- package/lib/module/helpers/expandCollapse.helper.js.map +1 -1
- package/lib/module/helpers/initNodeMap.helper.js +14 -3
- package/lib/module/helpers/initNodeMap.helper.js.map +1 -1
- package/lib/module/helpers/selectAll.helper.js +32 -14
- package/lib/module/helpers/selectAll.helper.js.map +1 -1
- package/lib/module/helpers/toggleCheckbox.helper.js +34 -27
- package/lib/module/helpers/toggleCheckbox.helper.js.map +1 -1
- package/lib/module/store/global.store.js +85 -0
- package/lib/module/store/global.store.js.map +1 -0
- package/lib/typescript/TreeView.d.ts.map +1 -1
- package/lib/typescript/components/NodeList.d.ts.map +1 -1
- package/lib/typescript/helpers/expandCollapse.helper.d.ts.map +1 -1
- package/lib/typescript/helpers/initNodeMap.helper.d.ts.map +1 -1
- package/lib/typescript/helpers/selectAll.helper.d.ts.map +1 -1
- package/lib/typescript/helpers/toggleCheckbox.helper.d.ts.map +1 -1
- package/lib/typescript/store/global.store.d.ts +24 -0
- package/lib/typescript/store/global.store.d.ts.map +1 -0
- package/lib/typescript/types/treeView.types.d.ts +0 -4
- package/lib/typescript/types/treeView.types.d.ts.map +1 -1
- package/package.json +23 -14
- package/src/TreeView.tsx +53 -62
- package/src/components/NodeList.tsx +102 -107
- package/src/helpers/expandCollapse.helper.ts +12 -12
- package/src/helpers/initNodeMap.helper.ts +15 -5
- package/src/helpers/selectAll.helper.ts +20 -13
- package/src/helpers/toggleCheckbox.helper.ts +36 -24
- package/src/store/global.store.ts +111 -0
- package/src/types/treeView.types.ts +0 -5
- package/lib/commonjs/signals/global.signals.js +0 -42
- package/lib/commonjs/signals/global.signals.js.map +0 -1
- package/lib/module/signals/global.signals.js +0 -26
- package/lib/module/signals/global.signals.js.map +0 -1
- package/lib/typescript/signals/global.signals.d.ts +0 -11
- package/lib/typescript/signals/global.signals.d.ts.map +0 -1
- package/src/signals/global.signals.ts +0 -36
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
2
|
-
import React from "react";
|
|
2
|
+
import React, { useEffect, useState } from "react";
|
|
3
3
|
import { View, StyleSheet, TouchableOpacity } from "react-native";
|
|
4
|
-
import { computed, effect, useComputed, useSignal } from "@preact/signals-react";
|
|
5
4
|
import { FlashList } from "@shopify/flash-list";
|
|
6
|
-
import {
|
|
5
|
+
import { useStore } from "../store/global.store";
|
|
7
6
|
import { doesNodeContainSearchTerm, handleToggleExpand, toggleCheckboxes } from "../helpers";
|
|
8
7
|
import { CheckboxView } from "./CheckboxView";
|
|
9
8
|
import CustomExpandCollapseIcon from "./CustomExpandCollapseIcon";
|
|
@@ -17,69 +16,72 @@ function _NodeList(props) {
|
|
|
17
16
|
ExpandCollapseIconComponent,
|
|
18
17
|
ExpandCollapseTouchableComponent
|
|
19
18
|
} = props;
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const flattenedFilteredNodes = React.useMemo(() => {
|
|
47
|
-
return computed(() => {
|
|
48
|
-
const flattenTreeData = function (_nodes) {
|
|
49
|
-
let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
50
|
-
let flattened = [];
|
|
51
|
-
for (let node of _nodes) {
|
|
52
|
-
flattened.push({
|
|
53
|
-
...node,
|
|
54
|
-
level
|
|
55
|
-
});
|
|
56
|
-
if (node.children && expanded.value.has(node.id)) {
|
|
57
|
-
flattened = [...flattened, ...flattenTreeData(node.children, level + 1)];
|
|
19
|
+
const {
|
|
20
|
+
expanded,
|
|
21
|
+
globalData,
|
|
22
|
+
updatedInnerMostChildrenIds,
|
|
23
|
+
searchKeys,
|
|
24
|
+
searchText
|
|
25
|
+
} = useStore();
|
|
26
|
+
const [filteredTree, setFilteredTree] = useState([]);
|
|
27
|
+
const [flattenedFilteredNodes, setFlattenedFilteredNodes] = useState([]);
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
const searchTrimmed = searchText.trim().toLowerCase();
|
|
30
|
+
const filterTreeData = _nodes => {
|
|
31
|
+
let filtered = [];
|
|
32
|
+
for (let node of _nodes) {
|
|
33
|
+
if (!searchTrimmed || doesNodeContainSearchTerm(node, searchTrimmed, searchKeys)) {
|
|
34
|
+
// If node itself matches, include it and all its descendants
|
|
35
|
+
filtered.push(node);
|
|
36
|
+
} else if (node.children) {
|
|
37
|
+
// If node does not match, check its children and include them if they match
|
|
38
|
+
const childMatches = filterTreeData(node.children);
|
|
39
|
+
if (childMatches.length > 0) {
|
|
40
|
+
// If any children match, include the node, replacing its children with the matching ones
|
|
41
|
+
filtered.push({
|
|
42
|
+
...node,
|
|
43
|
+
children: childMatches
|
|
44
|
+
});
|
|
58
45
|
}
|
|
59
46
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}, []);
|
|
47
|
+
}
|
|
48
|
+
return filtered;
|
|
49
|
+
};
|
|
50
|
+
const tempFilterTree = filterTreeData(globalData);
|
|
51
|
+
setFilteredTree(tempFilterTree);
|
|
52
|
+
}, [searchText, searchKeys, globalData]);
|
|
66
53
|
React.useEffect(() => {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
54
|
+
const flattenTreeData = function (_nodes) {
|
|
55
|
+
let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
56
|
+
let flattened = [];
|
|
57
|
+
for (let node of _nodes) {
|
|
58
|
+
flattened.push({
|
|
59
|
+
...node,
|
|
60
|
+
level
|
|
61
|
+
});
|
|
62
|
+
if (node.children && expanded.has(node.id)) {
|
|
63
|
+
flattened = [...flattened, ...flattenTreeData(node.children, level + 1)];
|
|
76
64
|
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}, []);
|
|
65
|
+
}
|
|
66
|
+
return flattened;
|
|
67
|
+
};
|
|
68
|
+
const tempFlattenTreeData = flattenTreeData(filteredTree);
|
|
69
|
+
setFlattenedFilteredNodes(tempFlattenTreeData);
|
|
70
|
+
}, [filteredTree, expanded]);
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
const allLeafIds = [];
|
|
73
|
+
const getLeafNodes = _nodes => {
|
|
74
|
+
for (let node of _nodes) {
|
|
75
|
+
if (node.children) {
|
|
76
|
+
getLeafNodes(node.children);
|
|
77
|
+
} else {
|
|
78
|
+
allLeafIds.push(node.id);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
getLeafNodes(filteredTree);
|
|
83
|
+
updatedInnerMostChildrenIds(allLeafIds);
|
|
84
|
+
}, [filteredTree, updatedInnerMostChildrenIds]);
|
|
83
85
|
const nodeRenderer = React.useCallback(_ref => {
|
|
84
86
|
let {
|
|
85
87
|
item
|
|
@@ -99,7 +101,7 @@ function _NodeList(props) {
|
|
|
99
101
|
removeClippedSubviews: true,
|
|
100
102
|
keyboardShouldPersistTaps: "handled",
|
|
101
103
|
drawDistance: 50,
|
|
102
|
-
data: flattenedFilteredNodes
|
|
104
|
+
data: flattenedFilteredNodes,
|
|
103
105
|
renderItem: nodeRenderer,
|
|
104
106
|
keyExtractor: keyExtractor,
|
|
105
107
|
ListHeaderComponent: /*#__PURE__*/React.createElement(HeaderFooterView, null),
|
|
@@ -112,42 +114,44 @@ function HeaderFooterView() {
|
|
|
112
114
|
style: styles.defaultHeaderFooter
|
|
113
115
|
});
|
|
114
116
|
}
|
|
117
|
+
function getValue(isChecked, isIndeterminate) {
|
|
118
|
+
if (isIndeterminate) {
|
|
119
|
+
return 'indeterminate';
|
|
120
|
+
} else if (isChecked) {
|
|
121
|
+
return true;
|
|
122
|
+
} else {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
115
126
|
const Node = /*#__PURE__*/React.memo(_Node);
|
|
116
127
|
function _Node(props) {
|
|
117
|
-
var _node$
|
|
128
|
+
var _node$children;
|
|
118
129
|
const {
|
|
119
|
-
node
|
|
130
|
+
node,
|
|
120
131
|
level,
|
|
121
132
|
checkBoxViewStyleProps,
|
|
122
133
|
ExpandCollapseIconComponent = CustomExpandCollapseIcon,
|
|
123
134
|
CheckboxComponent = CheckboxView,
|
|
124
135
|
ExpandCollapseTouchableComponent = TouchableOpacity
|
|
125
136
|
} = props;
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
}
|
|
131
|
-
const isChecked =
|
|
132
|
-
const isIndeterminate =
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
} else {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
const isExpanded = useComputed(() => expanded.value.has(node.value.id));
|
|
137
|
+
const {
|
|
138
|
+
expanded,
|
|
139
|
+
checked,
|
|
140
|
+
indeterminate
|
|
141
|
+
} = useStore();
|
|
142
|
+
const isChecked = checked.has(node.id);
|
|
143
|
+
const isIndeterminate = indeterminate.has(node.id);
|
|
144
|
+
const isExpanded = expanded.has(node.id);
|
|
145
|
+
const [value, setValue] = useState(getValue(isChecked, isIndeterminate));
|
|
146
|
+
useEffect(() => {
|
|
147
|
+
setValue(getValue(isChecked, isIndeterminate));
|
|
148
|
+
}, [isChecked, isIndeterminate]);
|
|
143
149
|
const _onToggleExpand = React.useCallback(() => {
|
|
144
|
-
handleToggleExpand(node.
|
|
145
|
-
|
|
146
|
-
}, []);
|
|
150
|
+
handleToggleExpand(node.id);
|
|
151
|
+
}, [node.id]);
|
|
147
152
|
const _onCheck = React.useCallback(() => {
|
|
148
|
-
toggleCheckboxes([node.
|
|
149
|
-
|
|
150
|
-
}, []);
|
|
153
|
+
toggleCheckboxes([node.id]);
|
|
154
|
+
}, [node.id]);
|
|
151
155
|
return /*#__PURE__*/React.createElement(View, {
|
|
152
156
|
style: [styles.nodeParentView, {
|
|
153
157
|
marginLeft: level * 15
|
|
@@ -155,14 +159,14 @@ function _Node(props) {
|
|
|
155
159
|
}, /*#__PURE__*/React.createElement(View, {
|
|
156
160
|
style: styles.nodeCheckboxAndArrowRow
|
|
157
161
|
}, /*#__PURE__*/React.createElement(CheckboxComponent, _extends({
|
|
158
|
-
text: node.
|
|
162
|
+
text: node.name,
|
|
159
163
|
onValueChange: _onCheck,
|
|
160
|
-
value: value
|
|
161
|
-
}, checkBoxViewStyleProps)), (_node$
|
|
164
|
+
value: value
|
|
165
|
+
}, checkBoxViewStyleProps)), (_node$children = node.children) !== null && _node$children !== void 0 && _node$children.length ? /*#__PURE__*/React.createElement(ExpandCollapseTouchableComponent, {
|
|
162
166
|
style: styles.nodeExpandableArrowTouchable,
|
|
163
167
|
onPress: _onToggleExpand
|
|
164
168
|
}, /*#__PURE__*/React.createElement(ExpandCollapseIconComponent, {
|
|
165
|
-
isExpanded: isExpanded
|
|
169
|
+
isExpanded: isExpanded
|
|
166
170
|
})) : null));
|
|
167
171
|
}
|
|
168
172
|
;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useState","View","StyleSheet","TouchableOpacity","FlashList","useStore","doesNodeContainSearchTerm","handleToggleExpand","toggleCheckboxes","CheckboxView","CustomExpandCollapseIcon","NodeList","memo","_NodeList","props","treeFlashListProps","checkBoxViewStyleProps","CheckboxComponent","ExpandCollapseIconComponent","ExpandCollapseTouchableComponent","expanded","globalData","updatedInnerMostChildrenIds","searchKeys","searchText","filteredTree","setFilteredTree","flattenedFilteredNodes","setFlattenedFilteredNodes","searchTrimmed","trim","toLowerCase","filterTreeData","_nodes","filtered","node","push","children","childMatches","length","tempFilterTree","flattenTreeData","level","arguments","undefined","flattened","has","id","tempFlattenTreeData","allLeafIds","getLeafNodes","nodeRenderer","useCallback","_ref","item","createElement","Node","keyExtractor","_extends","estimatedItemSize","removeClippedSubviews","keyboardShouldPersistTaps","drawDistance","data","renderItem","ListHeaderComponent","HeaderFooterView","ListFooterComponent","style","styles","defaultHeaderFooter","getValue","isChecked","isIndeterminate","_Node","_node$children","checked","indeterminate","isExpanded","value","setValue","_onToggleExpand","_onCheck","nodeParentView","marginLeft","nodeCheckboxAndArrowRow","text","name","onValueChange","nodeExpandableArrowTouchable","onPress","create","padding","flex","flexDirection","alignItems","minWidth"],"sourceRoot":"../../../src","sources":["components/NodeList.tsx"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useStore } from "../store/global.store";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Toggle the expanded state of a tree node by its ID.
|
|
@@ -9,8 +9,14 @@ import { expanded, globalData, nodeMap } from "../signals/global.signals";
|
|
|
9
9
|
* @param id - The ID of the tree node to toggle.
|
|
10
10
|
*/
|
|
11
11
|
export function handleToggleExpand(id) {
|
|
12
|
+
const {
|
|
13
|
+
globalData,
|
|
14
|
+
expanded,
|
|
15
|
+
updateExpanded
|
|
16
|
+
} = useStore.getState();
|
|
17
|
+
|
|
12
18
|
// Create a new Set based on the current expanded state
|
|
13
|
-
const newExpanded = new Set(expanded
|
|
19
|
+
const newExpanded = new Set(expanded);
|
|
14
20
|
|
|
15
21
|
/**
|
|
16
22
|
* Recursively deletes a node and its descendants from the expanded set.
|
|
@@ -47,8 +53,8 @@ export function handleToggleExpand(id) {
|
|
|
47
53
|
}
|
|
48
54
|
|
|
49
55
|
// Find the node to expand or collapse
|
|
50
|
-
const node = findNode(globalData
|
|
51
|
-
if (expanded.
|
|
56
|
+
const node = findNode(globalData);
|
|
57
|
+
if (expanded.has(id)) {
|
|
52
58
|
// If the node is currently expanded, collapse it and its descendants
|
|
53
59
|
newExpanded.delete(id);
|
|
54
60
|
if (node) {
|
|
@@ -60,7 +66,7 @@ export function handleToggleExpand(id) {
|
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
// Set the new expanded state
|
|
63
|
-
|
|
69
|
+
updateExpanded(newExpanded);
|
|
64
70
|
}
|
|
65
71
|
;
|
|
66
72
|
|
|
@@ -68,9 +74,13 @@ export function handleToggleExpand(id) {
|
|
|
68
74
|
* Expand all nodes in the tree.
|
|
69
75
|
*/
|
|
70
76
|
export function expandAll() {
|
|
77
|
+
const {
|
|
78
|
+
nodeMap,
|
|
79
|
+
updateExpanded
|
|
80
|
+
} = useStore.getState();
|
|
71
81
|
// Create a new Set containing the IDs of all nodes
|
|
72
|
-
const newExpanded = new Set(nodeMap.
|
|
73
|
-
|
|
82
|
+
const newExpanded = new Set(nodeMap.keys());
|
|
83
|
+
updateExpanded(newExpanded);
|
|
74
84
|
}
|
|
75
85
|
;
|
|
76
86
|
|
|
@@ -78,9 +88,12 @@ export function expandAll() {
|
|
|
78
88
|
* Collapse all nodes in the tree.
|
|
79
89
|
*/
|
|
80
90
|
export function collapseAll() {
|
|
91
|
+
const {
|
|
92
|
+
updateExpanded
|
|
93
|
+
} = useStore.getState();
|
|
81
94
|
// Create an empty Set
|
|
82
95
|
const newExpanded = new Set();
|
|
83
|
-
|
|
96
|
+
updateExpanded(newExpanded);
|
|
84
97
|
}
|
|
85
98
|
;
|
|
86
99
|
//# sourceMappingURL=expandCollapse.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["useStore","handleToggleExpand","id","globalData","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,QAAQ,QAAQ,uBAAuB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAACC,EAAU,EAAE;EAC3C,MAAM;IAAEC,UAAU;IAAEC,QAAQ;IAAEC;EAAe,CAAC,GAAGL,QAAQ,CAACM,QAAQ,CAAC,CAAC;;EAEpE;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,UAAU,CAAC;EAEjC,IAAIC,QAAQ,CAACc,GAAG,CAAChB,EAAE,CAAC,EAAE;IAClB;IACAK,WAAW,CAACM,MAAM,CAACX,EAAE,CAAC;IACtB,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,QAAQ,CAACM,QAAQ,CAAC,CAAC;EACvD;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,QAAQ,CAACM,QAAQ,CAAC,CAAC;EAC9C;EACA,MAAMC,WAAW,GAAG,IAAIC,GAAG,CAAS,CAAC;EACrCH,cAAc,CAACE,WAAW,CAAC;AAC/B;AAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useStore } from "../store/global.store";
|
|
2
2
|
import { toggleCheckboxes } from "./toggleCheckbox.helper";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -12,6 +12,15 @@ import { toggleCheckboxes } from "./toggleCheckbox.helper";
|
|
|
12
12
|
*/
|
|
13
13
|
export function initializeNodeMaps(initialData) {
|
|
14
14
|
let preselectedIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
15
|
+
const {
|
|
16
|
+
updateNodeMap,
|
|
17
|
+
updateChildToParentMap
|
|
18
|
+
} = useStore.getState();
|
|
19
|
+
const tempNodeMap = new Map();
|
|
20
|
+
;
|
|
21
|
+
const tempChildToParentMap = new Map();
|
|
22
|
+
;
|
|
23
|
+
|
|
15
24
|
/**
|
|
16
25
|
* Recursively processes nodes, adding them to the nodeMap and childToParentMap.
|
|
17
26
|
*
|
|
@@ -22,9 +31,9 @@ export function initializeNodeMaps(initialData) {
|
|
|
22
31
|
let parentId = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
23
32
|
nodes.forEach(node => {
|
|
24
33
|
// Each node is added to the nodeMap with its ID as the key
|
|
25
|
-
|
|
34
|
+
tempNodeMap.set(node.id, node);
|
|
26
35
|
// If the node has a parent, its ID is mapped to the parent's ID in the childToParentMap
|
|
27
|
-
if (parentId)
|
|
36
|
+
if (parentId) tempChildToParentMap.set(node.id, parentId);
|
|
28
37
|
// If the node has children, recursively process them
|
|
29
38
|
if (node.children) processNodes(node.children, node.id);
|
|
30
39
|
});
|
|
@@ -32,6 +41,8 @@ export function initializeNodeMaps(initialData) {
|
|
|
32
41
|
|
|
33
42
|
// Begin processing with the initial tree data
|
|
34
43
|
processNodes(initialData);
|
|
44
|
+
updateNodeMap(tempNodeMap);
|
|
45
|
+
updateChildToParentMap(tempChildToParentMap);
|
|
35
46
|
|
|
36
47
|
// Check any preselected nodes
|
|
37
48
|
toggleCheckboxes(preselectedIds, true);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["useStore","toggleCheckboxes","initializeNodeMaps","initialData","preselectedIds","arguments","length","undefined","updateNodeMap","updateChildToParentMap","getState","tempNodeMap","Map","tempChildToParentMap","processNodes","nodes","parentId","forEach","node","set","id","children"],"sourceRoot":"../../../src","sources":["helpers/initNodeMap.helper.ts"],"mappings":"AACA,SACIA,QAAQ,QACL,uBAAuB;AAC9B,SAASC,gBAAgB,QAAQ,yBAAyB;;AAE1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAC9BC,WAAuB,EAEzB;EAAA,IADEC,cAAwB,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAE7B,MAAM;IACFG,aAAa;IACbC;EACJ,CAAC,GAAGT,QAAQ,CAACU,QAAQ,CAAC,CAAC;EAEvB,MAAMC,WAAkC,GAAG,IAAIC,GAAG,CAAC,CAAC;EAAC;EACrD,MAAMC,oBAAyC,GAAG,IAAID,GAAG,CAAC,CAAC;EAAC;;EAE5D;AACJ;AACA;AACA;AACA;AACA;EACI,MAAME,YAAY,GAAG,SAAAA,CACjBC,KAAiB,EAEhB;IAAA,IADDC,QAAuB,GAAAX,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;IAE9BU,KAAK,CAACE,OAAO,CAAEC,IAAI,IAAK;MACpB;MACAP,WAAW,CAACQ,GAAG,CAACD,IAAI,CAACE,EAAE,EAAEF,IAAI,CAAC;MAC9B;MACA,IAAIF,QAAQ,EAAEH,oBAAoB,CAACM,GAAG,CAACD,IAAI,CAACE,EAAE,EAAEJ,QAAQ,CAAC;MACzD;MACA,IAAIE,IAAI,CAACG,QAAQ,EAAEP,YAAY,CAACI,IAAI,CAACG,QAAQ,EAAEH,IAAI,CAACE,EAAE,CAAC;IAC3D,CAAC,CAAC;EACN,CAAC;;EAED;EACAN,YAAY,CAACX,WAAW,CAAC;EAEzBK,aAAa,CAACG,WAAW,CAAC;EAC1BF,sBAAsB,CAACI,oBAAoB,CAAC;;EAE5C;EACAZ,gBAAgB,CAACG,cAAc,EAAE,IAAI,CAAC;AAC1C"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useStore } from "../store/global.store";
|
|
2
2
|
import { toggleCheckboxes } from "./toggleCheckbox.helper";
|
|
3
3
|
|
|
4
4
|
/**
|
|
@@ -7,12 +7,17 @@ import { toggleCheckboxes } from "./toggleCheckbox.helper";
|
|
|
7
7
|
* If there is no search text, then it selects all nodes; otherwise, it selects all visible nodes.
|
|
8
8
|
*/
|
|
9
9
|
export function selectAllFiltered() {
|
|
10
|
+
const {
|
|
11
|
+
searchText,
|
|
12
|
+
innerMostChildrenIds
|
|
13
|
+
} = useStore.getState();
|
|
14
|
+
|
|
10
15
|
// If there's no search text, select all nodes
|
|
11
|
-
if (!searchText
|
|
16
|
+
if (!searchText) {
|
|
12
17
|
selectAll();
|
|
13
18
|
} else {
|
|
14
19
|
// If there's search text, only select the visible nodes
|
|
15
|
-
toggleCheckboxes(innerMostChildrenIds
|
|
20
|
+
toggleCheckboxes(innerMostChildrenIds, true);
|
|
16
21
|
}
|
|
17
22
|
}
|
|
18
23
|
;
|
|
@@ -23,12 +28,17 @@ export function selectAllFiltered() {
|
|
|
23
28
|
* If there is no search text, then it unselects all nodes; otherwise, it unselects all visible nodes.
|
|
24
29
|
*/
|
|
25
30
|
export function unselectAllFiltered() {
|
|
31
|
+
const {
|
|
32
|
+
searchText,
|
|
33
|
+
innerMostChildrenIds
|
|
34
|
+
} = useStore.getState();
|
|
35
|
+
|
|
26
36
|
// If there's no search text, unselect all nodes
|
|
27
|
-
if (!searchText
|
|
37
|
+
if (!searchText) {
|
|
28
38
|
unselectAll();
|
|
29
39
|
} else {
|
|
30
40
|
// If there's search text, only unselect the visible nodes
|
|
31
|
-
toggleCheckboxes(innerMostChildrenIds
|
|
41
|
+
toggleCheckboxes(innerMostChildrenIds, false);
|
|
32
42
|
}
|
|
33
43
|
}
|
|
34
44
|
;
|
|
@@ -39,13 +49,18 @@ export function unselectAllFiltered() {
|
|
|
39
49
|
* This function selects all nodes by adding all node ids to the checked set and clearing the indeterminate set.
|
|
40
50
|
*/
|
|
41
51
|
export function selectAll() {
|
|
52
|
+
const {
|
|
53
|
+
nodeMap,
|
|
54
|
+
updateChecked,
|
|
55
|
+
updateIndeterminate
|
|
56
|
+
} = useStore.getState();
|
|
57
|
+
|
|
42
58
|
// Create a new set containing the ids of all nodes
|
|
43
|
-
const newChecked = new Set(nodeMap.
|
|
59
|
+
const newChecked = new Set(nodeMap.keys());
|
|
44
60
|
// Update the state to mark all nodes as checked
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
};
|
|
61
|
+
|
|
62
|
+
updateChecked(newChecked);
|
|
63
|
+
updateIndeterminate(new Set());
|
|
49
64
|
}
|
|
50
65
|
;
|
|
51
66
|
|
|
@@ -55,11 +70,14 @@ export function selectAll() {
|
|
|
55
70
|
* This function unselects all nodes by clearing both the checked and indeterminate sets.
|
|
56
71
|
*/
|
|
57
72
|
export function unselectAll() {
|
|
73
|
+
const {
|
|
74
|
+
updateChecked,
|
|
75
|
+
updateIndeterminate
|
|
76
|
+
} = useStore.getState();
|
|
58
77
|
// Update the state to mark all nodes as unchecked
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
};
|
|
78
|
+
|
|
79
|
+
updateChecked(new Set());
|
|
80
|
+
updateIndeterminate(new Set());
|
|
63
81
|
}
|
|
64
82
|
;
|
|
65
83
|
//# sourceMappingURL=selectAll.helper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["useStore","toggleCheckboxes","selectAllFiltered","searchText","innerMostChildrenIds","getState","selectAll","unselectAllFiltered","unselectAll","nodeMap","updateChecked","updateIndeterminate","newChecked","Set","keys"],"sourceRoot":"../../../src","sources":["helpers/selectAll.helper.ts"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,gBAAgB,QAAQ,yBAAyB;;AAE1D;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAAA,EAAG;EAChC,MAAM;IAAEC,UAAU;IAAEC;EAAqB,CAAC,GAAGJ,QAAQ,CAACK,QAAQ,CAAC,CAAC;;EAGhE;EACA,IAAI,CAACF,UAAU,EAAE;IACbG,SAAS,CAAC,CAAC;EACf,CAAC,MAAM;IACH;IACAL,gBAAgB,CAACG,oBAAoB,EAAE,IAAI,CAAC;EAChD;AACJ;AAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,mBAAmBA,CAAA,EAAG;EAClC,MAAM;IAAEJ,UAAU;IAAEC;EAAqB,CAAC,GAAGJ,QAAQ,CAACK,QAAQ,CAAC,CAAC;;EAEhE;EACA,IAAI,CAACF,UAAU,EAAE;IACbK,WAAW,CAAC,CAAC;EACjB,CAAC,MAAM;IACH;IACAP,gBAAgB,CAACG,oBAAoB,EAAE,KAAK,CAAC;EACjD;AACJ;AAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,SAASA,CAAA,EAAG;EACxB,MAAM;IAAEG,OAAO;IAAEC,aAAa;IAAEC;EAAoB,CAAC,GAAGX,QAAQ,CAACK,QAAQ,CAAC,CAAC;;EAE3E;EACA,MAAMO,UAAU,GAAG,IAAIC,GAAG,CAACJ,OAAO,CAACK,IAAI,CAAC,CAAC,CAAC;EAC1C;;EAEAJ,aAAa,CAACE,UAAU,CAAC;EACzBD,mBAAmB,CAAC,IAAIE,GAAG,CAAC,CAAC,CAAC;AAClC;AAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,SAASL,WAAWA,CAAA,EAAG;EAC1B,MAAM;IAAEE,aAAa;IAAEC;EAAoB,CAAC,GAAGX,QAAQ,CAACK,QAAQ,CAAC,CAAC;EAClE;;EAEAK,aAAa,CAAC,IAAIG,GAAG,CAAC,CAAC,CAAC;EACxBF,mBAAmB,CAAC,IAAIE,GAAG,CAAC,CAAC,CAAC;AAClC;AAAC"}
|