Skip to content

Commit

Permalink
feat(TreeView): add ctrl + A selection
Browse files Browse the repository at this point in the history
  • Loading branch information
emyarod committed May 2, 2022
1 parent ce69f9e commit 4f0f8d1
Showing 1 changed file with 33 additions and 12 deletions.
45 changes: 33 additions & 12 deletions packages/react/src/components/TreeView/TreeView.js
Original file line number Diff line number Diff line change
Expand Up @@ -102,30 +102,51 @@ export default function TreeView({

function handleKeyDown(event) {
event.stopPropagation();
if (matches(event, [keys.ArrowUp, keys.ArrowDown, keys.Home, keys.End])) {
if (
matches(event, [
keys.ArrowUp,
keys.ArrowDown,
keys.Home,
keys.End,
{ code: 'KeyA' },
])
) {
event.preventDefault();
}

treeWalker.current.currentNode = event.target;
let nextFocusNode;

if (match(event, keys.ArrowUp)) {
nextFocusNode = treeWalker.current.previousNode();
}
if (match(event, keys.ArrowDown)) {
nextFocusNode = treeWalker.current.nextNode();
}
if (matches(event, [keys.Home, keys.End])) {
if (matches(event, [keys.Home, keys.End, { code: 'KeyA' }])) {
const nodeIds = [];
if (multiselect && event.shiftKey) {
nodeIds.push(treeWalker.current.currentNode?.id);
}
while (
match(event, keys.Home)
? treeWalker.current.previousNode()
: treeWalker.current.nextNode()
) {
nextFocusNode = treeWalker.current.currentNode;

if (matches(event, [keys.Home, keys.End])) {
if (multiselect && event.shiftKey) {
nodeIds.push(nextFocusNode?.id);
nodeIds.push(treeWalker.current.currentNode?.id);
}
while (
match(event, keys.Home)
? treeWalker.current.previousNode()
: treeWalker.current.nextNode()
) {
nextFocusNode = treeWalker.current.currentNode;

if (multiselect && event.shiftKey) {
nodeIds.push(nextFocusNode?.id);
}
}
}
if (match(event, { code: 'KeyA' }) && event.ctrlKey) {
treeWalker.current.currentNode = treeWalker.current.root;

while (treeWalker.current.nextNode()) {
nodeIds.push(treeWalker.current.currentNode?.id);
}
}
setSelected(selected.concat(nodeIds));
Expand Down

0 comments on commit 4f0f8d1

Please sign in to comment.