"use client"; import { type ColumnDef } from "@tanstack/react-table"; import { MoreHorizontal, Pencil, Trash2, ExternalLink } from "lucide-react"; import { DataTableColumnHeader } from "@/components/shared/data-table-column-header"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; export interface KickstarterRow { id: string; name: string; link: string | null; filesUrl: string | null; deliveryStatus: "NOT_DELIVERED" | "PARTIAL" | "DELIVERED"; paymentStatus: "PAID" | "UNPAID"; notes: string | null; hostId: string | null; userId: string; createdAt: Date; updatedAt: Date; host: { id: string; name: string } | null; _count: { packages: number }; } interface KickstarterColumnsProps { onEdit: (kickstarter: KickstarterRow) => void; onDelete: (id: string) => void; } const deliveryConfig: Record = { NOT_DELIVERED: { label: "Not Delivered", className: "bg-red-500/15 text-red-400 border-red-500/30", }, PARTIAL: { label: "Partial", className: "bg-orange-500/15 text-orange-400 border-orange-500/30", }, DELIVERED: { label: "Delivered", className: "bg-emerald-500/15 text-emerald-400 border-emerald-500/30", }, }; const paymentConfig: Record = { PAID: { label: "Paid", className: "bg-emerald-500/15 text-emerald-400 border-emerald-500/30", }, UNPAID: { label: "Unpaid", className: "bg-red-500/15 text-red-400 border-red-500/30", }, }; export function getKickstarterColumns({ onEdit, onDelete, }: KickstarterColumnsProps): ColumnDef[] { return [ { accessorKey: "name", header: ({ column }) => , cell: ({ row }) => (
{row.original.name} {row.original.link && ( e.stopPropagation()} > )}
), enableHiding: false, }, { accessorKey: "host", header: ({ column }) => , cell: ({ row }) => row.original.host ? ( {row.original.host.name} ) : ( -- ), }, { id: "files", header: "Files", cell: ({ row }) => row.original.filesUrl ? ( e.stopPropagation()} > ) : ( -- ), }, { accessorKey: "deliveryStatus", header: ({ column }) => , cell: ({ row }) => { const config = deliveryConfig[row.original.deliveryStatus]; return ( {config.label} ); }, }, { accessorKey: "paymentStatus", header: ({ column }) => , cell: ({ row }) => { const config = paymentConfig[row.original.paymentStatus]; return ( {config.label} ); }, }, { id: "packages", header: "Packages", cell: ({ row }) => ( {row.original._count.packages} ), }, { accessorKey: "createdAt", header: ({ column }) => , cell: ({ row }) => ( {new Date(row.original.createdAt).toLocaleDateString()} ), }, { id: "actions", cell: ({ row }) => ( onEdit(row.original)}> Edit onDelete(row.original.id)} className="text-destructive focus:text-destructive" > Delete ), enableHiding: false, }, ]; }