diff --git a/ui/src/routes/__root.tsx b/ui/src/routes/__root.tsx index b5da5ef..ca3ad73 100644 --- a/ui/src/routes/__root.tsx +++ b/ui/src/routes/__root.tsx @@ -120,8 +120,8 @@ function MobileNav() { xmlns="http://www.w3.org/2000/svg" > diff --git a/ui/src/routes/index.lazy.tsx b/ui/src/routes/index.lazy.tsx index d7b9640..c368b1a 100644 --- a/ui/src/routes/index.lazy.tsx +++ b/ui/src/routes/index.lazy.tsx @@ -1,34 +1,35 @@ import { createFileRoute } from "@tanstack/react-router"; import { + Workflow, + TextSearch, DatabaseZap, Table as TableIcon, - TextSearch, - Workflow, + LucideIcon, } from "lucide-react"; import { Bar, - BarChart, - ResponsiveContainer, - Tooltip, - TooltipProps, XAxis, YAxis, + Tooltip, + BarChart, + TooltipProps, + ResponsiveContainer, } from "recharts"; +import { + NameType, + ValueType, +} from "recharts/types/component/DefaultTooltipContent"; import { fetchOverview } from "@/api"; import { Card, + CardTitle, + CardHeader, CardContent, CardDescription, - CardHeader, - CardTitle, } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { Table, TableBody, TableCell, TableRow } from "@/components/ui/table"; -import { - NameType, - ValueType, -} from "recharts/types/component/DefaultTooltipContent"; export const Route = createFileRoute("/")({ component: Index, @@ -39,76 +40,56 @@ export const Route = createFileRoute("/")({ function Index() { const data = Route.useLoaderData(); + const cards: InfoCardProps[] = [ + { + title: "TABLES", + value: data.tables.toLocaleString(), + description: "The number of tables in the DB.", + icon: TableIcon, + }, + { + title: "INDEXES", + value: data.indexes.toLocaleString(), + description: "The number of indexes in the DB.", + icon: DatabaseZap, + }, + { + title: "VIEWS", + value: data.views.toLocaleString(), + description: "The number of views in the DB.", + icon: TextSearch, + }, + { + title: "TRIGGERS", + value: data.triggers.toLocaleString(), + description: "The number of triggers in the DB.", + icon: Workflow, + }, + ]; + return ( <>

- Exploring{" "} + EXPLORING{" "} {data.file_name}

- - - Tables - - - -
- {data.tables.toLocaleString()} -
-

- The number of tables in the DB. -

-
-
- - - Indexes - - - -
- {data.indexes.toLocaleString()} -
-

- The number of indexes across the whole DB. -

-
-
- - - Views - - - -
- {data.views.toLocaleString()} -
-

- The number of views in the DB. -

-
-
- - - Triggers - - - -
- {data.triggers.toLocaleString()} -
-

- The number of triggers in the DB. -

-
-
+ {cards.map((card, i) => ( + + ))}
- Rows Per Table + ROWS PER TABLE @@ -117,63 +98,41 @@ function Index() {
- More metadata - More info about the DB + MORE METADATA + More info about the DB.
- - -
File size
-
- The size of the DB on disk. -
-
- {data.file_size} -
+ {data.sqlite_version && ( - - -
SQLite version
-
- The SQLite version the DB was created with. -
-
- - {data.sqlite_version} - -
+ )} {data.created && ( - - -
Created on
-
- The date and time when the DB was created. -
-
- - {data.created.toUTCString()} - -
+ )} {data.modified && ( - - -
Modified on
-
- The date and time when the DB was last modified. -
-
- - {data.modified.toUTCString()} - -
+ )}
@@ -184,6 +143,48 @@ function Index() { ); } +type InfoCardProps = { + title: string; + value: string; + description: string; + icon: LucideIcon; +}; + +function InfoCard({ title, value, description, icon: Icon }: InfoCardProps) { + return ( + + + {title} + + + +
{value}
+

{description}

+
+
+ ); +} + +type MetadataRowProps = { + name: string; + description: string; + value: string; +}; + +function MetadataRow({ name, description, value }: MetadataRowProps) { + return ( + + +
{name}
+
+ {description} +
+
+ {value} +
+ ); +} + type TheBarChartProps = { counts: { count: number;