Skip to content

Commit 12eab89

Browse files
authored
Merge pull request #43 from abdel-17/selection-model
Make selection follow focus
2 parents b2a2bfe + b15dcf9 commit 12eab89

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

packages/svelte-file-tree/src/lib/components/TreeItem/TreeItem.svelte

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@
118118
119119
if (event.shiftKey) {
120120
treeState.selectedIds().add(item().node.id).add(next.node.id);
121+
} else if (!isControlOrMeta(event)) {
122+
treeState.selectedIds().clear();
123+
treeState.selectedIds().add(next.node.id);
121124
}
122125
123126
nextElement.focus();
@@ -127,7 +130,7 @@
127130
case "PageUp": {
128131
const down = event.key === "PageDown";
129132
const navigate = down ? treeState.getNextItem : treeState.getPreviousItem;
130-
133+
const shouldSelectMultiple = event.shiftKey && isControlOrMeta(event);
131134
const maxScrollDistance = Math.min(
132135
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
133136
document.getElementById(treeState.id())!.clientHeight,
@@ -154,8 +157,8 @@
154157
break;
155158
}
156159
157-
if (event.shiftKey) {
158-
treeState.selectedIds().add(next.node.id);
160+
if (shouldSelectMultiple) {
161+
treeState.selectedIds().add(current.node.id);
159162
}
160163
161164
current = next;
@@ -166,10 +169,11 @@
166169
break;
167170
}
168171
169-
if (event.shiftKey) {
170-
treeState.selectedIds().add(item().node.id);
172+
if (!shouldSelectMultiple) {
173+
treeState.selectedIds().clear();
171174
}
172175
176+
treeState.selectedIds().add(current.node.id);
173177
currentElement.focus();
174178
break;
175179
}
@@ -184,12 +188,16 @@
184188
break;
185189
}
186190
187-
if (event.shiftKey && isControlOrMeta(event)) {
191+
const shouldSelectMultiple = event.shiftKey && isControlOrMeta(event);
192+
if (shouldSelectMultiple) {
188193
let current: TreeItemPosition | undefined = item();
189194
do {
190195
treeState.selectedIds().add(current.node.id);
191196
current = treeState.getPreviousItem(current);
192197
} while (current !== undefined);
198+
} else {
199+
treeState.selectedIds().clear();
200+
treeState.selectedIds().add(first.id);
193201
}
194202
195203
firstElement.focus();
@@ -222,6 +230,9 @@
222230
treeState.selectedIds().add(current.node.id);
223231
current = treeState.getNextItem(current);
224232
} while (current !== undefined);
233+
} else if (!event.shiftKey && !isControlOrMeta(event)) {
234+
treeState.selectedIds().clear();
235+
treeState.selectedIds().add(last.id);
225236
}
226237
227238
lastElement.focus();

0 commit comments

Comments
 (0)