"use client"; import { getRelativeTime } from "../lib/getRelativeTime"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { deleteWorkflow } from "@/server/deleteWorkflow"; import type { getAllUserWorkflow } from "@/server/getAllUserWorkflow"; import type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, } from "@tanstack/react-table"; import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table"; import { ArrowUpDown, MoreHorizontal } from "lucide-react"; import * as React from "react"; export type WorkflowItemList = NonNullable< Awaited> >[0]; export const columns: ColumnDef[] = [ { accessorKey: "id", id: "select", header: ({ table }) => ( table.toggleAllPageRowsSelected(!!value)} aria-label="Select all" /> ), cell: ({ row }) => ( row.toggleSelected(!!value)} aria-label="Select row" /> ), enableSorting: false, enableHiding: false, }, { accessorKey: "name", header: ({ column }) => { return ( ); }, cell: ({ row }) => { const workflow = row.original; return ( {row.original.name} v{row.original.versions[0]?.version} {workflow.deployments?.[0] && Public} ); }, }, { accessorKey: "creator", header: ({ column }) => { return ( ); }, cell: ({ row }) => { return {row.original.user.name}; }, }, { accessorKey: "date", sortingFn: "datetime", enableSorting: true, header: ({ column }) => { return ( ); }, cell: ({ row }) => (
{getRelativeTime(row.original.updated_at)}
), }, { id: "actions", enableHiding: false, cell: ({ row }) => { const workflow = row.original; return ( Actions { deleteWorkflow(workflow.id); }} > Delete Workflow ); }, }, ]; export function WorkflowList({ data }: { data: WorkflowItemList[] }) { const [sorting, setSorting] = React.useState([]); const [columnFilters, setColumnFilters] = React.useState( [] ); const [columnVisibility, setColumnVisibility] = React.useState({}); const [rowSelection, setRowSelection] = React.useState({}); const table = useReactTable({ data, columns, onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, onRowSelectionChange: setRowSelection, state: { sorting, columnFilters, columnVisibility, rowSelection, }, }); return (
table.getColumn("name")?.setFilterValue(event.target.value) } className="max-w-sm" />
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => { return ( {header.isPlaceholder ? null : flexRender( header.column.columnDef.header, header.getContext() )} ); })} ))} {table.getRowModel().rows?.length ? ( table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender( cell.column.columnDef.cell, cell.getContext() )} ))} )) ) : ( No results. )}
{table.getFilteredSelectedRowModel().rows.length} of{" "} {table.getFilteredRowModel().rows.length} row(s) selected.
); }