"use client"; import { useState } from "react"; import { useReactTable, getCoreRowModel, getSortedRowModel, ColumnDef, SortingState, flexRender, } from "@tanstack/react-table"; import { ArrowLeft, ArrowRight, ChevronDown, ChevronUp } from "lucide-react"; // Icons for sorting import Link from "next/link"; import { PrismaClient } from "@repo/db"; export interface SortableTableProps { data: TData[]; columns: ColumnDef[]; showEditButton?: boolean; prismaModel?: keyof PrismaClient; } export default function SortableTable({ data, columns, prismaModel, showEditButton, }: SortableTableProps) { const [sorting, setSorting] = useState([]); const table = useReactTable({ data, columns: showEditButton ? [ ...columns, { header: "Actions", cell: ({ row }) => (
), }, ] : columns, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), onSortingChange: setSorting, state: { sorting }, }); return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( ))} ))} {table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( ))} ))}
{flexRender( header.column.columnDef.header, header.getContext(), )} {header.column.getIsSorted() === "asc" && ( )} {header.column.getIsSorted() === "desc" && ( )}
{flexRender(cell.column.columnDef.cell, cell.getContext())}
); } export const Pagination = ({ page, totalPages, setPage, }: { page: number; totalPages: number; setPage: (page: number) => void; }) => { if (totalPages === 0) return null; return (
); };