"use client"; import { getRelativeTime } from "../lib/getRelativeTime"; import { Button } from "@/components/ui/button"; import { Checkbox } from "@/components/ui/checkbox"; import { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { Input } from "@/components/ui/input"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { deleteWorkflow } from "@/server/deleteWorkflow"; import type { ColumnDef, ColumnFiltersState, SortingState, VisibilityState, } from "@tanstack/react-table"; import { flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table"; import { ArrowUpDown, ChevronDown, MoreHorizontal } from "lucide-react"; import * as React from "react"; export type Payment = { id: string; amount: number; date: Date; email: string; }; 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: "email", header: ({ column }) => { return ( ); }, cell: ({ row }) => { return ( {row.getValue("email")} ); }, }, { accessorKey: "amount", header: () =>
Version
, cell: ({ row }) => { const amount = parseFloat(row.getValue("amount")); // Format the amount as a dollar amount // const formatted = new Intl.NumberFormat("en-US", { // style: "currency", // currency: "USD", // }).format(amount); return
{amount}
; }, }, { accessorKey: "date", sortingFn: "datetime", enableSorting: true, header: ({ column }) => { return ( ); }, cell: ({ row }) => (
{getRelativeTime(row.original.date)}
), }, { id: "actions", enableHiding: false, cell: ({ row }) => { const workflow = row.original; return ( Actions { deleteWorkflow(workflow.id); // navigator.clipboard.writeText(payment.id) }} > Delete Workflow {/* View customer View payment details */} ); }, }, ]; export function WorkflowList({ data }: { data: Payment[] }) { 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("email")?.setFilterValue(event.target.value) } className="max-w-sm" /> {table .getAllColumns() .filter((column) => column.getCanHide()) .map((column) => { return ( column.toggleVisibility(!!value) } > {column.id} ); })}
{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.
); }