From c44d93603ce8809b547918d1c20162e135131d06 Mon Sep 17 00:00:00 2001 From: Taken Date: Thu, 26 Jun 2025 23:31:51 +0200 Subject: [PATCH] Updated table --- src/components/dashboard/urls-data-table.tsx | 30 ++++++++++++++++++-- src/lib/db/urls.ts | 5 +++- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/components/dashboard/urls-data-table.tsx b/src/components/dashboard/urls-data-table.tsx index 40b25b4..b992300 100644 --- a/src/components/dashboard/urls-data-table.tsx +++ b/src/components/dashboard/urls-data-table.tsx @@ -28,12 +28,14 @@ import { import { Input } from "@/components/ui/input" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { deleteUrl } from "@/lib/actions/url" -import { urls } from "@/lib/drizzle/schema" +import { urls, visits } from "@/lib/drizzle/schema" import Link from "next/link" import { useRouter } from "next/navigation" import { toast } from "sonner" -type UrlRecord = typeof urls.$inferSelect +type UrlRecord = typeof urls.$inferSelect & { + visits?: (typeof visits.$inferSelect)[] +} export const columns: ColumnDef[] = [ { @@ -83,6 +85,30 @@ export const columns: ColumnDef[] = [ return
{title || "No title"}
} }, + { + id: "visits", + header: ({ column }) => { + return ( + + ) + }, + cell: ({ row }) => { + const urlRecord = row.original + const visitCount = urlRecord.visits?.length || 0 + return
{visitCount}
+ }, + sortingFn: (rowA, rowB) => { + const visitsA = rowA.original.visits?.length || 0 + const visitsB = rowB.original.visits?.length || 0 + return visitsA - visitsB + } + }, { accessorKey: "maxVisits", header: ({ column }) => { diff --git a/src/lib/db/urls.ts b/src/lib/db/urls.ts index 8ec78fe..c746789 100644 --- a/src/lib/db/urls.ts +++ b/src/lib/db/urls.ts @@ -4,7 +4,10 @@ import { urls, visits } from "../drizzle/schema"; export function getAllUrls() { return db.query.urls.findMany({ - orderBy: desc(urls.createdAt) + orderBy: desc(urls.createdAt), + with: { + visits: true + } }) }