Skip to content

Commit 350654e

Browse files
committed
Open selected folder on middle or ctrl click
Fixes #545
1 parent 4880646 commit 350654e

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

src/files-card-body.tsx

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,14 @@ export const FilesCardBody = ({
141141
}
142142
}
143143

144-
const onDoubleClickNavigate = useCallback((file: FolderFileInfo) => {
144+
const onClickNavigate = useCallback((file: FolderFileInfo, newTab: boolean = false) => {
145145
const newPath = [...path, file.name].join("/");
146146
if (file.to === "dir") {
147-
cockpit.location.go("/", { path: encodeURIComponent(newPath) });
147+
if (newTab) {
148+
open(`#/?path=${newPath}`);
149+
} else {
150+
cockpit.location.go("/", { path: encodeURIComponent(newPath) });
151+
}
148152
}
149153
}, [path]);
150154

@@ -181,7 +185,7 @@ export const FilesCardBody = ({
181185
return;
182186
}
183187

184-
onDoubleClickNavigate(file);
188+
onClickNavigate(file);
185189
};
186190

187191
const handleClick = (ev: MouseEvent) => {
@@ -194,7 +198,7 @@ export const FilesCardBody = ({
194198
}
195199

196200
if (ev.detail > 1) {
197-
onDoubleClickNavigate(file);
201+
onClickNavigate(file);
198202
} else {
199203
if (!ev.ctrlKey) {
200204
setSelected([file]);
@@ -206,6 +210,21 @@ export const FilesCardBody = ({
206210
return s.filter(f => f.name !== file.name);
207211
}
208212
});
213+
onClickNavigate(file, true);
214+
}
215+
}
216+
};
217+
218+
const handleAuxClick = (ev: MouseEvent) => {
219+
// capture middle click
220+
if (ev.button === 1) {
221+
ev.preventDefault();
222+
const name = getFilenameForEvent(ev);
223+
const file = sortedFiles?.find(file => file.name === name);
224+
225+
if (file) {
226+
setSelected([file]);
227+
onClickNavigate(file, true);
209228
}
210229
}
211230
};
@@ -262,7 +281,7 @@ export const FilesCardBody = ({
262281
return [sortedFiles[newIdx]];
263282
});
264283
} else if (e.key === "Enter" && selected.length === 1) {
265-
onDoubleClickNavigate(selected[0]);
284+
onClickNavigate(selected[0]);
266285
} else if (e.key === "Delete" && selected.length !== 0) {
267286
confirm_delete(dialogs, path.join("/") + "/", selected, setSelected);
268287
}
@@ -273,6 +292,7 @@ export const FilesCardBody = ({
273292
folderViewElem.addEventListener("click", handleClick);
274293
folderViewElem.addEventListener("dblclick", handleDoubleClick);
275294
folderViewElem.addEventListener("contextmenu", handleContextMenu);
295+
folderViewElem.addEventListener("auxclick", handleAuxClick);
276296
}
277297

278298
if (!isMounted.current && !dialogs.isActive()) {
@@ -288,14 +308,15 @@ export const FilesCardBody = ({
288308
folderViewElem.removeEventListener("click", handleClick);
289309
folderViewElem.removeEventListener("dblclick", handleDoubleClick);
290310
folderViewElem.removeEventListener("contextmenu", handleContextMenu);
311+
folderViewElem.removeEventListener("auxclick", handleAuxClick);
291312
}
292313
};
293314
}, [
294315
setSelected,
295316
sortedFiles,
296317
boxPerRow,
297318
selected,
298-
onDoubleClickNavigate,
319+
onClickNavigate,
299320
dialogs,
300321
path,
301322
]);

0 commit comments

Comments
 (0)