import { FormEvent, useCallback, useEffect, useState } from "react"; import { Plus, RefreshCw } from "lucide-react"; import { Profiles as ProfilesSvc, Connection, } from "../../bindings/github.com/netbirdio/netbird/client/ui-wails/services"; import type { Profile } from "../../bindings/github.com/netbirdio/netbird/client/ui-wails/services/models.js"; import { Button } from "../components/Button"; import { Input } from "../components/Input"; import { Card } from "../components/Card"; export default function Profiles() { const [username, setUsername] = useState(""); const [profiles, setProfiles] = useState([]); const [error, setError] = useState(null); const [adding, setAdding] = useState(false); const refresh = useCallback(async () => { try { const u = username || (await ProfilesSvc.Username()); if (!username) setUsername(u); const list = await ProfilesSvc.List(u); setProfiles(list); setError(null); } catch (e) { setError(String(e)); } }, [username]); useEffect(() => { refresh(); }, [refresh]); const select = async (name: string) => { try { await ProfilesSvc.Switch({ profileName: name, username }); await Connection.Up({ profileName: name, username }); await refresh(); } catch (e) { setError(String(e)); } }; const deregister = async (name: string) => { try { await Connection.Logout({ profileName: name, username }); await refresh(); } catch (e) { setError(String(e)); } }; const remove = async (name: string) => { if (name === "default") return; try { await ProfilesSvc.Remove({ profileName: name, username }); await refresh(); } catch (e) { setError(String(e)); } }; return (

Profiles

{error &&

{error}

}
{profiles.map((p) => ( select(p.name)} className="h-4 w-4 accent-netbird" />

{p.name}

{p.isActive &&

Active

}
))} {profiles.length === 0 && (

No profiles.

)}
{adding && ( setAdding(false)} onAdded={async () => { setAdding(false); await refresh(); }} /> )}
); } function AddDialog({ username, onClose, onAdded, }: { username: string; onClose: () => void; onAdded: () => void; }) { const [name, setName] = useState(""); const [err, setErr] = useState(null); const submit = async (e: FormEvent) => { e.preventDefault(); if (!name.trim()) return; try { await ProfilesSvc.Add({ profileName: name.trim(), username }); onAdded(); } catch (e) { setErr(String(e)); } }; return (

New profile

setName(e.target.value)} /> {err &&

{err}

}
); }