From 711c42689820d239b21d72884f2446e9087037bb Mon Sep 17 00:00:00 2001 From: andres Date: Wed, 10 Jul 2024 10:08:20 +0200 Subject: [PATCH] session selector working --- frontend/src/components/session-selector.tsx | 64 ++++++++++++++++++++ frontend/src/routes/__root.tsx | 30 +-------- frontend/src/services/db/db.hooks.ts | 10 ++- 3 files changed, 75 insertions(+), 29 deletions(-) create mode 100644 frontend/src/components/session-selector.tsx 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() {