"use client"; import { useEffect, 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 { PrismaClient } from "@repo/db"; export interface SortableTableProps { data: TData[]; columns: ColumnDef[]; prismaModel?: keyof PrismaClient; setOrderBy?: (orderBy: Record) => void; initialOrderBy?: SortingState; } export default function SortableTable({ data, columns, initialOrderBy = [], prismaModel, setOrderBy, }: SortableTableProps) { const [sorting, setSorting] = useState(initialOrderBy); const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), onSortingChange: setSorting, state: { sorting }, }); useEffect(() => { if (prismaModel) { const orderBy: Record = {}; sorting.forEach((sort) => { orderBy[sort.id] = sort.desc ? "desc" : "asc"; }); setOrderBy?.(orderBy); } }, [sorting, prismaModel, setOrderBy]); return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( ))} ))} {table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( ))} ))} {table.getRowModel().rows.length === 0 && ( )}
{flexRender(header.column.columnDef.header, header.getContext())} {header.column.getIsSorted() === "asc" && } {header.column.getIsSorted() === "desc" && }
{flexRender(cell.column.columnDef.cell, cell.getContext())}
Keine Daten gefunden
); } export const Pagination = ({ page, totalPages, setPage, }: { page: number; totalPages: number; setPage: (page: number) => void; }) => { if (totalPages === 0) return null; return (
); };