diff --git a/frontend/src/components/session-selector.tsx b/frontend/src/components/session-selector.tsx
new file mode 100644
index 0000000..7a648e8
--- /dev/null
+++ b/frontend/src/components/session-selector.tsx
@@ -0,0 +1,64 @@
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+} from "@/components/ui";
+import { useLoginMutation } from "@/services/db";
+import { useSessionStore } from "@/state/db-session-store";
+import { memo, useMemo } from "react";
+import { toast } from "sonner";
+
+function RawSessionSelector() {
+ const sessions = useSessionStore.use.sessions();
+ const currentSessionId = useSessionStore.use.currentSessionId();
+ const setCurrentSessionId = useSessionStore.use.setCurrentSessionId();
+ const { mutate } = useLoginMutation();
+
+ const handleSessionSelected = (sessionId: string) => {
+ const session = sessions.find((s) => s.id === Number.parseInt(sessionId));
+ if (!session) {
+ toast.error("Invalid session");
+ return;
+ }
+ setCurrentSessionId(session.id);
+ mutate(session);
+ };
+
+ const mappedSessions = useMemo(() => {
+ return sessions?.map((session) => {
+ const text =
+ "connectionString" in session
+ ? session.connectionString
+ : `${session.host}:${session.port}/${session.database}`;
+ return (
+
+ {text}
+
+ );
+ });
+ }, [sessions]);
+
+ if (!sessions.length) {
+ return null;
+ }
+
+ return (
+
+ );
+}
+
+const SessionSelector = memo(RawSessionSelector);
+
+SessionSelector.displayName = "SessionSelector";
+
+export { SessionSelector };
diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx
index 845bc9f..8e8271d 100644
--- a/frontend/src/routes/__root.tsx
+++ b/frontend/src/routes/__root.tsx
@@ -1,3 +1,4 @@
+import { SessionSelector } from "@/components/session-selector";
import { SettingsDialog } from "@/components/settings-dialog";
import {
Button,
@@ -12,7 +13,6 @@ import {
import { cn } from "@/lib/utils";
import { useDatabasesListQuery, useTablesListQuery } from "@/services/db";
import { useUiStore } from "@/state";
-import { useSessionStore } from "@/state/db-session-store";
import {
Link,
Outlet,
@@ -30,8 +30,6 @@ export const Route = createRootRoute({
function Root() {
const showSidebar = useUiStore.use.showSidebar();
const toggleSidebar = useUiStore.use.toggleSidebar();
- const sessions = useSessionStore.use.sessions();
- const currentSessionId = useSessionStore.use.currentSessionId();
const { data } = useDatabasesListQuery();
const params = useParams({ strict: false });
@@ -76,31 +74,7 @@ function Root() {