'use client'; import Link from 'next/link'; import { MoreHorizontal, Pencil, Archive, Eye } from 'lucide-react'; import type { ColumnDef } from '@tanstack/react-table'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; export interface CompanyRow { id: string; name: string; legalName: string | null; taxId: string | null; registrationNumber: string | null; incorporationCountryIso: string | null; incorporationSubdivisionIso: string | null; incorporationDate: string | null; status: string; billingEmail: string | null; notes: string | null; archivedAt: string | null; createdAt: string; updatedAt: string; memberCount?: number; yachtCount?: number; } const STATUS_COLORS: Record = { active: 'bg-green-100 text-green-800 border-green-300', dissolved: 'bg-red-100 text-red-800 border-red-300', }; const STATUS_LABELS: Record = { active: 'Active', dissolved: 'Dissolved', }; interface GetCompanyColumnsOptions { portSlug: string; onEdit: (company: CompanyRow) => void; onArchive: (company: CompanyRow) => void; } export function getCompanyColumns({ portSlug, onEdit, onArchive, }: GetCompanyColumnsOptions): ColumnDef[] { return [ { id: 'name', accessorKey: 'name', header: 'Name', cell: ({ row }) => ( e.stopPropagation()} > {row.original.name} ), }, { id: 'legalName', accessorKey: 'legalName', header: 'Legal Name', enableSorting: false, cell: ({ getValue }) => { const value = getValue() as string | null; if (!value) return -; return {value}; }, }, { id: 'taxId', accessorKey: 'taxId', header: 'Tax ID', enableSorting: false, cell: ({ getValue }) => { const value = getValue() as string | null; if (!value) return -; return {value}; }, }, { id: 'memberCount', header: 'Members', enableSorting: false, size: 88, cell: ({ row }) => { const n = row.original.memberCount ?? 0; if (n === 0) return -; return {n}; }, }, { id: 'yachtCount', header: 'Yachts', enableSorting: false, size: 88, cell: ({ row }) => { const n = row.original.yachtCount ?? 0; if (n === 0) return -; return {n}; }, }, { id: 'status', accessorKey: 'status', header: 'Status', cell: ({ row }) => { const status = row.original.status; const label = STATUS_LABELS[status] ?? status; const color = STATUS_COLORS[status] ?? 'bg-muted text-muted-foreground border-muted'; return ( {label} ); }, }, { id: 'actions', header: '', enableSorting: false, size: 48, cell: ({ row }) => ( View onEdit(row.original)}> Edit onArchive(row.original)}> Archive ), }, ]; }