"use client"; import { ColumnDef } from "@tanstack/react-table"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import Link from "next/link"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; import Chat from "@/components/chat"; import { // labels, priorities, statuses, } from "@/components/task-table/data"; import { Task } from "@/components/task-table/schema"; import { DataTableColumnHeader } from "./data-table-column-header"; import { DataTableRowActions } from "./data-table-row-actions"; import TaskInfo from "../task-info"; export const columns: ColumnDef<Task>[] = [ { accessorKey: "id", header: ({ column }) => ( <DataTableColumnHeader column={column} title="Task ID" /> ), cell: ({ row }) => ( <Badge variant="outline">TASK-{row.getValue("id")}</Badge> ), enableSorting: false, enableHiding: false, }, { accessorKey: "name", header: ({ column }) => ( <DataTableColumnHeader column={column} title="Name" /> ), cell: ({ row }) => { const projectInfo = { project_id: row.original.project_id, name: row.original.project_name, description: row.original.project_description, stack: row.original.project_stack, }; const taskInfo = { task_id: row.original.id, name: row.original.name, description: row.original.description, }; const featureInfo = { feature_id: row.original.feature_id, name: row.original.feature_name, description: row.original.feature_description, }; return ( <TaskInfo row={row.original}> <Chat taskInfo={taskInfo} featureInfo={featureInfo} projectInfo={projectInfo} /> </TaskInfo> ); }, }, { accessorKey: "status", header: ({ column }) => ( <DataTableColumnHeader column={column} title="Status" /> ), cell: ({ row }) => { const status = statuses.find( (status) => status.value === row.getValue("status") ); if (!status) { return null; } return ( <div className="flex w-[100px] items-center"> {status.icon && ( <status.icon className="mr-2 h-4 w-4 text-muted-foreground" /> )} <span>{status.label}</span> </div> ); }, filterFn: (row, id, value) => { return value.includes(row.getValue(id)); }, }, { accessorKey: "priority", header: ({ column }) => ( <DataTableColumnHeader column={column} title="Priority" /> ), cell: ({ row }) => { const priority = priorities.find( (priority) => priority.value === row.getValue("priority") ); if (!priority) { return ( <div className="flex items-center"> <Button variant="outline" size="sm"> Set Priority </Button> </div> ); } return ( <div className="flex items-center"> {priority.icon && ( <priority.icon className="mr-2 h-4 w-4 text-muted-foreground" /> )} <span>{priority.label}</span> </div> ); }, filterFn: (row, id, value) => { return value.includes(row.getValue(id)); }, }, { id: "actions", cell: ({ row }) => <DataTableRowActions row={row} />, }, ];