diff --git a/frontend/bun.lockb b/frontend/bun.lockb
index c031b92..d57c95a 100644
Binary files a/frontend/bun.lockb and b/frontend/bun.lockb differ
diff --git a/frontend/src/components/db-table-view/data-table.tsx b/frontend/src/components/db-table-view/data-table.tsx
index 9421b9d..e0d7ae7 100644
--- a/frontend/src/components/db-table-view/data-table.tsx
+++ b/frontend/src/components/db-table-view/data-table.tsx
@@ -5,7 +5,6 @@ import {
DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuTrigger,
- ScrollArea,
Table,
TableBody,
TableCell,
@@ -167,7 +166,7 @@ export const DataTable = ({
});
return (
-
+
{tableName}
@@ -201,103 +200,105 @@ export const DataTable = ({
-
-
-
- {table.getHeaderGroups().map((headerGroup) => (
-
- {headerGroup.headers.map((header) => {
- const sorted = header.column.getIsSorted();
+
+
+
+
+ {table.getHeaderGroups().map((headerGroup) => (
+
+ {headerGroup.headers.map((header) => {
+ const sorted = header.column.getIsSorted();
- return (
-
-
- header.column.resetSize(),
- onMouseDown: header.getResizeHandler(),
- onTouchStart: header.getResizeHandler(),
- className: `resizer ${header.column.getIsResizing() ? "isResizing" : ""}`,
+ return (
+
-
- );
- })}
-
- ))}
-
-
- {table.getRowModel().rows?.length ? (
- table.getRowModel().rows.map((row) => (
-
- {row.getVisibleCells().map((cell) => (
-
- {flexRender(
- cell.column.columnDef.cell,
- cell.getContext(),
- )}
-
- ))}
+ >
+
+ header.column.resetSize(),
+ onMouseDown: header.getResizeHandler(),
+ onTouchStart: header.getResizeHandler(),
+ className: `resizer ${header.column.getIsResizing() ? "isResizing" : ""}`,
+ }}
+ />
+
+ );
+ })}
- ))
- ) : (
-
-
- No results.
-
-
- )}
-
-
-
+ ))}
+
+
+ {table.getRowModel().rows?.length ? (
+ table.getRowModel().rows.map((row) => (
+
+ {row.getVisibleCells().map((cell) => (
+
+ {flexRender(
+ cell.column.columnDef.cell,
+ cell.getContext(),
+ )}
+
+ ))}
+
+ ))
+ ) : (
+
+
+ No results.
+
+
+ )}
+
+
+
+
);
diff --git a/frontend/src/components/session-selector.tsx b/frontend/src/components/sidebar/session-selector.tsx
similarity index 90%
rename from frontend/src/components/session-selector.tsx
rename to frontend/src/components/sidebar/session-selector.tsx
index 7a648e8..54966f9 100644
--- a/frontend/src/components/session-selector.tsx
+++ b/frontend/src/components/sidebar/session-selector.tsx
@@ -49,8 +49,10 @@ function RawSessionSelector() {
value={currentSessionId ? currentSessionId.toString() : ""}
onValueChange={handleSessionSelected}
>
-
-
+
+
+
+
{mappedSessions}
diff --git a/frontend/src/components/sidebar/sidebar.tsx b/frontend/src/components/sidebar/sidebar.tsx
new file mode 100644
index 0000000..ae3bbb0
--- /dev/null
+++ b/frontend/src/components/sidebar/sidebar.tsx
@@ -0,0 +1,119 @@
+import { SessionSelector } from "@/components/sidebar/session-selector";
+import {
+ Select,
+ SelectContent,
+ SelectItem,
+ SelectTrigger,
+ SelectValue,
+ buttonVariants,
+} from "@/components/ui";
+import { cn } from "@/lib/utils";
+import { Route } from "@/routes/__root";
+import { useDatabasesListQuery, useTablesListQuery } from "@/services/db";
+import { useUiStore } from "@/state";
+import { Link, useNavigate, useParams } from "@tanstack/react-router";
+import { Database, Rows3 } from "lucide-react";
+import type { PropsWithChildren } from "react";
+
+function SidebarContent() {
+ const { data } = useDatabasesListQuery();
+
+ const showSidebar = useUiStore.use.showSidebar();
+ const params = useParams({ strict: false });
+ const dbName = params.dbName ?? "";
+ const { data: tables } = useTablesListQuery({ dbName });
+ const navigate = useNavigate({ from: Route.fullPath });
+
+ const handleSelectedDb = (dbName: string) => {
+ void navigate({ to: "/db/$dbName/tables", params: { dbName } });
+ };
+ if (!showSidebar) return null;
+
+ return (
+ <>
+
+
+
+ >
+ );
+}
+
+function SidebarContainer({ children }: PropsWithChildren) {
+ return ;
+}
+
+export function Sidebar() {
+ return (
+
+
+
+ );
+}
diff --git a/frontend/src/components/ui/select.tsx b/frontend/src/components/ui/select.tsx
index 3cfdb52..95ec012 100644
--- a/frontend/src/components/ui/select.tsx
+++ b/frontend/src/components/ui/select.tsx
@@ -21,7 +21,7 @@ const SelectTrigger = forwardRef<
span]:line-clamp-1",
+ "flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
className,
)}
{...props}
diff --git a/frontend/src/components/ui/table.tsx b/frontend/src/components/ui/table.tsx
index 2ad2e0b..a7b09ae 100644
--- a/frontend/src/components/ui/table.tsx
+++ b/frontend/src/components/ui/table.tsx
@@ -8,7 +8,7 @@ import {
const Table = forwardRef>(
({ className, ...props }, ref) => (
-
+
>(({ className, ...props }, ref) => (
-
+
));
TableHeader.displayName = "TableHeader";
diff --git a/frontend/src/index.css b/frontend/src/index.css
index 0943dc8..7841e0c 100644
--- a/frontend/src/index.css
+++ b/frontend/src/index.css
@@ -74,11 +74,11 @@
text-underline-position: under;
--sidebar-width: 264px;
}
-
+
.sidebar-closed {
--sidebar-width: 0;
}
-
+
.grid-rows-layout {
grid-template-rows: 60px 1fr;
}
diff --git a/frontend/src/routes/__root.tsx b/frontend/src/routes/__root.tsx
index 8e8271d..9869dfd 100644
--- a/frontend/src/routes/__root.tsx
+++ b/frontend/src/routes/__root.tsx
@@ -1,27 +1,11 @@
-import { SessionSelector } from "@/components/session-selector";
import { SettingsDialog } from "@/components/settings-dialog";
-import {
- Button,
- ModeToggle,
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
- buttonVariants,
-} from "@/components/ui";
+import { Sidebar } from "@/components/sidebar/sidebar";
+import { Button, ModeToggle } from "@/components/ui";
import { cn } from "@/lib/utils";
-import { useDatabasesListQuery, useTablesListQuery } from "@/services/db";
import { useUiStore } from "@/state";
-import {
- Link,
- Outlet,
- createRootRoute,
- useNavigate,
- useParams,
-} from "@tanstack/react-router";
+import { Link, Outlet, createRootRoute } from "@tanstack/react-router";
import { TanStackRouterDevtools } from "@tanstack/router-devtools";
-import { Database, PanelLeft, PanelLeftClose, Rows3 } from "lucide-react";
+import { PanelLeft, PanelLeftClose } from "lucide-react";
export const Route = createRootRoute({
component: Root,
@@ -31,16 +15,6 @@ function Root() {
const showSidebar = useUiStore.use.showSidebar();
const toggleSidebar = useUiStore.use.toggleSidebar();
- const { data } = useDatabasesListQuery();
- const params = useParams({ strict: false });
- const dbName = params.dbName ?? "";
- const navigate = useNavigate({ from: Route.fullPath });
-
- const handleSelectedDb = (dbName: string) => {
- void navigate({ to: "/db/$dbName/tables", params: { dbName } });
- };
-
- const { data: tables } = useTablesListQuery({ dbName });
return (
<>
-
-
+