|
118 | 118 |
|
119 | 119 | if (event.shiftKey) {
|
120 | 120 | 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); |
121 | 124 | }
|
122 | 125 |
|
123 | 126 | nextElement.focus();
|
|
127 | 130 | case "PageUp": {
|
128 | 131 | const down = event.key === "PageDown";
|
129 | 132 | const navigate = down ? treeState.getNextItem : treeState.getPreviousItem;
|
130 |
| -
|
| 133 | + const shouldSelectMultiple = event.shiftKey && isControlOrMeta(event); |
131 | 134 | const maxScrollDistance = Math.min(
|
132 | 135 | // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
133 | 136 | document.getElementById(treeState.id())!.clientHeight,
|
|
154 | 157 | break;
|
155 | 158 | }
|
156 | 159 |
|
157 |
| - if (event.shiftKey) { |
158 |
| - treeState.selectedIds().add(next.node.id); |
| 160 | + if (shouldSelectMultiple) { |
| 161 | + treeState.selectedIds().add(current.node.id); |
159 | 162 | }
|
160 | 163 |
|
161 | 164 | current = next;
|
|
166 | 169 | break;
|
167 | 170 | }
|
168 | 171 |
|
169 |
| - if (event.shiftKey) { |
170 |
| - treeState.selectedIds().add(item().node.id); |
| 172 | + if (!shouldSelectMultiple) { |
| 173 | + treeState.selectedIds().clear(); |
171 | 174 | }
|
172 | 175 |
|
| 176 | + treeState.selectedIds().add(current.node.id); |
173 | 177 | currentElement.focus();
|
174 | 178 | break;
|
175 | 179 | }
|
|
184 | 188 | break;
|
185 | 189 | }
|
186 | 190 |
|
187 |
| - if (event.shiftKey && isControlOrMeta(event)) { |
| 191 | + const shouldSelectMultiple = event.shiftKey && isControlOrMeta(event); |
| 192 | + if (shouldSelectMultiple) { |
188 | 193 | let current: TreeItemPosition | undefined = item();
|
189 | 194 | do {
|
190 | 195 | treeState.selectedIds().add(current.node.id);
|
191 | 196 | current = treeState.getPreviousItem(current);
|
192 | 197 | } while (current !== undefined);
|
| 198 | + } else { |
| 199 | + treeState.selectedIds().clear(); |
| 200 | + treeState.selectedIds().add(first.id); |
193 | 201 | }
|
194 | 202 |
|
195 | 203 | firstElement.focus();
|
|
222 | 230 | treeState.selectedIds().add(current.node.id);
|
223 | 231 | current = treeState.getNextItem(current);
|
224 | 232 | } while (current !== undefined);
|
| 233 | + } else if (!event.shiftKey && !isControlOrMeta(event)) { |
| 234 | + treeState.selectedIds().clear(); |
| 235 | + treeState.selectedIds().add(last.id); |
225 | 236 | }
|
226 | 237 |
|
227 | 238 | lastElement.focus();
|
|
0 commit comments