Skip to content

Commit cdc921d

Browse files
fix(@clayui/core): fixes error of not selecting all children regardless of state
The toggle behavior for the children of the current element was toggle according to whether the item was already being selected or not, not respecting the equal behavior of selecting all elements or deselecting.
1 parent f78aad9 commit cdc921d

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

packages/clay-core/src/tree-view/useMultipleSelection.tsx

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,36 +90,42 @@ export function useMultipleSelection(
9090

9191
const toggleChildrenSelection = (
9292
keyMap: LayoutInfo,
93-
selecteds: Set<Key>
93+
selecteds: Set<Key>,
94+
select: boolean
9495
) => {
9596
if (!keyMap.children.size) {
9697
return;
9798
}
9899

99100
keyMap.children.forEach((key) => {
100-
if (selecteds.has(key)) {
101-
selecteds.delete(key);
102-
} else {
101+
if (select) {
103102
selecteds.add(key);
103+
} else {
104+
selecteds.delete(key);
104105
}
105106

106107
const childrenKeyMap = layoutKeys.current.get(key) as LayoutInfo;
107108

108-
toggleChildrenSelection(childrenKeyMap, selecteds);
109+
toggleChildrenSelection(childrenKeyMap, selecteds, select);
109110
});
110111
};
111112

112113
const toggleSelection = (key: Key) => {
113114
const keyMap = layoutKeys.current.get(key) as LayoutInfo;
114115
const selecteds = new Set(selectedKeys);
115116

117+
// Resets the intermediate state because the element will be selected
118+
// or otherwise the state must be false because it will be unchecking
119+
// all its children.
120+
keyMap.intermediate = false;
121+
116122
if (selecteds.has(key)) {
117123
selecteds.delete(key);
118124
} else {
119125
selecteds.add(key);
120126
}
121127

122-
toggleChildrenSelection(keyMap, selecteds);
128+
toggleChildrenSelection(keyMap, selecteds, selecteds.has(key));
123129
toggleParentSelection(keyMap, selecteds);
124130

125131
setSelectionKeys(selecteds);

0 commit comments

Comments
 (0)