Skip to content

Commit 760ab31

Browse files
committed
Add VPN UI
1 parent b9a99fe commit 760ab31

File tree

1 file changed

+65
-1
lines changed

1 file changed

+65
-1
lines changed

src/navigation/VPN.tsx

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,66 @@
1-
import client from './client';
1+
import React, { useState } from 'react';
2+
import { VPNClient } from './client';
3+
4+
const vpnClient = new VPNClient();
5+
6+
const VpnUI: React.FC = () => {
7+
const [status, setStatus] = useState<'disconnected' | 'connected' | 'connecting'>('disconnected');
8+
const [error, setError] = useState<string | null>(null);
9+
10+
const handleConnect = async () => {
11+
setStatus('connecting');
12+
setError(null);
13+
try {
14+
await vpnClient.connect();
15+
setStatus('connected');
16+
} catch (err) {
17+
setStatus('disconnected');
18+
setError('Failed to connect');
19+
}
20+
};
21+
22+
const handleDisconnect = async () => {
23+
setError(null);
24+
try {
25+
await vpnClient.disconnect();
26+
setStatus('disconnected');
27+
} catch (err) {
28+
setError('Failed to disconnect');
29+
}
30+
};
31+
32+
return (
33+
<div className="max-w-sm mx-auto mt-10 p-6 rounded-2xl shadow-lg bg-white border">
34+
<h2 className="text-2xl font-semibold mb-4 text-center">VPN Client</h2>
35+
36+
<div className="mb-4 text-center">
37+
<span className={`font-bold ${status === 'connected' ? 'text-green-600' : status === 'connecting' ? 'text-yellow-600' : 'text-red-600'}`}>
38+
Status: {status}
39+
</span>
40+
</div>
41+
42+
{error && <p className="text-red-500 mb-2 text-center">{error}</p>}
43+
44+
<div className="flex justify-center gap-4">
45+
<button
46+
onClick={handleConnect}
47+
disabled={status === 'connected' || status === 'connecting'}
48+
className="bg-blue-600 text-white px-4 py-2 rounded-lg disabled:opacity-50"
49+
>
50+
Connect
51+
</button>
52+
53+
<button
54+
onClick={handleDisconnect}
55+
disabled={status === 'disconnected' || status === 'connecting'}
56+
className="bg-gray-600 text-white px-4 py-2 rounded-lg disabled:opacity-50"
57+
>
58+
Disconnect
59+
</button>
60+
</div>
61+
</div>
62+
);
63+
};
64+
65+
export default VpnUI;
266

0 commit comments

Comments
 (0)