Skip to content

Commit cd97614

Browse files
committed
feat: impl shortcuts
1 parent cc27490 commit cd97614

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

crates/openconnect-gui/src/App.tsx

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import { ToastContainer } from "react-toastify";
2020
import connected from "./assets/connected-animate.json";
2121
import Lottie from "lottie-react";
2222
import { AboutModal } from "./About";
23+
import { useKey } from "react-use";
2324

2425
enum EStatus {
2526
Initialized = "INITIALIZED",
@@ -46,6 +47,19 @@ function App() {
4647
const { selectedServer } = useStoredConfigs();
4748
const [isAboutOpened, setIsAboutOpened] = useState(false);
4849

50+
useKey(
51+
"Enter",
52+
() => {
53+
if (vpnStatus.status === EStatus.Connected) {
54+
handleDisconnect();
55+
} else if (selectedServer) {
56+
handleConnect();
57+
}
58+
},
59+
undefined,
60+
[vpnStatus, selectedServer]
61+
);
62+
4963
const handleConnect = useCallback(async () => {
5064
if (selectedServer) {
5165
try {
@@ -160,7 +174,7 @@ function App() {
160174
className="m-3 w-[50%]"
161175
onClick={handleDisconnect}
162176
>
163-
Disconnect
177+
Disconnect [Enter]
164178
</Button>
165179
)}
166180
{vpnStatus.status === EStatus.Disconnected ||
@@ -171,7 +185,7 @@ function App() {
171185
className="m-3 w-full"
172186
onClick={handleConnect}
173187
>
174-
Connect
188+
Connect [Enter]
175189
</Button>
176190
) : null}
177191
</CardFooter>

crates/openconnect-gui/src/ServerSelector.tsx

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
import { FC, PropsWithChildren, useEffect } from "react";
99
import { ServerEditorModal } from "./ServerEditorModal";
1010
import { useStoredConfigs } from "./state";
11+
import { useKey } from "react-use";
1112

1213
export const ServerSelector = () => {
1314
const {
@@ -20,6 +21,35 @@ export const ServerSelector = () => {
2021

2122
const { isOpen, onOpen, onOpenChange } = useDisclosure();
2223

24+
useKey(
25+
"Tab",
26+
(evt) => {
27+
evt.preventDefault();
28+
if (serverList.length) {
29+
const currentIndex = serverList.findIndex(
30+
({ name }) => name === selectedName
31+
);
32+
if (currentIndex !== -1) {
33+
const nextIndex =
34+
currentIndex === serverList.length - 1 ? 0 : currentIndex + 1;
35+
const next = serverList[nextIndex].name;
36+
setSelectedName(next);
37+
}
38+
}
39+
},
40+
undefined,
41+
[serverList, selectedName, setSelectedName]
42+
);
43+
44+
useKey(
45+
"m",
46+
() => {
47+
onOpen();
48+
},
49+
undefined,
50+
[onOpen]
51+
);
52+
2353
useEffect(() => {
2454
getStoredConfigs();
2555
}, [getStoredConfigs]);
@@ -49,7 +79,7 @@ export const ServerSelector = () => {
4979
</Select>
5080
)}
5181
<Button size="md" color="primary" className="ml-2" onClick={onOpen}>
52-
Manage Server
82+
Manage Server [M]
5383
</Button>
5484
</div>
5585
<Divider className="mt-3 mb-3"></Divider>

0 commit comments

Comments
 (0)