import { Badge } from "@turbostarter/ui-web/badge"; import { DataTableColumnHeader } from "@turbostarter/ui-web/data-table/data-table-column-header"; import { TurboLink } from "~/modules/common/turbo-link"; import type { ColumnDef } from "@tanstack/react-table"; import type { GetInvitesResponse } from "@turbostarter/api/schema"; type Invite = GetInvitesResponse["data"][number]; export const useInviteColumns = (): ColumnDef[] => [ { id: "q", accessorKey: "q", meta: { placeholder: "Search by mesh or token…", variant: "text" }, enableHiding: false, enableColumnFilter: true, }, { id: "mesh", header: ({ column }) => ( ), cell: ({ row }) => row.original.meshId ? ( {row.original.meshName ?? "—"} {row.original.meshSlug ?? "—"} ) : ( ), meta: { label: "Mesh" }, enableHiding: false, }, { id: "token", accessorKey: "token", header: ({ column }) => ( ), cell: ({ row }) => ( {row.original.token.slice(0, 12)}… ), meta: { label: "Token" }, }, { id: "role", accessorKey: "role", header: ({ column }) => ( ), cell: ({ row }) => ( {row.original.role} ), meta: { label: "Role" }, }, { id: "uses", header: ({ column }) => ( ), cell: ({ row }) => ( {row.original.usedCount} / {row.original.maxUses} ), meta: { label: "Uses" }, }, { id: "expiresAt", accessorKey: "expiresAt", header: ({ column }) => ( ), cell: ({ row }) => { const expired = new Date(row.original.expiresAt) < new Date(); return ( {new Date(row.original.expiresAt).toLocaleDateString()} {expired && " (expired)"} ); }, meta: { label: "Expires" }, }, { id: "status", header: ({ column }) => ( ), cell: ({ row }) => { if (row.original.revokedAt) { return ( revoked ); } if (new Date(row.original.expiresAt) < new Date()) { return expired; } if (row.original.usedCount >= row.original.maxUses) { return exhausted; } return ( active ); }, meta: { label: "Status" }, }, ];