"use client"; import { type ColumnDef } from "@tanstack/react-table"; import { MoreHorizontal, Trash2, Power, ArrowDownToLine, ArrowUpFromLine, RefreshCcw, Tag, } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import type { ChannelRow } from "@/lib/telegram/admin-queries"; interface ChannelColumnsProps { onToggleActive: (id: string) => void; onDelete: (id: string) => void; onSetType: (id: string, type: "SOURCE" | "DESTINATION") => void; onRescan: (id: string) => void; onSetCategory: (id: string, category: string | null) => void; } export function getChannelColumns({ onToggleActive, onDelete, onSetType, onRescan, onSetCategory, }: ChannelColumnsProps): ColumnDef[] { return [ { accessorKey: "title", header: "Channel", cell: ({ row }) => (
{row.original.title} ID: {row.original.telegramId}
), enableHiding: false, }, { accessorKey: "type", header: "Type", cell: ({ row }) => ( {row.original.type} ), }, { accessorKey: "category", header: "Category", cell: ({ row }) => { const category = row.original.category; return category ? ( {category} ) : ( ); }, }, { accessorKey: "isActive", header: "Status", cell: ({ row }) => ( {row.original.isActive ? "Active" : "Disabled"} ), }, { id: "accounts", header: "Accounts", cell: ({ row }) => ( {row.original.accountCount} ), }, { id: "packages", header: "Packages", cell: ({ row }) => ( {row.original.packageCount} ), }, { accessorKey: "createdAt", header: "Created", cell: ({ row }) => ( {new Date(row.original.createdAt).toLocaleDateString()} ), }, { id: "actions", cell: ({ row }) => ( {row.original.type === "SOURCE" ? ( onSetType(row.original.id, "DESTINATION")} > Set as Destination ) : ( onSetType(row.original.id, "SOURCE")} > Set as Source )} {row.original.type === "SOURCE" && ( onRescan(row.original.id)} > Rescan Channel )} { const cat = prompt("Enter category (e.g. STL, PDF, D&D, Cosplay):", row.original.category ?? ""); if (cat !== null) onSetCategory(row.original.id, cat || null); }} > Set Category onToggleActive(row.original.id)} > {row.original.isActive ? "Disable" : "Enable"} onDelete(row.original.id)} className="text-destructive focus:text-destructive" > Delete ), enableHiding: false, }, ]; }