import { useState, useEffect } from "preact/hooks";
import { I18nProvider } from "@shared/i18n/context";
import { ThemeProvider } from "@shared/theme/context";
import { Header } from "./components/Header";
import { AccountList } from "./components/AccountList";
import { AddAccount } from "./components/AddAccount";
import { ProxyPool } from "./components/ProxyPool";
import { ApiConfig } from "./components/ApiConfig";
import { AnthropicSetup } from "./components/AnthropicSetup";
import { CodeExamples } from "./components/CodeExamples";
import { TestConnection } from "./components/TestConnection";
import { Footer } from "./components/Footer";
import { ProxySettings } from "./pages/ProxySettings";
import { useAccounts } from "@shared/hooks/use-accounts";
import { useProxies } from "@shared/hooks/use-proxies";
import { useStatus } from "@shared/hooks/use-status";
import { useUpdateStatus } from "@shared/hooks/use-update-status";
/** Minimal status hook — only used for version/commit display.
* Updates are handled by electron-updater via system tray. */
function useVersionInfo() {
const update = useUpdateStatus();
return {
version: update.status?.proxy.version ?? null,
commit: update.status?.proxy.commit ?? null,
};
}
function Dashboard() {
const accounts = useAccounts();
const proxies = useProxies();
const status = useStatus(accounts.list.length);
const versionInfo = useVersionInfo();
const handleProxyChange = async (accountId: string, proxyId: string) => {
accounts.patchLocal(accountId, { proxyId });
await proxies.assignProxy(accountId, proxyId);
};
return (
<>
>
);
}
function useHash(): string {
const [hash, setHash] = useState(location.hash);
useEffect(() => {
const handler = () => setHash(location.hash);
window.addEventListener("hashchange", handler);
return () => window.removeEventListener("hashchange", handler);
}, []);
return hash;
}
export function App() {
const hash = useHash();
const isProxySettings = hash === "#/proxy-settings";
return (
{isProxySettings ? : }
);
}
function ProxySettingsPage() {
const versionInfo = useVersionInfo();
return (
<>
{ location.hash = ""; }}
version={versionInfo.version}
commit={versionInfo.commit}
isProxySettings
/>
>
);
}