"use client" import * as React from "react" import { ColumnDef, ColumnFiltersState, PaginationState, SortingState, VisibilityState, flexRender, getCoreRowModel, getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table" import { Button } from "@/components/ui/button" import { data } from "./data" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { ChevronLeft, ChevronRight } from "lucide-react" import { Badge } from "@/components/ui/badge" import { cn } from "@/lib/utils" export type OrdersDataProps = { user: { name: string; image: string; } product: string; invoice: string; price: string; status: "paid" | "due" | "pending" | "cancled" | "shipped"; } export const columns: ColumnDef[] = [ { accessorKey: "user", header: "User", cell: ({ row }) => (
SC
{row.original.user.name}
), }, { accessorKey: "invoice", header: "Invoice", cell: ({ row }) => ( {row.getValue("invoice")} ), }, { accessorKey: "price", header: "Price", cell: ({ row }) => ( {row.getValue("price")} ) }, { accessorKey: "status", header: "Status", cell: ({ row }) => { const status = row.getValue("status") as string; const statusClass:{[key: string]: string} = { "paid": "bg-success/10 text-success", "due": "bg-warning/10 text-warning", "pending": "bg-primary/10 text-primary", "cancled": "bg-destructive/10 text-destructive", "shipped": "bg-warning/10 text-warning", } const className = statusClass[status] || "bg-default/10 text-default"; return ( {status} ) } } ] const RecentOrderTable = () => { const [sorting, setSorting] = React.useState([]) const [columnFilters, setColumnFilters] = React.useState([]) const [columnVisibility, setColumnVisibility] = React.useState({}) const [rowSelection, setRowSelection] = React.useState({}) const [pagination, setPagination] = React.useState({ pageIndex: 0, pageSize: 6, }) const table = useReactTable({ data, columns, onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), onColumnVisibilityChange: setColumnVisibility, onRowSelectionChange: setRowSelection, onPaginationChange: setPagination, state: { sorting, columnFilters, columnVisibility, rowSelection, pagination }, }) return (
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( {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.getPageOptions().map((page, pageIndex) => ( ))}
) } export default RecentOrderTable;