added User edit

This commit is contained in:
PxlLoewe
2025-02-16 13:10:03 +01:00
parent d16433004f
commit 883c47bdce
5 changed files with 56 additions and 7 deletions

View File

@@ -8,11 +8,13 @@ interface PaginatedTableProps<TData>
extends Omit<SortableTableProps<TData>, 'data'> {
prismaModel: keyof PrismaClient;
rowsPerPage?: number;
showEditButton?: boolean;
}
export function PaginatedTable<TData>({
prismaModel,
rowsPerPage = 10,
showEditButton = false,
...restProps
}: PaginatedTableProps<TData>) {
const [data, setData] = useState<TData[]>([]);
@@ -30,7 +32,12 @@ export function PaginatedTable<TData>({
return (
<div className="space-y-4">
<SortableTable data={data} {...restProps} />
<SortableTable
data={data}
prismaModel={prismaModel}
showEditButton={showEditButton}
{...restProps}
/>
<Pagination
totalPages={Math.ceil(total / rowsPerPage)}
page={page}

View File

@@ -9,21 +9,43 @@ import {
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<TData> {
data: TData[];
columns: ColumnDef<TData>[];
showEditButton?: boolean;
prismaModel?: keyof PrismaClient;
}
export default function SortableTable<TData>({
data,
columns,
prismaModel,
showEditButton,
}: SortableTableProps<TData>) {
const [sorting, setSorting] = useState<SortingState>([]);
const table = useReactTable({
data,
columns,
columns: showEditButton
? [
...columns,
{
header: 'Actions',
cell: ({ row }) => (
<div className="flex items-center gap-1">
<Link
href={`/admin/${prismaModel as string}/${(row.original as any).id}`}
>
<button className="btn">Edit</button>
</Link>
</div>
),
},
]
: columns,
getCoreRowModel: getCoreRowModel(),
getSortedRowModel: getSortedRowModel(),
onSortingChange: setSorting,

View File

@@ -29,7 +29,7 @@ export const VerticalNav = () => {
</summary>
<ul>
<li>
<Link href="/admin/users">User</Link>
<Link href="/admin/user">User</Link>
</li>
</ul>
</details>